OpenMesh
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PolyConnectivity.hh
1 /*===========================================================================*\
2  * *
3  * OpenMesh *
4  * Copyright (C) 2001-2014 by Computer Graphics Group, RWTH Aachen *
5  * www.openmesh.org *
6  * *
7  *---------------------------------------------------------------------------*
8  * This file is part of OpenMesh. *
9  * *
10  * OpenMesh is free software: you can redistribute it and/or modify *
11  * it under the terms of the GNU Lesser General Public License as *
12  * published by the Free Software Foundation, either version 3 of *
13  * the License, or (at your option) any later version with the *
14  * following exceptions: *
15  * *
16  * If other files instantiate templates or use macros *
17  * or inline functions from this file, or you compile this file and *
18  * link it with other files to produce an executable, this file does *
19  * not by itself cause the resulting executable to be covered by the *
20  * GNU Lesser General Public License. This exception does not however *
21  * invalidate any other reasons why the executable file might be *
22  * covered by the GNU Lesser General Public License. *
23  * *
24  * OpenMesh is distributed in the hope that it will be useful, *
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27  * GNU Lesser General Public License for more details. *
28  * *
29  * You should have received a copy of the GNU LesserGeneral Public *
30  * License along with OpenMesh. If not, *
31  * see <http://www.gnu.org/licenses/>. *
32  * *
33 \*===========================================================================*/
34 
35 /*===========================================================================*\
36  * *
37  * $Revision: 990 $ *
38  * $Date: 2014-02-05 10:01:07 +0100 (Mi, 05. Feb 2014) $ *
39  * *
40 \*===========================================================================*/
41 
42 #ifndef OPENMESH_POLYCONNECTIVITY_HH
43 #define OPENMESH_POLYCONNECTIVITY_HH
44 
45 #include <OpenMesh/Core/Mesh/ArrayKernel.hh>
46 #include <OpenMesh/Core/Mesh/IteratorsT.hh>
47 #include <OpenMesh/Core/Mesh/CirculatorsT.hh>
48 
49 namespace OpenMesh
50 {
51 
54 class OPENMESHDLLEXPORT PolyConnectivity : public ArrayKernel
55 {
56 public:
58 
59  static const VertexHandle InvalidVertexHandle;
68 
69  typedef PolyConnectivity This;
70 
71  //--- iterators ---
72 
83 
89 
90  //--- circulators ---
91 
97 
98  /*
99  * Vertex-centered circulators
100  */
104 
108 
112 
116 
120 
124 
130 
131  /*
132  * Face-centered circulators
133  */
137 
141 
144  FaceEdgeIter;
145 
148  FaceFaceIter;
149 
154 
155  /*
156  * Halfedge circulator
157  */
159 
161 
162  // --- shortcuts
163 
168  typedef VertexHandle VHandle;
173 
174  typedef VertexIter VIter;
176  typedef EdgeIter EIter;
177  typedef FaceIter FIter;
178 
183 
193 
204 
205 public:
206 
207  PolyConnectivity() {}
208  virtual ~PolyConnectivity() {}
209 
210  inline static bool is_triangles()
211  { return false; }
212 
215  inline void assign_connectivity(const PolyConnectivity& _other)
217 
221 
224  { return new_vertex(); }
225 
233  FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
234 
235 
245  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
246 
257  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
258 
267  FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
268 
270 
272 
273 
278  bool is_collapse_ok(HalfedgeHandle _he);
279 
280 
286  void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
287 
296  void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
297 
308  void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
309 
311 
315 
317  VertexIter vertices_begin();
319  ConstVertexIter vertices_begin() const;
321  VertexIter vertices_end();
323  ConstVertexIter vertices_end() const;
324 
326  HalfedgeIter halfedges_begin();
328  ConstHalfedgeIter halfedges_begin() const;
330  HalfedgeIter halfedges_end();
332  ConstHalfedgeIter halfedges_end() const;
333 
335  EdgeIter edges_begin();
337  ConstEdgeIter edges_begin() const;
339  EdgeIter edges_end();
341  ConstEdgeIter edges_end() const;
342 
344  FaceIter faces_begin();
346  ConstFaceIter faces_begin() const;
348  FaceIter faces_end();
350  ConstFaceIter faces_end() const;
351 
352  template<typename CONTAINER_TYPE, typename ITER_TYPE, ITER_TYPE (CONTAINER_TYPE::*begin_fn)(), ITER_TYPE (CONTAINER_TYPE::*end_fn)()>
353  class EntityRange {
354  public:
355  EntityRange(CONTAINER_TYPE &container) : container_(container) {}
356  ITER_TYPE begin() { return (container_.*begin_fn)(); }
357  ITER_TYPE end() { return (container_.*end_fn)(); }
358 
359  private:
360  CONTAINER_TYPE &container_;
361  };
366 
370  ConstVertexRange vertices() const { return ConstVertexRange(*this); }
371 
376 
380  ConstEdgeRange edges() const { return ConstEdgeRange(*this); }
381 
385  ConstFaceRange faces() const { return ConstFaceRange(*this); }
387 
388 
389 
393 
396  { return VertexIter(*this, VertexHandle(0), true); }
399  { return ConstVertexIter(*this, VertexHandle(0), true); }
400 
403  { return HalfedgeIter(*this, HalfedgeHandle(0), true); }
406  { return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); }
407 
410  { return EdgeIter(*this, EdgeHandle(0), true); }
413  { return ConstEdgeIter(*this, EdgeHandle(0), true); }
414 
417  { return FaceIter(*this, FaceHandle(0), true); }
420  { return ConstFaceIter(*this, FaceHandle(0), true); }
421 
423 
424  //--- circulators ---
425 
429 
432  { return VertexVertexIter(*this, _vh); }
435  { return VertexIHalfedgeIter(*this, _vh); }
438  { return VertexOHalfedgeIter(*this, _vh); }
441  { return VertexEdgeIter(*this, _vh); }
444  { return VertexFaceIter(*this, _vh); }
445 
448  { return ConstVertexVertexIter(*this, _vh); }
451  { return ConstVertexIHalfedgeIter(*this, _vh); }
454  { return ConstVertexOHalfedgeIter(*this, _vh); }
457  { return ConstVertexEdgeIter(*this, _vh); }
460  { return ConstVertexFaceIter(*this, _vh); }
461 
464  { return FaceVertexIter(*this, _fh); }
467  { return FaceHalfedgeIter(*this, _fh); }
470  { return FaceEdgeIter(*this, _fh); }
473  { return FaceFaceIter(*this, _fh); }
474 
477  { return ConstFaceVertexIter(*this, _fh); }
480  { return ConstFaceHalfedgeIter(*this, _fh); }
483  { return ConstFaceEdgeIter(*this, _fh); }
486  { return ConstFaceFaceIter(*this, _fh); }
487 
488  // 'begin' circulators
489 
492  { return VertexVertexIter(*this, _vh); }
495  { return VertexIHalfedgeIter(*this, _vh); }
498  { return VertexOHalfedgeIter(*this, _vh); }
501  { return VertexEdgeIter(*this, _vh); }
504  { return VertexFaceIter(*this, _vh); }
505 
508  { return ConstVertexVertexIter(*this, _vh); }
511  { return ConstVertexIHalfedgeIter(*this, _vh); }
514  { return ConstVertexOHalfedgeIter(*this, _vh); }
517  { return ConstVertexEdgeIter(*this, _vh); }
520  { return ConstVertexFaceIter(*this, _vh); }
521 
524  { return FaceVertexIter(*this, _fh); }
527  { return FaceHalfedgeIter(*this, _fh); }
530  { return FaceEdgeIter(*this, _fh); }
533  { return FaceFaceIter(*this, _fh); }
536  { return HalfedgeLoopIter(*this, _heh); }
537 
540  { return ConstFaceVertexIter(*this, _fh); }
543  { return ConstFaceHalfedgeIter(*this, _fh); }
546  { return ConstFaceEdgeIter(*this, _fh); }
549  { return ConstFaceFaceIter(*this, _fh); }
552  { return ConstHalfedgeLoopIter(*this, _heh); }
553 
554  // 'end' circulators
555 
558  { return VertexVertexIter(*this, _vh, true); }
561  { return VertexIHalfedgeIter(*this, _vh, true); }
564  { return VertexOHalfedgeIter(*this, _vh, true); }
567  { return VertexEdgeIter(*this, _vh, true); }
570  { return VertexFaceIter(*this, _vh, true); }
571 
574  { return ConstVertexVertexIter(*this, _vh, true); }
577  { return ConstVertexIHalfedgeIter(*this, _vh, true); }
580  { return ConstVertexOHalfedgeIter(*this, _vh, true); }
583  { return ConstVertexEdgeIter(*this, _vh, true); }
586  { return ConstVertexFaceIter(*this, _vh, true); }
587 
590  { return FaceVertexIter(*this, _fh, true); }
593  { return FaceHalfedgeIter(*this, _fh, true); }
596  { return FaceEdgeIter(*this, _fh, true); }
599  { return FaceFaceIter(*this, _fh, true); }
602  { return HalfedgeLoopIter(*this, _heh, true); }
603 
606  { return ConstFaceVertexIter(*this, _fh, true); }
609  { return ConstFaceHalfedgeIter(*this, _fh, true); }
612  { return ConstFaceEdgeIter(*this, _fh, true); }
615  { return ConstFaceFaceIter(*this, _fh, true); }
618  { return ConstHalfedgeLoopIter(*this, _heh, true); }
620 
621 
622  //===========================================================================
625  //===========================================================================
626 
634  bool is_boundary(HalfedgeHandle _heh) const
635  { return ArrayKernel::is_boundary(_heh); }
636 
645  bool is_boundary(EdgeHandle _eh) const
646  {
647  return (is_boundary(halfedge_handle(_eh, 0)) ||
648  is_boundary(halfedge_handle(_eh, 1)));
649  }
650 
662  bool is_boundary(VertexHandle _vh) const
663  {
664  HalfedgeHandle heh(halfedge_handle(_vh));
665  return (!(heh.is_valid() && face_handle(heh).is_valid()));
666  }
667 
677  bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
678 
689  bool is_manifold(VertexHandle _vh) const;
690 
693  // --- shortcuts ---
694 
697  { return face_handle(opposite_halfedge_handle(_heh)); }
698 
699  // --- misc ---
700 
704  void adjust_outgoing_halfedge(VertexHandle _vh);
705 
707  HalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
709  uint valence(VertexHandle _vh) const;
711  uint valence(FaceHandle _fh) const;
712 
713  // --- connectivity operattions
714 
729  void collapse(HalfedgeHandle _heh);
734  bool is_simple_link(EdgeHandle _eh) const;
739  bool is_simply_connected(FaceHandle _fh) const;
752  FaceHandle remove_edge(EdgeHandle _eh);
756  void reinsert_edge(EdgeHandle _eh);
766  HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
767 
780  void split(FaceHandle _fh, VertexHandle _vh);
781 
795  void split_copy(FaceHandle _fh, VertexHandle _vh);
796 
810  void triangulate(FaceHandle _fh);
811 
814  void triangulate();
815 
826  void split_edge(EdgeHandle _eh, VertexHandle _vh);
827 
839  void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
840 
841 
847  const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
849  Vertex& deref(VertexHandle _h) { return vertex(_h); }
850  const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
851  Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
852  const Edge& deref(EdgeHandle _h) const { return edge(_h); }
853  Edge& deref(EdgeHandle _h) { return edge(_h); }
854  const Face& deref(FaceHandle _h) const { return face(_h); }
855  Face& deref(FaceHandle _h) { return face(_h); }
857 
858 protected:
860  void collapse_edge(HalfedgeHandle _hh);
862  void collapse_loop(HalfedgeHandle _hh);
863 
864 
865 
866 private: // Working storage for add_face()
867  struct AddFaceEdgeInfo
868  {
869  HalfedgeHandle halfedge_handle;
870  bool is_new;
871  bool needs_adjust;
872  };
873  std::vector<AddFaceEdgeInfo> edgeData_; //
874  std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
875  uint next_cache_count_;
876 
877 };
878 
879 }//namespace OpenMesh
880 
881 #endif//OPENMESH_POLYCONNECTIVITY_HH
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter,&PolyConnectivity::edges_begin,&PolyConnectivity::edges_end > ConstEdgeRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:364
VertexEdgeIter VEIter
Alias typedef.
Definition: PolyConnectivity.hh:187
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:54
Handle for a edge entity.
Definition: Handles.hh:128
ConstVertexVertexIter cvv_end(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:573
VertexEdgeIter ve_end(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:566
FaceEdgeIter fe_iter(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:469
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:539
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:605
VertexOHalfedgeIter VOHIter
Alias typedef.
Definition: PolyConnectivity.hh:185
FaceFaceIter ff_end(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:598
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
Definition: PolyConnectivity.hh:634
FaceIter faces_sbegin()
Begin iterator for faces.
Definition: PolyConnectivity.hh:416
Face & deref(FaceHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:855
VertexVertexIter vv_iter(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:431
VertexVertexIter vv_end(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:557
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
Definition: PolyConnectivity.hh:196
ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:482
ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:476
ConstFaceEdgeIter CFEIter
Alias typedef.
Definition: PolyConnectivity.hh:201
FaceEdgeIter FEIter
Alias typedef.
Definition: PolyConnectivity.hh:191
ConstFaceIter CFIter
Alias typedef.
Definition: PolyConnectivity.hh:182
FaceFaceIter FFIter
Alias typedef.
Definition: PolyConnectivity.hh:192
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:579
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:576
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:516
Definition: CirculatorsT.hh:159
HalfedgeLoopIter hl_end(HalfedgeHandle _heh)
face - face circulator
Definition: PolyConnectivity.hh:601
ConstFaceHalfedgeIter CFHIter
Alias typedef.
Definition: PolyConnectivity.hh:200
VertexIHalfedgeIter vih_begin(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:494
FaceHalfedgeIter FHIter
Alias typedef.
Definition: PolyConnectivity.hh:190
bool is_valid() const
The handle is valid iff the index is not equal to -1.
Definition: Handles.hh:70
VertexIHalfedgeIter vih_end(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:560
FaceHalfedgeIter fh_iter(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:466
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:62
FaceEdgeIter fe_begin(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:529
HalfedgeHandle HHandle
Alias typedef.
Definition: PolyConnectivity.hh:170
HalfedgeIter HIter
Alias typedef.
Definition: PolyConnectivity.hh:175
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:513
EdgeIter edges_sbegin()
Begin iterator for edges.
Definition: PolyConnectivity.hh:409
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:582
ConstVertexIter vertices_sbegin() const
Const begin iterator for vertices.
Definition: PolyConnectivity.hh:398
VertexFaceIter vf_iter(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:443
VertexIHalfedgeIter VIHIter
Alias typedef.
Definition: PolyConnectivity.hh:186
ConstHalfedgeRange halfedges() const
Definition: PolyConnectivity.hh:375
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:851
ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:479
ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:507
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:548
ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
const halfedge circulator
Definition: PolyConnectivity.hh:551
FaceVertexIter fv_iter(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:463
VertexOHalfedgeIter voh_begin(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:497
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
Definition: PolyConnectivity.hh:645
ConstVertexEdgeIter CVEIter
Alias typedef.
Definition: PolyConnectivity.hh:197
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel,&This::has_edge_status,&This::n_edges > EdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:81
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
Definition: PolyConnectivity.hh:402
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:545
ConstEdgeIter edges_sbegin() const
Const begin iterator for edges.
Definition: PolyConnectivity.hh:412
ConstHalfedgeIter halfedges_sbegin() const
Const begin iterator for halfedges.
Definition: PolyConnectivity.hh:405
VertexIter VIter
Alias typedef.
Definition: PolyConnectivity.hh:174
ConstVertexVertexIter CVVIter
Alias typedef.
Definition: PolyConnectivity.hh:194
HalfedgeIter ConstHalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:85
VertexFaceIter vf_end(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:569
ConstFaceRange faces() const
Definition: PolyConnectivity.hh:385
Handle for a face entity.
Definition: Handles.hh:135
Handle for a vertex entity.
Definition: Handles.hh:114
Edge & deref(EdgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:853
Definition: IteratorsT.hh:82
VertexVertexIter VVIter
Alias typedef.
Definition: PolyConnectivity.hh:184
ConstEdgeIter CEIter
Alias typedef.
Definition: PolyConnectivity.hh:181
FaceEdgeIter fe_end(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:595
FaceFaceIter ff_iter(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:472
ConstFaceFaceIter cff_iter(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:485
FaceIter ConstFaceIter
Linear iterator.
Definition: PolyConnectivity.hh:87
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel,&This::has_halfedge_status,&This::n_halfedges > HalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:80
VertexEdgeIter ve_iter(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:440
VertexFaceIter VFIter
Alias typedef.
Definition: PolyConnectivity.hh:188
FaceHandle FHandle
Alias typedef.
Definition: PolyConnectivity.hh:172
ConstVertexIter CVIter
Alias typedef.
Definition: PolyConnectivity.hh:179
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter,&PolyConnectivity::faces_begin,&PolyConnectivity::faces_end > ConstFaceRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:365
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:608
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:850
Vertex & deref(VertexHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:849
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:358
VertexIHalfedgeIter vih_iter(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:434
EdgeIter EIter
Alias typedef.
Definition: PolyConnectivity.hh:176
VertexVertexIter vv_begin(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:491
ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:459
static const FaceHandle InvalidFaceHandle
Invalid handle.
Definition: PolyConnectivity.hh:66
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:519
FaceVertexIter FVIter
Alias typedef.
Definition: PolyConnectivity.hh:189
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
Definition: PolyConnectivity.hh:195
ConstVertexRange vertices() const
Definition: PolyConnectivity.hh:370
ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
const face - face circulator
Definition: PolyConnectivity.hh:617
ConstVertexFaceIter CVFIter
Alias typedef.
Definition: PolyConnectivity.hh:198
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter,&PolyConnectivity::vertices_begin,&PolyConnectivity::vertices_end > ConstVertexRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:362
void assign_connectivity(const ArrayKernel &_other)
ArrayKernel uses the default copy constructor and assignment operator, which means that the connectiv...
Definition: ArrayKernel.cc:69
ConstFaceFaceIter CFFIter
Alias typedef.
Definition: PolyConnectivity.hh:202
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:510
VertexIter ConstVertexIter
Linear iterator.
Definition: PolyConnectivity.hh:84
ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:453
ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:456
ConstFaceIter faces_sbegin() const
Const begin iterator for faces.
Definition: PolyConnectivity.hh:419
VertexIter vertices_sbegin()
Begin iterator for vertices.
Definition: PolyConnectivity.hh:395
VertexHandle add_vertex()
Add a new vertex.
Definition: PolyConnectivity.hh:223
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter,&PolyConnectivity::halfedges_begin,&PolyConnectivity::halfedges_end > ConstHalfedgeRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:363
void assign_connectivity(const PolyConnectivity &_other)
assign_connectivity() method.
Definition: PolyConnectivity.hh:215
FaceVertexIter fv_begin(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:523
const Face & deref(FaceHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:854
FaceHalfedgeIter fh_begin(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:526
FaceFaceIter ff_begin(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:532
Definition: CirculatorsT.hh:221
Definition: PolyConnectivity.hh:353
FaceIter FIter
Alias typedef.
Definition: PolyConnectivity.hh:177
Mesh kernel using arrays for mesh item storage.
Definition: ArrayKernel.hh:85
const Edge & deref(EdgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:852
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:542
EdgeHandle EHandle
Alias typedef.
Definition: PolyConnectivity.hh:171
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
Definition: PolyConnectivity.hh:662
ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:450
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:585
Handle for a halfedge entity.
Definition: Handles.hh:121
VertexFaceIter vf_begin(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:503
VertexEdgeIter ve_begin(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:500
ConstHalfedgeIter CHIter
Alias typedef.
Definition: PolyConnectivity.hh:180
HalfedgeLoopIter hl_begin(HalfedgeHandle _heh)
halfedge circulator
Definition: PolyConnectivity.hh:535
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel,&This::has_face_status,&This::n_faces > FaceIter
Linear iterator.
Definition: PolyConnectivity.hh:82
ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:447
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:614
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
Definition: PolyConnectivity.hh:696
ConstEdgeRange edges() const
Definition: PolyConnectivity.hh:380
ConstFaceVertexIter CFVIter
Alias typedef.
Definition: PolyConnectivity.hh:199
VertexOHalfedgeIter voh_end(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:563
VertexOHalfedgeIter voh_iter(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:437
FaceVertexIter fv_end(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:589
FaceHalfedgeIter fh_end(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:592
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:64
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:611
EdgeIter ConstEdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:86

acg pic Project OpenMesh, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .