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

📄 arr_text_formatter.h

📁 很多二维 三维几何计算算法 C++ 类库
💻 H
字号:
// Copyright (c) 2005  Tel-Aviv University (Israel).// 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/Arrangement_2/include/CGAL/IO/Arr_text_formatter.h $// $Id: Arr_text_formatter.h 37177 2007-03-17 08:48:10Z afabri $// //// Author(s)     : Michal Meyerovitch <gorgymic@post.tau.ac.il>//                 Ron Wein           <wein@post.tau.ac.il>//                 (based on old version by Ester Ezra)#ifndef CGAL_ARR_TEXT_FORMATTER_H#define CGAL_ARR_TEXT_FORMATTER_H/*! \file * The header file for the text-formatter classes. */#include <CGAL/basic.h>#include <iostream>CGAL_BEGIN_NAMESPACE/*! \class * A class defining a textual (ASCII) input/output format for arrangements * and supports reading and writing an arrangement from or to input/output * streams. */template <class Arrangement_>class Arr_text_formatter{public:  typedef Arrangement_                                   Arrangement_2;  typedef typename Arrangement_2::Size                   Size;  typedef typename Arrangement_2::Dcel                   Dcel;  typedef typename Arrangement_2::Traits_2               Traits_2;  typedef typename Traits_2::X_monotone_curve_2          X_monotone_curve_2;  typedef typename Traits_2::Point_2                     Point_2;  typedef typename Arrangement_2::Vertex_handle          Vertex_handle;  typedef typename Arrangement_2::Halfedge_handle        Halfedge_handle;  typedef typename Arrangement_2::Face_handle            Face_handle;  typedef typename Arrangement_2::Vertex_const_handle    Vertex_const_handle;  typedef typename Arrangement_2::Halfedge_const_handle  Halfedge_const_handle;  typedef typename Arrangement_2::Face_const_handle      Face_const_handle; protected:  typedef typename Dcel::Vertex                           DVertex;  typedef typename Dcel::Halfedge                         DHalfedge;  typedef typename Dcel::Face                             DFace;    // Data members:  std::ostream  *m_out;  IO::Mode       m_old_out_mode;  std::istream  *m_in;  IO::Mode       m_old_in_mode;public:    /*! Default constructor.*/  Arr_text_formatter ():    m_out (NULL),    m_in (NULL)  {}  /*! Construct an output formatter. */  Arr_text_formatter (std::ostream& os) :    m_out (&os),    m_in(NULL)  {}  /*! Construct an input formatter. */  Arr_text_formatter (std::istream& is) :    m_out(NULL),    m_in(&is)  {}  /*! Destructor. */  virtual ~Arr_text_formatter()  {}  /*! Set the output stream. */  void set_out (std::ostream& os)  {    m_out = &os;    return;  }  /*! Set the input stream. */  void set_in (std::istream& is)  {    m_in = &is;    return;  }  /*! Get the output stream. */  inline std::ostream& out ()  {    CGAL_assertion (m_out != NULL);    return (*m_out);  }  /*! Get the input stream. */  inline std::istream& in ()  {    CGAL_assertion (m_in != NULL);    return (*m_in);  }  /// \name Global write functions.  //@{  /*! Write a begin-arrangement comment. */  void write_arrangement_begin ()  {    CGAL_assertion (m_out != NULL);    m_old_out_mode = get_mode(*m_out);    set_ascii_mode (*m_out);    _write_comment ("BEGIN ARRANGEMENT");    return;  }  /*! Write an end-arrangement comment. */  void write_arrangement_end()  {    _write_comment ("END ARRANGEMENT");    set_mode (*m_out, m_old_out_mode);    return;  }  /*! Write a labeled size value. */  void write_size (const char *label, Size size)  {     _write_comment (label);    out() << size << '\n';    return;  }  /*! Write a begin-vertices comment. */  void write_vertices_begin ()  {    _write_comment ("BEGIN VERTICES");    return;  }  /*! Write an end-vertices comment. */  void write_vertices_end ()  {    _write_comment ("END VERTICES");    return;  }  /*! Write a begin-edges comment. */  void write_edges_begin ()  {    _write_comment ("BEGIN EDGES");    return;  }  /*! Write an end-edges comment. */  void write_edges_end ()  {    _write_comment ("END EDGES");    return;  }  /*! Write a begin-faces comment. */  void write_faces_begin ()  {    _write_comment ("BEGIN FACES");    return;  }  /*! Write an end-faces comment. */  void write_faces_end ()  {    _write_comment ("END FACES");    return;  }  //@}  /// \name Write a vertex.  //@{  void write_vertex_begin ()  {}  void write_vertex_end ()  {    out() << std::endl;    return;  }    virtual void write_point (const Point_2& p)  {    out() << p;    return;  }  virtual void write_vertex_data (Vertex_const_handle )  {}  //@}  /// \name Write an edge.  //@{  void write_edge_begin ()  {}  void write_edge_end ()  {    out() << std::endl;    return;  }  void write_vertex_index (int idx)  {    out() << idx << ' ';    return;  }  virtual void write_x_monotone_curve (const X_monotone_curve_2& cv)  {    out() << cv;    return;  }  virtual void write_halfedge_data (Halfedge_const_handle )  {}  //@}  /// \name Write a face.  //@{  void write_face_begin ()  {    _write_comment ("BEGIN FACE");    return;  }  void write_face_end ()  {    _write_comment ("END FACE");  }  void write_outer_ccb_begin ()  {}  void write_outer_ccb_end ()  {}  void write_holes_begin ()  {}  void write_holes_end ()  {}  virtual void write_face_data (Face_const_handle )  {}  void write_ccb_halfedges_begin()  {}    void write_ccb_halfedges_end()  {    out() << std::endl;      }  void write_halfedge_index (int idx)  {    out() << idx << ' ';    return;  }  void write_isolated_vertices_begin ()  {}  void write_isolated_vertices_end ()  {    out() << std::endl;  }  //@}  /// \name Global read functions.  //@{  /*! Start reading an arrangement. */  void read_arrangement_begin ()   {    CGAL_assertion (m_in != NULL);    m_old_in_mode = get_mode(*m_in);    set_ascii_mode(*m_in);    _skip_comments();  }  /*! Read the arrangement edge. */  void read_arrangement_end()   {    _skip_comments();    set_mode(*m_in, m_old_in_mode);  }  /*! Read a size value (with a label comment line before it). */  Size read_size (const char* /* title */ = NULL)  {    std::size_t   val;    _skip_comments();    in() >> val;    _skip_until_EOL();    return (val);  }  /*! Reading the arrangement vertices. */  void read_vertices_begin()  {    _skip_comments();  }  void read_vertices_end()  {    _skip_comments();  }  /*! Reading the arrangement edges. */  void read_edges_begin()  {    _skip_comments();  }  void read_edges_end()  {    _skip_comments();  }  /*! Reading the arrangement faces. */  void read_faces_begin()  {    _skip_comments();  }  void read_faces_end()  {    _skip_comments();  }  //@}  /// \name Reading a vertex.  //@{  void read_vertex_begin ()  {}    void read_vertex_end ()  {}  virtual void read_point (Point_2& p)   {    in() >> p;    _skip_until_EOL();    return;  }  virtual void read_vertex_data (Vertex_handle )  {}  //@}  /// \name Reading an edge.  //@{  void read_edge_begin ()  {}    void read_edge_end ()  {}    int read_vertex_index ()   {    int  val;    in() >> val;    return (val);  }  virtual void read_x_monotone_curve (X_monotone_curve_2& cv)   {    in() >> cv;    _skip_until_EOL();    return;  }  virtual void read_halfedge_data (Halfedge_handle )  {}   /// \name Reading a face.  //@{  void read_face_begin ()  {    _skip_comments();  }    void read_face_end ()  {    _skip_comments();  }  void read_outer_ccb_begin ()  {}    void read_outer_ccb_end ()  {}  int read_halfedge_index ()  {     int  val;    in() >> val;    return (val);  }  void read_holes_begin ()  {}    void read_holes_end ()  {}  void read_inner_ccb_begin ()  {    _skip_comments();  }    void read_inner_ccb_end ()  {}  void read_ccb_halfedges_begin()  {}    void read_ccb_halfedges_end()   {    _skip_until_EOL ();  }  void read_isolated_vertices_begin ()  {}    void read_isolated_vertices_end ()   {    _skip_until_EOL();  }  virtual void read_face_data (Face_handle )  {}  //@}protected:  /*! Write a comment line. */  void _write_comment (const char *str)  {    out() << "# " << str << std::endl;    return;  }  /*! Skip until end of line. */  void _skip_until_EOL ()   {    CGAL_assertion (m_in != NULL);    int     c;    while ((c = m_in->get()) != EOF && c != '\n');    return;  }    /*! Skip comment lines. */  void _skip_comments ()   {    CGAL_assertion (m_in != NULL);    int     c;    while ((c = m_in->get()) != EOF && c == '#')      _skip_until_EOL();    m_in->putback (c);    return;  }};/*! \class * A class defining a textual (ASCII) input/output format for arrangements * that store auxiliary dat with their face records, as they are templated * by a face-extended DCEL class. */template <class Arrangement_>class Arr_face_extended_text_formatter :  public Arr_text_formatter<Arrangement_>{public:  typedef Arrangement_                              Arrangement_2;  typedef Arr_text_formatter<Arrangement_2>         Base;  typedef typename Base::Size                       Size;  typedef typename Base::Dcel                       Dcel;  typedef typename Base::Traits_2                   Traits_2;  typedef typename Traits_2::X_monotone_curve_2     X_monotone_curve_2;  typedef typename Traits_2::Point_2                Point_2;  typedef typename Base::Vertex_handle              Vertex_handle;  typedef typename Base::Halfedge_handle            Halfedge_handle;  typedef typename Base::Face_handle                Face_handle;  typedef typename Base::Vertex_const_handle        Vertex_const_handle;  typedef typename Base::Halfedge_const_handle      Halfedge_const_handle;  typedef typename Base::Face_const_handle          Face_const_handle;  /*! Default constructor.*/  Arr_face_extended_text_formatter () :    Base ()  {}  /*! Construct an output formatter. */  Arr_face_extended_text_formatter (std::ostream& os) :    Base (os)  {}  /*! Construct an input formatter. */  Arr_face_extended_text_formatter (std::istream& is) :    Base (is)  {}  /*! Write the auxiliary data associated with the given face. */  virtual void write_face_data (Face_const_handle f)  {    this->out() << f->data() << '\n';  }    /*! Read a face-data object and attach it to the given face. */  virtual void read_face_data (Face_handle f)  {    this->in() >> f->data();    this->_skip_until_EOL();  }};/*! \class * A class defining a textual (ASCII) input/output format for arrangements * that store auxiliary dat with all their DCEL records, as they are templated * by a extended DCEL class. */template <class Arrangement_>class Arr_extended_dcel_text_formatter :  public Arr_text_formatter<Arrangement_>{public:  typedef Arrangement_                              Arrangement_2;  typedef Arr_text_formatter<Arrangement_2>         Base;  typedef typename Base::Size                       Size;  typedef typename Base::Dcel                       Dcel;  typedef typename Base::Traits_2                   Traits_2;  typedef typename Traits_2::X_monotone_curve_2     X_monotone_curve_2;  typedef typename Traits_2::Point_2                Point_2;  typedef typename Base::Vertex_handle              Vertex_handle;  typedef typename Base::Halfedge_handle            Halfedge_handle;  typedef typename Base::Face_handle                Face_handle;  typedef typename Base::Vertex_const_handle        Vertex_const_handle;  typedef typename Base::Halfedge_const_handle      Halfedge_const_handle;  typedef typename Base::Face_const_handle          Face_const_handle;  /*! Default constructor.*/  Arr_extended_dcel_text_formatter () :    Base ()  {}  /*! Construct an output formatter. */  Arr_extended_dcel_text_formatter (std::ostream& os) :    Base (os)  {}  /*! Construct an input formatter. */  Arr_extended_dcel_text_formatter (std::istream& is) :    Base (is)  {}  /*! Write the auxiliary data associated with the given vertex. */  virtual void write_vertex_data (Vertex_const_handle v)  {    this->out() << '\n' << v->data();  }    /*! Read a vertex-data object and attach it to the given vertex. */  virtual void read_vertex_data (Vertex_handle v)  {    this->in() >> v->data();    this->_skip_until_EOL();  }  /*! Write the auxiliary data associated with the given halfedge. */  virtual void write_halfedge_data (Halfedge_const_handle he)  {    this->out() << '\n' << he->data();  }    /*! Read a halfedge-data object and attach it to the given halfedge. */  virtual void read_halfedge_data (Halfedge_handle he)  {    this->in() >> he->data();    this->_skip_until_EOL();  }  /*! Write the auxiliary data associated with the given face. */  virtual void write_face_data (Face_const_handle f)  {    this->out() << f->data() << '\n';  }    /*! Read a face-data object and attach it to the given face. */  virtual void read_face_data (Face_handle f)  {    this->in() >> f->data();    this->_skip_until_EOL();  }};CGAL_END_NAMESPACE#endif

⌨️ 快捷键说明

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