📄 pm_explorer.h
字号:
// Copyright (c) 1997-2000 Max-Planck-Institute Saarbruecken (Germany).// 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/Nef_2/include/CGAL/Nef_2/PM_explorer.h $// $Id: PM_explorer.h 28567 2006-02-16 14:30:13Z lsaboret $// //// Author(s) : Michael Seel <seel@mpi-sb.mpg.de>#ifndef CGAL_PM_EXPLORER_H#define CGAL_PM_EXPLORER_H#include <CGAL/basic.h>#include <CGAL/Nef_2/PM_const_decorator.h>CGAL_BEGIN_NAMESPACE/*{\Moptions print_title=yes }*/ /*{\Moptions outfile=Explorer.man }*//*{\MsubstPM_explorer#Explorer}*//*{\Manpage {PM_explorer}{}{Plane map exploration}{E}}*//*{\Mdefinition An instance |\Mvar| of the data type |\Mname| is adecorator to explore the structure of the plane map underlying theNef polyhedron. It inherits all topological adjacency explorationoperations from |PMConstDecorator|. |\Mname| additionally allowsone to explore the geometric embedding.The position of each vertex is given by a so-called extended point,which is either a standard affine point or the tip of a ray touchingan infinimaximal square frame centered at the origin. A vertex |v| iscalled a \emph{standard} vertex if its embedding is a \emph{standard}point and \emph{non-standard} if its embedding is a\emph{non-standard} point. By the straightline embedding of theirsource and target vertices, edges correspond to either affine segments,rays or lines or are part of the bounding frame.\displayeps{extsegs}{Extended geometry: standard vertices are markedby S, non-standard vertices are marked by N. \textbf{A}: The possibleembeddings of edges: an affine segment s1, an affine ray s2, an affineline s3. \textbf{B}: A plane map embedded by extended geometry: notethat the frame is arbitrarily large, the 6 vertices on the frame are atinfinity, the two faces represent a geometrically unbounded area,however they are topologically closed by the frame edges. No standardpoint can be placed outside the frame.}{10cm}}*//*{\Mgeneralization Topological_explorer}*/template <typename PMCDEC, typename GEOM>class PM_explorer : public PMCDEC{ typedef PMCDEC Base; typedef PM_explorer<PMCDEC,GEOM> Self; const GEOM* pK;public:/*{\Mtypes 4}*/typedef PMCDEC Topological_explorer;/*{\Mtypemember The base class.}*/typedef typename PMCDEC::Plane_map Plane_map;/*{\Xtypemember equals |PMCDEC::Plane_map|, the underlying plane map type.}*/typedef GEOM Geometry;/*{\Xtypemember equals |GEOM|. Add link to GEOM model.\\\precond |Geometry::Point_2| equals |Plane_map::Point|. }*/typedef typename GEOM::Standard_point_2 Point;/*{\Mtypemember the point type of finite vertices.}*/typedef typename GEOM::Standard_ray_2 Ray;/*{\Mtypemember the ray type of vertices on the frame.}*/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;typedef typename Base::Vertex_const_iterator Vertex_const_iterator;typedef typename Base::Halfedge_const_iterator Halfedge_const_iterator;typedef typename Base::Face_const_iterator Face_const_iterator;typedef typename Base::Halfedge_around_face_const_circulator Halfedge_around_face_const_circulator;typedef typename Base::Halfedge_around_vertex_const_circulator Halfedge_around_vertex_const_circulator;typedef typename Base::Isolated_vertex_const_iterator Isolated_vertex_const_iterator;typedef typename Base::Hole_const_iterator Hole_const_iterator;/*{\Mtext Iterators, handles, and circulators are inherited from |Topological_explorer|.}*//*{\Mcreation 3}*//*{\Mtext |\Mname| is copy constructable and assignable. An objectcan be obtained via the |Nef_polyhedron_2::explorer()| method of|Nef_polyhedron_2|.}*/PM_explorer(const Self& E) : Base(E), pK(E.pK) {} Self& operator=(const Self& E) { Base::operator=(E); pK=E.pK; return *this; }PM_explorer(const Plane_map& P, const Geometry& k = Geometry()) : Base(P), pK(&k) {}/*{\Xcreate constructs a plane map explorer working on |P| withgeometric predicates used from |k|.}*//*{\Moperations 2 }*/bool is_standard(Vertex_const_handle v) const/*{\Mop returns true iff |v|'s position is a standard point.}*/{ return pK->is_standard(Base::point(v)); }Point point(Vertex_const_handle v) const/*{\Mop returns the standard point that is the embedding of |v|.\precond |\Mvar.is_standard(v)|.}*/{ return pK->standard_point(Base::point(v)); }Ray ray(Vertex_const_handle v) const/*{\Mop returns the ray defining the non-standard point on the frame. \precond |!\Mvar.is_standard(v)|.}*/{ return pK->standard_ray(Base::point(v)); }bool is_frame_edge(Halfedge_const_handle e) const/*{\Mop returns true iff |e| is part of the infinimaximal frame.}*/{ return ( face(e) == this->faces_begin() || face(twin(e)) == this->faces_begin() ); }}; // PM_explorer<PMCDEC,GEOM>CGAL_END_NAMESPACE#endif // CGAL_PM_EXPLORER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -