// Copyright (c) 2020 Geometry Factory // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL$ // $Id$ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Maxime Gimeno #ifndef CGAL_POINT_SET_PROCESSING_READ_POINTS_H #define CGAL_POINT_SET_PROCESSING_READ_POINTS_H #include #include #include #include #include #ifdef CGAL_LINKED_WITH_LASLIB #include #endif #include #include namespace CGAL { /** \ingroup PkgPointSetProcessing3IO Reads the point set from an input file that can be either: - \link IOStreamXYZ XYZ \endlink - \link IOStreamOFF OFF \endlink - \link IOStreamPLY PLY \endlink - \link IOStreamLAS LAS \endlink \tparam OutputIteratorValueType type of objects that can be put in `PointOutputIterator`. It is default to `value_type_traits::%type` and can be omitted when the default is fine. \tparam PointOutputIterator iterator over output points. \tparam NamedParameters a sequence of \ref bgl_namedparameters "Named Parameters" \param fname the name of the input file. \param output output iterator over points. \param np optional sequence of \ref bgl_namedparameters "Named Parameters" among the ones listed below. \cgalNamedParamsBegin \cgalParamNBegin{point_map} \cgalParamDescription{a property map associating points to the elements of the point range} \cgalParamType{a model of `WritablePropertyMap` with value type `geom_traits::Point_3`} \cgalParamDefault{`CGAL::Identity_property_map`} \cgalParamNEnd \cgalParamNBegin{normal_map} \cgalParamDescription{a property map associating normals to the elements of the poing range} \cgalParamType{a model of `ReadWritePropertyMap` with value type `geom_traits::Vector_3`} \cgalParamDefault{If this parameter is omitted, normals in the input stream are ignored.} \cgalParamNEnd \cgalParamNBegin{geom_traits} \cgalParamDescription{an instance of a geometric traits class} \cgalParamType{a model of `Kernel`} \cgalParamDefault{a \cgal Kernel deduced from the point type, using `CGAL::Kernel_traits`} \cgalParamNEnd \cgalNamedParamsEnd \return `true` on success. */ template bool read_points(const std::string& fname, PointOutputIterator output, const NamedParameters& np) { const std::string ext = IO::internal::get_file_extension(fname); if(ext == "xyz") return read_XYZ(fname, output, np); else if(ext == "off") return read_OFF(fname, output, np); else if(ext == "ply") return read_PLY(fname, output, np); #ifdef CGAL_LINKED_WITH_LASLIB else if(ext == "las") return read_LAS(fname, output, np); #endif return false; } /// \cond SKIP_IN_MANUAL // variant with default OutputIteratorType template bool read_points(const std::string& fname, OutputIterator output, const NamedParameters& np) { return read_points::type>(fname, output, np); } // variant with default np template bool read_points(const std::string& fname, OutputIterator output) { return read_points(fname, output, parameters::all_default()); } // variant with all default template bool read_points(const std::string& fname, OutputIterator output) { return read_points::type>(fname, output, parameters::all_default()); } // variants with char* template bool read_points(const char* fname, OutputIterator output, const NamedParameters& np) { return read_points(std::string(fname), output, np); } template bool read_points(const char* fname, OutputIterator output, const NamedParameters& np) { return read_points::type>(fname, output, np); } template bool read_points(const char* fname, OutputIterator output) { return read_points(fname, output, parameters::all_default()); } template bool read_points(const char* fname, OutputIterator output) { return read_points::type>(fname, output, parameters::all_default()); } /// \endcond } // namespace CGAL #endif // CGAL_POINT_SET_PROCESSING_READ_POINTS_H