OpenMesh
PolyConnectivity.hh
1 /* ========================================================================= *
2  * *
3  * OpenMesh *
4  * Copyright (c) 2001-2022, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openmesh.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenMesh. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39  * *
40  * ========================================================================= */
41 
42 
43 
44 #ifndef OPENMESH_POLYCONNECTIVITY_HH
45 #define OPENMESH_POLYCONNECTIVITY_HH
46 
47 #include <OpenMesh/Core/Mesh/ArrayKernel.hh>
48 #include <OpenMesh/Core/Mesh/SmartRange.hh>
49 
50 namespace OpenMesh
51 {
52 
53 namespace Iterators
54 {
55  template <class Mesh, class ValueHandle, class MemberOwner, bool (MemberOwner::*PrimitiveStatusMember)() const, size_t (MemberOwner::*PrimitiveCountMember)() const>
56  class GenericIteratorT;
57 
58  template<class Mesh>
59  class GenericCirculatorBaseT;
60 
61  template<typename Traits>
62  class GenericCirculatorT_DEPRECATED;
63 
64  template<typename Traits, bool CW>
65  class GenericCirculatorT;
66 }
67 
68 template <typename RangeTraitT>
69 class EntityRange;
70 
71 template<
72  typename CONTAINER_T,
73  typename ITER_T,
74  ITER_T (CONTAINER_T::*begin_fn)() const,
75  ITER_T (CONTAINER_T::*end_fn)() const>
77 {
78  using CONTAINER_TYPE = CONTAINER_T;
79  using ITER_TYPE = ITER_T;
80  static ITER_TYPE begin(const CONTAINER_TYPE& _container) { return (_container.*begin_fn)(); }
81  static ITER_TYPE end(const CONTAINER_TYPE& _container) { return (_container.*end_fn)(); }
82 };
83 
84 
85 template <typename CirculatorRangeTraitT>
86 class CirculatorRange;
87 
88 template<
89  typename CONTAINER_T,
90  typename ITER_T,
91  typename CENTER_ENTITY_T,
92  typename TO_ENTITY_T,
93  ITER_T (CONTAINER_T::*begin_fn)(CENTER_ENTITY_T) const,
94  ITER_T (CONTAINER_T::*end_fn)(CENTER_ENTITY_T) const>
96 {
97  using CONTAINER_TYPE = CONTAINER_T;
98  using ITER_TYPE = ITER_T;
99  using CENTER_ENTITY_TYPE = CENTER_ENTITY_T;
100  using TO_ENTITYE_TYPE = TO_ENTITY_T;
101  static ITER_TYPE begin(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*begin_fn)(_ce); }
102  static ITER_TYPE begin(const CONTAINER_TYPE& _container, HalfedgeHandle _heh, int) { return ITER_TYPE(_container, _heh); }
103  static ITER_TYPE end(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*end_fn)(_ce); }
104  static ITER_TYPE end(const CONTAINER_TYPE& _container, HalfedgeHandle _heh, int) { return ITER_TYPE(_container, _heh, true); }
105 };
106 
107 struct SmartVertexHandle;
108 struct SmartHalfedgeHandle;
109 struct SmartEdgeHandle;
110 struct SmartFaceHandle;
111 
114 class OPENMESHDLLEXPORT PolyConnectivity : public ArrayKernel
115 {
116 public:
118 
119  static const VertexHandle InvalidVertexHandle;
128 
130 
131  //--- iterators ---
132 
143 
149 
150  //--- circulators ---
151 
157 
158  /*
159  * Vertex-centered circulators
160  */
161 
163  {
164  using Mesh = This;
167  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return _mesh->to_vertex_handle(_heh);}
168  };
169 
170 
176 
181 
182 
184  {
185  using Mesh = This;
188  static ValueHandle toHandle(const Mesh* const /*_mesh*/, This::HalfedgeHandle _heh) { return _heh;}
189  };
190 
196 
201 
203  {
204  using Mesh = This;
207  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return _mesh->opposite_halfedge_handle(_heh); }
208  };
209 
215 
220 
221 
223  {
224  using Mesh = This;
227  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->face_handle(_heh); }
228  };
229 
235 
240 
241 
243  {
244  using Mesh = This;
247  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->edge_handle(_heh); }
248  };
249 
259 
260 
262  {
263  using Mesh = This;
266  static ValueHandle toHandle(const Mesh* const /*_mesh*/, This::HalfedgeHandle _heh) { return _heh; }
267  };
268 
278 
294 
295  /*
296  * Face-centered circulators
297  */
298 
300  {
301  using Mesh = This;
304  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->to_vertex_handle(_heh); }
305  };
306 
312 
317 
323 
328 
329 
331  {
332  using Mesh = This;
335  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->edge_handle(_heh); }
336  };
337 
343 
348 
349 
351  {
352  using Mesh = This;
355  static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->face_handle(_mesh->opposite_halfedge_handle(_heh)); }
356  };
357 
363 
368 
381 
382  /*
383  * Halfedge circulator
384  */
388 
390 
391  // --- shortcuts
392 
402 
403  typedef VertexIter VIter;
405  typedef EdgeIter EIter;
406  typedef FaceIter FIter;
407 
412 
438 
467 
468 public:
469 
471  virtual ~PolyConnectivity() {}
472 
473  inline static bool is_triangles()
474  { return false; }
475 
478  inline void assign_connectivity(const PolyConnectivity& _other)
480 
484 
486  inline SmartVertexHandle add_vertex();
487 
495  SmartFaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
496 
504  SmartFaceHandle add_face(const std::vector<SmartVertexHandle>& _vhandles);
505 
506 
516  SmartFaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
517 
528  SmartFaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
529 
538  SmartFaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
539 
541 
543 
544 
549  bool is_collapse_ok(HalfedgeHandle _he);
550 
551 
557  void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
558 
567  void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
568 
579  void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
580 
581 
583 
587 
588  using ArrayKernel::next_halfedge_handle;
589  using ArrayKernel::prev_halfedge_handle;
590  using ArrayKernel::opposite_halfedge_handle;
591  using ArrayKernel::ccw_rotated_halfedge_handle;
592  using ArrayKernel::cw_rotated_halfedge_handle;
593 
594  inline SmartHalfedgeHandle next_halfedge_handle (SmartHalfedgeHandle _heh) const;
595  inline SmartHalfedgeHandle prev_halfedge_handle (SmartHalfedgeHandle _heh) const;
596  inline SmartHalfedgeHandle opposite_halfedge_handle (SmartHalfedgeHandle _heh) const;
597  inline SmartHalfedgeHandle ccw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const;
598  inline SmartHalfedgeHandle cw_rotated_halfedge_handle (SmartHalfedgeHandle _heh) const;
599 
600  using ArrayKernel::s_halfedge_handle;
601  using ArrayKernel::s_edge_handle;
602 
603  static SmartHalfedgeHandle s_halfedge_handle(SmartEdgeHandle _eh, unsigned int _i);
604  static SmartEdgeHandle s_edge_handle(SmartHalfedgeHandle _heh);
605 
606  using ArrayKernel::halfedge_handle;
607  using ArrayKernel::edge_handle;
608  using ArrayKernel::face_handle;
609 
610  inline SmartHalfedgeHandle halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) const;
611  inline SmartHalfedgeHandle halfedge_handle(SmartFaceHandle _fh) const;
612  inline SmartHalfedgeHandle halfedge_handle(SmartVertexHandle _vh) const;
613  inline SmartEdgeHandle edge_handle(SmartHalfedgeHandle _heh) const;
614  inline SmartFaceHandle face_handle(SmartHalfedgeHandle _heh) const;
615 
617  inline SmartFaceHandle opposite_face_handle(HalfedgeHandle _heh) const;
618 
620 
624 
626  VertexIter vertices_begin();
628  ConstVertexIter vertices_begin() const;
630  VertexIter vertices_end();
632  ConstVertexIter vertices_end() const;
633 
635  HalfedgeIter halfedges_begin();
637  ConstHalfedgeIter halfedges_begin() const;
639  HalfedgeIter halfedges_end();
641  ConstHalfedgeIter halfedges_end() const;
642 
644  EdgeIter edges_begin();
646  ConstEdgeIter edges_begin() const;
648  EdgeIter edges_end();
650  ConstEdgeIter edges_end() const;
651 
653  FaceIter faces_begin();
655  ConstFaceIter faces_begin() const;
657  FaceIter faces_end();
659  ConstFaceIter faces_end() const;
661 
662 
666 
668  VertexIter vertices_sbegin();
670  ConstVertexIter vertices_sbegin() const;
671 
673  HalfedgeIter halfedges_sbegin();
675  ConstHalfedgeIter halfedges_sbegin() const;
676 
678  EdgeIter edges_sbegin();
680  ConstEdgeIter edges_sbegin() const;
681 
683  FaceIter faces_sbegin();
685  ConstFaceIter faces_sbegin() const;
686 
688 
689  //--- circulators ---
690 
694 
696  VertexVertexIter vv_iter(VertexHandle _vh);
698  VertexVertexCWIter vv_cwiter(VertexHandle _vh);
700  VertexVertexCCWIter vv_ccwiter(VertexHandle _vh);
702  VertexIHalfedgeIter vih_iter(VertexHandle _vh);
704  VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh);
706  VertexIHalfedgeCCWIter vih_ccwiter(VertexHandle _vh);
708  VertexOHalfedgeIter voh_iter(VertexHandle _vh);
710  VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh);
712  VertexOHalfedgeCCWIter voh_ccwiter(VertexHandle _vh);
714  VertexEdgeIter ve_iter(VertexHandle _vh);
716  VertexEdgeCWIter ve_cwiter(VertexHandle _vh);
718  VertexEdgeCCWIter ve_ccwiter(VertexHandle _vh);
720  VertexFaceIter vf_iter(VertexHandle _vh);
722  VertexFaceCWIter vf_cwiter(VertexHandle _vh);
724  VertexFaceCCWIter vf_ccwiter(VertexHandle _vh);
725 
727  ConstVertexVertexIter cvv_iter(VertexHandle _vh) const;
729  ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const;
731  ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const;
733  ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const;
735  ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const;
737  ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const;
739  ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const;
741  ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const;
743  ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const;
745  ConstVertexEdgeIter cve_iter(VertexHandle _vh) const;
747  ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const;
749  ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const;
751  ConstVertexFaceIter cvf_iter(VertexHandle _vh) const;
753  ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const;
755  ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const;
756 
758  FaceVertexIter fv_iter(FaceHandle _fh);
760  FaceVertexCWIter fv_cwiter(FaceHandle _fh);
762  FaceVertexCCWIter fv_ccwiter(FaceHandle _fh);
764  FaceHalfedgeIter fh_iter(FaceHandle _fh);
766  FaceHalfedgeCWIter fh_cwiter(FaceHandle _fh);
768  FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh);
770  FaceEdgeIter fe_iter(FaceHandle _fh);
772  FaceEdgeCWIter fe_cwiter(FaceHandle _fh);
774  FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh);
776  FaceFaceIter ff_iter(FaceHandle _fh);
778  FaceFaceCWIter ff_cwiter(FaceHandle _fh);
780  FaceFaceCCWIter ff_ccwiter(FaceHandle _fh);
781 
783  ConstFaceVertexIter cfv_iter(FaceHandle _fh) const;
785  ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const;
787  ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const;
789  ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const;
791  ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const;
793  ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const;
795  ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const;
797  ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const;
799  ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const;
801  ConstFaceFaceIter cff_iter(FaceHandle _fh) const;
803  ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const;
805  ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const;
806 
807  // 'begin' circulators
808 
810  VertexVertexIter vv_begin(VertexHandle _vh);
812  VertexVertexCWIter vv_cwbegin(VertexHandle _vh);
814  VertexVertexCCWIter vv_ccwbegin(VertexHandle _vh);
816  VertexIHalfedgeIter vih_begin(VertexHandle _vh);
818  VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh);
820  VertexIHalfedgeCCWIter vih_ccwbegin(VertexHandle _vh);
822  VertexOHalfedgeIter voh_begin(VertexHandle _vh);
824  VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh);
826  VertexOHalfedgeCCWIter voh_ccwbegin(VertexHandle _vh);
828  VertexEdgeIter ve_begin(VertexHandle _vh);
830  VertexEdgeCWIter ve_cwbegin(VertexHandle _vh);
832  VertexEdgeCCWIter ve_ccwbegin(VertexHandle _vh);
834  VertexFaceIter vf_begin(VertexHandle _vh);
836  VertexFaceCWIter vf_cwbegin(VertexHandle _vh);
838  VertexFaceCCWIter vf_ccwbegin(VertexHandle _vh);
839 
840 
842  ConstVertexVertexIter cvv_begin(VertexHandle _vh) const;
844  ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const;
846  ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const;
848  ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const;
850  ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const;
852  ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const;
854  ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const;
856  ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const;
858  ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const;
860  ConstVertexEdgeIter cve_begin(VertexHandle _vh) const;
862  ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const;
864  ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const;
866  ConstVertexFaceIter cvf_begin(VertexHandle _vh) const;
868  ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const;
870  ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const;
871 
873  FaceVertexIter fv_begin(FaceHandle _fh);
875  FaceVertexCWIter fv_cwbegin(FaceHandle _fh);
877  FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh);
879  FaceHalfedgeIter fh_begin(FaceHandle _fh);
881  FaceHalfedgeCWIter fh_cwbegin(FaceHandle _fh);
883  FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh);
885  FaceEdgeIter fe_begin(FaceHandle _fh);
887  FaceEdgeCWIter fe_cwbegin(FaceHandle _fh);
889  FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh);
891  FaceFaceIter ff_begin(FaceHandle _fh);
893  FaceFaceCWIter ff_cwbegin(FaceHandle _fh);
895  FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh);
897  HalfedgeLoopIter hl_begin(HalfedgeHandle _heh);
899  HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh);
901  HalfedgeLoopCCWIter hl_ccwbegin(HalfedgeHandle _heh);
902 
904  ConstFaceVertexIter cfv_begin(FaceHandle _fh) const;
906  ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const;
908  ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const;
910  ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const;
912  ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const;
914  ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const;
916  ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const;
918  ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const;
920  ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const;
922  ConstFaceFaceIter cff_begin(FaceHandle _fh) const;
924  ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const;
926  ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const;
928  ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const;
930  ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const;
932  ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const;
933 
934  // 'end' circulators
935 
937  VertexVertexIter vv_end(VertexHandle _vh);
939  VertexVertexCWIter vv_cwend(VertexHandle _vh);
941  VertexVertexCCWIter vv_ccwend(VertexHandle _vh);
943  VertexIHalfedgeIter vih_end(VertexHandle _vh);
945  VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh);
947  VertexIHalfedgeCCWIter vih_ccwend(VertexHandle _vh);
949  VertexOHalfedgeIter voh_end(VertexHandle _vh);
951  VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh);
953  VertexOHalfedgeCCWIter voh_ccwend(VertexHandle _vh);
955  VertexEdgeIter ve_end(VertexHandle _vh);
957  VertexEdgeCWIter ve_cwend(VertexHandle _vh);
959  VertexEdgeCCWIter ve_ccwend(VertexHandle _vh);
961  VertexFaceIter vf_end(VertexHandle _vh);
963  VertexFaceCWIter vf_cwend(VertexHandle _vh);
965  VertexFaceCCWIter vf_ccwend(VertexHandle _vh);
966 
968  ConstVertexVertexIter cvv_end(VertexHandle _vh) const;
970  ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const;
972  ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const;
974  ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const;
976  ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const;
978  ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const;
980  ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const;
982  ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const;
984  ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const;
986  ConstVertexEdgeIter cve_end(VertexHandle _vh) const;
988  ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const;
990  ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const;
992  ConstVertexFaceIter cvf_end(VertexHandle _vh) const;
994  ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const;
996  ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const;
997 
999  FaceVertexIter fv_end(FaceHandle _fh);
1001  FaceVertexCWIter fv_cwend(FaceHandle _fh);
1003  FaceVertexCCWIter fv_ccwend(FaceHandle _fh);
1005  FaceHalfedgeIter fh_end(FaceHandle _fh);
1007  FaceHalfedgeCWIter fh_cwend(FaceHandle _fh);
1009  FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh);
1011  FaceEdgeIter fe_end(FaceHandle _fh);
1013  FaceEdgeCWIter fe_cwend(FaceHandle _fh);
1015  FaceEdgeCCWIter fe_ccwend(FaceHandle _fh);
1017  FaceFaceIter ff_end(FaceHandle _fh);
1019  FaceFaceCWIter ff_cwend(FaceHandle _fh);
1021  FaceFaceCCWIter ff_ccwend(FaceHandle _fh);
1023  HalfedgeLoopIter hl_end(HalfedgeHandle _heh);
1025  HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh);
1027  HalfedgeLoopCCWIter hl_ccwend(HalfedgeHandle _heh);
1028 
1030  ConstFaceVertexIter cfv_end(FaceHandle _fh) const;
1032  ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const;
1034  ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const;
1036  ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const;
1038  ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const;
1040  ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const;
1042  ConstFaceEdgeIter cfe_end(FaceHandle _fh) const;
1044  ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const;
1046  ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const;
1048  ConstFaceFaceIter cff_end(FaceHandle _fh) const;
1050  ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const;
1052  ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const;
1054  ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const;
1056  ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const;
1058  ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const;
1060 
1063 
1064  typedef EntityRange<RangeTraitT<
1065  const PolyConnectivity,
1069  typedef EntityRange<RangeTraitT<
1070  const PolyConnectivity,
1074  typedef EntityRange<RangeTraitT<
1075  const PolyConnectivity,
1079  typedef EntityRange<RangeTraitT<
1080  const PolyConnectivity,
1084  typedef EntityRange<RangeTraitT<
1085  const PolyConnectivity,
1089  typedef EntityRange<RangeTraitT<
1090  const PolyConnectivity,
1094  typedef EntityRange<RangeTraitT<
1095  const PolyConnectivity,
1099  typedef EntityRange<RangeTraitT<
1100  const PolyConnectivity,
1104 
1105 
1106  template <typename HandleType>
1108 
1113  ConstVertexRangeSkipping vertices() const;
1114 
1119  ConstVertexRange all_vertices() const;
1120 
1125  ConstHalfedgeRangeSkipping halfedges() const;
1126 
1131  ConstHalfedgeRange all_halfedges() const;
1132 
1137  ConstEdgeRangeSkipping edges() const;
1138 
1143  ConstEdgeRange all_edges() const;
1144 
1149  ConstFaceRangeSkipping faces() const;
1150 
1155  ConstFaceRange all_faces() const;
1156 
1161  template <typename HandleType>
1163 
1168  template <typename HandleType>
1170 
1171 
1182 
1193 
1204 
1209  ConstVertexVertexRange vv_range(VertexHandle _vh) const;
1210 
1215  ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const;
1216 
1222  ConstVertexIHalfedgeRange vih_range(HalfedgeHandle _heh) const;
1223 
1228  ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const;
1229 
1235  ConstVertexOHalfedgeRange voh_range(HalfedgeHandle _heh) const;
1236 
1241  ConstVertexEdgeRange ve_range(VertexHandle _vh) const ;
1242 
1247  ConstVertexFaceRange vf_range(VertexHandle _vh) const;
1248 
1253  ConstFaceVertexRange fv_range(FaceHandle _fh) const;
1254 
1259  ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const;
1260 
1265  ConstFaceEdgeRange fe_range(FaceHandle _fh) const;
1266 
1271  ConstFaceFaceRange ff_range(FaceHandle _fh) const;
1272 
1277  ConstHalfedgeLoopRange hl_range(HalfedgeHandle _heh) const;
1278 
1279 
1284  ConstVertexVertexCWRange vv_cw_range(VertexHandle _vh) const;
1285 
1290  ConstVertexIHalfedgeCWRange vih_cw_range(VertexHandle _vh) const;
1291 
1297  ConstVertexIHalfedgeCWRange vih_cw_range(HalfedgeHandle _heh) const;
1298 
1303  ConstVertexOHalfedgeCWRange voh_cw_range(VertexHandle _vh) const;
1304 
1310  ConstVertexOHalfedgeCWRange voh_cw_range(HalfedgeHandle _heh) const;
1311 
1316  ConstVertexEdgeCWRange ve_cw_range(VertexHandle _vh) const ;
1317 
1322  ConstVertexFaceCWRange vf_cw_range(VertexHandle _vh) const;
1323 
1328  ConstFaceVertexCWRange fv_cw_range(FaceHandle _fh) const;
1329 
1334  ConstFaceHalfedgeCWRange fh_cw_range(FaceHandle _fh) const;
1335 
1340  ConstFaceEdgeCWRange fe_cw_range(FaceHandle _fh) const;
1341 
1346  ConstFaceFaceCWRange ff_cw_range(FaceHandle _fh) const;
1347 
1352  ConstHalfedgeLoopCWRange hl_cw_range(HalfedgeHandle _heh) const;
1353 
1354 
1359  ConstVertexVertexCCWRange vv_ccw_range(VertexHandle _vh) const;
1360 
1365  ConstVertexIHalfedgeCCWRange vih_ccw_range(VertexHandle _vh) const;
1366 
1372  ConstVertexIHalfedgeCCWRange vih_ccw_range(HalfedgeHandle _heh) const;
1373 
1378  ConstVertexOHalfedgeCCWRange voh_ccw_range(VertexHandle _vh) const;
1379 
1385  ConstVertexOHalfedgeCCWRange voh_ccw_range(HalfedgeHandle _heh) const;
1386 
1391  ConstVertexEdgeCCWRange ve_ccw_range(VertexHandle _vh) const ;
1392 
1397  ConstVertexFaceCCWRange vf_ccw_range(VertexHandle _vh) const;
1398 
1403  ConstFaceVertexCCWRange fv_ccw_range(FaceHandle _fh) const;
1404 
1409  ConstFaceHalfedgeCCWRange fh_ccw_range(FaceHandle _fh) const;
1410 
1415  ConstFaceEdgeCCWRange fe_ccw_range(FaceHandle _fh) const;
1416 
1421  ConstFaceFaceCCWRange ff_ccw_range(FaceHandle _fh) const;
1422 
1427  ConstHalfedgeLoopCCWRange hl_ccw_range(HalfedgeHandle _heh) const;
1428 
1430 
1431  //===========================================================================
1434  //===========================================================================
1435 
1443  bool is_boundary(HalfedgeHandle _heh) const
1444  { return ArrayKernel::is_boundary(_heh); }
1445 
1454  bool is_boundary(EdgeHandle _eh) const
1455  {
1456  return (is_boundary(halfedge_handle(_eh, 0)) ||
1457  is_boundary(halfedge_handle(_eh, 1)));
1458  }
1459 
1471  bool is_boundary(VertexHandle _vh) const
1472  {
1473  HalfedgeHandle heh(halfedge_handle(_vh));
1474  return (!(heh.is_valid() && face_handle(heh).is_valid()));
1475  }
1476 
1486  bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
1487 
1498  bool is_manifold(VertexHandle _vh) const;
1499 
1502  // --- misc ---
1503 
1507  void adjust_outgoing_halfedge(VertexHandle _vh);
1508 
1510  SmartHalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
1512  uint valence(VertexHandle _vh) const;
1514  uint valence(FaceHandle _fh) const;
1515 
1516  // --- connectivity operattions
1517 
1532  void collapse(HalfedgeHandle _heh);
1537  bool is_simple_link(EdgeHandle _eh) const;
1542  bool is_simply_connected(FaceHandle _fh) const;
1555  FaceHandle remove_edge(EdgeHandle _eh);
1559  void reinsert_edge(EdgeHandle _eh);
1569  HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
1570 
1583  void split(FaceHandle _fh, VertexHandle _vh);
1584 
1598  void split_copy(FaceHandle _fh, VertexHandle _vh);
1599 
1613  void triangulate(FaceHandle _fh);
1614 
1617  void triangulate();
1618 
1629  void split_edge(EdgeHandle _eh, VertexHandle _vh);
1630 
1642  void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
1643 
1644 
1651  const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
1652  Vertex& deref(VertexHandle _h) { return vertex(_h); }
1653  const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
1654  Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
1655  const Edge& deref(EdgeHandle _h) const { return edge(_h); }
1656  Edge& deref(EdgeHandle _h) { return edge(_h); }
1657  const Face& deref(FaceHandle _h) const { return face(_h); }
1658  Face& deref(FaceHandle _h) { return face(_h); }
1660 
1661 protected:
1663  void collapse_edge(HalfedgeHandle _hh);
1665  void collapse_loop(HalfedgeHandle _hh);
1666 
1667 
1668 
1669 private: // Working storage for add_face()
1670  struct AddFaceEdgeInfo
1671  {
1672  HalfedgeHandle halfedge_handle;
1673  bool is_new;
1674  bool needs_adjust;
1675  };
1676  std::vector<AddFaceEdgeInfo> edgeData_; //
1677  std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
1678 
1679 };
1680 
1681 template <>
1683 {
1684  using Range = ConstVertexRange;
1686 };
1687 
1688 template <>
1690 {
1691  using Range = ConstHalfedgeRange;
1693 };
1694 
1695 template <>
1697 {
1698  using Range = ConstEdgeRange;
1700 };
1701 
1702 template <>
1704 {
1705  using Range = ConstFaceRange;
1707 };
1708 
1709 }//namespace OpenMesh
1710 
1711 #define OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
1712 #include <OpenMesh/Core/Mesh/SmartHandles.hh>
1713 #include <OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh>
1714 #undef OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
1715 
1716 #endif//OPENMESH_POLYCONNECTIVITY_HH
Contains all the mesh ingredients like the polygonal mesh, the triangle mesh, different mesh kernels ...
Definition: MeshItems.hh:59
Mesh kernel using arrays for mesh item storage.
Definition: ArrayKernel.hh:88
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:398
void assign_connectivity(const ArrayKernel &_other)
ArrayKernel uses the default copy constructor and assignment operator, which means that the connectiv...
Definition: ArrayKernel.cc:71
Generic class for iterator ranges.
Definition: PolyConnectivity_inline_impl.hh:92
Definition: CirculatorsT.hh:284
Handle for a vertex entity.
Definition: Handles.hh:121
Handle for a halfedge entity.
Definition: Handles.hh:128
Handle for a edge entity.
Definition: Handles.hh:135
Handle for a face entity.
Definition: Handles.hh:142
Definition: IteratorsT.hh:82
Generic class for vertex/halfedge/edge/face ranges.
Definition: PolyConnectivity_inline_impl.hh:76
Definition: PolyConnectivity.hh:77
Definition: PolyConnectivity.hh:96
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:115
VertexVertexCWIter VVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:414
ConstVertexVertexIter CVVIter
Alias typedef.
Definition: PolyConnectivity.hh:439
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexVertexIter, VertexHandle, VertexHandle, &PolyConnectivity::cvv_begin, &PolyConnectivity::cvv_end > > ConstVertexVertexRange
Definition: PolyConnectivity.hh:1172
EdgeIter edges_end()
End iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:321
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceVertexIter, FaceHandle, VertexHandle, &PolyConnectivity::cfv_begin, &PolyConnectivity::cfv_end > > ConstFaceVertexRange
Definition: PolyConnectivity.hh:1177
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceHalfedgeCWIter, FaceHandle, HalfedgeHandle, &PolyConnectivity::cfh_cwbegin, &PolyConnectivity::cfh_cwend > > ConstFaceHalfedgeCWRange
Definition: PolyConnectivity.hh:1189
EdgeIter ConstEdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:146
EdgeIter EIter
Alias typedef.
Definition: PolyConnectivity.hh:405
VertexVertexIter VVIter
Alias typedef.
Definition: PolyConnectivity.hh:413
Iterators::GenericCirculatorT< VertexEdgeTraits, false > VertexEdgeCCWIter
Enumerates incident edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:258
VertexVertexCCWIter VVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:415
ConstVertexIHalfedgeCCWIter CVIHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:447
HalfedgeLoopCWIter ConstHalfedgeLoopCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:386
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceFaceCWIter, FaceHandle, FaceHandle, &PolyConnectivity::cff_cwbegin, &PolyConnectivity::cff_cwend > > ConstFaceFaceCWRange
Definition: PolyConnectivity.hh:1191
HalfedgeIter halfedges_end()
End iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:309
ConstFaceHalfedgeCCWIter CFHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:459
VertexHandle VHandle
Alias typedef.
Definition: PolyConnectivity.hh:398
ConstFaceVertexCCWIter CFVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:456
PolyConnectivity This
Invalid handle.
Definition: PolyConnectivity.hh:129
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel, &ArrayKernel::has_halfedge_status, &ArrayKernel::n_halfedges > HalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:140
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceHalfedgeCCWIter, FaceHandle, HalfedgeHandle, &PolyConnectivity::cfh_ccwbegin, &PolyConnectivity::cfh_ccwend > > ConstFaceHalfedgeCCWRange
Definition: PolyConnectivity.hh:1200
ConstVertexFaceCCWIter CVFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:453
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexVertexCCWIter, VertexHandle, VertexHandle, &PolyConnectivity::cvv_ccwbegin, &PolyConnectivity::cvv_ccwend > > ConstVertexVertexCCWRange
Definition: PolyConnectivity.hh:1194
VertexIHalfedgeIter ConstVertexIHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:285
VertexFaceCCWIter VFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:427
FaceFaceIter ConstFaceFaceIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:378
FaceEdgeCWIter FECWIter
Alias typedef.
Definition: PolyConnectivity.hh:435
Iterators::GenericCirculatorT< VertexVertexTraits, false > VertexVertexCCWIter
Enumerates 1-ring vertices in a counter clockwise fashion.
Definition: PolyConnectivity.hh:180
VertexIter vertices_sbegin()
Begin iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:340
const Vertex & deref(VertexHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1651
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:346
ElementRange< HandleType >::RangeSkipping elements() const
FaceVertexCCWIter FVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:430
ConstVertexIter CVIter
Alias typedef.
Definition: PolyConnectivity.hh:408
ConstHalfedgeIter CHIter
Alias typedef.
Definition: PolyConnectivity.hh:409
Iterators::GenericCirculatorT< FaceVertexTraits, false > FaceVertexCWIter
Enumerate incident vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:316
HalfedgeIter halfedges_begin()
Begin iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:303
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:122
SmartHalfedgeHandle opposite_halfedge_handle(SmartHalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
Definition: PolyConnectivity_inline_impl.hh:57
FaceFaceCWIter ConstFaceFaceCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:379
ElementRange< HandleType >::Range all_elements() const
FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:374
EdgeIter edges_sbegin()
Begin iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:352
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexVertexCWIter, VertexHandle, VertexHandle, &PolyConnectivity::cvv_cwbegin, &PolyConnectivity::cvv_cwend > > ConstVertexVertexCWRange
Definition: PolyConnectivity.hh:1183
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexOHalfedgeCCWIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvoh_ccwbegin, &PolyConnectivity::cvoh_ccwend > > ConstVertexOHalfedgeCCWRange
Definition: PolyConnectivity.hh:1196
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_sbegin, &PolyConnectivity::edges_end > > ConstEdgeRangeSkipping
Definition: PolyConnectivity.hh:1093
EdgeIter edges_begin()
Begin iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:315
ConstFaceEdgeCCWIter CFECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:462
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstHalfedgeLoopCCWIter, HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_ccwbegin, &PolyConnectivity::chl_ccwend > > ConstHalfedgeLoopCCWRange
Definition: PolyConnectivity.hh:1203
ConstEdgeIter CEIter
Alias typedef.
Definition: PolyConnectivity.hh:410
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceVertexCWIter, FaceHandle, VertexHandle, &PolyConnectivity::cfv_cwbegin, &PolyConnectivity::cfv_cwend > > ConstFaceVertexCWRange
Definition: PolyConnectivity.hh:1188
ConstFaceVertexIter CFVIter
Alias typedef.
Definition: PolyConnectivity.hh:454
VertexVertexCCWIter ConstVertexVertexCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:281
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexIHalfedgeIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvih_begin, &PolyConnectivity::cvih_end > > ConstVertexIHalfedgeRange
Definition: PolyConnectivity.hh:1173
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
Definition: PolyConnectivity.hh:442
Iterators::GenericIteratorT< This, This::VertexHandle, ArrayKernel, &ArrayKernel::has_vertex_status, &ArrayKernel::n_vertices > VertexIter
Linear iterator.
Definition: PolyConnectivity.hh:139
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_begin, &PolyConnectivity::faces_end > > ConstFaceRange
Definition: PolyConnectivity.hh:1098
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceFaceCCWIter, FaceHandle, FaceHandle, &PolyConnectivity::cff_ccwbegin, &PolyConnectivity::cff_ccwend > > ConstFaceFaceCCWRange
Definition: PolyConnectivity.hh:1202
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexIHalfedgeCWIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvih_cwbegin, &PolyConnectivity::cvih_cwend > > ConstVertexIHalfedgeCWRange
Definition: PolyConnectivity.hh:1184
Iterators::GenericCirculatorT_DEPRECATED< VertexOppositeHalfedgeTraits > VertexIHalfedgeIter
Enumerates incoming half edges in a clockwise fashion.
Definition: PolyConnectivity.hh:213
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_begin, &PolyConnectivity::vertices_end > > ConstVertexRange
Definition: PolyConnectivity.hh:1068
FaceFaceCCWIter ConstFaceFaceCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:380
ConstFaceEdgeIter CFEIter
Alias typedef.
Definition: PolyConnectivity.hh:460
PolyConnectivity()
Alias typedef.
Definition: PolyConnectivity.hh:470
VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:283
FaceEdgeCWIter ConstFaceEdgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:376
ConstVertexIHalfedgeCWIter CVIHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:446
ConstFaceHalfedgeIter CFHIter
Alias typedef.
Definition: PolyConnectivity.hh:457
ConstFaceVertexCWIter CFVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:455
VertexFaceIter VFIter
Alias typedef.
Definition: PolyConnectivity.hh:425
Iterators::GenericCirculatorT_DEPRECATED< VertexVertexTraits > VertexVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:174
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexOHalfedgeCWIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvoh_cwbegin, &PolyConnectivity::cvoh_cwend > > ConstVertexOHalfedgeCWRange
Definition: PolyConnectivity.hh:1185
HalfedgeLoopCCWIter ConstHalfedgeLoopCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:387
ConstVertexOHalfedgeCCWIter CVOHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:444
HalfedgeIter HIter
Alias typedef.
Definition: PolyConnectivity.hh:404
VertexEdgeIter ConstVertexEdgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:291
Iterators::GenericCirculatorT_DEPRECATED< FaceHalfedgeTraits > FaceHalfedgeIter
Enumerate incident half edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:321
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceEdgeIter, FaceHandle, EdgeHandle, &PolyConnectivity::cfe_begin, &PolyConnectivity::cfe_end > > ConstFaceEdgeRange
Definition: PolyConnectivity.hh:1179
Iterators::GenericCirculatorT_DEPRECATED< VertexHalfedgeTraits > VertexOHalfedgeIter
Enumerates outgoing half edges in a clockwise fashion.
Definition: PolyConnectivity.hh:194
HalfedgeLoopIter ConstHalfedgeLoopIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:385
HalfedgeHandle HHandle
Alias typedef.
Definition: PolyConnectivity.hh:399
static bool is_triangles()
Alias typedef.
Definition: PolyConnectivity.hh:473
ConstFaceFaceCWIter CFFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:464
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstHalfedgeLoopIter, HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_begin, &PolyConnectivity::chl_end > > ConstHalfedgeLoopRange
Definition: PolyConnectivity.hh:1181
VertexIHalfedgeIter VIHIter
Alias typedef.
Definition: PolyConnectivity.hh:419
VertexFaceIter ConstVertexFaceIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:288
VertexIter VIter
Alias typedef.
Definition: PolyConnectivity.hh:403
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexEdgeCWIter, VertexHandle, EdgeHandle, &PolyConnectivity::cve_cwbegin, &PolyConnectivity::cve_cwend > > ConstVertexEdgeCWRange
Definition: PolyConnectivity.hh:1186
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexEdgeCCWIter, VertexHandle, EdgeHandle, &PolyConnectivity::cve_ccwbegin, &PolyConnectivity::cve_ccwend > > ConstVertexEdgeCCWRange
Definition: PolyConnectivity.hh:1197
VertexIter ConstVertexIter
Linear iterator.
Definition: PolyConnectivity.hh:144
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel, &ArrayKernel::has_face_status, &ArrayKernel::n_faces > FaceIter
Linear iterator.
Definition: PolyConnectivity.hh:142
Iterators::GenericCirculatorT_DEPRECATED< VertexEdgeTraits > VertexEdgeIter
Enumerates incident edges in a clockwise fashion.
Definition: PolyConnectivity.hh:253
FaceVertexIter ConstFaceVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:369
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceEdgeCWIter, FaceHandle, EdgeHandle, &PolyConnectivity::cfe_cwbegin, &PolyConnectivity::cfe_cwend > > ConstFaceEdgeCWRange
Definition: PolyConnectivity.hh:1190
Edge & deref(EdgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1656
VertexIHalfedgeCCWIter ConstVertexIHalfedgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:287
ConstVertexEdgeCWIter CVECWIter
Alias typedef.
Definition: PolyConnectivity.hh:449
VertexFaceCWIter ConstVertexFaceCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:289
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexEdgeIter, VertexHandle, EdgeHandle, &PolyConnectivity::cve_begin, &PolyConnectivity::cve_end > > ConstVertexEdgeRange
Definition: PolyConnectivity.hh:1175
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1654
FaceEdgeCCWIter FECWWIter
Alias typedef.
Definition: PolyConnectivity.hh:436
FaceHalfedgeIter FHIter
Alias typedef.
Definition: PolyConnectivity.hh:431
const Edge & deref(EdgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1655
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
Definition: PolyConnectivity.hh:1454
FaceIter faces_sbegin()
Begin iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:358
virtual ~PolyConnectivity()
Alias typedef.
Definition: PolyConnectivity.hh:471
Iterators::GenericCirculatorT< VertexHalfedgeTraits, false > VertexOHalfedgeCCWIter
Enumerates outgoing half edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:200
Iterators::GenericCirculatorT_DEPRECATED< VertexFaceTraits > VertexFaceIter
Enumerates incident faces in a clockwise fashion.
Definition: PolyConnectivity.hh:233
VertexEdgeCWIter VECWIter
Alias typedef.
Definition: PolyConnectivity.hh:423
static const FaceHandle InvalidFaceHandle
Invalid handle.
Definition: PolyConnectivity.hh:126
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel, &ArrayKernel::has_edge_status, &ArrayKernel::n_edges > EdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:141
ConstVertexEdgeCCWIter CVECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:450
ConstVertexVertexCCWIter CVVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:441
FaceHalfedgeCCWIter FHCWWIter
Alias typedef.
Definition: PolyConnectivity.hh:433
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
Definition: PolyConnectivity.hh:1471
Iterators::GenericCirculatorT< FaceHalfedgeTraits, true > HalfedgeLoopCCWIter
Identical to FaceHalfedgeIter.
Definition: PolyConnectivity.hh:277
Iterators::GenericCirculatorT< FaceFaceTraits, true > FaceFaceCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:362
FaceEdgeCCWIter ConstFaceEdgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:377
const Face & deref(FaceHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1657
ConstVertexVertexCWIter CVVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:440
Iterators::GenericCirculatorT_DEPRECATED< FaceHalfedgeTraits > HalfedgeLoopIter
Identical to FaceHalfedgeIter.
Definition: PolyConnectivity.hh:272
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_begin, &PolyConnectivity::edges_end > > ConstEdgeRange
Definition: PolyConnectivity.hh:1088
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceEdgeCCWIter, FaceHandle, EdgeHandle, &PolyConnectivity::cfe_ccwbegin, &PolyConnectivity::cfe_ccwend > > ConstFaceEdgeCCWRange
Definition: PolyConnectivity.hh:1201
VertexOHalfedgeCCWIter ConstVertexOHalfedgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:284
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_sbegin, &PolyConnectivity::halfedges_end > > ConstHalfedgeRangeSkipping
Definition: PolyConnectivity.hh:1083
ConstVertexOHalfedgeCWIter CVOHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:443
FaceHalfedgeIter ConstFaceHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:372
VertexOHalfedgeCWIter VOHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:417
Iterators::GenericCirculatorT_DEPRECATED< FaceVertexTraits > FaceVertexIter
Enumerate incident vertices in a counter clockwise fashion.
Definition: PolyConnectivity.hh:310
FaceVertexCWIter FVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:429
VertexIter vertices_begin()
Begin iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:291
ConstFaceIter CFIter
Alias typedef.
Definition: PolyConnectivity.hh:411
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexFaceCWIter, VertexHandle, FaceHandle, &PolyConnectivity::cvf_cwbegin, &PolyConnectivity::cvf_cwend > > ConstVertexFaceCWRange
Definition: PolyConnectivity.hh:1187
Iterators::GenericCirculatorT< VertexFaceTraits, true > VertexFaceCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:234
HalfedgeIter ConstHalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:145
Iterators::GenericCirculatorT< VertexOppositeHalfedgeTraits, false > VertexIHalfedgeCCWIter
Enumerates incoming half edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:219
FaceVertexCCWIter ConstFaceVertexCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:371
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexOHalfedgeIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvoh_begin, &PolyConnectivity::cvoh_end > > ConstVertexOHalfedgeRange
Definition: PolyConnectivity.hh:1174
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:124
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_sbegin, &PolyConnectivity::vertices_end > > ConstVertexRangeSkipping
Definition: PolyConnectivity.hh:1073
Iterators::GenericCirculatorT< VertexEdgeTraits, true > VertexEdgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:254
FaceEdgeIter FEIter
Alias typedef.
Definition: PolyConnectivity.hh:434
FaceEdgeIter ConstFaceEdgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:375
ConstVertexEdgeIter CVEIter
Alias typedef.
Definition: PolyConnectivity.hh:448
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1653
Iterators::GenericCirculatorT< FaceHalfedgeTraits, true > FaceHalfedgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:322
Iterators::GenericCirculatorT< VertexOppositeHalfedgeTraits, true > VertexIHalfedgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:214
FaceIter faces_end()
End iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:333
void assign_connectivity(const PolyConnectivity &_other)
assign_connectivity() method.
Definition: PolyConnectivity.hh:478
VertexOHalfedgeCCWIter VOHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:418
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexFaceIter, VertexHandle, FaceHandle, &PolyConnectivity::cvf_begin, &PolyConnectivity::cvf_end > > ConstVertexFaceRange
Definition: PolyConnectivity.hh:1176
EdgeHandle EHandle
Alias typedef.
Definition: PolyConnectivity.hh:400
FaceHandle FHandle
Alias typedef.
Definition: PolyConnectivity.hh:401
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexIHalfedgeCCWIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvih_ccwbegin, &PolyConnectivity::cvih_ccwend > > ConstVertexIHalfedgeCCWRange
Definition: PolyConnectivity.hh:1195
Iterators::GenericCirculatorT< FaceVertexTraits, true > FaceVertexCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:311
ConstFaceEdgeCWIter CFECWIter
Alias typedef.
Definition: PolyConnectivity.hh:461
ConstFaceFaceIter CFFIter
Alias typedef.
Definition: PolyConnectivity.hh:463
VertexFaceCCWIter ConstVertexFaceCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:290
VertexOHalfedgeIter ConstVertexOHalfedgeIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:282
VertexIHalfedgeCWIter VIHICWter
Alias typedef.
Definition: PolyConnectivity.hh:420
VertexEdgeIter VEIter
Alias typedef.
Definition: PolyConnectivity.hh:422
FaceIter ConstFaceIter
Linear iterator.
Definition: PolyConnectivity.hh:147
Face & deref(FaceHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1658
VertexOHalfedgeIter VOHIter
Alias typedef.
Definition: PolyConnectivity.hh:416
VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:286
VertexEdgeCWIter ConstVertexEdgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:292
Iterators::GenericCirculatorT< VertexVertexTraits, true > VertexVertexCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:175
ConstVertexFaceCWIter CVFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:452
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
Definition: PolyConnectivity.hh:1443
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_begin, &PolyConnectivity::halfedges_end > > ConstHalfedgeRange
Definition: PolyConnectivity.hh:1078
Iterators::GenericCirculatorT< FaceHalfedgeTraits, false > FaceHalfedgeCWIter
Enumerate incident half edges in a clockwise fashion.
Definition: PolyConnectivity.hh:327
VertexVertexCWIter ConstVertexVertexCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:280
Vertex & deref(VertexHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1652
VertexEdgeCCWIter ConstVertexEdgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:293
VertexVertexIter ConstVertexVertexIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:279
VertexFaceCWIter VFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:426
Iterators::GenericCirculatorT_DEPRECATED< FaceFaceTraits > FaceFaceIter
Enumerate adjacent faces in a counter clockwise fashion.
Definition: PolyConnectivity.hh:361
FaceHalfedgeCWIter ConstFaceHalfedgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:373
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceHalfedgeIter, FaceHandle, HalfedgeHandle, &PolyConnectivity::cfh_begin, &PolyConnectivity::cfh_end > > ConstFaceHalfedgeRange
Definition: PolyConnectivity.hh:1178
Iterators::GenericCirculatorT< FaceHalfedgeTraits, false > HalfedgeLoopCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:273
Iterators::GenericCirculatorT< FaceFaceTraits, false > FaceFaceCWIter
Enumerate adjacent faces in a clockwise fashion.
Definition: PolyConnectivity.hh:367
Iterators::GenericCirculatorT_DEPRECATED< FaceEdgeTraits > FaceEdgeIter
Enumerate incident edges in a counter clockwise fashion.
Definition: PolyConnectivity.hh:341
VertexIter vertices_end()
End iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:297
Iterators::GenericCirculatorT< FaceEdgeTraits, false > FaceEdgeCWIter
Enumerate incident edges in a clockwise fashion.
Definition: PolyConnectivity.hh:347
Iterators::GenericCirculatorT< VertexFaceTraits, false > VertexFaceCCWIter
Enumerates incident faces in a counter clockwise fashion.
Definition: PolyConnectivity.hh:239
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceFaceIter, FaceHandle, FaceHandle, &PolyConnectivity::cff_begin, &PolyConnectivity::cff_end > > ConstFaceFaceRange
Definition: PolyConnectivity.hh:1180
ConstFaceHalfedgeCWIter CFHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:458
FaceIter faces_begin()
Begin iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:327
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstHalfedgeLoopCWIter, HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_cwbegin, &PolyConnectivity::chl_cwend > > ConstHalfedgeLoopCWRange
Definition: PolyConnectivity.hh:1192
FaceVertexIter FVIter
Alias typedef.
Definition: PolyConnectivity.hh:428
FaceFaceIter FFIter
Alias typedef.
Definition: PolyConnectivity.hh:437
FaceHalfedgeCWIter FHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:432
Iterators::GenericCirculatorT< FaceEdgeTraits, true > FaceEdgeCCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:342
ConstFaceFaceCCWIter CFFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:465
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexFaceCCWIter, VertexHandle, FaceHandle, &PolyConnectivity::cvf_ccwbegin, &PolyConnectivity::cvf_ccwend > > ConstVertexFaceCCWRange
Definition: PolyConnectivity.hh:1198
VertexIHalfedgeCCWIter VIHICCWter
Alias typedef.
Definition: PolyConnectivity.hh:421
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_sbegin, &PolyConnectivity::faces_end > > ConstFaceRangeSkipping
Definition: PolyConnectivity.hh:1103
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
Definition: PolyConnectivity.hh:445
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceVertexCCWIter, FaceHandle, VertexHandle, &PolyConnectivity::cfv_ccwbegin, &PolyConnectivity::cfv_ccwend > > ConstFaceVertexCCWRange
Definition: PolyConnectivity.hh:1199
VertexEdgeCCWIter VECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:424
FaceVertexCWIter ConstFaceVertexCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:370
FaceIter FIter
Alias typedef.
Definition: PolyConnectivity.hh:406
Iterators::GenericCirculatorT< VertexHalfedgeTraits, true > VertexOHalfedgeCWIter
Enumerates 1-ring vertices in a clockwise fashion.
Definition: PolyConnectivity.hh:195
ConstVertexFaceIter CVFIter
Alias typedef.
Definition: PolyConnectivity.hh:451
Definition: PolyConnectivity.hh:163
Definition: PolyConnectivity.hh:184
Definition: PolyConnectivity.hh:223
Definition: PolyConnectivity.hh:243
Definition: PolyConnectivity.hh:262
Definition: PolyConnectivity.hh:300
Definition: PolyConnectivity.hh:331
Definition: PolyConnectivity.hh:351
Definition: PolyConnectivity.hh:1107
Smart version of VertexHandle contains a pointer to the corresponding mesh and allows easier access t...
Definition: SmartHandles.hh:110
Definition: SmartHandles.hh:170
Definition: SmartHandles.hh:197
Definition: SmartHandles.hh:219

Project OpenMesh, ©  Visual Computing Institute, RWTH Aachen. Documentation generated using doxygen .