diff --git a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h index e6fdaab670e..3f8f73830f5 100644 --- a/Polyhedron_IO/include/CGAL/IO/OFF_reader.h +++ b/Polyhedron_IO/include/CGAL/IO/OFF_reader.h @@ -15,6 +15,6 @@ #define CGAL_REPLACEMENT_HEADER "" #include -#include +#include #endif // CGAL_IO_OFF_READER_H diff --git a/Stream_support/include/CGAL/IO/OFF.h b/Stream_support/include/CGAL/IO/OFF.h index 7b025ef4ca5..cdbdcc68105 100644 --- a/Stream_support/include/CGAL/IO/OFF.h +++ b/Stream_support/include/CGAL/IO/OFF.h @@ -12,8 +12,6 @@ #define CGAL_IO_OFF_H #include -#include -#include #include #include @@ -24,6 +22,7 @@ #include namespace CGAL { + template bool read_OFF( std::istream& in, @@ -31,7 +30,38 @@ read_OFF( std::istream& in, std::vector< Polygon_3 >& polygons, bool /* verbose */ = false) { - return OFF_internal::read_OFF(in, points, polygons); + CGAL::File_scanner_OFF scanner(in); + + points.resize(scanner.size_of_vertices()); + polygons.resize(scanner.size_of_facets()); + for (std::size_t i = 0; i < scanner.size_of_vertices(); ++i) { + double x, y, z, w; + scanner.scan_vertex( x, y, z, w); + CGAL_assertion(w!=0); + IO::internal::fill_point( x/w, y/w, z/w, points[i] ); + scanner.skip_to_next_vertex( i); + } + + if(!in) + return false; + + for (std::size_t i = 0; i < scanner.size_of_facets(); ++i) { + std::size_t no; + + scanner.scan_facet( no, i); + IO::internal::resize(polygons[i], no); + for(std::size_t j = 0; j < no; ++j) { + std::size_t id; + scanner.scan_facet_vertex_index(id, i); + if(id < scanner.size_of_vertices()) { + polygons[i][j] = id; + } else { + return false; + } + } + } + + return in.good(); } template @@ -43,7 +73,72 @@ read_OFF( std::istream& in, std::vector& vcolors, bool /* verbose */ = false) { - return OFF_internal::read_OFF(in, points, polygons, fcolors, vcolors); + CGAL::File_scanner_OFF scanner(in); + + points.resize(scanner.size_of_vertices()); + polygons.resize(scanner.size_of_facets()); + + if(scanner.has_colors()) + vcolors.resize(scanner.size_of_vertices()); + + for (std::size_t i = 0; i < scanner.size_of_vertices(); ++i) { + double x, y, z, w; + scanner.scan_vertex( x, y, z, w); + CGAL_assertion(w!=0); + IO::internal::fill_point( x/w, y/w, z/w, points[i] ); + if(scanner.has_colors()) { + unsigned char r=0, g=0, b=0; + scanner.scan_color( r, g, b); + vcolors[i] = Color_rgb(r,g,b); + } else { + scanner.skip_to_next_vertex(i); + } + + if(!in) + return false; + } + + bool has_fcolors = false; + for (std::size_t i = 0; i < scanner.size_of_facets(); ++i) + { + std::size_t no; + scanner.scan_facet( no, i); + + if(!in) + return false; + + IO::internal::resize(polygons[i], no); + for(std::size_t j = 0; j < no; ++j) { + std::size_t id; + scanner.scan_facet_vertex_index(id, i); + if(id < scanner.size_of_vertices()) { + polygons[i][j] = id; + } else { + return false; + } + } + + if(i==0) + { + std::string col; + std::getline(in, col); + std::istringstream iss(col); + char ci =' '; + + if(iss >> ci) { + has_fcolors = true; + fcolors.resize(scanner.size_of_facets()); + std::istringstream iss2(col); + fcolors[i] = scanner.get_color_from_line(iss2); + } + } else if(has_fcolors) { + unsigned char r=0, g=0, b=0; + scanner.scan_color(r,g,b); + fcolors[i] = Color_rgb(r,g,b); + } + } + + return in.good(); } template diff --git a/Stream_support/include/CGAL/IO/OFF/OFF_reader.h b/Stream_support/include/CGAL/IO/OFF/OFF_reader.h deleted file mode 100644 index d65ea7489fe..00000000000 --- a/Stream_support/include/CGAL/IO/OFF/OFF_reader.h +++ /dev/null @@ -1,143 +0,0 @@ - -// Copyright (c) 2015 GeometryFactory -// -// This file is part of CGAL (www.cgal.org); -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial -// -// Author(s) : Laurent Rineau and Sebastien Loriot - -#ifndef CGAL_IO_OFF_OFF_READER_H -#define CGAL_IO_OFF_OFF_READER_H - -#include -#include - -#include -#include -#include - -#include -#include - -namespace CGAL { -namespace OFF_internal { - -template -bool -read_OFF( std::istream& in, - std::vector< Point_3 >& points, - std::vector< Polygon_3 >& polygons, - bool /* verbose */ = false) -{ - CGAL::File_scanner_OFF scanner(in); - - points.resize(scanner.size_of_vertices()); - polygons.resize(scanner.size_of_facets()); - for (std::size_t i = 0; i < scanner.size_of_vertices(); ++i) { - double x, y, z, w; - scanner.scan_vertex( x, y, z, w); - CGAL_assertion(w!=0); - IO::internal::fill_point( x/w, y/w, z/w, points[i] ); - scanner.skip_to_next_vertex( i); - } - if(!in) - return false; - - for (std::size_t i = 0; i < scanner.size_of_facets(); ++i) { - std::size_t no; - - scanner.scan_facet( no, i); - IO::internal::resize(polygons[i], no); - for(std::size_t j = 0; j < no; ++j) { - std::size_t id; - scanner.scan_facet_vertex_index(id, i); - if(id < scanner.size_of_vertices()) - { - polygons[i][j] = id; - } - else - return false; - } - } - return in.good(); -} - -template -bool -read_OFF( std::istream& in, - std::vector< Point_3 >& points, - std::vector< Polygon_3 >& polygons, - std::vector& fcolors, - std::vector& vcolors, - bool /* verbose */ = false) -{ - CGAL::File_scanner_OFF scanner(in); - points.resize(scanner.size_of_vertices()); - polygons.resize(scanner.size_of_facets()); - if(scanner.has_colors()) - vcolors.resize(scanner.size_of_vertices()); - for (std::size_t i = 0; i < scanner.size_of_vertices(); ++i) { - double x, y, z, w; - scanner.scan_vertex( x, y, z, w); - CGAL_assertion(w!=0); - IO::internal::fill_point( x/w, y/w, z/w, points[i] ); - if(scanner.has_colors()) - { - unsigned char r=0, g=0, b=0; - scanner.scan_color( r, g, b); - vcolors[i] = Color_rgb(r,g,b); - } - else - scanner.skip_to_next_vertex(i); - if(!in) - return false; - } - bool has_fcolors = false; - for (std::size_t i = 0; i < scanner.size_of_facets(); ++i) { - std::size_t no; - scanner.scan_facet( no, i); - if(!in) - return false; - IO::internal::resize(polygons[i], no); - for(std::size_t j = 0; j < no; ++j) { - std::size_t id; - scanner.scan_facet_vertex_index(id, i); - if(id < scanner.size_of_vertices()) - { - polygons[i][j] = id; - } - else - { - return false; - } - } - - if(i==0) - { - std::string col; - std::getline(in, col); - std::istringstream iss(col); - char ci =' '; - if(iss >> ci){ - has_fcolors = true; - fcolors.resize(scanner.size_of_facets()); - std::istringstream iss2(col); - fcolors[i] = scanner.get_color_from_line(iss2); - } - } - else if(has_fcolors) - { - unsigned char r=0, g=0, b=0; - scanner.scan_color(r,g,b); - fcolors[i] = Color_rgb(r,g,b); - } - } - return in.good(); -} -} -} // namespace CGAL - -#endif // CGAL_IO_OFF_OFF_READER_H diff --git a/Stream_support/include/CGAL/IO/OFF/Writer_OFF.h b/Stream_support/include/CGAL/IO/OFF/Writer_OFF.h deleted file mode 100644 index 6a50eb8402b..00000000000 --- a/Stream_support/include/CGAL/IO/OFF/Writer_OFF.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 1997 -// Utrecht University (The Netherlands), -// ETH Zurich (Switzerland), -// INRIA Sophia-Antipolis (France), -// Max-Planck-Institute Saarbruecken (Germany), -// and Tel-Aviv University (Israel). All rights reserved. -// -// This file is part of CGAL (www.cgal.org) -// -// $URL$ -// $Id$ -// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial -// -// -// Author(s) : Lutz Kettner - -#ifndef CGAL_IO_WRITER_OFF_H -#define CGAL_IO_WRITER_OFF_H 1 -#include -#include - -namespace CGAL { - -template < class Pt > -class Writer_OFF : public Generic_writer { -public: - Writer_OFF( std::ostream& out, - std::size_t v, - std::size_t h, - std::size_t f, - bool verbose = false) - : Generic_writer( - File_writer_OFF( verbose), out, v, h, f - ) {} - Writer_OFF( std::ostream& out, - std::size_t v, - std::size_t h, - std::size_t f, - const File_header_OFF& header) - : Generic_writer( - File_writer_OFF( header), out, v, h, f - ) {} -}; - -} //namespace CGAL -#endif // CGAL_IO_WRITER_OFF_H // -// EOF //