OpenMesh
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
PolyConnectivity.hh
1 /*===========================================================================*\
2  * *
3  * OpenMesh *
4  * Copyright (C) 2001-2015 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: 1189 $ *
38  * $Date: 2015-01-08 10:29:49 +0100 (Do, 08 Jan 2015) $ *
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 
84  typedef VertexIter ConstVertexIter;
85  typedef HalfedgeIter ConstHalfedgeIter;
86  typedef EdgeIter ConstEdgeIter;
87  typedef FaceIter ConstFaceIter;
89 
90  //--- circulators ---
91 
97 
98  /*
99  * Vertex-centered circulators
100  */
101 
105  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::VertexHandle,
108 
112  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
115 
119  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
122 
126  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::FaceHandle,
129 
133  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::EdgeHandle,
136 
140  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
143 
149 
150  /*
151  * Face-centered circulators
152  */
153 
157  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::VertexHandle,
160 
164  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
167 
171  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::EdgeHandle,
174 
178  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::FaceHandle,
181 
186 
187  /*
188  * Halfedge circulator
189  */
191 
193 
194  // --- shortcuts
195 
200  typedef VertexHandle VHandle;
205 
206  typedef VertexIter VIter;
207  typedef HalfedgeIter HIter;
208  typedef EdgeIter EIter;
209  typedef FaceIter FIter;
210 
211  typedef ConstVertexIter CVIter;
212  typedef ConstHalfedgeIter CHIter;
213  typedef ConstEdgeIter CEIter;
214  typedef ConstFaceIter CFIter;
215 
225 
226  typedef ConstVertexVertexIter CVVIter;
227  typedef ConstVertexOHalfedgeIter CVOHIter;
228  typedef ConstVertexIHalfedgeIter CVIHIter;
229  typedef ConstVertexEdgeIter CVEIter;
230  typedef ConstVertexFaceIter CVFIter;
231  typedef ConstFaceVertexIter CFVIter;
232  typedef ConstFaceHalfedgeIter CFHIter;
233  typedef ConstFaceEdgeIter CFEIter;
234  typedef ConstFaceFaceIter CFFIter;
236 
237 public:
238 
239  PolyConnectivity() {}
240  virtual ~PolyConnectivity() {}
241 
242  inline static bool is_triangles()
243  { return false; }
244 
247  inline void assign_connectivity(const PolyConnectivity& _other)
249 
253 
256  { return new_vertex(); }
257 
265  FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
266 
267 
277  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
278 
289  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
290 
299  FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
300 
302 
304 
305 
310  bool is_collapse_ok(HalfedgeHandle _he);
311 
312 
318  void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
319 
328  void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
329 
340  void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
341 
343 
347 
349  VertexIter vertices_begin();
351  ConstVertexIter vertices_begin() const;
353  VertexIter vertices_end();
355  ConstVertexIter vertices_end() const;
356 
358  HalfedgeIter halfedges_begin();
360  ConstHalfedgeIter halfedges_begin() const;
362  HalfedgeIter halfedges_end();
364  ConstHalfedgeIter halfedges_end() const;
365 
367  EdgeIter edges_begin();
369  ConstEdgeIter edges_begin() const;
371  EdgeIter edges_end();
373  ConstEdgeIter edges_end() const;
374 
376  FaceIter faces_begin();
378  ConstFaceIter faces_begin() const;
380  FaceIter faces_end();
382  ConstFaceIter faces_end() const;
384 
385 
389 
391  VertexIter vertices_sbegin()
392  { return VertexIter(*this, VertexHandle(0), true); }
394  ConstVertexIter vertices_sbegin() const
395  { return ConstVertexIter(*this, VertexHandle(0), true); }
396 
398  HalfedgeIter halfedges_sbegin()
399  { return HalfedgeIter(*this, HalfedgeHandle(0), true); }
401  ConstHalfedgeIter halfedges_sbegin() const
402  { return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); }
403 
405  EdgeIter edges_sbegin()
406  { return EdgeIter(*this, EdgeHandle(0), true); }
408  ConstEdgeIter edges_sbegin() const
409  { return ConstEdgeIter(*this, EdgeHandle(0), true); }
410 
412  FaceIter faces_sbegin()
413  { return FaceIter(*this, FaceHandle(0), true); }
415  ConstFaceIter faces_sbegin() const
416  { return ConstFaceIter(*this, FaceHandle(0), true); }
417 
419 
420  //--- circulators ---
421 
425 
428  { return VertexVertexIter(*this, _vh); }
431  { return VertexIHalfedgeIter(*this, _vh); }
434  { return VertexOHalfedgeIter(*this, _vh); }
437  { return VertexEdgeIter(*this, _vh); }
440  { return VertexFaceIter(*this, _vh); }
441 
443  ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
444  { return ConstVertexVertexIter(*this, _vh); }
446  ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
447  { return ConstVertexIHalfedgeIter(*this, _vh); }
449  ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
450  { return ConstVertexOHalfedgeIter(*this, _vh); }
452  ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
453  { return ConstVertexEdgeIter(*this, _vh); }
455  ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
456  { return ConstVertexFaceIter(*this, _vh); }
457 
460  { return FaceVertexIter(*this, _fh); }
463  { return FaceHalfedgeIter(*this, _fh); }
466  { return FaceEdgeIter(*this, _fh); }
469  { return FaceFaceIter(*this, _fh); }
470 
472  ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
473  { return ConstFaceVertexIter(*this, _fh); }
475  ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
476  { return ConstFaceHalfedgeIter(*this, _fh); }
478  ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
479  { return ConstFaceEdgeIter(*this, _fh); }
481  ConstFaceFaceIter cff_iter(FaceHandle _fh) const
482  { return ConstFaceFaceIter(*this, _fh); }
483 
484  // 'begin' circulators
485 
488  { return VertexVertexIter(*this, _vh); }
491  { return VertexIHalfedgeIter(*this, _vh); }
494  { return VertexOHalfedgeIter(*this, _vh); }
497  { return VertexEdgeIter(*this, _vh); }
500  { return VertexFaceIter(*this, _vh); }
501 
503  ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
504  { return ConstVertexVertexIter(*this, _vh); }
506  ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
507  { return ConstVertexIHalfedgeIter(*this, _vh); }
509  ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
510  { return ConstVertexOHalfedgeIter(*this, _vh); }
512  ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
513  { return ConstVertexEdgeIter(*this, _vh); }
515  ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
516  { return ConstVertexFaceIter(*this, _vh); }
517 
520  { return FaceVertexIter(*this, _fh); }
523  { return FaceHalfedgeIter(*this, _fh); }
526  { return FaceEdgeIter(*this, _fh); }
529  { return FaceFaceIter(*this, _fh); }
532  { return HalfedgeLoopIter(*this, _heh); }
533 
535  ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
536  { return ConstFaceVertexIter(*this, _fh); }
538  ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
539  { return ConstFaceHalfedgeIter(*this, _fh); }
541  ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
542  { return ConstFaceEdgeIter(*this, _fh); }
544  ConstFaceFaceIter cff_begin(FaceHandle _fh) const
545  { return ConstFaceFaceIter(*this, _fh); }
547  ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
548  { return ConstHalfedgeLoopIter(*this, _heh); }
549 
550  // 'end' circulators
551 
554  { return VertexVertexIter(*this, _vh, true); }
557  { return VertexIHalfedgeIter(*this, _vh, true); }
560  { return VertexOHalfedgeIter(*this, _vh, true); }
563  { return VertexEdgeIter(*this, _vh, true); }
566  { return VertexFaceIter(*this, _vh, true); }
567 
569  ConstVertexVertexIter cvv_end(VertexHandle _vh) const
570  { return ConstVertexVertexIter(*this, _vh, true); }
572  ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
573  { return ConstVertexIHalfedgeIter(*this, _vh, true); }
575  ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
576  { return ConstVertexOHalfedgeIter(*this, _vh, true); }
578  ConstVertexEdgeIter cve_end(VertexHandle _vh) const
579  { return ConstVertexEdgeIter(*this, _vh, true); }
581  ConstVertexFaceIter cvf_end(VertexHandle _vh) const
582  { return ConstVertexFaceIter(*this, _vh, true); }
583 
586  { return FaceVertexIter(*this, _fh, true); }
589  { return FaceHalfedgeIter(*this, _fh, true); }
592  { return FaceEdgeIter(*this, _fh, true); }
595  { return FaceFaceIter(*this, _fh, true); }
598  { return HalfedgeLoopIter(*this, _heh, true); }
599 
601  ConstFaceVertexIter cfv_end(FaceHandle _fh) const
602  { return ConstFaceVertexIter(*this, _fh, true); }
604  ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
605  { return ConstFaceHalfedgeIter(*this, _fh, true); }
607  ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
608  { return ConstFaceEdgeIter(*this, _fh, true); }
610  ConstFaceFaceIter cff_end(FaceHandle _fh) const
611  { return ConstFaceFaceIter(*this, _fh, true); }
613  ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
614  { return ConstHalfedgeLoopIter(*this, _heh, true); }
616 
619 
621  template<
622  typename CONTAINER_TYPE,
623  typename ITER_TYPE,
624  ITER_TYPE (CONTAINER_TYPE::*begin_fn)() const,
625  ITER_TYPE (CONTAINER_TYPE::*end_fn)() const>
626  class EntityRange {
627  public:
628  EntityRange(CONTAINER_TYPE &container) : container_(container) {}
629  ITER_TYPE begin() const { return (container_.*begin_fn)(); }
630  ITER_TYPE end() const { return (container_.*end_fn)(); }
631 
632  private:
633  CONTAINER_TYPE &container_;
634  };
635  typedef EntityRange<
636  const PolyConnectivity,
640  typedef EntityRange<
641  const PolyConnectivity,
645  typedef EntityRange<
646  const PolyConnectivity,
650  typedef EntityRange<
651  const PolyConnectivity,
655 
660  ConstVertexRange vertices() const { return ConstVertexRange(*this); }
661 
666  ConstHalfedgeRange halfedges() const { return ConstHalfedgeRange(*this); }
667 
672  ConstEdgeRange edges() const { return ConstEdgeRange(*this); }
673 
678  ConstFaceRange faces() const { return ConstFaceRange(*this); }
679 
681  template<
682  typename CONTAINER_TYPE,
683  typename ITER_TYPE,
684  typename CENTER_ENTITY_TYPE,
685  ITER_TYPE (CONTAINER_TYPE::*begin_fn)(CENTER_ENTITY_TYPE) const,
686  ITER_TYPE (CONTAINER_TYPE::*end_fn)(CENTER_ENTITY_TYPE) const>
688  public:
690  CONTAINER_TYPE &container,
691  CENTER_ENTITY_TYPE center) :
692  container_(container), center_(center) {}
693  ITER_TYPE begin() { return (container_.*begin_fn)(center_); }
694  ITER_TYPE end() { return (container_.*end_fn)(center_); }
695 
696  private:
697  CONTAINER_TYPE &container_;
698  CENTER_ENTITY_TYPE center_;
699  };
700 
701  typedef CirculatorRange<
702  const PolyConnectivity,
703  ConstVertexVertexIter,
704  VertexHandle,
707  typedef CirculatorRange<
708  const PolyConnectivity,
709  ConstVertexIHalfedgeIter,
710  VertexHandle,
713  typedef CirculatorRange<
714  const PolyConnectivity,
715  ConstVertexOHalfedgeIter, VertexHandle,
718  typedef CirculatorRange<
719  const PolyConnectivity,
720  ConstVertexEdgeIter,
721  VertexHandle,
724  typedef CirculatorRange<
725  const PolyConnectivity,
726  ConstVertexFaceIter,
727  VertexHandle,
730  typedef CirculatorRange<
731  const PolyConnectivity,
732  ConstFaceVertexIter,
733  FaceHandle,
736  typedef CirculatorRange<
737  const PolyConnectivity,
738  ConstFaceHalfedgeIter,
739  FaceHandle,
742  typedef CirculatorRange<
743  const PolyConnectivity,
744  ConstFaceEdgeIter,
745  FaceHandle,
748  typedef CirculatorRange<
749  const PolyConnectivity,
750  ConstFaceFaceIter,
751  FaceHandle,
754 
759  ConstVertexVertexRange vv_range(VertexHandle _vh) const {
760  return ConstVertexVertexRange(*this, _vh);
761  }
762 
767  ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const {
768  return ConstVertexIHalfedgeRange(*this, _vh);
769  }
770 
775  ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const {
776  return ConstVertexOHalfedgeRange(*this, _vh);
777  }
778 
783  ConstVertexEdgeRange ve_range(VertexHandle _vh) const {
784  return ConstVertexEdgeRange(*this, _vh);
785  }
786 
791  ConstVertexFaceRange vf_range(VertexHandle _vh) const {
792  return ConstVertexFaceRange(*this, _vh);
793  }
794 
799  ConstFaceVertexRange fv_range(FaceHandle _fh) const {
800  return ConstFaceVertexRange(*this, _fh);
801  }
802 
807  ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const {
808  return ConstFaceHalfedgeRange(*this, _fh);
809  }
810 
815  ConstFaceEdgeRange fe_range(FaceHandle _fh) const {
816  return ConstFaceEdgeRange(*this, _fh);
817  }
818 
823  ConstFaceFaceRange ff_range(FaceHandle _fh) const {
824  return ConstFaceFaceRange(*this, _fh);
825  }
826 
828 
829  //===========================================================================
832  //===========================================================================
833 
841  bool is_boundary(HalfedgeHandle _heh) const
842  { return ArrayKernel::is_boundary(_heh); }
843 
852  bool is_boundary(EdgeHandle _eh) const
853  {
854  return (is_boundary(halfedge_handle(_eh, 0)) ||
855  is_boundary(halfedge_handle(_eh, 1)));
856  }
857 
869  bool is_boundary(VertexHandle _vh) const
870  {
871  HalfedgeHandle heh(halfedge_handle(_vh));
872  return (!(heh.is_valid() && face_handle(heh).is_valid()));
873  }
874 
884  bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
885 
896  bool is_manifold(VertexHandle _vh) const;
897 
900  // --- shortcuts ---
901 
903  inline FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
904  { return face_handle(opposite_halfedge_handle(_heh)); }
905 
906  // --- misc ---
907 
911  void adjust_outgoing_halfedge(VertexHandle _vh);
912 
914  HalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
916  uint valence(VertexHandle _vh) const;
918  uint valence(FaceHandle _fh) const;
919 
920  // --- connectivity operattions
921 
936  void collapse(HalfedgeHandle _heh);
941  bool is_simple_link(EdgeHandle _eh) const;
946  bool is_simply_connected(FaceHandle _fh) const;
959  FaceHandle remove_edge(EdgeHandle _eh);
963  void reinsert_edge(EdgeHandle _eh);
973  HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
974 
987  void split(FaceHandle _fh, VertexHandle _vh);
988 
1002  void split_copy(FaceHandle _fh, VertexHandle _vh);
1003 
1017  void triangulate(FaceHandle _fh);
1018 
1021  void triangulate();
1022 
1033  void split_edge(EdgeHandle _eh, VertexHandle _vh);
1034 
1046  void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
1047 
1048 
1054  const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
1056  Vertex& deref(VertexHandle _h) { return vertex(_h); }
1057  const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
1058  Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
1059  const Edge& deref(EdgeHandle _h) const { return edge(_h); }
1060  Edge& deref(EdgeHandle _h) { return edge(_h); }
1061  const Face& deref(FaceHandle _h) const { return face(_h); }
1062  Face& deref(FaceHandle _h) { return face(_h); }
1064 
1065 protected:
1067  void collapse_edge(HalfedgeHandle _hh);
1069  void collapse_loop(HalfedgeHandle _hh);
1070 
1071 
1072 
1073 private: // Working storage for add_face()
1074  struct AddFaceEdgeInfo
1075  {
1076  HalfedgeHandle halfedge_handle;
1077  bool is_new;
1078  bool needs_adjust;
1079  };
1080  std::vector<AddFaceEdgeInfo> edgeData_; //
1081  std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
1082  uint next_cache_count_;
1083 
1084 };
1085 
1086 }//namespace OpenMesh
1087 
1088 #endif//OPENMESH_POLYCONNECTIVITY_HH
FaceEdgeIter fe_iter(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:465
FaceHalfedgeIter fh_end(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:588
Vertex & deref(VertexHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1056
ConstHalfedgeIter CHIter
Alias typedef.
Definition: PolyConnectivity.hh:212
ConstFaceEdgeRange fe_range(FaceHandle _fh) const
Definition: PolyConnectivity.hh:815
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:62
ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:503
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
Definition: PolyConnectivity.hh:841
VertexIHalfedgeIter vih_iter(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:430
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:607
FaceIter FIter
Alias typedef.
Definition: PolyConnectivity.hh:209
ConstFaceIter faces_sbegin() const
Const begin iterator for faces.
Definition: PolyConnectivity.hh:415
VertexFaceIter vf_end(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:565
Definition: IteratorsT.hh:82
void assign_connectivity(const ArrayKernel &_other)
ArrayKernel uses the default copy constructor and assignment operator, which means that the connectiv...
Definition: ArrayKernel.cc:69
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
Definition: PolyConnectivity.hh:903
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:538
FaceFaceIter FFIter
Alias typedef.
Definition: PolyConnectivity.hh:224
ConstHalfedgeRange halfedges() const
Definition: PolyConnectivity.hh:666
ConstFaceEdgeIter CFEIter
Alias typedef.
Definition: PolyConnectivity.hh:233
ConstVertexFaceIter CVFIter
Alias typedef.
Definition: PolyConnectivity.hh:230
HalfedgeLoopIter hl_end(HalfedgeHandle _heh)
face - face circulator
Definition: PolyConnectivity.hh:597
FaceIter faces_begin()
Begin iterator for faces.
Definition: PolyConnectivity.cc:687
Face & deref(FaceHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1062
HalfedgeIter halfedges_end()
End iterator for halfedges.
Definition: PolyConnectivity.cc:651
VertexFaceIter vf_begin(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:499
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle > VertexIHalfedgeIter
Enumerates incoming half edges in a clockwise fashion.
Definition: PolyConnectivity.hh:121
ConstFaceHalfedgeIter CFHIter
Alias typedef.
Definition: PolyConnectivity.hh:232
Generic class for iterator ranges.
Definition: PolyConnectivity.hh:687
EdgeIter EIter
Alias typedef.
Definition: PolyConnectivity.hh:208
VertexIter ConstVertexIter
Linear iterator.
Definition: PolyConnectivity.hh:84
ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const
Definition: PolyConnectivity.hh:775
Iterators::GenericCirculatorT< This, This::VertexHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > VertexEdgeIter
Enumerates incident edges in a clockwise fashion.
Definition: PolyConnectivity.hh:135
FaceIter ConstFaceIter
Linear iterator.
Definition: PolyConnectivity.hh:87
FaceFaceIter ff_begin(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:528
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:541
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > VertexOHalfedgeIter
Enumerates outgoing half edges in a clockwise fashion.
Definition: PolyConnectivity.hh:114
EdgeIter edges_end()
End iterator for edges.
Definition: PolyConnectivity.cc:675
VertexEdgeIter ve_end(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:562
Iterators::GenericCirculatorT< This, This::VertexHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > VertexVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:107
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel,&This::has_face_status,&This::n_faces > FaceIter
Linear iterator.
Definition: PolyConnectivity.hh:82
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:578
VertexOHalfedgeIter voh_iter(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:433
FaceVertexIter ConstFaceVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:182
Edge & deref(EdgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1060
CirculatorRange< const PolyConnectivity, ConstFaceVertexIter, FaceHandle,&PolyConnectivity::cfv_begin,&PolyConnectivity::cfv_end > ConstFaceVertexRange
Definition: PolyConnectivity.hh:735
VertexOHalfedgeIter VOHIter
Alias typedef.
Definition: PolyConnectivity.hh:217
ConstFaceVertexRange fv_range(FaceHandle _fh) const
Definition: PolyConnectivity.hh:799
ConstEdgeIter edges_sbegin() const
Const begin iterator for edges.
Definition: PolyConnectivity.hh:408
FaceFaceIter ff_iter(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:468
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:506
VertexIter VIter
Alias typedef.
Definition: PolyConnectivity.hh:206
FaceHalfedgeIter FHIter
Alias typedef.
Definition: PolyConnectivity.hh:222
ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const
Definition: PolyConnectivity.hh:767
ConstVertexVertexIter cvv_end(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:569
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel,&This::has_halfedge_status,&This::n_halfedges > HalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:80
Iterators::GenericCirculatorT< This, This::FaceHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > FaceEdgeIter
Enumerate incident edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:173
VertexIter vertices_end()
End iterator for vertices.
Definition: PolyConnectivity.cc:627
CirculatorRange< const PolyConnectivity, ConstVertexFaceIter, VertexHandle,&PolyConnectivity::cvf_begin,&PolyConnectivity::cvf_end > ConstVertexFaceRange
Definition: PolyConnectivity.hh:729
FaceHalfedgeIter ConstFaceHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:183
CirculatorRange< const PolyConnectivity, ConstFaceFaceIter, FaceHandle,&PolyConnectivity::cff_begin,&PolyConnectivity::cff_end > ConstFaceFaceRange
Definition: PolyConnectivity.hh:753
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:610
FaceEdgeIter FEIter
Alias typedef.
Definition: PolyConnectivity.hh:223
Definition: CirculatorsT.hh:221
VertexFaceIter vf_iter(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:439
VertexOHalfedgeIter voh_begin(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:493
VertexFaceIter VFIter
Alias typedef.
Definition: PolyConnectivity.hh:220
FaceIter faces_end()
End iterator for faces.
Definition: PolyConnectivity.cc:699
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:604
CirculatorRange< const PolyConnectivity, ConstFaceEdgeIter, FaceHandle,&PolyConnectivity::cfe_begin,&PolyConnectivity::cfe_end > ConstFaceEdgeRange
Definition: PolyConnectivity.hh:747
Mesh kernel using arrays for mesh item storage.
Definition: ArrayKernel.hh:85
ConstFaceFaceIter CFFIter
Alias typedef.
Definition: PolyConnectivity.hh:234
ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:475
VertexIHalfedgeIter vih_end(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:556
VertexVertexIter vv_end(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:553
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:515
ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:472
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
Definition: PolyConnectivity.hh:852
VertexEdgeIter ve_iter(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:436
CirculatorRange< const PolyConnectivity, ConstVertexIHalfedgeIter, VertexHandle,&PolyConnectivity::cvih_begin,&PolyConnectivity::cvih_end > ConstVertexIHalfedgeRange
Definition: PolyConnectivity.hh:712
HalfedgeIter halfedges_begin()
Begin iterator for halfedges.
Definition: PolyConnectivity.cc:639
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:601
FaceEdgeIter ConstFaceEdgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:184
VertexIHalfedgeIter vih_begin(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:490
CirculatorRange< const PolyConnectivity, ConstVertexVertexIter, VertexHandle,&PolyConnectivity::cvv_begin,&PolyConnectivity::cvv_end > ConstVertexVertexRange
Definition: PolyConnectivity.hh:706
Generic class for vertex/halfedge/edge/face ranges.
Definition: PolyConnectivity.hh:626
ConstHalfedgeIter halfedges_sbegin() const
Const begin iterator for halfedges.
Definition: PolyConnectivity.hh:401
HalfedgeIter HIter
Alias typedef.
Definition: PolyConnectivity.hh:207
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:509
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter,&PolyConnectivity::halfedges_begin,&PolyConnectivity::halfedges_end > ConstHalfedgeRange
Definition: PolyConnectivity.hh:644
ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:449
VertexVertexIter vv_begin(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:487
ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:455
static const FaceHandle InvalidFaceHandle
Invalid handle.
Definition: PolyConnectivity.hh:66
FaceHandle FHandle
Alias typedef.
Definition: PolyConnectivity.hh:204
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > FaceHalfedgeIter
Enumerate incident half edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:166
Handle for a vertex entity.
Definition: Handles.hh:114
ConstVertexIter CVIter
Alias typedef.
Definition: PolyConnectivity.hh:211
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:575
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1058
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1057
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel,&This::has_edge_status,&This::n_edges > EdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:81
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:512
FaceFaceIter ff_end(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:594
CirculatorRange< const PolyConnectivity, ConstVertexOHalfedgeIter, VertexHandle,&PolyConnectivity::cvoh_begin,&PolyConnectivity::cvoh_end > ConstVertexOHalfedgeRange
Definition: PolyConnectivity.hh:717
Iterators::GenericCirculatorT< This, This::FaceHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle > FaceFaceIter
Enumerate adjacent faces in a counter clockwise fashion.
Definition: PolyConnectivity.hh:180
EdgeIter ConstEdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:86
FaceEdgeIter fe_begin(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:525
HalfedgeLoopIter hl_begin(HalfedgeHandle _heh)
halfedge circulator
Definition: PolyConnectivity.hh:531
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:54
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
Definition: PolyConnectivity.hh:227
ConstEdgeRange edges() const
Definition: PolyConnectivity.hh:672
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:535
ConstFaceFaceRange ff_range(FaceHandle _fh) const
Definition: PolyConnectivity.hh:823
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > HalfedgeLoopIter
Identical to FaceHalfedgeIter.
Definition: PolyConnectivity.hh:142
ConstVertexEdgeIter CVEIter
Alias typedef.
Definition: PolyConnectivity.hh:229
HalfedgeLoopIter ConstHalfedgeLoopIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:190
Definition: CirculatorsT.hh:159
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
Definition: PolyConnectivity.hh:398
ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:452
ConstVertexVertexIter CVVIter
Alias typedef.
Definition: PolyConnectivity.hh:226
ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
const halfedge circulator
Definition: PolyConnectivity.hh:547
ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
const face - face circulator
Definition: PolyConnectivity.hh:613
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter,&PolyConnectivity::vertices_begin,&PolyConnectivity::vertices_end > ConstVertexRange
Definition: PolyConnectivity.hh:639
VertexOHalfedgeIter ConstVertexOHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:145
ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:446
ConstFaceIter CFIter
Alias typedef.
Definition: PolyConnectivity.hh:214
ConstEdgeIter CEIter
Alias typedef.
Definition: PolyConnectivity.hh:213
FaceVertexIter fv_begin(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:519
VertexFaceIter ConstVertexFaceIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:147
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter,&PolyConnectivity::faces_begin,&PolyConnectivity::faces_end > ConstFaceRange
Definition: PolyConnectivity.hh:654
ConstFaceVertexIter CFVIter
Alias typedef.
Definition: PolyConnectivity.hh:231
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:581
FaceEdgeIter fe_end(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:591
EdgeIter edges_begin()
Begin iterator for edges.
Definition: PolyConnectivity.cc:663
VertexEdgeIter ve_begin(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:496
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:544
HalfedgeIter ConstHalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:85
Handle for a face entity.
Definition: Handles.hh:135
VertexHandle add_vertex()
Add a new vertex.
Definition: PolyConnectivity.hh:255
VertexEdgeIter ConstVertexEdgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:148
const Edge & deref(EdgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1059
VertexEdgeIter VEIter
Alias typedef.
Definition: PolyConnectivity.hh:219
Handle for a halfedge entity.
Definition: Handles.hh:121
VertexVertexIter ConstVertexVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:144
VertexIter vertices_begin()
Begin iterator for vertices.
Definition: PolyConnectivity.cc:615
Iterators::GenericCirculatorT< This, This::VertexHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toFaceHandle > VertexFaceIter
Enumerates incident faces in a clockwise fashion.
Definition: PolyConnectivity.hh:128
VertexOHalfedgeIter voh_end(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:559
Handle for a edge entity.
Definition: Handles.hh:128
VertexIHalfedgeIter ConstVertexIHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:146
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:358
FaceHalfedgeIter fh_begin(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:522
FaceIter faces_sbegin()
Begin iterator for faces.
Definition: PolyConnectivity.hh:412
CirculatorRange< const PolyConnectivity, ConstVertexEdgeIter, VertexHandle,&PolyConnectivity::cve_begin,&PolyConnectivity::cve_end > ConstVertexEdgeRange
Definition: PolyConnectivity.hh:723
FaceHalfedgeIter fh_iter(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:462
FaceVertexIter FVIter
Alias typedef.
Definition: PolyConnectivity.hh:221
ConstVertexFaceRange vf_range(VertexHandle _vh) const
Definition: PolyConnectivity.hh:791
ConstFaceFaceIter cff_iter(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:481
EdgeIter edges_sbegin()
Begin iterator for edges.
Definition: PolyConnectivity.hh:405
FaceVertexIter fv_iter(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:459
ConstVertexRange vertices() const
Definition: PolyConnectivity.hh:660
CirculatorRange< const PolyConnectivity, ConstFaceHalfedgeIter, FaceHandle,&PolyConnectivity::cfh_begin,&PolyConnectivity::cfh_end > ConstFaceHalfedgeRange
Definition: PolyConnectivity.hh:741
ConstFaceRange faces() const
Definition: PolyConnectivity.hh:678
ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const
Definition: PolyConnectivity.hh:807
ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:443
EdgeHandle EHandle
Alias typedef.
Definition: PolyConnectivity.hh:203
VertexVertexIter VVIter
Alias typedef.
Definition: PolyConnectivity.hh:216
FaceVertexIter fv_end(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:585
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
Definition: PolyConnectivity.hh:869
Iterators::GenericCirculatorT< This, This::FaceHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > FaceVertexIter
Enumerate incident vertices in a counter clockwise fashion.
Definition: PolyConnectivity.hh:159
ConstVertexVertexRange vv_range(VertexHandle _vh) const
Definition: PolyConnectivity.hh:759
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:56
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter,&PolyConnectivity::edges_begin,&PolyConnectivity::edges_end > ConstEdgeRange
Definition: PolyConnectivity.hh:649
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:64
VertexVertexIter vv_iter(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:427
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
Definition: PolyConnectivity.hh:228
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:572
FaceFaceIter ConstFaceFaceIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:185
ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:478
HalfedgeHandle HHandle
Alias typedef.
Definition: PolyConnectivity.hh:202
VertexIter vertices_sbegin()
Begin iterator for vertices.
Definition: PolyConnectivity.hh:391
bool is_valid() const
The handle is valid iff the index is not equal to -1.
Definition: Handles.hh:70
void assign_connectivity(const PolyConnectivity &_other)
assign_connectivity() method.
Definition: PolyConnectivity.hh:247
ConstVertexEdgeRange ve_range(VertexHandle _vh) const
Definition: PolyConnectivity.hh:783
VertexIHalfedgeIter VIHIter
Alias typedef.
Definition: PolyConnectivity.hh:218
ConstVertexIter vertices_sbegin() const
Const begin iterator for vertices.
Definition: PolyConnectivity.hh:394
const Face & deref(FaceHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1061

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