⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polyhedron_scan_off.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 1997  ETH Zurich (Switzerland).// All rights reserved.//// This file is part of CGAL (www.cgal.org); you may redistribute it under// the terms of the Q Public License version 1.0.// See the file LICENSE.QPL distributed with CGAL.//// Licensees holding a valid commercial license may use this file in// accordance with the commercial license agreement provided with the software.//// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.//// $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/branches/CGAL-3.3-branch/Polyhedron_IO/include/CGAL/IO/Polyhedron_scan_OFF.h $// $Id: Polyhedron_scan_OFF.h 28567 2006-02-16 14:30:13Z lsaboret $// //// Author(s)     : Lutz Kettner  <kettner@mpi-sb.mpg.de>#ifndef CGAL_IO_POLYHEDRON_SCAN_OFF_H#define CGAL_IO_POLYHEDRON_SCAN_OFF_H 1#include <CGAL/basic.h>#include <CGAL/IO/File_header_OFF.h>#include <CGAL/IO/File_scanner_OFF.h>#include <CGAL/Modifier_base.h>#include <CGAL/Polyhedron_incremental_builder_3.h>#include <CGAL/Polyhedron_3.h>#include <iostream>#include <cstddef>CGAL_BEGIN_NAMESPACEtemplate < class HDS>class Polyhedron_scan_OFF :  public Modifier_base<HDS> {protected:    std::istream&    m_in;    File_header_OFF  m_file_header;public:    typedef HDS Halfedge_data_structure;// DEFINITION//// Polyhedron_scan_OFF<Traits> is a polyhedral surface builder.// It scans a polyhedron given in OFF from a stream and appends it// incrementally using the incremental builder.    Polyhedron_scan_OFF( std::istream& in, bool verbose = false)        : m_in(in), m_file_header( verbose) {}    // Activation    void operator()( HDS& hds);    const File_header_OFF&  header() const { return m_file_header; }};template < class HDS >voidPolyhedron_scan_OFF<HDS>:: operator()( HDS& target) {    File_scanner_OFF scanner( m_in, m_file_header.verbose());    if ( ! m_in) {        if ( scanner.verbose()) {            std::cerr << " " << std::endl;            std::cerr << "Polyhedron_scan_OFF<HDS>::" << std::endl;            std::cerr << "operator(): input error: file format is not in "                         "OFF." << std::endl;        }        return;    }    m_file_header = scanner;  // Remember file header after return.    Polyhedron_incremental_builder_3<HDS> B( target, scanner.verbose());    B.begin_surface( scanner.size_of_vertices(),                     scanner.size_of_facets(),                     scanner.size_of_halfedges());    typedef typename HDS::Traits     Traits;    typedef typename Traits::Point_3 Point;    // read in all vertices    int  i;    for ( i = 0; i < scanner.size_of_vertices(); i++) {        Point p;        file_scan_vertex( scanner, p);        B.add_vertex( p);        scanner.skip_to_next_vertex( i);    }    if ( ! m_in  || B.error()) {        B.rollback();        m_in.clear( std::ios::badbit);        return;    }    // read in all facets    for ( i = 0; i < scanner.size_of_facets(); i++) {        B.begin_facet();        Integer32 no;        scanner.scan_facet( no, i);        if( ! m_in || B.error() || no < 3) {            if ( scanner.verbose()) {                std::cerr << " " << std::endl;                std::cerr << "Polyhedron_scan_OFF<Traits>::" << std::endl;                std::cerr << "operator()(): input error: facet " << i                     << " has less than 3 vertices." << std::endl;            }            B.rollback();            m_in.clear( std::ios::badbit);            return;        }        for ( int j = 0; j < no; j++) {            Integer32 index;            scanner.scan_facet_vertex_index( index, i);            B.add_vertex_to_facet( index);        }        B.end_facet();        scanner.skip_to_next_facet( i);    }    if ( ! m_in  || B.error()) {        B.rollback();        m_in.clear( std::ios::badbit);        return;    }    if ( B.check_unconnected_vertices()) {        if ( ! B.remove_unconnected_vertices()) {            if ( scanner.verbose()) {                std::cerr << " " << std::endl;                std::cerr << "Polyhedron_scan_OFF<Traits>::" << std::endl;                std::cerr << "operator()(): input error: cannot "                             "succesfully remove isolated vertices."                          << std::endl;            }            B.rollback();            m_in.clear( std::ios::badbit);            return;        }    }    B.end_surface();}CGAL_END_NAMESPACE#endif // CGAL_IO_POLYHEDRON_SCAN_OFF_H //// EOF //

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -