Developer Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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  * $Revision$ *
45  * $Date$ *
46  * *
47 \*===========================================================================*/
48 
49 #ifndef OPENMESH_POLYCONNECTIVITY_HH
50 #define OPENMESH_POLYCONNECTIVITY_HH
51 
52 #include <OpenMesh/Core/Mesh/ArrayKernel.hh>
53 #include <OpenMesh/Core/Mesh/IteratorsT.hh>
54 #include <OpenMesh/Core/Mesh/CirculatorsT.hh>
55 
56 namespace OpenMesh
57 {
58 
61 class OPENMESHDLLEXPORT PolyConnectivity : public ArrayKernel
62 {
63 public:
65 
66  static const VertexHandle InvalidVertexHandle;
75 
76  typedef PolyConnectivity This;
77 
78  //--- iterators ---
79 
90 
91  typedef VertexIter ConstVertexIter;
92  typedef HalfedgeIter ConstHalfedgeIter;
93  typedef EdgeIter ConstEdgeIter;
94  typedef FaceIter ConstFaceIter;
96 
97  //--- circulators ---
98 
104 
105  /*
106  * Vertex-centered circulators
107  */
108 
112  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::VertexHandle,
115  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::VertexHandle,
117 
121  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::VertexHandle,
124 
128  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::HalfedgeHandle,
131  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
133 
137  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
140 
144  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::HalfedgeHandle,
147  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
149 
153  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::HalfedgeHandle,
156 
160  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::FaceHandle,
163  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::FaceHandle,
165 
169  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::FaceHandle,
172 
176  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::VertexHandle, This::EdgeHandle,
179  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::EdgeHandle,
184  typedef Iterators::GenericCirculatorT<This, This::VertexHandle, This::EdgeHandle,
187 
191  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::HalfedgeHandle,
192  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle>
194  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
195  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle> HalfedgeLoopCWIter;
199  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
200  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle, false>
202 
204  typedef VertexVertexCWIter ConstVertexVertexCWIter;
207  typedef VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter;
210  typedef VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter;
213  typedef VertexFaceCWIter ConstVertexFaceCWIter;
216  typedef VertexEdgeCWIter ConstVertexEdgeCWIter;
218 
219  /*
220  * Face-centered circulators
221  */
222 
226  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::VertexHandle,
227  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle>
229  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::VertexHandle,
230  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle> FaceVertexCCWIter;
231 
235  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::VertexHandle,
236  &Iterators::GenericCirculatorBaseT<This>::toVertexHandle, false>
238 
242  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::HalfedgeHandle,
243  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle>
245  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
246  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle> FaceHalfedgeCCWIter;
247 
251  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::HalfedgeHandle,
252  &Iterators::GenericCirculatorBaseT<This>::toHalfedgeHandle, false>
254 
258  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::EdgeHandle,
259  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle>
261  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::EdgeHandle,
262  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle> FaceEdgeCCWIter;
263 
267  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::EdgeHandle,
268  &Iterators::GenericCirculatorBaseT<This>::toEdgeHandle, false>
270 
274  typedef Iterators::GenericCirculatorT_DEPRECATED<This, This::FaceHandle, This::FaceHandle,
277  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::FaceHandle,
279 
283  typedef Iterators::GenericCirculatorT<This, This::FaceHandle, This::FaceHandle,
286 
289  typedef FaceVertexCCWIter ConstFaceVertexCCWIter;
292  typedef FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter;
295  typedef FaceEdgeCCWIter ConstFaceEdgeCCWIter;
298  typedef FaceFaceCCWIter ConstFaceFaceCCWIter;
299 
300  /*
301  * Halfedge circulator
302  */
304  typedef HalfedgeLoopCWIter ConstHalfedgeLoopCWIter;
306 
308 
309  // --- shortcuts
310 
315  typedef VertexHandle VHandle;
320 
321  typedef VertexIter VIter;
322  typedef HalfedgeIter HIter;
323  typedef EdgeIter EIter;
324  typedef FaceIter FIter;
325 
326  typedef ConstVertexIter CVIter;
327  typedef ConstHalfedgeIter CHIter;
328  typedef ConstEdgeIter CEIter;
329  typedef ConstFaceIter CFIter;
330 
332  typedef VertexVertexCWIter VVCWIter;
335  typedef VertexOHalfedgeCWIter VOHCWIter;
338  typedef VertexIHalfedgeCWIter VIHICWter;
341  typedef VertexEdgeCWIter VECWIter;
344  typedef VertexFaceCWIter VFCWIter;
348  typedef FaceVertexCCWIter FVCCWIter;
351  typedef FaceHalfedgeCCWIter FHCWWIter;
354  typedef FaceEdgeCCWIter FECWWIter;
356 
357  typedef ConstVertexVertexIter CVVIter;
358  typedef ConstVertexVertexCWIter CVVCWIter;
359  typedef ConstVertexVertexCCWIter CVVCCWIter;
360  typedef ConstVertexOHalfedgeIter CVOHIter;
361  typedef ConstVertexOHalfedgeCWIter CVOHCWIter;
362  typedef ConstVertexOHalfedgeCCWIter CVOHCCWIter;
363  typedef ConstVertexIHalfedgeIter CVIHIter;
364  typedef ConstVertexIHalfedgeCWIter CVIHCWIter;
365  typedef ConstVertexIHalfedgeCCWIter CVIHCCWIter;
366  typedef ConstVertexEdgeIter CVEIter;
367  typedef ConstVertexEdgeCWIter CVECWIter;
368  typedef ConstVertexEdgeCCWIter CVECCWIter;
369  typedef ConstVertexFaceIter CVFIter;
370  typedef ConstVertexFaceCWIter CVFCWIter;
371  typedef ConstVertexFaceCCWIter CVFCCWIter;
372  typedef ConstFaceVertexIter CFVIter;
373  typedef ConstFaceVertexCWIter CFVCWIter;
374  typedef ConstFaceVertexCCWIter CFVCCWIter;
375  typedef ConstFaceHalfedgeIter CFHIter;
376  typedef ConstFaceHalfedgeCWIter CFHCWIter;
377  typedef ConstFaceHalfedgeCCWIter CFHCCWIter;
378  typedef ConstFaceEdgeIter CFEIter;
379  typedef ConstFaceEdgeCWIter CFECWIter;
380  typedef ConstFaceEdgeCCWIter CFECCWIter;
381  typedef ConstFaceFaceIter CFFIter;
382  typedef ConstFaceFaceCWIter CFFCWIter;
383  typedef ConstFaceFaceCCWIter CFFCCWIter;
385 
386 public:
387 
388  PolyConnectivity() {}
389  virtual ~PolyConnectivity() {}
390 
391  inline static bool is_triangles()
392  { return false; }
393 
396  inline void assign_connectivity(const PolyConnectivity& _other)
398 
402 
405  { return new_vertex(); }
406 
414  FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
415 
416 
426  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
427 
438  FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
439 
448  FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
449 
451 
453 
454 
459  bool is_collapse_ok(HalfedgeHandle _he);
460 
461 
467  void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
468 
477  void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
478 
489  void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
490 
492 
496 
498  VertexIter vertices_begin();
500  ConstVertexIter vertices_begin() const;
502  VertexIter vertices_end();
504  ConstVertexIter vertices_end() const;
505 
507  HalfedgeIter halfedges_begin();
509  ConstHalfedgeIter halfedges_begin() const;
511  HalfedgeIter halfedges_end();
513  ConstHalfedgeIter halfedges_end() const;
514 
516  EdgeIter edges_begin();
518  ConstEdgeIter edges_begin() const;
520  EdgeIter edges_end();
522  ConstEdgeIter edges_end() const;
523 
525  FaceIter faces_begin();
527  ConstFaceIter faces_begin() const;
529  FaceIter faces_end();
531  ConstFaceIter faces_end() const;
533 
534 
538 
540  VertexIter vertices_sbegin()
541  { return VertexIter(*this, VertexHandle(0), true); }
543  ConstVertexIter vertices_sbegin() const
544  { return ConstVertexIter(*this, VertexHandle(0), true); }
545 
547  HalfedgeIter halfedges_sbegin()
548  { return HalfedgeIter(*this, HalfedgeHandle(0), true); }
550  ConstHalfedgeIter halfedges_sbegin() const
551  { return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); }
552 
554  EdgeIter edges_sbegin()
555  { return EdgeIter(*this, EdgeHandle(0), true); }
557  ConstEdgeIter edges_sbegin() const
558  { return ConstEdgeIter(*this, EdgeHandle(0), true); }
559 
561  FaceIter faces_sbegin()
562  { return FaceIter(*this, FaceHandle(0), true); }
564  ConstFaceIter faces_sbegin() const
565  { return ConstFaceIter(*this, FaceHandle(0), true); }
566 
568 
569  //--- circulators ---
570 
574 
577  { return VertexVertexIter(*this, _vh); }
579  VertexVertexCWIter vv_cwiter(VertexHandle _vh)
580  { return VertexVertexCWIter(*this, _vh); }
583  { return VertexVertexCCWIter(*this, _vh); }
586  { return VertexIHalfedgeIter(*this, _vh); }
588  VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh)
589  { return VertexIHalfedgeCWIter(*this, _vh); }
592  { return VertexIHalfedgeCCWIter(*this, _vh); }
595  { return VertexOHalfedgeIter(*this, _vh); }
597  VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh)
598  { return VertexOHalfedgeCWIter(*this, _vh); }
601  { return VertexOHalfedgeCCWIter(*this, _vh); }
604  { return VertexEdgeIter(*this, _vh); }
606  VertexEdgeCWIter ve_cwiter(VertexHandle _vh)
607  { return VertexEdgeCWIter(*this, _vh); }
610  { return VertexEdgeCCWIter(*this, _vh); }
613  { return VertexFaceIter(*this, _vh); }
615  VertexFaceCWIter vf_cwiter(VertexHandle _vh)
616  { return VertexFaceCWIter(*this, _vh); }
619  { return VertexFaceCCWIter(*this, _vh); }
620 
622  ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
623  { return ConstVertexVertexIter(*this, _vh); }
625  ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const
626  { return ConstVertexVertexCWIter(*this, _vh); }
628  ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const
629  { return ConstVertexVertexCCWIter(*this, _vh); }
631  ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
632  { return ConstVertexIHalfedgeIter(*this, _vh); }
634  ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const
635  { return ConstVertexIHalfedgeCWIter(*this, _vh); }
637  ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const
638  { return ConstVertexIHalfedgeCCWIter(*this, _vh); }
640  ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
641  { return ConstVertexOHalfedgeIter(*this, _vh); }
643  ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const
644  { return ConstVertexOHalfedgeCWIter(*this, _vh); }
646  ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const
647  { return ConstVertexOHalfedgeCCWIter(*this, _vh); }
649  ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
650  { return ConstVertexEdgeIter(*this, _vh); }
652  ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const
653  { return ConstVertexEdgeCWIter(*this, _vh); }
655  ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const
656  { return ConstVertexEdgeCCWIter(*this, _vh); }
658  ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
659  { return ConstVertexFaceIter(*this, _vh); }
661  ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const
662  { return ConstVertexFaceCWIter(*this, _vh); }
664  ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const
665  { return ConstVertexFaceCCWIter(*this, _vh); }
666 
669  { return FaceVertexIter(*this, _fh); }
672  { return FaceVertexCWIter(*this, _fh); }
674  FaceVertexCCWIter fv_ccwiter(FaceHandle _fh)
675  { return FaceVertexCCWIter(*this, _fh); }
678  { return FaceHalfedgeIter(*this, _fh); }
681  { return FaceHalfedgeCWIter(*this, _fh); }
683  FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh)
684  { return FaceHalfedgeCCWIter(*this, _fh); }
687  { return FaceEdgeIter(*this, _fh); }
690  { return FaceEdgeCWIter(*this, _fh); }
692  FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh)
693  { return FaceEdgeCCWIter(*this, _fh); }
696  { return FaceFaceIter(*this, _fh); }
699  { return FaceFaceCWIter(*this, _fh); }
701  FaceFaceCCWIter ff_ccwiter(FaceHandle _fh)
702  { return FaceFaceCCWIter(*this, _fh); }
703 
705  ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
706  { return ConstFaceVertexIter(*this, _fh); }
708  ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const
709  { return ConstFaceVertexCWIter(*this, _fh); }
711  ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const
712  { return ConstFaceVertexCCWIter(*this, _fh); }
714  ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
715  { return ConstFaceHalfedgeIter(*this, _fh); }
717  ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const
718  { return ConstFaceHalfedgeCWIter(*this, _fh); }
720  ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const
721  { return ConstFaceHalfedgeCCWIter(*this, _fh); }
723  ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
724  { return ConstFaceEdgeIter(*this, _fh); }
726  ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const
727  { return ConstFaceEdgeCWIter(*this, _fh); }
729  ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const
730  { return ConstFaceEdgeCCWIter(*this, _fh); }
732  ConstFaceFaceIter cff_iter(FaceHandle _fh) const
733  { return ConstFaceFaceIter(*this, _fh); }
735  ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const
736  { return ConstFaceFaceCWIter(*this, _fh); }
738  ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const
739  { return ConstFaceFaceCCWIter(*this, _fh); }
740 
741  // 'begin' circulators
742 
745  { return VertexVertexIter(*this, _vh); }
747  VertexVertexCWIter vv_cwbegin(VertexHandle _vh)
748  { return VertexVertexCWIter(*this, _vh); }
751  { return VertexVertexCCWIter(*this, _vh); }
754  { return VertexIHalfedgeIter(*this, _vh); }
756  VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh)
757  { return VertexIHalfedgeCWIter(*this, _vh); }
760  { return VertexIHalfedgeCCWIter(*this, _vh); }
763  { return VertexOHalfedgeIter(*this, _vh); }
765  VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh)
766  { return VertexOHalfedgeCWIter(*this, _vh); }
769  { return VertexOHalfedgeCCWIter(*this, _vh); }
772  { return VertexEdgeIter(*this, _vh); }
774  VertexEdgeCWIter ve_cwbegin(VertexHandle _vh)
775  { return VertexEdgeCWIter(*this, _vh); }
778  { return VertexEdgeCCWIter(*this, _vh); }
781  { return VertexFaceIter(*this, _vh); }
783  VertexFaceCWIter vf_cwbegin(VertexHandle _vh)
784  { return VertexFaceCWIter(*this, _vh); }
787  { return VertexFaceCCWIter(*this, _vh); }
788 
789 
791  ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
792  { return ConstVertexVertexIter(*this, _vh); }
794  ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const
795  { return ConstVertexVertexCWIter(*this, _vh); }
797  ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const
798  { return ConstVertexVertexCCWIter(*this, _vh); }
800  ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
801  { return ConstVertexIHalfedgeIter(*this, _vh); }
803  ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const
804  { return ConstVertexIHalfedgeCWIter(*this, _vh); }
806  ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const
807  { return ConstVertexIHalfedgeCCWIter(*this, _vh); }
809  ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
810  { return ConstVertexOHalfedgeIter(*this, _vh); }
812  ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const
813  { return ConstVertexOHalfedgeCWIter(*this, _vh); }
815  ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const
816  { return ConstVertexOHalfedgeCCWIter(*this, _vh); }
818  ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
819  { return ConstVertexEdgeIter(*this, _vh); }
821  ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const
822  { return ConstVertexEdgeCWIter(*this, _vh); }
824  ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const
825  { return ConstVertexEdgeCCWIter(*this, _vh); }
827  ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
828  { return ConstVertexFaceIter(*this, _vh); }
830  ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const
831  { return ConstVertexFaceCWIter(*this, _vh); }
833  ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const
834  { return ConstVertexFaceCCWIter(*this, _vh); }
835 
838  { return FaceVertexIter(*this, _fh); }
841  { return FaceVertexCWIter(*this, _fh); }
843  FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh)
844  { return FaceVertexCCWIter(*this, _fh); }
847  { return FaceHalfedgeIter(*this, _fh); }
850  { return FaceHalfedgeCWIter(*this, _fh); }
852  FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh)
853  { return FaceHalfedgeCCWIter(*this, _fh); }
856  { return FaceEdgeIter(*this, _fh); }
859  { return FaceEdgeCWIter(*this, _fh); }
861  FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh)
862  { return FaceEdgeCCWIter(*this, _fh); }
865  { return FaceFaceIter(*this, _fh); }
868  { return FaceFaceCWIter(*this, _fh); }
870  FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh)
871  { return FaceFaceCCWIter(*this, _fh); }
874  { return HalfedgeLoopIter(*this, _heh); }
876  HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh)
877  { return HalfedgeLoopCWIter(*this, _heh); }
880  { return HalfedgeLoopCCWIter(*this, _heh); }
881 
883  ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
884  { return ConstFaceVertexIter(*this, _fh); }
886  ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const
887  { return ConstFaceVertexCWIter(*this, _fh); }
889  ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const
890  { return ConstFaceVertexCCWIter(*this, _fh); }
892  ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
893  { return ConstFaceHalfedgeIter(*this, _fh); }
895  ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const
896  { return ConstFaceHalfedgeCWIter(*this, _fh); }
898  ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const
899  { return ConstFaceHalfedgeCCWIter(*this, _fh); }
901  ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
902  { return ConstFaceEdgeIter(*this, _fh); }
904  ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const
905  { return ConstFaceEdgeCWIter(*this, _fh); }
907  ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const
908  { return ConstFaceEdgeCCWIter(*this, _fh); }
910  ConstFaceFaceIter cff_begin(FaceHandle _fh) const
911  { return ConstFaceFaceIter(*this, _fh); }
913  ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const
914  { return ConstFaceFaceCWIter(*this, _fh); }
916  ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const
917  { return ConstFaceFaceCCWIter(*this, _fh); }
919  ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
920  { return ConstHalfedgeLoopIter(*this, _heh); }
922  ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const
923  { return ConstHalfedgeLoopCWIter(*this, _heh); }
925  ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const
926  { return ConstHalfedgeLoopCCWIter(*this, _heh); }
927 
928  // 'end' circulators
929 
932  { return VertexVertexIter(*this, _vh, true); }
934  VertexVertexCWIter vv_cwend(VertexHandle _vh)
935  { return VertexVertexCWIter(*this, _vh, true); }
938  { return VertexVertexCCWIter(*this, _vh, true); }
941  { return VertexIHalfedgeIter(*this, _vh, true); }
943  VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh)
944  { return VertexIHalfedgeCWIter(*this, _vh, true); }
947  { return VertexIHalfedgeCCWIter(*this, _vh, true); }
950  { return VertexOHalfedgeIter(*this, _vh, true); }
952  VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh)
953  { return VertexOHalfedgeCWIter(*this, _vh, true); }
956  { return VertexOHalfedgeCCWIter(*this, _vh, true); }
959  { return VertexEdgeIter(*this, _vh, true); }
961  VertexEdgeCWIter ve_cwend(VertexHandle _vh)
962  { return VertexEdgeCWIter(*this, _vh, true); }
965  { return VertexEdgeCCWIter(*this, _vh, true); }
968  { return VertexFaceIter(*this, _vh, true); }
970  VertexFaceCWIter vf_cwend(VertexHandle _vh)
971  { return VertexFaceCWIter(*this, _vh, true); }
974  { return VertexFaceCCWIter(*this, _vh, true); }
975 
977  ConstVertexVertexIter cvv_end(VertexHandle _vh) const
978  { return ConstVertexVertexIter(*this, _vh, true); }
980  ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const
981  { return ConstVertexVertexCWIter(*this, _vh, true); }
983  ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const
984  { return ConstVertexVertexCCWIter(*this, _vh, true); }
986  ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
987  { return ConstVertexIHalfedgeIter(*this, _vh, true); }
989  ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const
990  { return ConstVertexIHalfedgeCWIter(*this, _vh, true); }
992  ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const
993  { return ConstVertexIHalfedgeCCWIter(*this, _vh, true); }
995  ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
996  { return ConstVertexOHalfedgeIter(*this, _vh, true); }
998  ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const
999  { return ConstVertexOHalfedgeCWIter(*this, _vh, true); }
1001  ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const
1002  { return ConstVertexOHalfedgeCCWIter(*this, _vh, true); }
1004  ConstVertexEdgeIter cve_end(VertexHandle _vh) const
1005  { return ConstVertexEdgeIter(*this, _vh, true); }
1007  ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const
1008  { return ConstVertexEdgeCWIter(*this, _vh, true); }
1010  ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const
1011  { return ConstVertexEdgeCCWIter(*this, _vh, true); }
1013  ConstVertexFaceIter cvf_end(VertexHandle _vh) const
1014  { return ConstVertexFaceIter(*this, _vh, true); }
1016  ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const
1017  { return ConstVertexFaceCWIter(*this, _vh, true); }
1019  ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const
1020  { return ConstVertexFaceCCWIter(*this, _vh, true); }
1021 
1024  { return FaceVertexIter(*this, _fh, true); }
1027  { return FaceVertexCWIter(*this, _fh, true); }
1029  FaceVertexCCWIter fv_ccwend(FaceHandle _fh)
1030  { return FaceVertexCCWIter(*this, _fh, true); }
1033  { return FaceHalfedgeIter(*this, _fh, true); }
1036  { return FaceHalfedgeCWIter(*this, _fh, true); }
1038  FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh)
1039  { return FaceHalfedgeCCWIter(*this, _fh, true); }
1042  { return FaceEdgeIter(*this, _fh, true); }
1045  { return FaceEdgeCWIter(*this, _fh, true); }
1047  FaceEdgeCCWIter fe_ccwend(FaceHandle _fh)
1048  { return FaceEdgeCCWIter(*this, _fh, true); }
1051  { return FaceFaceIter(*this, _fh, true); }
1054  { return FaceFaceCWIter(*this, _fh, true); }
1056  FaceFaceCCWIter ff_ccwend(FaceHandle _fh)
1057  { return FaceFaceCCWIter(*this, _fh, true); }
1060  { return HalfedgeLoopIter(*this, _heh, true); }
1062  HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh)
1063  { return HalfedgeLoopCWIter(*this, _heh, true); }
1066  { return HalfedgeLoopCCWIter(*this, _heh, true); }
1067 
1069  ConstFaceVertexIter cfv_end(FaceHandle _fh) const
1070  { return ConstFaceVertexIter(*this, _fh, true); }
1072  ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const
1073  { return ConstFaceVertexCWIter(*this, _fh, true); }
1075  ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const
1076  { return ConstFaceVertexCCWIter(*this, _fh, true); }
1078  ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
1079  { return ConstFaceHalfedgeIter(*this, _fh, true); }
1081  ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const
1082  { return ConstFaceHalfedgeCWIter(*this, _fh, true); }
1084  ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const
1085  { return ConstFaceHalfedgeCCWIter(*this, _fh, true); }
1087  ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
1088  { return ConstFaceEdgeIter(*this, _fh, true); }
1090  ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const
1091  { return ConstFaceEdgeCWIter(*this, _fh, true); }
1093  ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const
1094  { return ConstFaceEdgeCCWIter(*this, _fh, true); }
1096  ConstFaceFaceIter cff_end(FaceHandle _fh) const
1097  { return ConstFaceFaceIter(*this, _fh, true); }
1099  ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const
1100  { return ConstFaceFaceCWIter(*this, _fh, true); }
1102  ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const
1103  { return ConstFaceFaceCCWIter(*this, _fh, true); }
1105  ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
1106  { return ConstHalfedgeLoopIter(*this, _heh, true); }
1108  ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const
1109  { return ConstHalfedgeLoopCWIter(*this, _heh, true); }
1111  ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const
1112  { return ConstHalfedgeLoopCCWIter(*this, _heh, true); }
1114 
1117 
1119  template<
1120  typename CONTAINER_TYPE,
1121  typename ITER_TYPE,
1122  ITER_TYPE (CONTAINER_TYPE::*begin_fn)() const,
1123  ITER_TYPE (CONTAINER_TYPE::*end_fn)() const>
1124  class EntityRange {
1125  public:
1126  EntityRange(CONTAINER_TYPE &container) : container_(container) {}
1127  ITER_TYPE begin() const { return (container_.*begin_fn)(); }
1128  ITER_TYPE end() const { return (container_.*end_fn)(); }
1129 
1130  private:
1131  CONTAINER_TYPE &container_;
1132  };
1133  typedef EntityRange<
1134  const PolyConnectivity,
1138  typedef EntityRange<
1139  const PolyConnectivity,
1143  typedef EntityRange<
1144  const PolyConnectivity,
1148  typedef EntityRange<
1149  const PolyConnectivity,
1153 
1158  ConstVertexRange vertices() const { return ConstVertexRange(*this); }
1159 
1164  ConstHalfedgeRange halfedges() const { return ConstHalfedgeRange(*this); }
1165 
1170  ConstEdgeRange edges() const { return ConstEdgeRange(*this); }
1171 
1176  ConstFaceRange faces() const { return ConstFaceRange(*this); }
1177 
1179  template<
1180  typename CONTAINER_TYPE,
1181  typename ITER_TYPE,
1182  typename CENTER_ENTITY_TYPE,
1183  ITER_TYPE (CONTAINER_TYPE::*begin_fn)(CENTER_ENTITY_TYPE) const,
1184  ITER_TYPE (CONTAINER_TYPE::*end_fn)(CENTER_ENTITY_TYPE) const>
1186  public:
1188  const CONTAINER_TYPE &container,
1189  CENTER_ENTITY_TYPE center) :
1190  container_(container), center_(center) {}
1191  ITER_TYPE begin() { return (container_.*begin_fn)(center_); }
1192  ITER_TYPE end() { return (container_.*end_fn)(center_); }
1193 
1194  private:
1195  const CONTAINER_TYPE &container_;
1196  CENTER_ENTITY_TYPE center_;
1197  };
1198 
1199  typedef CirculatorRange<
1200  PolyConnectivity,
1201  ConstVertexVertexCWIter,
1202  VertexHandle,
1205  typedef CirculatorRange<
1206  PolyConnectivity,
1207  ConstVertexIHalfedgeIter,
1208  VertexHandle,
1211  typedef CirculatorRange<
1212  PolyConnectivity,
1213  ConstVertexOHalfedgeIter, VertexHandle,
1216  typedef CirculatorRange<
1217  PolyConnectivity,
1218  ConstVertexEdgeIter,
1219  VertexHandle,
1222  typedef CirculatorRange<
1223  PolyConnectivity,
1224  ConstVertexFaceIter,
1225  VertexHandle,
1228  typedef CirculatorRange<
1229  PolyConnectivity,
1230  ConstFaceVertexIter,
1231  FaceHandle,
1234  typedef CirculatorRange<
1235  PolyConnectivity,
1236  ConstFaceHalfedgeIter,
1237  FaceHandle,
1240  typedef CirculatorRange<
1241  PolyConnectivity,
1242  ConstFaceEdgeIter,
1243  FaceHandle,
1246  typedef CirculatorRange<
1247  PolyConnectivity,
1248  ConstFaceFaceIter,
1249  FaceHandle,
1252 
1257  ConstVertexVertexRange vv_range(VertexHandle _vh) const {
1258  return ConstVertexVertexRange(*this, _vh);
1259  }
1260 
1265  ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const {
1266  return ConstVertexIHalfedgeRange(*this, _vh);
1267  }
1268 
1273  ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const {
1274  return ConstVertexOHalfedgeRange(*this, _vh);
1275  }
1276 
1281  ConstVertexEdgeRange ve_range(VertexHandle _vh) const {
1282  return ConstVertexEdgeRange(*this, _vh);
1283  }
1284 
1289  ConstVertexFaceRange vf_range(VertexHandle _vh) const {
1290  return ConstVertexFaceRange(*this, _vh);
1291  }
1292 
1297  ConstFaceVertexRange fv_range(FaceHandle _fh) const {
1298  return ConstFaceVertexRange(*this, _fh);
1299  }
1300 
1305  ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const {
1306  return ConstFaceHalfedgeRange(*this, _fh);
1307  }
1308 
1313  ConstFaceEdgeRange fe_range(FaceHandle _fh) const {
1314  return ConstFaceEdgeRange(*this, _fh);
1315  }
1316 
1321  ConstFaceFaceRange ff_range(FaceHandle _fh) const {
1322  return ConstFaceFaceRange(*this, _fh);
1323  }
1324 
1326 
1327  //===========================================================================
1330  //===========================================================================
1331 
1339  bool is_boundary(HalfedgeHandle _heh) const
1340  { return ArrayKernel::is_boundary(_heh); }
1341 
1350  bool is_boundary(EdgeHandle _eh) const
1351  {
1352  return (is_boundary(halfedge_handle(_eh, 0)) ||
1353  is_boundary(halfedge_handle(_eh, 1)));
1354  }
1355 
1367  bool is_boundary(VertexHandle _vh) const
1368  {
1369  HalfedgeHandle heh(halfedge_handle(_vh));
1370  return (!(heh.is_valid() && face_handle(heh).is_valid()));
1371  }
1372 
1382  bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
1383 
1394  bool is_manifold(VertexHandle _vh) const;
1395 
1398  // --- shortcuts ---
1399 
1401  inline FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
1402  { return face_handle(opposite_halfedge_handle(_heh)); }
1403 
1404  // --- misc ---
1405 
1409  void adjust_outgoing_halfedge(VertexHandle _vh);
1410 
1412  HalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
1414  uint valence(VertexHandle _vh) const;
1416  uint valence(FaceHandle _fh) const;
1417 
1418  // --- connectivity operattions
1419 
1434  void collapse(HalfedgeHandle _heh);
1439  bool is_simple_link(EdgeHandle _eh) const;
1444  bool is_simply_connected(FaceHandle _fh) const;
1457  FaceHandle remove_edge(EdgeHandle _eh);
1461  void reinsert_edge(EdgeHandle _eh);
1471  HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
1472 
1485  void split(FaceHandle _fh, VertexHandle _vh);
1486 
1500  void split_copy(FaceHandle _fh, VertexHandle _vh);
1501 
1515  void triangulate(FaceHandle _fh);
1516 
1519  void triangulate();
1520 
1531  void split_edge(EdgeHandle _eh, VertexHandle _vh);
1532 
1544  void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
1545 
1546 
1552  const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
1554  Vertex& deref(VertexHandle _h) { return vertex(_h); }
1555  const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
1556  Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
1557  const Edge& deref(EdgeHandle _h) const { return edge(_h); }
1558  Edge& deref(EdgeHandle _h) { return edge(_h); }
1559  const Face& deref(FaceHandle _h) const { return face(_h); }
1560  Face& deref(FaceHandle _h) { return face(_h); }
1562 
1563 protected:
1565  void collapse_edge(HalfedgeHandle _hh);
1567  void collapse_loop(HalfedgeHandle _hh);
1568 
1569 
1570 
1571 private: // Working storage for add_face()
1573  {
1574  HalfedgeHandle halfedge_handle;
1575  bool is_new;
1576  bool needs_adjust;
1577  };
1578  std::vector<AddFaceEdgeInfo> edgeData_; //
1579  std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
1580 
1581 };
1582 
1583 }//namespace OpenMesh
1584 
1585 #endif//OPENMESH_POLYCONNECTIVITY_HH
ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const
const face - vertex circulator cw
ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const
const face - halfedge circulator cw
ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
const vertex circulator
FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh)
face - halfedge circulator ccw
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
const vertex circulator
VertexEdgeCWIter ve_cwbegin(VertexHandle _vh)
vertex - edge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > VertexVertexCWIter
ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
const vertex - incoming halfedge circulator
VertexOHalfedgeCWIter VOHCWIter
Alias typedef.
ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const
const face - face circulator cw
HalfedgeLoopIter hl_end(HalfedgeHandle _heh)
face - face circulator
VertexVertexCWIter vv_cwiter(VertexHandle _vh)
vertex - vertex circulator cw
VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter
void assign_connectivity(const ArrayKernel &_other)
Definition: ArrayKernel.cc:76
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
VertexEdgeCWIter ve_cwiter(VertexHandle _vh)
vertex - edge circulator cw
VertexVertexCWIter vv_cwbegin(VertexHandle _vh)
vertex - vertex circulator cw
ConstVertexIHalfedgeCCWIter CVIHCCWIter
Alias typedef.
ConstFaceHalfedgeIter CFHIter
Alias typedef.
FaceVertexCCWIter FVCCWIter
Alias typedef.
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > FaceVertexIter
ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const
const vertex - edge circulator ccw
ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const
const vertex circulator cw
HalfedgeIter halfedges_end()
End iterator for halfedges.
VertexIHalfedgeIter vih_end(VertexHandle _vh)
vertex - incoming halfedge circulator
FaceHalfedgeIter fh_begin(FaceHandle _fh)
face - halfedge circulator
FaceFaceCCWIter ff_ccwend(FaceHandle _fh)
face - face circulator ccw
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
ConstFaceFaceIter cff_iter(FaceHandle _fh) const
const face - face circulator
Iterators::GenericCirculatorT< This, This::VertexHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle, false > VertexVertexCCWIter
FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh)
face - halfedge circulator ccw
ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const
const Face & deref(FaceHandle _h) const
Get item from handle.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > FaceHalfedgeCCWIter
FaceHalfedgeIter ConstFaceHalfedgeIter
VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh)
vertex - incoming halfedge circulator cw
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel,&ArrayKernel::has_edge_status,&ArrayKernel::n_edges > EdgeIter
Linear iterator.
VertexIHalfedgeIter ConstVertexIHalfedgeIter
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > HalfedgeLoopCCWIter
FaceVertexCCWIter ConstFaceVertexCCWIter
HalfedgeIter halfedges_begin()
Begin iterator for halfedges.
FaceEdgeCWIter FECWIter
Alias typedef.
FaceEdgeIter fe_iter(FaceHandle _fh)
face - edge circulator
ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
const halfedge circulator
ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const
const face - edge circulator ccw
FaceIter faces_end()
End iterator for faces.
ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
const face - edge circulator
ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle, false > VertexIHalfedgeCCWIter
FaceEdgeCCWIter FECWWIter
Alias typedef.
FaceFaceCWIter ff_cwend(FaceHandle _fh)
face - face circulator cw
HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh)
face - face circulator cw
VertexOHalfedgeCCWIter voh_ccwbegin(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
Iterators::GenericCirculatorT< This, This::FaceHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle, false > FaceVertexCWIter
VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
VertexOHalfedgeCCWIter voh_ccwiter(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
VertexEdgeCWIter VECWIter
Alias typedef.
ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const
const vertex - face circulator ccw
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > FaceEdgeIter
HalfedgeIter ConstHalfedgeIter
Linear iterator.
ConstVertexRange vertices() const
FaceFaceCWIter ff_cwiter(FaceHandle _fh)
face - face circulator cw
VertexVertexCCWIter vv_ccwiter(VertexHandle _vh)
vertex - vertex circulator ccw
FaceHalfedgeCCWIter FHCWWIter
Alias typedef.
FaceVertexCCWIter fv_ccwend(FaceHandle _fh)
face - vertex circulator ccw
CirculatorRange< PolyConnectivity, ConstFaceHalfedgeIter, FaceHandle,&PolyConnectivity::cfh_begin,&PolyConnectivity::cfh_end > ConstFaceHalfedgeRange
EdgeIter edges_sbegin()
Begin iterator for edges.
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
ConstVertexVertexCCWIter CVVCCWIter
Alias typedef.
HalfedgeHandle HHandle
Alias typedef.
ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const
const vertex - face circulator cw
ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const
const face - halfedge circulator cw
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter,&PolyConnectivity::halfedges_begin,&PolyConnectivity::halfedges_end > ConstHalfedgeRange
ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const
const face - face circulator ccw
FaceFaceIter FFIter
Alias typedef.
FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh)
face - vertex circulator ccw
ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const
const face - halfedge circulator ccw
CirculatorRange< PolyConnectivity, ConstFaceEdgeIter, FaceHandle,&PolyConnectivity::cfe_begin,&PolyConnectivity::cfe_end > ConstFaceEdgeRange
ConstVertexVertexRange vv_range(VertexHandle _vh) const
VertexFaceCCWIter ConstVertexFaceCCWIter
CirculatorRange< PolyConnectivity, ConstVertexIHalfedgeIter, VertexHandle,&PolyConnectivity::cvih_begin,&PolyConnectivity::cvih_end > ConstVertexIHalfedgeRange
Iterators::GenericCirculatorT< This, This::FaceHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle, false > FaceEdgeCWIter
VertexOHalfedgeIter voh_iter(VertexHandle _vh)
vertex - outgoing halfedge circulator
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter,&PolyConnectivity::faces_begin,&PolyConnectivity::faces_end > ConstFaceRange
ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
ConstVertexOHalfedgeCCWIter CVOHCCWIter
Alias typedef.
VertexVertexIter vv_end(VertexHandle _vh)
vertex - vertex circulator
ConstFaceVertexCWIter CFVCWIter
Alias typedef.
bool is_valid() const
The handle is valid iff the index is not equal to -1.
Definition: Handles.hh:77
HalfedgeLoopCWIter ConstHalfedgeLoopCWIter
Connectivity Class for polygonal meshes.
FaceEdgeCWIter fe_cwiter(FaceHandle _fh)
face - edge circulator cw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle, false > VertexEdgeCCWIter
Iterators::GenericCirculatorT< This, This::VertexHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toFaceHandle > VertexFaceCWIter
VertexEdgeCCWIter VECCWIter
Alias typedef.
Handle for a halfedge entity.
Definition: Handles.hh:132
VertexEdgeCCWIter ve_ccwiter(VertexHandle _vh)
vertex - edge circulator ccw
CirculatorRange< PolyConnectivity, ConstFaceFaceIter, FaceHandle,&PolyConnectivity::cff_begin,&PolyConnectivity::cff_end > ConstFaceFaceRange
ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const
const face - edge circulator cw
Edge & deref(EdgeHandle _h)
Get item from handle.
FaceVertexCWIter fv_cwbegin(FaceHandle _fh)
face - vertex circulator cw
CirculatorRange< PolyConnectivity, ConstVertexVertexCWIter, VertexHandle,&PolyConnectivity::cvv_cwbegin,&PolyConnectivity::cvv_cwend > ConstVertexVertexRange
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > VertexOHalfedgeIter
ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const
const vertex - edge circulator ccw
ConstFaceFaceRange ff_range(FaceHandle _fh) const
VertexIHalfedgeCCWIter VIHICCWter
Alias typedef.
FaceHalfedgeCWIter fh_cwend(FaceHandle _fh)
face - halfedge circulator cw
ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const
const halfedge circulator ccw
VertexEdgeCWIter ve_cwend(VertexHandle _vh)
vertex - edge circulator cw
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
VertexIHalfedgeCWIter VIHICWter
Alias typedef.
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle > FaceFaceIter
FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh)
face - halfedge circulator ccw
VertexVertexCWIter ConstVertexVertexCWIter
FaceFaceIter ff_begin(FaceHandle _fh)
face - face circulator
ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const
const face - vertex circulator ccw
ConstVertexOHalfedgeCWIter CVOHCWIter
Alias typedef.
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
CirculatorRange< PolyConnectivity, ConstVertexFaceIter, VertexHandle,&PolyConnectivity::cvf_begin,&PolyConnectivity::cvf_end > ConstVertexFaceRange
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle > VertexIHalfedgeCWIter
ConstVertexIter CVIter
Alias typedef.
VertexVertexCWIter VVCWIter
Alias typedef.
ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
ConstVertexEdgeIter CVEIter
Alias typedef.
VertexEdgeCWIter ConstVertexEdgeCWIter
FaceIter FIter
Alias typedef.
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
const face - face circulator
Generic class for vertex/halfedge/edge/face ranges.
ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const
const vertex circulator cw
ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const
const face - edge circulator ccw
VertexEdgeIter VEIter
Alias typedef.
VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh)
vertex - outgoing halfedge circulator cw
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:403
EdgeIter edges_begin()
Begin iterator for edges.
ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const
const vertex circulator ccw
ConstVertexVertexCWIter CVVCWIter
Alias typedef.
FaceIter faces_begin()
Begin iterator for faces.
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
FaceVertexIter fv_end(FaceHandle _fh)
face - vertex circulator
VertexVertexCCWIter VVCCWIter
Alias typedef.
ConstFaceEdgeCCWIter CFECCWIter
Alias typedef.
HalfedgeIter HIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > FaceVertexCCWIter
VertexVertexIter VVIter
Alias typedef.
ConstVertexIHalfedgeCWIter CVIHCWIter
Alias typedef.
ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const
const face - halfedge circulator ccw
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const
const face - face circulator
ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const
CirculatorRange< PolyConnectivity, ConstVertexEdgeIter, VertexHandle,&PolyConnectivity::cve_begin,&PolyConnectivity::cve_end > ConstVertexEdgeRange
ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const
const vertex circulator cw
ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const
const face - vertex circulator cw
VertexFaceIter VFIter
Alias typedef.
ConstHalfedgeRange halfedges() const
FaceEdgeCWIter fe_cwbegin(FaceHandle _fh)
face - edge circulator cw
ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const
const face - edge circulator ccw
ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const
const face - edge circulator cw
ConstVertexVertexIter cvv_end(VertexHandle _vh) const
const vertex circulator
ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const
const face - vertex circulator cw
ConstFaceVertexRange fv_range(FaceHandle _fh) const
FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh)
face - edge circulator ccw
VertexFaceIter vf_iter(VertexHandle _vh)
vertex - face circulator
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeHalfedgeHandle > VertexIHalfedgeIter
ConstVertexVertexIter CVVIter
Alias typedef.
FaceVertexCWIter ConstFaceVertexCWIter
ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const
const vertex - edge circulator ccw
Iterators::GenericCirculatorT< This, This::VertexHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > VertexEdgeCWIter
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > HalfedgeLoopIter
HalfedgeLoopCCWIter hl_ccwend(HalfedgeHandle _heh)
face - face circulator ccw
FaceIter ConstFaceIter
Linear iterator.
FaceEdgeCCWIter ConstFaceEdgeCCWIter
VertexEdgeCCWIter ve_ccwend(VertexHandle _vh)
vertex - edge circulator ccw
VertexVertexIter vv_begin(VertexHandle _vh)
vertex - vertex circulator
FaceFaceIter ff_iter(FaceHandle _fh)
face - face circulator
ConstVertexEdgeCCWIter CVECCWIter
Alias typedef.
ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const
const face - edge circulator cw
FaceFaceCCWIter ConstFaceFaceCCWIter
FaceFaceCCWIter ff_ccwiter(FaceHandle _fh)
face - face circulator ccw
FaceHalfedgeCWIter fh_cwbegin(FaceHandle _fh)
face - halfedge circulator cw
ConstVertexEdgeRange ve_range(VertexHandle _vh) const
FaceIter faces_sbegin()
Begin iterator for faces.
VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh)
vertex - incoming halfedge circulator cw
VertexIHalfedgeIter vih_begin(VertexHandle _vh)
vertex - incoming halfedge circulator
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const
const face - face circulator
VertexVertexCCWIter ConstVertexVertexCCWIter
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const
const face - vertex circulator ccw
Iterators::GenericCirculatorT< This, This::FaceHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle > FaceFaceCCWIter
VertexVertexIter vv_iter(VertexHandle _vh)
vertex - vertex circulator
ConstVertexIter vertices_sbegin() const
Const begin iterator for vertices.
VertexFaceCCWIter vf_ccwiter(VertexHandle _vh)
vertex - face circulator ccw
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
const face - halfedge circulator
ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
VertexFaceCWIter vf_cwbegin(VertexHandle _vh)
vertex - face circulator cw
ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const
const face - face circulator
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toFaceHandle > VertexFaceIter
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > FaceHalfedgeCWIter
ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const
const vertex circulator ccw
VertexIHalfedgeCCWIter ConstVertexIHalfedgeCCWIter
Generic class for iterator ranges.
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh)
halfedge circulator
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
VertexFaceCCWIter vf_ccwbegin(VertexHandle _vh)
vertex - face circulator ccw
VertexIHalfedgeCCWIter vih_ccwiter(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
Handle for a vertex entity.
Definition: Handles.hh:125
VertexFaceIter vf_end(VertexHandle _vh)
vertex - face circulator
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel,&ArrayKernel::has_halfedge_status,&ArrayKernel::n_halfedges > HalfedgeIter
Linear iterator.
HalfedgeLoopIter ConstHalfedgeLoopIter
ConstEdgeIter CEIter
Alias typedef.
VertexIter vertices_begin()
Begin iterator for vertices.
VertexEdgeIter ve_end(VertexHandle _vh)
vertex - edge circulator
ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const
const face - halfedge circulator ccw
ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const
const vertex - edge circulator cw
ConstHalfedgeIter CHIter
Alias typedef.
FaceVertexIter fv_iter(FaceHandle _fh)
face - vertex circulator
ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const
const vertex - edge circulator cw
VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh)
vertex - incoming halfedge circulator cw
Handle for a edge entity.
Definition: Handles.hh:139
VertexIter vertices_end()
End iterator for vertices.
FaceEdgeCWIter fe_cwend(FaceHandle _fh)
face - edge circulator cw
FaceVertexCWIter FVCWIter
Alias typedef.
FaceHalfedgeIter fh_end(FaceHandle _fh)
face - halfedge circulator
FaceHalfedgeCWIter ConstFaceHalfedgeCWIter
const Edge & deref(EdgeHandle _h) const
Get item from handle.
VertexFaceCWIter vf_cwend(VertexHandle _vh)
vertex - face circulator cw
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > VertexEdgeIter
FaceVertexCCWIter fv_ccwiter(FaceHandle _fh)
face - vertex circulator ccw
ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator ccw
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Handle for a face entity.
Definition: Handles.hh:146
ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const
const face - vertex circulator ccw
Iterators::GenericCirculatorT< This, This::FaceHandle, This::EdgeHandle,&Iterators::GenericCirculatorBaseT< This >::toEdgeHandle > FaceEdgeCCWIter
ConstFaceVertexCCWIter CFVCCWIter
Alias typedef.
FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh)
face - face circulator ccw
VertexEdgeCCWIter ConstVertexEdgeCCWIter
VertexVertexCCWIter vv_ccwbegin(VertexHandle _vh)
vertex - vertex circulator ccw
FaceHalfedgeCWIter FHCWIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle, false > VertexOHalfedgeCCWIter
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel,&ArrayKernel::has_face_status,&ArrayKernel::n_faces > FaceIter
Linear iterator.
ConstVertexFaceIter CVFIter
Alias typedef.
VertexOHalfedgeIter voh_end(VertexHandle _vh)
vertex - outgoing halfedge circulator
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
ConstFaceRange faces() const
ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const
const face - face circulator cw
FaceEdgeIter fe_end(FaceHandle _fh)
face - edge circulator
CirculatorRange< PolyConnectivity, ConstVertexOHalfedgeIter, VertexHandle,&PolyConnectivity::cvoh_begin,&PolyConnectivity::cvoh_end > ConstVertexOHalfedgeRange
VertexOHalfedgeIter ConstVertexOHalfedgeIter
VertexIHalfedgeCCWIter vih_ccwend(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const
const vertex - face circulator cw
Iterators::GenericCirculatorT_DEPRECATED< This, This::VertexHandle, This::VertexHandle,&Iterators::GenericCirculatorBaseT< This >::toVertexHandle > VertexVertexIter
ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const
const halfedge circulator cw
ConstVertexFaceCCWIter CVFCCWIter
Alias typedef.
VertexIHalfedgeCCWIter vih_ccwbegin(VertexHandle _vh)
vertex - incoming halfedge circulator ccw
FaceHandle FHandle
Alias typedef.
FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh)
face - edge circulator ccw
EdgeIter edges_end()
End iterator for edges.
VertexFaceCWIter ConstVertexFaceCWIter
ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const
const vertex - edge circulator cw
ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
const vertex - face circulator
ConstVertexFaceCWIter CVFCWIter
Alias typedef.
CirculatorRange< PolyConnectivity, ConstFaceVertexIter, FaceHandle,&PolyConnectivity::cfv_begin,&PolyConnectivity::cfv_end > ConstFaceVertexRange
ConstFaceEdgeIter CFEIter
Alias typedef.
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
VertexOHalfedgeCCWIter voh_ccwend(VertexHandle _vh)
vertex - outgoing halfedge circulator ccw
ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
const vertex - edge circulator
FaceFaceCWIter ff_cwbegin(FaceHandle _fh)
face - face circulator cw
VertexEdgeIter ve_begin(VertexHandle _vh)
vertex - edge circulator
HalfedgeLoopCCWIter ConstHalfedgeLoopCCWIter
VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter
FaceEdgeCCWIter fe_ccwend(FaceHandle _fh)
face - edge circulator ccw
ConstEdgeIter edges_sbegin() const
Const begin iterator for edges.
ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
FaceHalfedgeIter fh_iter(FaceHandle _fh)
face - halfedge circulator
FaceFaceIter ff_end(FaceHandle _fh)
face - face circulator
ConstFaceHalfedgeCWIter CFHCWIter
Alias typedef.
FaceEdgeIter fe_begin(FaceHandle _fh)
face - edge circulator
HalfedgeLoopIter hl_begin(HalfedgeHandle _heh)
halfedge circulator
VertexEdgeCCWIter ve_ccwbegin(VertexHandle _vh)
vertex - edge circulator ccw
FaceHalfedgeIter FHIter
Alias typedef.
FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter
ConstFaceVertexIter CFVIter
Alias typedef.
ConstFaceEdgeCWIter CFECWIter
Alias typedef.
VertexIter VIter
Alias typedef.
VertexIter ConstVertexIter
Linear iterator.
ConstFaceFaceIter CFFIter
Alias typedef.
VertexIHalfedgeIter VIHIter
Alias typedef.
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter,&PolyConnectivity::vertices_begin,&PolyConnectivity::vertices_end > ConstVertexRange
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const
const vertex - face circulator ccw
ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const
const face - face circulator cw
void assign_connectivity(const PolyConnectivity &_other)
EdgeHandle EHandle
Alias typedef.
ConstVertexEdgeCWIter CVECWIter
Alias typedef.
VertexFaceCCWIter vf_ccwend(VertexHandle _vh)
vertex - face circulator ccw
static const FaceHandle InvalidFaceHandle
Invalid handle.
ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const
const vertex circulator ccw
FaceVertexIter FVIter
Alias typedef.
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter,&PolyConnectivity::edges_begin,&PolyConnectivity::edges_end > ConstEdgeRange
VertexIHalfedgeIter vih_iter(VertexHandle _vh)
vertex - incoming halfedge circulator
ConstFaceIter faces_sbegin() const
Const begin iterator for faces.
Iterators::GenericCirculatorT< This, This::VertexHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > VertexOHalfedgeCWIter
ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const
const face - face circulator ccw
ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const
const vertex - incoming halfedge circulator ccw
ConstFaceFaceCCWIter CFFCCWIter
Alias typedef.
FaceHalfedgeCWIter fh_cwiter(FaceHandle _fh)
face - halfedge circulator cw
VertexEdgeIter ve_iter(VertexHandle _vh)
vertex - edge circulator
ConstFaceFaceCWIter CFFCWIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > HalfedgeLoopCWIter
FaceVertexCWIter fv_cwend(FaceHandle _fh)
face - vertex circulator cw
VertexVertexCCWIter vv_ccwend(VertexHandle _vh)
vertex - vertex circulator ccw
Face & deref(FaceHandle _h)
Get item from handle.
EdgeIter EIter
Alias typedef.
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const
const vertex - incoming halfedge circulator cw
VertexOHalfedgeCCWIter VOHCCWIter
Alias typedef.
FaceVertexCWIter fv_cwiter(FaceHandle _fh)
face - vertex circulator cw
ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const
const face - halfedge circulator cw
VertexOHalfedgeIter voh_begin(VertexHandle _vh)
vertex - outgoing halfedge circulator
ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const
const vertex - face circulator ccw
ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
ConstFaceEdgeRange fe_range(FaceHandle _fh) const
VertexOHalfedgeIter VOHIter
Alias typedef.
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
VertexFaceCWIter vf_cwiter(VertexHandle _vh)
vertex - face circulator cw
ConstFaceIter CFIter
Alias typedef.
Vertex & deref(VertexHandle _h)
Get item from handle.
FaceVertexIter fv_begin(FaceHandle _fh)
face - vertex circulator
ConstVertexFaceRange vf_range(VertexHandle _vh) const
ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator cw
VertexIter vertices_sbegin()
Begin iterator for vertices.
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
VertexHandle add_vertex()
Add a new vertex.
ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
const face - vertex circulator
VertexVertexIter ConstVertexVertexIter
VertexOHalfedgeCCWIter ConstVertexOHalfedgeCCWIter
HalfedgeLoopCCWIter hl_ccwbegin(HalfedgeHandle _heh)
halfedge circulator ccw
ConstEdgeRange edges() const
EdgeIter ConstEdgeIter
Linear iterator.
ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const
const vertex - face circulator cw
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
Iterators::GenericCirculatorT< This, This::VertexHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toFaceHandle, false > VertexFaceCCWIter
Iterators::GenericCirculatorT_DEPRECATED< This, This::FaceHandle, This::HalfedgeHandle,&Iterators::GenericCirculatorBaseT< This >::toHalfedgeHandle > FaceHalfedgeIter
VertexFaceIter vf_begin(VertexHandle _vh)
vertex - face circulator
ConstFaceHalfedgeCCWIter CFHCCWIter
Alias typedef.
Iterators::GenericCirculatorT< This, This::FaceHandle, This::FaceHandle,&Iterators::GenericCirculatorBaseT< This >::toOppositeFaceHandle, false > FaceFaceCWIter
VertexVertexCWIter vv_cwend(VertexHandle _vh)
vertex - vertex circulator cw
VertexFaceCCWIter VFCCWIter
Alias typedef.
FaceEdgeIter FEIter
Alias typedef.
VertexFaceCWIter VFCWIter
Alias typedef.
ConstHalfedgeIter halfedges_sbegin() const
Const begin iterator for halfedges.