Developer Documentation
PolyConnectivity.hh
1 /* ========================================================================= *
2  * *
3  * OpenMesh *
4  * Copyright (c) 2001-2015, 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/IteratorsT.hh>
49 #include <OpenMesh/Core/Mesh/CirculatorsT.hh>
50 
51 namespace OpenMesh
52 {
53 
56 class OPENMESHDLLEXPORT PolyConnectivity : public ArrayKernel
57 {
58 public:
60 
61  static const VertexHandle InvalidVertexHandle;
70 
71  typedef PolyConnectivity This;
72 
73  //--- iterators ---
74 
85 
86  typedef VertexIter ConstVertexIter;
87  typedef HalfedgeIter ConstHalfedgeIter;
88  typedef EdgeIter ConstEdgeIter;
89  typedef FaceIter ConstFaceIter;
91 
92  //--- circulators ---
93 
99 
100  /*
101  * Vertex-centered circulators
102  */
103 
107  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::VertexHandle,
110  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::VertexHandle,
112 
116  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::VertexHandle,
119 
123  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::HalfedgeHandle,
126  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
128 
132  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
135 
139  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::HalfedgeHandle,
142  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
144 
148  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
151 
155  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::FaceHandle,
158  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::FaceHandle,
160 
164  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::FaceHandle,
167 
171  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::EdgeHandle,
174  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::EdgeHandle,
179  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::EdgeHandle,
182 
186  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::HalfedgeHandle,
187  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle>
189  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
190  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle, false> HalfedgeLoopCWIter;
194  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
195  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle>
197 
199  typedef VertexVertexCWIter ConstVertexVertexCWIter;
202  typedef VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter;
205  typedef VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter;
208  typedef VertexFaceCWIter ConstVertexFaceCWIter;
211  typedef VertexEdgeCWIter ConstVertexEdgeCWIter;
213 
214  /*
215  * Face-centered circulators
216  */
217 
221  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::VertexHandle,
222  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle>
224  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::VertexHandle,
225  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle> FaceVertexCCWIter;
226 
230  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::VertexHandle,
231  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle, false>
233 
237  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::HalfedgeHandle,
238  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle>
240  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
241  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle> FaceHalfedgeCCWIter;
242 
246  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
247  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle, false>
249 
253  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::EdgeHandle,
254  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle>
256  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::EdgeHandle,
257  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle> FaceEdgeCCWIter;
258 
262  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::EdgeHandle,
263  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle, false>
265 
269  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::FaceHandle,
272  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::FaceHandle,
274 
278  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::FaceHandle,
281 
284  typedef FaceVertexCCWIter ConstFaceVertexCCWIter;
287  typedef FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter;
290  typedef FaceEdgeCCWIter ConstFaceEdgeCCWIter;
293  typedef FaceFaceCCWIter ConstFaceFaceCCWIter;
294 
295  /*
296  * Halfedge circulator
297  */
299  typedef HalfedgeLoopCWIter ConstHalfedgeLoopCWIter;
301 
303 
304  // --- shortcuts
305 
310  typedef VertexHandle VHandle;
315 
316  typedef VertexIter VIter;
317  typedef HalfedgeIter HIter;
318  typedef EdgeIter EIter;
319  typedef FaceIter FIter;
320 
321  typedef ConstVertexIter CVIter;
322  typedef ConstHalfedgeIter CHIter;
323  typedef ConstEdgeIter CEIter;
324  typedef ConstFaceIter CFIter;
325 
327  typedef VertexVertexCWIter VVCWIter;
330  typedef VertexOHalfedgeCWIter VOHCWIter;
333  typedef VertexIHalfedgeCWIter VIHICWter;
336  typedef VertexEdgeCWIter VECWIter;
339  typedef VertexFaceCWIter VFCWIter;
343  typedef FaceVertexCCWIter FVCCWIter;
346  typedef FaceHalfedgeCCWIter FHCWWIter;
349  typedef FaceEdgeCCWIter FECWWIter;
351 
352  typedef ConstVertexVertexIter CVVIter;
353  typedef ConstVertexVertexCWIter CVVCWIter;
354  typedef ConstVertexVertexCCWIter CVVCCWIter;
355  typedef ConstVertexOHalfedgeIter CVOHIter;
356  typedef ConstVertexOHalfedgeCWIter CVOHCWIter;
357  typedef ConstVertexOHalfedgeCCWIter CVOHCCWIter;
358  typedef ConstVertexIHalfedgeIter CVIHIter;
359  typedef ConstVertexIHalfedgeCWIter CVIHCWIter;
360  typedef ConstVertexIHalfedgeCCWIter CVIHCCWIter;
361  typedef ConstVertexEdgeIter CVEIter;
362  typedef ConstVertexEdgeCWIter CVECWIter;
363  typedef ConstVertexEdgeCCWIter CVECCWIter;
364  typedef ConstVertexFaceIter CVFIter;
365  typedef ConstVertexFaceCWIter CVFCWIter;
366  typedef ConstVertexFaceCCWIter CVFCCWIter;
367  typedef ConstFaceVertexIter CFVIter;
368  typedef ConstFaceVertexCWIter CFVCWIter;
369  typedef ConstFaceVertexCCWIter CFVCCWIter;
370  typedef ConstFaceHalfedgeIter CFHIter;
371  typedef ConstFaceHalfedgeCWIter CFHCWIter;
372  typedef ConstFaceHalfedgeCCWIter CFHCCWIter;
373  typedef ConstFaceEdgeIter CFEIter;
374  typedef ConstFaceEdgeCWIter CFECWIter;
375  typedef ConstFaceEdgeCCWIter CFECCWIter;
376  typedef ConstFaceFaceIter CFFIter;
377  typedef ConstFaceFaceCWIter CFFCWIter;
378  typedef ConstFaceFaceCCWIter CFFCCWIter;
380 
381 public:
382 
383  PolyConnectivity() {}
384  virtual ~PolyConnectivity() {}
385 
386  inline static bool is_triangles()
387  { return false; }
388 
391  inline void assign_connectivity(const PolyConnectivity& _other)
393 
397 
400  { return new_vertex(); }
401 
409  FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
410 
411 
421  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
422 
433  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
434 
443  FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
444 
446 
448 
449 
454  bool is_collapse_ok(HalfedgeHandle _he);
455 
456 
462  void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
463 
472  void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
473 
484  void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
485 
487 
491 
493  VertexIter vertices_begin();
495  ConstVertexIter vertices_begin() const;
497  VertexIter vertices_end();
499  ConstVertexIter vertices_end() const;
500 
502  HalfedgeIter halfedges_begin();
504  ConstHalfedgeIter halfedges_begin() const;
506  HalfedgeIter halfedges_end();
508  ConstHalfedgeIter halfedges_end() const;
509 
511  EdgeIter edges_begin();
513  ConstEdgeIter edges_begin() const;
515  EdgeIter edges_end();
517  ConstEdgeIter edges_end() const;
518 
520  FaceIter faces_begin();
522  ConstFaceIter faces_begin() const;
524  FaceIter faces_end();
526  ConstFaceIter faces_end() const;
528 
529 
533 
535  VertexIter vertices_sbegin()
536  { return VertexIter(*this, VertexHandle(0), true); }
538  ConstVertexIter vertices_sbegin() const
539  { return ConstVertexIter(*this, VertexHandle(0), true); }
540 
542  HalfedgeIter halfedges_sbegin()
543  { return HalfedgeIter(*this, HalfedgeHandle(0), true); }
545  ConstHalfedgeIter halfedges_sbegin() const
546  { return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); }
547 
549  EdgeIter edges_sbegin()
550  { return EdgeIter(*this, EdgeHandle(0), true); }
552  ConstEdgeIter edges_sbegin() const
553  { return ConstEdgeIter(*this, EdgeHandle(0), true); }
554 
556  FaceIter faces_sbegin()
557  { return FaceIter(*this, FaceHandle(0), true); }
559  ConstFaceIter faces_sbegin() const
560  { return ConstFaceIter(*this, FaceHandle(0), true); }
561 
563 
564  //--- circulators ---
565 
569 
572  { return VertexVertexIter(*this, _vh); }
574  VertexVertexCWIter vv_cwiter(VertexHandle _vh)
575  { return VertexVertexCWIter(*this, _vh); }
578  { return VertexVertexCCWIter(*this, _vh); }
581  { return VertexIHalfedgeIter(*this, _vh); }
583  VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh)
584  { return VertexIHalfedgeCWIter(*this, _vh); }
587  { return VertexIHalfedgeCCWIter(*this, _vh); }
590  { return VertexOHalfedgeIter(*this, _vh); }
592  VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh)
593  { return VertexOHalfedgeCWIter(*this, _vh); }
596  { return VertexOHalfedgeCCWIter(*this, _vh); }
599  { return VertexEdgeIter(*this, _vh); }
601  VertexEdgeCWIter ve_cwiter(VertexHandle _vh)
602  { return VertexEdgeCWIter(*this, _vh); }
605  { return VertexEdgeCCWIter(*this, _vh); }
608  { return VertexFaceIter(*this, _vh); }
610  VertexFaceCWIter vf_cwiter(VertexHandle _vh)
611  { return VertexFaceCWIter(*this, _vh); }
614  { return VertexFaceCCWIter(*this, _vh); }
615 
617  ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
618  { return ConstVertexVertexIter(*this, _vh); }
620  ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const
621  { return ConstVertexVertexCWIter(*this, _vh); }
623  ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const
624  { return ConstVertexVertexCCWIter(*this, _vh); }
626  ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
627  { return ConstVertexIHalfedgeIter(*this, _vh); }
629  ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const
630  { return ConstVertexIHalfedgeCWIter(*this, _vh); }
632  ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const
633  { return ConstVertexIHalfedgeCCWIter(*this, _vh); }
635  ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
636  { return ConstVertexOHalfedgeIter(*this, _vh); }
638  ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const
639  { return ConstVertexOHalfedgeCWIter(*this, _vh); }
641  ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const
642  { return ConstVertexOHalfedgeCCWIter(*this, _vh); }
644  ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
645  { return ConstVertexEdgeIter(*this, _vh); }
647  ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const
648  { return ConstVertexEdgeCWIter(*this, _vh); }
650  ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const
651  { return ConstVertexEdgeCCWIter(*this, _vh); }
653  ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
654  { return ConstVertexFaceIter(*this, _vh); }
656  ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const
657  { return ConstVertexFaceCWIter(*this, _vh); }
659  ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const
660  { return ConstVertexFaceCCWIter(*this, _vh); }
661 
664  { return FaceVertexIter(*this, _fh); }
667  { return FaceVertexCWIter(*this, _fh); }
669  FaceVertexCCWIter fv_ccwiter(FaceHandle _fh)
670  { return FaceVertexCCWIter(*this, _fh); }
673  { return FaceHalfedgeIter(*this, _fh); }
676  { return FaceHalfedgeCWIter(*this, _fh); }
678  FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh)
679  { return FaceHalfedgeCCWIter(*this, _fh); }
682  { return FaceEdgeIter(*this, _fh); }
685  { return FaceEdgeCWIter(*this, _fh); }
687  FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh)
688  { return FaceEdgeCCWIter(*this, _fh); }
691  { return FaceFaceIter(*this, _fh); }
694  { return FaceFaceCWIter(*this, _fh); }
696  FaceFaceCCWIter ff_ccwiter(FaceHandle _fh)
697  { return FaceFaceCCWIter(*this, _fh); }
698 
700  ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
701  { return ConstFaceVertexIter(*this, _fh); }
703  ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const
704  { return ConstFaceVertexCWIter(*this, _fh); }
706  ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const
707  { return ConstFaceVertexCCWIter(*this, _fh); }
709  ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
710  { return ConstFaceHalfedgeIter(*this, _fh); }
712  ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const
713  { return ConstFaceHalfedgeCWIter(*this, _fh); }
715  ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const
716  { return ConstFaceHalfedgeCCWIter(*this, _fh); }
718  ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
719  { return ConstFaceEdgeIter(*this, _fh); }
721  ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const
722  { return ConstFaceEdgeCWIter(*this, _fh); }
724  ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const
725  { return ConstFaceEdgeCCWIter(*this, _fh); }
727  ConstFaceFaceIter cff_iter(FaceHandle _fh) const
728  { return ConstFaceFaceIter(*this, _fh); }
730  ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const
731  { return ConstFaceFaceCWIter(*this, _fh); }
733  ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const
734  { return ConstFaceFaceCCWIter(*this, _fh); }
735 
736  // 'begin' circulators
737 
740  { return VertexVertexIter(*this, _vh); }
742  VertexVertexCWIter vv_cwbegin(VertexHandle _vh)
743  { return VertexVertexCWIter(*this, _vh); }
746  { return VertexVertexCCWIter(*this, _vh); }
749  { return VertexIHalfedgeIter(*this, _vh); }
751  VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh)
752  { return VertexIHalfedgeCWIter(*this, _vh); }
755  { return VertexIHalfedgeCCWIter(*this, _vh); }
758  { return VertexOHalfedgeIter(*this, _vh); }
760  VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh)
761  { return VertexOHalfedgeCWIter(*this, _vh); }
764  { return VertexOHalfedgeCCWIter(*this, _vh); }
767  { return VertexEdgeIter(*this, _vh); }
769  VertexEdgeCWIter ve_cwbegin(VertexHandle _vh)
770  { return VertexEdgeCWIter(*this, _vh); }
773  { return VertexEdgeCCWIter(*this, _vh); }
776  { return VertexFaceIter(*this, _vh); }
778  VertexFaceCWIter vf_cwbegin(VertexHandle _vh)
779  { return VertexFaceCWIter(*this, _vh); }
782  { return VertexFaceCCWIter(*this, _vh); }
783 
784 
786  ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
787  { return ConstVertexVertexIter(*this, _vh); }
789  ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const
790  { return ConstVertexVertexCWIter(*this, _vh); }
792  ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const
793  { return ConstVertexVertexCCWIter(*this, _vh); }
795  ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
796  { return ConstVertexIHalfedgeIter(*this, _vh); }
798  ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const
799  { return ConstVertexIHalfedgeCWIter(*this, _vh); }
801  ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const
802  { return ConstVertexIHalfedgeCCWIter(*this, _vh); }
804  ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
805  { return ConstVertexOHalfedgeIter(*this, _vh); }
807  ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const
808  { return ConstVertexOHalfedgeCWIter(*this, _vh); }
810  ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const
811  { return ConstVertexOHalfedgeCCWIter(*this, _vh); }
813  ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
814  { return ConstVertexEdgeIter(*this, _vh); }
816  ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const
817  { return ConstVertexEdgeCWIter(*this, _vh); }
819  ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const
820  { return ConstVertexEdgeCCWIter(*this, _vh); }
822  ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
823  { return ConstVertexFaceIter(*this, _vh); }
825  ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const
826  { return ConstVertexFaceCWIter(*this, _vh); }
828  ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const
829  { return ConstVertexFaceCCWIter(*this, _vh); }
830 
833  { return FaceVertexIter(*this, _fh); }
836  { return FaceVertexCWIter(*this, _fh); }
838  FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh)
839  { return FaceVertexCCWIter(*this, _fh); }
842  { return FaceHalfedgeIter(*this, _fh); }
845  { return FaceHalfedgeCWIter(*this, _fh); }
847  FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh)
848  { return FaceHalfedgeCCWIter(*this, _fh); }
851  { return FaceEdgeIter(*this, _fh); }
854  { return FaceEdgeCWIter(*this, _fh); }
856  FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh)
857  { return FaceEdgeCCWIter(*this, _fh); }
860  { return FaceFaceIter(*this, _fh); }
863  { return FaceFaceCWIter(*this, _fh); }
865  FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh)
866  { return FaceFaceCCWIter(*this, _fh); }
869  { return HalfedgeLoopIter(*this, _heh); }
871  HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh)
872  { return HalfedgeLoopCWIter(*this, _heh); }
875  { return HalfedgeLoopCCWIter(*this, _heh); }
876 
878  ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
879  { return ConstFaceVertexIter(*this, _fh); }
881  ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const
882  { return ConstFaceVertexCWIter(*this, _fh); }
884  ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const
885  { return ConstFaceVertexCCWIter(*this, _fh); }
887  ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
888  { return ConstFaceHalfedgeIter(*this, _fh); }
890  ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const
891  { return ConstFaceHalfedgeCWIter(*this, _fh); }
893  ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const
894  { return ConstFaceHalfedgeCCWIter(*this, _fh); }
896  ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
897  { return ConstFaceEdgeIter(*this, _fh); }
899  ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const
900  { return ConstFaceEdgeCWIter(*this, _fh); }
902  ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const
903  { return ConstFaceEdgeCCWIter(*this, _fh); }
905  ConstFaceFaceIter cff_begin(FaceHandle _fh) const
906  { return ConstFaceFaceIter(*this, _fh); }
908  ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const
909  { return ConstFaceFaceCWIter(*this, _fh); }
911  ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const
912  { return ConstFaceFaceCCWIter(*this, _fh); }
914  ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
915  { return ConstHalfedgeLoopIter(*this, _heh); }
917  ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const
918  { return ConstHalfedgeLoopCWIter(*this, _heh); }
920  ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const
921  { return ConstHalfedgeLoopCCWIter(*this, _heh); }
922 
923  // 'end' circulators
924 
927  { return VertexVertexIter(*this, _vh, true); }
929  VertexVertexCWIter vv_cwend(VertexHandle _vh)
930  { return VertexVertexCWIter(*this, _vh, true); }
933  { return VertexVertexCCWIter(*this, _vh, true); }
936  { return VertexIHalfedgeIter(*this, _vh, true); }
938  VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh)
939  { return VertexIHalfedgeCWIter(*this, _vh, true); }
942  { return VertexIHalfedgeCCWIter(*this, _vh, true); }
945  { return VertexOHalfedgeIter(*this, _vh, true); }
947  VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh)
948  { return VertexOHalfedgeCWIter(*this, _vh, true); }
951  { return VertexOHalfedgeCCWIter(*this, _vh, true); }
954  { return VertexEdgeIter(*this, _vh, true); }
956  VertexEdgeCWIter ve_cwend(VertexHandle _vh)
957  { return VertexEdgeCWIter(*this, _vh, true); }
960  { return VertexEdgeCCWIter(*this, _vh, true); }
963  { return VertexFaceIter(*this, _vh, true); }
965  VertexFaceCWIter vf_cwend(VertexHandle _vh)
966  { return VertexFaceCWIter(*this, _vh, true); }
969  { return VertexFaceCCWIter(*this, _vh, true); }
970 
972  ConstVertexVertexIter cvv_end(VertexHandle _vh) const
973  { return ConstVertexVertexIter(*this, _vh, true); }
975  ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const
976  { return ConstVertexVertexCWIter(*this, _vh, true); }
978  ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const
979  { return ConstVertexVertexCCWIter(*this, _vh, true); }
981  ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
982  { return ConstVertexIHalfedgeIter(*this, _vh, true); }
984  ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const
985  { return ConstVertexIHalfedgeCWIter(*this, _vh, true); }
987  ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const
988  { return ConstVertexIHalfedgeCCWIter(*this, _vh, true); }
990  ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
991  { return ConstVertexOHalfedgeIter(*this, _vh, true); }
993  ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const
994  { return ConstVertexOHalfedgeCWIter(*this, _vh, true); }
996  ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const
997  { return ConstVertexOHalfedgeCCWIter(*this, _vh, true); }
999  ConstVertexEdgeIter cve_end(VertexHandle _vh) const
1000  { return ConstVertexEdgeIter(*this, _vh, true); }
1002  ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const
1003  { return ConstVertexEdgeCWIter(*this, _vh, true); }
1005  ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const
1006  { return ConstVertexEdgeCCWIter(*this, _vh, true); }
1008  ConstVertexFaceIter cvf_end(VertexHandle _vh) const
1009  { return ConstVertexFaceIter(*this, _vh, true); }
1011  ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const
1012  { return ConstVertexFaceCWIter(*this, _vh, true); }
1014  ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const
1015  { return ConstVertexFaceCCWIter(*this, _vh, true); }
1016 
1019  { return FaceVertexIter(*this, _fh, true); }
1022  { return FaceVertexCWIter(*this, _fh, true); }
1024  FaceVertexCCWIter fv_ccwend(FaceHandle _fh)
1025  { return FaceVertexCCWIter(*this, _fh, true); }
1028  { return FaceHalfedgeIter(*this, _fh, true); }
1031  { return FaceHalfedgeCWIter(*this, _fh, true); }
1033  FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh)
1034  { return FaceHalfedgeCCWIter(*this, _fh, true); }
1037  { return FaceEdgeIter(*this, _fh, true); }
1040  { return FaceEdgeCWIter(*this, _fh, true); }
1042  FaceEdgeCCWIter fe_ccwend(FaceHandle _fh)
1043  { return FaceEdgeCCWIter(*this, _fh, true); }
1046  { return FaceFaceIter(*this, _fh, true); }
1049  { return FaceFaceCWIter(*this, _fh, true); }
1051  FaceFaceCCWIter ff_ccwend(FaceHandle _fh)
1052  { return FaceFaceCCWIter(*this, _fh, true); }
1055  { return HalfedgeLoopIter(*this, _heh, true); }
1057  HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh)
1058  { return HalfedgeLoopCWIter(*this, _heh, true); }
1061  { return HalfedgeLoopCCWIter(*this, _heh, true); }
1062 
1064  ConstFaceVertexIter cfv_end(FaceHandle _fh) const
1065  { return ConstFaceVertexIter(*this, _fh, true); }
1067  ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const
1068  { return ConstFaceVertexCWIter(*this, _fh, true); }
1070  ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const
1071  { return ConstFaceVertexCCWIter(*this, _fh, true); }
1073  ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
1074  { return ConstFaceHalfedgeIter(*this, _fh, true); }
1076  ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const
1077  { return ConstFaceHalfedgeCWIter(*this, _fh, true); }
1079  ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const
1080  { return ConstFaceHalfedgeCCWIter(*this, _fh, true); }
1082  ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
1083  { return ConstFaceEdgeIter(*this, _fh, true); }
1085  ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const
1086  { return ConstFaceEdgeCWIter(*this, _fh, true); }
1088  ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const
1089  { return ConstFaceEdgeCCWIter(*this, _fh, true); }
1091  ConstFaceFaceIter cff_end(FaceHandle _fh) const
1092  { return ConstFaceFaceIter(*this, _fh, true); }
1094  ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const
1095  { return ConstFaceFaceCWIter(*this, _fh, true); }
1097  ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const
1098  { return ConstFaceFaceCCWIter(*this, _fh, true); }
1100  ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
1101  { return ConstHalfedgeLoopIter(*this, _heh, true); }
1103  ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const
1104  { return ConstHalfedgeLoopCWIter(*this, _heh, true); }
1106  ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const
1107  { return ConstHalfedgeLoopCCWIter(*this, _heh, true); }
1109 
1112 
1114  template<
1115  typename CONTAINER_TYPE,
1116  typename ITER_TYPE,
1117  ITER_TYPE (CONTAINER_TYPE::*begin_fn)() const,
1118  ITER_TYPE (CONTAINER_TYPE::*end_fn)() const>
1119  class EntityRange {
1120  public:
1121  typedef ITER_TYPE iterator;
1122  typedef ITER_TYPE const_iterator;
1123 
1124  EntityRange(CONTAINER_TYPE &container) : container_(container) {}
1125  ITER_TYPE begin() const { return (container_.*begin_fn)(); }
1126  ITER_TYPE end() const { return (container_.*end_fn)(); }
1127 
1128  private:
1129  CONTAINER_TYPE &container_;
1130  };
1131  typedef EntityRange<
1132  const PolyConnectivity,
1136  typedef EntityRange<
1137  const PolyConnectivity,
1141  typedef EntityRange<
1142  const PolyConnectivity,
1146  typedef EntityRange<
1147  const PolyConnectivity,
1151  typedef EntityRange<
1152  const PolyConnectivity,
1156  typedef EntityRange<
1157  const PolyConnectivity,
1161  typedef EntityRange<
1162  const PolyConnectivity,
1166  typedef EntityRange<
1167  const PolyConnectivity,
1171 
1176  ConstVertexRangeSkipping vertices() const { return ConstVertexRangeSkipping(*this); }
1177 
1182  ConstVertexRange all_vertices() const { return ConstVertexRange(*this); }
1183 
1188  ConstHalfedgeRangeSkipping halfedges() const { return ConstHalfedgeRangeSkipping(*this); }
1189 
1194  ConstHalfedgeRange all_halfedges() const { return ConstHalfedgeRange(*this); }
1195 
1200  ConstEdgeRangeSkipping edges() const { return ConstEdgeRangeSkipping(*this); }
1201 
1206  ConstEdgeRange all_edges() const { return ConstEdgeRange(*this); }
1207 
1212  ConstFaceRangeSkipping faces() const { return ConstFaceRangeSkipping(*this); }
1213 
1218  ConstFaceRange all_faces() const { return ConstFaceRange(*this); }
1219 
1221  template<
1222  typename CONTAINER_TYPE,
1223  typename ITER_TYPE,
1224  typename CENTER_ENTITY_TYPE,
1225  ITER_TYPE (CONTAINER_TYPE::*begin_fn)(CENTER_ENTITY_TYPE) const,
1226  ITER_TYPE (CONTAINER_TYPE::*end_fn)(CENTER_ENTITY_TYPE) const>
1228  public:
1229  typedef ITER_TYPE iterator;
1230  typedef ITER_TYPE const_iterator;
1231 
1233  const CONTAINER_TYPE &container,
1234  CENTER_ENTITY_TYPE center) :
1235  container_(container), center_(center) {}
1236  ITER_TYPE begin() const { return (container_.*begin_fn)(center_); }
1237  ITER_TYPE end() const { return (container_.*end_fn)(center_); }
1238 
1239  private:
1240  const CONTAINER_TYPE &container_;
1241  CENTER_ENTITY_TYPE center_;
1242  };
1243 
1244  typedef CirculatorRange<
1245  PolyConnectivity,
1246  ConstVertexVertexCWIter,
1247  VertexHandle,
1250  typedef CirculatorRange<
1251  PolyConnectivity,
1252  ConstVertexIHalfedgeIter,
1253  VertexHandle,
1256  typedef CirculatorRange<
1257  PolyConnectivity,
1258  ConstVertexOHalfedgeIter, VertexHandle,
1261  typedef CirculatorRange<
1262  PolyConnectivity,
1263  ConstVertexEdgeIter,
1264  VertexHandle,
1267  typedef CirculatorRange<
1268  PolyConnectivity,
1269  ConstVertexFaceIter,
1270  VertexHandle,
1273  typedef CirculatorRange<
1274  PolyConnectivity,
1275  ConstFaceVertexIter,
1276  FaceHandle,
1279  typedef CirculatorRange<
1280  PolyConnectivity,
1281  ConstFaceHalfedgeIter,
1282  FaceHandle,
1285  typedef CirculatorRange<
1286  PolyConnectivity,
1287  ConstFaceEdgeIter,
1288  FaceHandle,
1291  typedef CirculatorRange<
1292  PolyConnectivity,
1293  ConstFaceFaceIter,
1294  FaceHandle,
1297 
1302  ConstVertexVertexRange vv_range(VertexHandle _vh) const {
1303  return ConstVertexVertexRange(*this, _vh);
1304  }
1305 
1310  ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const {
1311  return ConstVertexIHalfedgeRange(*this, _vh);
1312  }
1313 
1318  ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const {
1319  return ConstVertexOHalfedgeRange(*this, _vh);
1320  }
1321 
1326  ConstVertexEdgeRange ve_range(VertexHandle _vh) const {
1327  return ConstVertexEdgeRange(*this, _vh);
1328  }
1329 
1334  ConstVertexFaceRange vf_range(VertexHandle _vh) const {
1335  return ConstVertexFaceRange(*this, _vh);
1336  }
1337 
1342  ConstFaceVertexRange fv_range(FaceHandle _fh) const {
1343  return ConstFaceVertexRange(*this, _fh);
1344  }
1345 
1350  ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const {
1351  return ConstFaceHalfedgeRange(*this, _fh);
1352  }
1353 
1358  ConstFaceEdgeRange fe_range(FaceHandle _fh) const {
1359  return ConstFaceEdgeRange(*this, _fh);
1360  }
1361 
1366  ConstFaceFaceRange ff_range(FaceHandle _fh) const {
1367  return ConstFaceFaceRange(*this, _fh);
1368  }
1369 
1371 
1372  //===========================================================================
1375  //===========================================================================
1376 
1384  bool is_boundary(HalfedgeHandle _heh) const
1385  { return ArrayKernel::is_boundary(_heh); }
1386 
1395  bool is_boundary(EdgeHandle _eh) const
1396  {
1397  return (is_boundary(halfedge_handle(_eh, 0)) ||
1398  is_boundary(halfedge_handle(_eh, 1)));
1399  }
1400 
1412  bool is_boundary(VertexHandle _vh) const
1413  {
1414  HalfedgeHandle heh(halfedge_handle(_vh));
1415  return (!(heh.is_valid() && face_handle(heh).is_valid()));
1416  }
1417 
1427  bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
1428 
1439  bool is_manifold(VertexHandle _vh) const;
1440 
1443  // --- shortcuts ---
1444 
1446  inline FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
1447  { return face_handle(opposite_halfedge_handle(_heh)); }
1448 
1449  // --- misc ---
1450 
1454  void adjust_outgoing_halfedge(VertexHandle _vh);
1455 
1457  HalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
1459  uint valence(VertexHandle _vh) const;
1461  uint valence(FaceHandle _fh) const;
1462 
1463  // --- connectivity operattions
1464 
1479  void collapse(HalfedgeHandle _heh);
1484  bool is_simple_link(EdgeHandle _eh) const;
1489  bool is_simply_connected(FaceHandle _fh) const;
1502  FaceHandle remove_edge(EdgeHandle _eh);
1506  void reinsert_edge(EdgeHandle _eh);
1516  HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
1517 
1530  void split(FaceHandle _fh, VertexHandle _vh);
1531 
1545  void split_copy(FaceHandle _fh, VertexHandle _vh);
1546 
1560  void triangulate(FaceHandle _fh);
1561 
1564  void triangulate();
1565 
1576  void split_edge(EdgeHandle _eh, VertexHandle _vh);
1577 
1589  void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
1590 
1591 
1597  const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
1599  Vertex& deref(VertexHandle _h) { return vertex(_h); }
1600  const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
1601  Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
1602  const Edge& deref(EdgeHandle _h) const { return edge(_h); }
1603  Edge& deref(EdgeHandle _h) { return edge(_h); }
1604  const Face& deref(FaceHandle _h) const { return face(_h); }
1605  Face& deref(FaceHandle _h) { return face(_h); }
1607 
1608 protected:
1610  void collapse_edge(HalfedgeHandle _hh);
1612  void collapse_loop(HalfedgeHandle _hh);
1613 
1614 
1615 
1616 private: // Working storage for add_face()
1618  {
1619  HalfedgeHandle halfedge_handle;
1620  bool is_new;
1621  bool needs_adjust;
1622  };
1623  std::vector<AddFaceEdgeInfo> edgeData_; //
1624  std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
1625 
1626 };
1627 
1628 }//namespace OpenMesh
1629 
1630 #endif//OPENMESH_POLYCONNECTIVITY_HH
ConstVertexVertexIter CVVIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::VertexHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > VertexEdgeCWIter
ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
const face - vertex circulator
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
FaceFaceCWIter ff_cwiter(FaceHandle _fh)
face - face circulator cw
ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const
const face - halfedge circulator cw
FaceEdgeCCWIter ConstFaceEdgeCCWIter
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toFaceHandle > VertexFaceIter
VertexEdgeCCWIter ve_ccwiter(VertexHandle _vh)
vertex - edge circulator ccw
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_sbegin, &PolyConnectivity::faces_end > ConstFaceRangeSkipping
EdgeIter EIter
Alias typedef.
ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
const halfedge circulator
FaceHalfedgeIter fh_iter(FaceHandle _fh)
face - halfedge circulator
ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const
const face - vertex circulator cw
VertexVertexCWIter vv_cwend(VertexHandle _vh)
vertex - vertex circulator cw
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
FaceFaceCWIter ff_cwbegin(FaceHandle _fh)
face - face circulator cw
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle > FaceFaceIter
ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const
const vertex - face circulator ccw
VertexEdgeCWIter VECWIter
Alias typedef.
EdgeIter edges_begin()
Begin iterator for edges.
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
VertexEdgeIter ve_begin(VertexHandle _vh)
vertex - edge circulator
Iterators::GenericCirculatorT< This, This::FaceHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle, false > FaceFaceCWIter
Handle for a vertex entity.
Definition: Handles.hh:120
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
HalfedgeIter HIter
Alias typedef.
VertexIHalfedgeIter VIHIter
Alias typedef.
EdgeIter edges_end()
End iterator for edges.
const Face & deref(FaceHandle _h) const
Get item from handle.
ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const
const vertex circulator ccw
FaceHalfedgeCCWIter FHCWWIter
Alias typedef.
ConstFaceVertexCCWIter CFVCCWIter
Alias typedef.
HalfedgeLoopCCWIter hl_ccwend(HalfedgeHandle _heh)
face - face circulator ccw
FaceEdgeIter FEIter
Alias typedef.
VertexEdgeCWIter ve_cwend(VertexHandle _vh)
vertex - edge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toFaceHandle > VertexFaceCWIter
ConstVertexIter CVIter
Alias typedef.
VertexIter vertices_begin()
Begin iterator for vertices.
static const FaceHandle InvalidFaceHandle
Invalid handle.
ConstHalfedgeIter halfedges_sbegin() const
Const begin iterator for halfedges.
ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const
VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle > VertexIHalfedgeCWIter
ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
const face - edge circulator
Iterators::GenericCirculatorT< This, This::VertexHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toFaceHandle, false > VertexFaceCCWIter
VertexIHalfedgeIter ConstVertexIHalfedgeIter
ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const
const vertex - edge circulator ccw
VertexEdgeIter VEIter
Alias typedef.
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_sbegin, &PolyConnectivity::halfedges_end > ConstHalfedgeRangeSkipping
FaceEdgeCWIter fe_cwbegin(FaceHandle _fh)
face - edge circulator cw
FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh)
face - face circulator ccw
ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
const vertex - face circulator
ConstFaceEdgeIter CFEIter
Alias typedef.
ConstVertexFaceRange vf_range(VertexHandle _vh) const
ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
ConstFaceFaceIter cff_iter(FaceHandle _fh) const
const face - face circulator
ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const
const face - face circulator cw
ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh)
vertex - incoming halfedge circulator cw
VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh)
vertex - incoming halfedge circulator cw
VertexFaceIter vf_iter(VertexHandle _vh)
vertex - face circulator
VertexFaceCCWIter vf_ccwbegin(VertexHandle _vh)
vertex - face circulator ccw
FaceFaceIter ff_end(FaceHandle _fh)
face - face circulator
Iterators::GenericCirculatorT< This, This::VertexHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle > VertexVertexCWIter
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const
const vertex - edge circulator ccw
Face & deref(FaceHandle _h)
Get item from handle.
ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const
const face - halfedge circulator cw
ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const
const vertex - face circulator cw
EdgeHandle EHandle
Alias typedef.
VertexFaceIter VFIter
Alias typedef.
HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh)
halfedge circulator
ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter
HalfedgeLoopIter ConstHalfedgeLoopIter
VertexIHalfedgeCCWIter vih_ccwbegin(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
HalfedgeLoopCWIter ConstHalfedgeLoopCWIter
ConstFaceEdgeCWIter CFECWIter
Alias typedef.
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_begin, &PolyConnectivity::edges_end > ConstEdgeRange
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
VertexIter ConstVertexIter
Linear iterator.
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > VertexOHalfedgeIter
FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh)
face - vertex circulator ccw
ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > HalfedgeLoopIter
ConstFaceVertexRange fv_range(FaceHandle _fh) const
ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const
const face - vertex circulator cw
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
const Edge & deref(EdgeHandle _h) const
Get item from handle.
ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const
FaceEdgeIter fe_iter(FaceHandle _fh)
face - edge circulator
FaceVertexCWIter ConstFaceVertexCWIter
FaceHalfedgeCWIter fh_cwend(FaceHandle _fh)
face - halfedge circulator cw
ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const
const vertex - face circulator ccw
VertexVertexCCWIter vv_ccwbegin(VertexHandle _vh)
vertex - vertex circulator ccw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > VertexOHalfedgeCCWIter
ConstFaceRangeSkipping faces() const
FaceVertexIter fv_iter(FaceHandle _fh)
face - vertex circulator
FaceFaceIter ff_begin(FaceHandle _fh)
face - face circulator
ConstEdgeIter CEIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > FaceHalfedgeCWIter
VertexFaceIter vf_begin(VertexHandle _vh)
vertex - face circulator
Handle for a halfedge entity.
Definition: Handles.hh:127
ConstVertexRange all_vertices() const
VertexVertexCCWIter ConstVertexVertexCCWIter
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
VertexEdgeCWIter ve_cwbegin(VertexHandle _vh)
vertex - edge circulator cw
FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh)
face - edge circulator ccw
FaceVertexCWIter fv_cwiter(FaceHandle _fh)
face - vertex circulator cw
VertexEdgeCWIter ConstVertexEdgeCWIter
ConstFaceEdgeRange fe_range(FaceHandle _fh) const
FaceHalfedgeIter fh_end(FaceHandle _fh)
face - halfedge circulator
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
ConstEdgeIter edges_sbegin() const
Const begin iterator for edges.
VertexFaceCWIter VFCWIter
Alias typedef.
VertexEdgeCCWIter ConstVertexEdgeCCWIter
FaceEdgeCWIter fe_cwend(FaceHandle _fh)
face - edge circulator cw
VertexVertexCWIter ConstVertexVertexCWIter
Iterators::GenericCirculatorT< This, This::FaceHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle, false > FaceEdgeCWIter
ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
const vertex - incoming halfedge circulator
VertexVertexCCWIter VVCCWIter
Alias typedef.
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > FaceHalfedgeIter
Edge & deref(EdgeHandle _h)
Get item from handle.
ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const
const vertex circulator cw
VertexHandle add_vertex()
Add a new vertex.
HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh)
face - face circulator cw
ConstVertexOHalfedgeCWIter CVOHCWIter
Alias typedef.
FaceEdgeIter fe_begin(FaceHandle _fh)
face - edge circulator
FaceIter faces_sbegin()
Begin iterator for faces.
ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const
const vertex circulator ccw
ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
const vertex - edge circulator
CirculatorRange< PolyConnectivity, ConstVertexIHalfedgeIter, VertexHandle, &PolyConnectivity::cvih_begin, &PolyConnectivity::cvih_end > ConstVertexIHalfedgeRange
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_begin, &PolyConnectivity::halfedges_end > ConstHalfedgeRange
CirculatorRange< PolyConnectivity, ConstVertexEdgeIter, VertexHandle, &PolyConnectivity::cve_begin, &PolyConnectivity::cve_end > ConstVertexEdgeRange
VertexVertexCWIter vv_cwbegin(VertexHandle _vh)
vertex - vertex circulator cw
ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const
const face - vertex circulator ccw
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel, &ArrayKernel::has_face_status, &ArrayKernel::n_faces > FaceIter
Linear iterator.
ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const
const face - edge circulator cw
FaceHalfedgeCWIter ConstFaceHalfedgeCWIter
FaceHalfedgeIter ConstFaceHalfedgeIter
VertexEdgeCCWIter VECCWIter
Alias typedef.
VertexOHalfedgeCCWIter voh_ccwbegin(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
FaceVertexCWIter fv_cwend(FaceHandle _fh)
face - vertex circulator cw
ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const
const vertex - face circulator cw
VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh)
vertex - incoming halfedge circulator cw
FaceFaceCCWIter ff_ccwend(FaceHandle _fh)
face - face circulator ccw
VertexIHalfedgeCCWIter VIHICCWter
Alias typedef.
VertexEdgeCWIter ve_cwiter(VertexHandle _vh)
vertex - edge circulator cw
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle > VertexIHalfedgeIter
FaceFaceIter FFIter
Alias typedef.
HalfedgeLoopIter hl_begin(HalfedgeHandle _heh)
halfedge circulator
VertexIHalfedgeCWIter VIHICWter
Alias typedef.
CirculatorRange< PolyConnectivity, ConstFaceVertexIter, FaceHandle, &PolyConnectivity::cfv_begin, &PolyConnectivity::cfv_end > ConstFaceVertexRange
VertexOHalfedgeCCWIter ConstVertexOHalfedgeCCWIter
ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_begin, &PolyConnectivity::faces_end > ConstFaceRange
VertexIHalfedgeIter vih_end(VertexHandle _vh)
vertex - incoming halfedge circulator
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > VertexEdgeIter
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
VertexFaceCWIter vf_cwiter(VertexHandle _vh)
vertex - face circulator cw
ConstVertexEdgeIter CVEIter
Alias typedef.
ConstFaceFaceCCWIter CFFCCWIter
Alias typedef.
FaceVertexIter FVIter
Alias typedef.
VertexVertexCWIter vv_cwiter(VertexHandle _vh)
vertex - vertex circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle, false > VertexEdgeCCWIter
ConstVertexIter vertices_sbegin() const
Const begin iterator for vertices.
void assign_connectivity(const PolyConnectivity &_other)
EdgeIter ConstEdgeIter
Linear iterator.
HalfedgeIter halfedges_begin()
Begin iterator for halfedges.
Generic class for vertex/halfedge/edge/face ranges.
FaceIter ConstFaceIter
Linear iterator.
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
VertexIHalfedgeCCWIter vih_ccwiter(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
ConstVertexEdgeRange ve_range(VertexHandle _vh) const
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
ConstEdgeRange all_edges() const
Iterators::GenericCirculatorT< This, This::FaceHandle, This::FaceHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle > FaceFaceCCWIter
HalfedgeLoopCCWIter ConstHalfedgeLoopCCWIter
VertexIHalfedgeCCWIter ConstVertexIHalfedgeCCWIter
CirculatorRange< PolyConnectivity, ConstVertexVertexCWIter, VertexHandle, &PolyConnectivity::cvv_cwbegin, &PolyConnectivity::cvv_cwend > ConstVertexVertexRange
ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const
const vertex - edge circulator cw
VertexOHalfedgeCCWIter voh_ccwend(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
ConstHalfedgeRange all_halfedges() const
Iterators::GenericCirculatorT< This, This::FaceHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle, false > FaceVertexCWIter
VertexVertexIter VVIter
Alias typedef.
HalfedgeLoopIter hl_end(HalfedgeHandle _heh)
face - face circulator
VertexOHalfedgeIter ConstVertexOHalfedgeIter
ConstFaceRange all_faces() const
FaceHalfedgeCWIter fh_cwbegin(FaceHandle _fh)
face - halfedge circulator cw
VertexEdgeCCWIter ve_ccwend(VertexHandle _vh)
vertex - edge circulator ccw
ConstFaceHalfedgeCCWIter CFHCCWIter
Alias typedef.
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
FaceVertexIter fv_end(FaceHandle _fh)
face - vertex circulator
FaceVertexCCWIter FVCCWIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > FaceHalfedgeCCWIter
ConstFaceFaceCWIter CFFCWIter
Alias typedef.
ConstFaceVertexIter CFVIter
Alias typedef.
ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const
const halfedge circulator ccw
ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const
const face - halfedge circulator ccw
ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const
const face - edge circulator ccw
VertexVertexCWIter VVCWIter
Alias typedef.
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const
ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const
const vertex - face circulator cw
Iterators::GenericCirculatorT< This, This::FaceHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle > FaceVertexCCWIter
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle, false > VertexIHalfedgeCCWIter
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_sbegin, &PolyConnectivity::edges_end > ConstEdgeRangeSkipping
ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const
const face - vertex circulator cw
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
FaceVertexCWIter FVCWIter
Alias typedef.
Handle for a face entity.
Definition: Handles.hh:141
ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const
const face - edge circulator cw
FaceFaceCCWIter ff_ccwiter(FaceHandle _fh)
face - face circulator ccw
ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const
const face - halfedge circulator cw
VertexVertexIter vv_iter(VertexHandle _vh)
vertex - vertex circulator
VertexIter vertices_end()
End iterator for vertices.
ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
FaceHalfedgeIter fh_begin(FaceHandle _fh)
face - halfedge circulator
ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const
const vertex circulator cw
void assign_connectivity(const ArrayKernel &_other)
Definition: ArrayKernel.cc:71
VertexVertexCCWIter vv_ccwend(VertexHandle _vh)
vertex - vertex circulator ccw
ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const
const halfedge circulator cw
VertexIter vertices_sbegin()
Begin iterator for vertices.
ConstHalfedgeRangeSkipping halfedges() const
VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
FaceFaceIter ff_iter(FaceHandle _fh)
face - face circulator
CirculatorRange< PolyConnectivity, ConstVertexOHalfedgeIter, VertexHandle, &PolyConnectivity::cvoh_begin, &PolyConnectivity::cvoh_end > ConstVertexOHalfedgeRange
HalfedgeHandle HHandle
Alias typedef.
VertexOHalfedgeCWIter VOHCWIter
Alias typedef.
ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const
const face - vertex circulator ccw
ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const
const face - face circulator
ConstVertexOHalfedgeCCWIter CVOHCCWIter
Alias typedef.
ConstVertexVertexCCWIter CVVCCWIter
Alias typedef.
ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const
const vertex - face circulator ccw
FaceEdgeCCWIter fe_ccwend(FaceHandle _fh)
face - edge circulator ccw
ConstFaceHalfedgeCWIter CFHCWIter
Alias typedef.
VertexFaceCWIter vf_cwbegin(VertexHandle _vh)
vertex - face circulator cw
ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const
const face - vertex circulator ccw
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
ConstVertexIHalfedgeCWIter CVIHCWIter
Alias typedef.
ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const
const face - face circulator ccw
ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
const face - face circulator
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > HalfedgeLoopCWIter
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const
const face - face circulator cw
VertexFaceCCWIter VFCCWIter
Alias typedef.
ConstVertexRangeSkipping vertices() const
HalfedgeIter ConstHalfedgeIter
Linear iterator.
VertexFaceCWIter ConstVertexFaceCWIter
ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const
const vertex - edge circulator cw
VertexIHalfedgeIter vih_iter(VertexHandle _vh)
vertex - incoming halfedge circulator
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle > VertexVertexIter
VertexEdgeIter ve_iter(VertexHandle _vh)
vertex - edge circulator
ConstEdgeRangeSkipping edges() const
ConstVertexEdgeCCWIter CVECCWIter
Alias typedef.
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel, &ArrayKernel::has_edge_status, &ArrayKernel::n_edges > EdgeIter
Linear iterator.
Handle for a edge entity.
Definition: Handles.hh:134
CirculatorRange< PolyConnectivity, ConstVertexFaceIter, VertexHandle, &PolyConnectivity::cvf_begin, &PolyConnectivity::cvf_end > ConstVertexFaceRange
FaceFaceCCWIter ConstFaceFaceCCWIter
ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const
const vertex - edge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > VertexOHalfedgeCWIter
VertexFaceIter vf_end(VertexHandle _vh)
vertex - face circulator
EdgeIter edges_sbegin()
Begin iterator for edges.
ConstVertexFaceCCWIter CVFCCWIter
Alias typedef.
ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const
const face - face circulator
VertexOHalfedgeIter voh_begin(VertexHandle _vh)
vertex - outgoing halfedge circulator
VertexOHalfedgeIter voh_iter(VertexHandle _vh)
vertex - outgoing halfedge circulator
FaceVertexCCWIter ConstFaceVertexCCWIter
ConstVertexVertexCWIter CVVCWIter
Alias typedef.
ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const
const face - edge circulator cw
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > FaceEdgeIter
VertexFaceCCWIter ConstVertexFaceCCWIter
ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
const vertex circulator
FaceEdgeCWIter FECWIter
Alias typedef.
VertexOHalfedgeCCWIter VOHCCWIter
Alias typedef.
VertexFaceCWIter vf_cwend(VertexHandle _vh)
vertex - face circulator cw
VertexVertexCCWIter vv_ccwiter(VertexHandle _vh)
vertex - vertex circulator ccw
ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
ConstFaceEdgeCCWIter CFECCWIter
Alias typedef.
ConstVertexFaceIter CVFIter
Alias typedef.
Connectivity Class for polygonal meshes.
ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const
const face - edge circulator ccw
ConstVertexFaceCWIter CVFCWIter
Alias typedef.
VertexOHalfedgeCCWIter voh_ccwiter(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
ConstVertexVertexIter cvv_end(VertexHandle _vh) const
const vertex circulator
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_begin, &PolyConnectivity::vertices_end > ConstVertexRange
VertexIHalfedgeCCWIter vih_ccwend(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
VertexVertexIter vv_begin(VertexHandle _vh)
vertex - vertex circulator
FaceVertexCCWIter fv_ccwiter(FaceHandle _fh)
face - vertex circulator ccw
ConstFaceIter CFIter
Alias typedef.
ConstFaceVertexCWIter CFVCWIter
Alias typedef.
FaceVertexIter fv_begin(FaceHandle _fh)
face - vertex circulator
FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh)
face - halfedge circulator ccw
ConstFaceHalfedgeIter CFHIter
Alias typedef.
VertexIHalfedgeIter vih_begin(VertexHandle _vh)
vertex - incoming halfedge circulator
ConstFaceFaceRange ff_range(FaceHandle _fh) const
ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const
const face - face circulator
ConstHalfedgeIter CHIter
Alias typedef.
VertexOHalfedgeIter VOHIter
Alias typedef.
FaceVertexCWIter fv_cwbegin(FaceHandle _fh)
face - vertex circulator cw
FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh)
face - edge circulator ccw
ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const
const face - edge circulator ccw
FaceEdgeIter fe_end(FaceHandle _fh)
face - edge circulator
bool is_valid() const
The handle is valid iff the index is not negative.
Definition: Handles.hh:72
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel, &ArrayKernel::has_halfedge_status, &ArrayKernel::n_halfedges > HalfedgeIter
Linear iterator.
VertexFaceCCWIter vf_ccwend(VertexHandle _vh)
vertex - face circulator ccw
FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh)
face - halfedge circulator ccw
ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const
const face - halfedge circulator ccw
VertexEdgeIter ve_end(VertexHandle _vh)
vertex - edge circulator
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
FaceHalfedgeIter FHIter
Alias typedef.
VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter
FaceVertexCCWIter fv_ccwend(FaceHandle _fh)
face - vertex circulator ccw
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
FaceHandle FHandle
Alias typedef.
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const
const vertex circulator cw
CirculatorRange< PolyConnectivity, ConstFaceHalfedgeIter, FaceHandle, &PolyConnectivity::cfh_begin, &PolyConnectivity::cfh_end > ConstFaceHalfedgeRange
ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const
const vertex - edge circulator ccw
CirculatorRange< PolyConnectivity, ConstFaceFaceIter, FaceHandle, &PolyConnectivity::cff_begin, &PolyConnectivity::cff_end > ConstFaceFaceRange
ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const
const vertex circulator ccw
ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const
const face - face circulator cw
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_sbegin, &PolyConnectivity::vertices_end > ConstVertexRangeSkipping
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:398
Generic class for iterator ranges.
FaceHalfedgeCWIter fh_cwiter(FaceHandle _fh)
face - halfedge circulator cw
ConstVertexVertexRange vv_range(VertexHandle _vh) const
ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
const face - halfedge circulator
ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const
const face - face circulator ccw
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
FaceIter faces_end()
End iterator for faces.
ConstVertexIHalfedgeCCWIter CVIHCCWIter
Alias typedef.
FaceIter faces_begin()
Begin iterator for faces.
ConstVertexEdgeCWIter CVECWIter
Alias typedef.
HalfedgeIter halfedges_end()
End iterator for halfedges.
VertexOHalfedgeIter voh_end(VertexHandle _vh)
vertex - outgoing halfedge circulator
HalfedgeLoopCCWIter hl_ccwbegin(HalfedgeHandle _heh)
halfedge circulator ccw
Iterators::GenericCirculatorT< This, This::FaceHandle, This::EdgeHandle, &Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > FaceEdgeCCWIter
VertexEdgeCCWIter ve_ccwbegin(VertexHandle _vh)
vertex - edge circulator ccw
ConstFaceIter faces_sbegin() const
Const begin iterator for faces.
CirculatorRange< PolyConnectivity, ConstFaceEdgeIter, FaceHandle, &PolyConnectivity::cfe_begin, &PolyConnectivity::cfe_end > ConstFaceEdgeRange
VertexVertexIter ConstVertexVertexIter
VertexFaceCCWIter vf_ccwiter(VertexHandle _vh)
vertex - face circulator ccw
Vertex & deref(VertexHandle _h)
Get item from handle.
ConstFaceFaceIter CFFIter
Alias typedef.
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle > FaceVertexIter
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
VertexIter VIter
Alias typedef.
FaceIter FIter
Alias typedef.
ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const
const face - halfedge circulator ccw
VertexVertexIter vv_end(VertexHandle _vh)
vertex - vertex circulator
FaceEdgeCWIter fe_cwiter(FaceHandle _fh)
face - edge circulator cw
FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter
FaceFaceCWIter ff_cwend(FaceHandle _fh)
face - face circulator cw
ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
const vertex circulator
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle, &Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > HalfedgeLoopCCWIter
FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh)
face - halfedge circulator ccw
FaceEdgeCCWIter FECWWIter
Alias typedef.
FaceHalfedgeCWIter FHCWIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::VertexHandle, This::VertexHandle, &Iterators::GenericCirculatorBaseT< This >::toVertexHandle, false > VertexVertexCCWIter