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/SmartRange.hh>
49
50 namespace OpenMesh
51 {
52
53 namespace Iterators
54 {
55 template <class Mesh, class ValueHandle, class MemberOwner, bool (MemberOwner::*PrimitiveStatusMember)() const, size_t (MemberOwner::*PrimitiveCountMember)() const>
56 class GenericIteratorT;
57
58 template<class Mesh>
59 class GenericCirculatorBaseT;
60
61 template<typename Traits>
62 class GenericCirculatorT_DEPRECATED;
63
64 template<typename Traits, bool CW>
65 class GenericCirculatorT;
66 }
67
68 template <typename RangeTraitT>
69 class EntityRange;
70
71 template<
72 typename CONTAINER_T,
73 typename ITER_T,
74 ITER_T (CONTAINER_T::*begin_fn)() const,
75 ITER_T (CONTAINER_T::*end_fn)() const>
76 struct RangeTraitT
77 {
78 using CONTAINER_TYPE = CONTAINER_T;
79 using ITER_TYPE = ITER_T;
80 static ITER_TYPE begin(const CONTAINER_TYPE& _container) { return (_container.*begin_fn)(); }
81 static ITER_TYPE end(const CONTAINER_TYPE& _container) { return (_container.*end_fn)(); }
82 };
83
84
85 template <typename CirculatorRangeTraitT>
86 class CirculatorRange;
87
88 template<
89 typename CONTAINER_T,
90 typename ITER_T,
91 typename CENTER_ENTITY_T,
92 typename TO_ENTITY_T,
93 ITER_T (CONTAINER_T::*begin_fn)(CENTER_ENTITY_T) const,
94 ITER_T (CONTAINER_T::*end_fn)(CENTER_ENTITY_T) const>
95 struct CirculatorRangeTraitT
96 {
97 using CONTAINER_TYPE = CONTAINER_T;
98 using ITER_TYPE = ITER_T;
99 using CENTER_ENTITY_TYPE = CENTER_ENTITY_T;
100 using TO_ENTITYE_TYPE = TO_ENTITY_T;
101 static ITER_TYPE begin(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*begin_fn)(_ce); }
102 static ITER_TYPE end(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*end_fn)(_ce); }
103 };
104
105 struct SmartVertexHandle;
106 struct SmartHalfedgeHandle;
107 struct SmartEdgeHandle;
108 struct SmartFaceHandle;
109
112 class OPENMESHDLLEXPORT PolyConnectivity : public ArrayKernel
113 {
114 public:
116
117 static const VertexHandle InvalidVertexHandle;
120 static const HalfedgeHandle InvalidHalfedgeHandle;
122 static const EdgeHandle InvalidEdgeHandle;
124 static const FaceHandle InvalidFaceHandle;
126
127 typedef PolyConnectivity This;
128
129 //--- iterators ---
130
136 typedef Iterators::GenericIteratorT<This, This::VertexHandle, ArrayKernel , &ArrayKernel::has_vertex_status, &ArrayKernel::n_vertices> VertexIter;
138 typedef Iterators::GenericIteratorT<This, This::HalfedgeHandle, ArrayKernel , &ArrayKernel::has_halfedge_status, &ArrayKernel::n_halfedges> HalfedgeIter;
139 typedef Iterators::GenericIteratorT<This, This::EdgeHandle, ArrayKernel , &ArrayKernel::has_edge_status, &ArrayKernel::n_edges> EdgeIter;
140 typedef Iterators::GenericIteratorT<This, This::FaceHandle, ArrayKernel , &ArrayKernel::has_face_status, &ArrayKernel::n_faces> FaceIter;
141
142 typedef VertexIter ConstVertexIter;
143 typedef HalfedgeIter ConstHalfedgeIter;
144 typedef EdgeIter ConstEdgeIter;
145 typedef FaceIter ConstFaceIter;
147
148 //--- circulators ---
149
155
156 /*
157 * Vertex-centered circulators
158 */
159
160 struct VertexVertexTraits
161 {
162 using Mesh = This;
163 using CenterEntityHandle = This::VertexHandle;
164 using ValueHandle = This::VertexHandle;
165 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return _mesh->to_vertex_handle(_heh);}
166 };
167
168
172 typedef Iterators::GenericCirculatorT_DEPRECATED<VertexVertexTraits> VertexVertexIter;
173 typedef Iterators::GenericCirculatorT<VertexVertexTraits, true> VertexVertexCWIter;
174
178 typedef Iterators::GenericCirculatorT<VertexVertexTraits, false> VertexVertexCCWIter;
179
180
181 struct VertexHalfedgeTraits
182 {
183 using Mesh = This;
184 using CenterEntityHandle = This::VertexHandle;
185 using ValueHandle = This::HalfedgeHandle;
186 static ValueHandle toHandle(const Mesh* const /*_mesh*/, This::HalfedgeHandle _heh) { return _heh;}
187 };
188
192 typedef Iterators::GenericCirculatorT_DEPRECATED<VertexHalfedgeTraits> VertexOHalfedgeIter;
193 typedef Iterators::GenericCirculatorT<VertexHalfedgeTraits, true> VertexOHalfedgeCWIter;
194
198 typedef Iterators::GenericCirculatorT<VertexHalfedgeTraits, false> VertexOHalfedgeCCWIter;
199
200 struct VertexOppositeHalfedgeTraits
201 {
202 using Mesh = This;
203 using CenterEntityHandle = This::VertexHandle;
204 using ValueHandle = This::HalfedgeHandle;
205 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return _mesh->opposite_halfedge_handle(_heh); }
206 };
207
211 typedef Iterators::GenericCirculatorT_DEPRECATED<VertexOppositeHalfedgeTraits> VertexIHalfedgeIter;
212 typedef Iterators::GenericCirculatorT<VertexOppositeHalfedgeTraits, true> VertexIHalfedgeCWIter;
213
217 typedef Iterators::GenericCirculatorT<VertexOppositeHalfedgeTraits, false> VertexIHalfedgeCCWIter;
218
219
220 struct VertexFaceTraits
221 {
222 using Mesh = This;
223 using CenterEntityHandle = This::VertexHandle;
224 using ValueHandle = This::FaceHandle;
225 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->face_handle(_heh); }
226 };
227
231 typedef Iterators::GenericCirculatorT_DEPRECATED<VertexFaceTraits> VertexFaceIter;
232 typedef Iterators::GenericCirculatorT<VertexFaceTraits, true> VertexFaceCWIter;
233
237 typedef Iterators::GenericCirculatorT<VertexFaceTraits, false> VertexFaceCCWIter;
238
239
240 struct VertexEdgeTraits
241 {
242 using Mesh = This;
243 using CenterEntityHandle = This::VertexHandle;
244 using ValueHandle = This::EdgeHandle;
245 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->edge_handle(_heh); }
246 };
247
251 typedef Iterators::GenericCirculatorT_DEPRECATED<VertexEdgeTraits> VertexEdgeIter;
252 typedef Iterators::GenericCirculatorT<VertexEdgeTraits, true> VertexEdgeCWIter;
256 typedef Iterators::GenericCirculatorT<VertexEdgeTraits, false> VertexEdgeCCWIter;
257
258
259 struct FaceHalfedgeTraits
260 {
261 using Mesh = This;
262 using CenterEntityHandle = This::FaceHandle;
263 using ValueHandle = This::HalfedgeHandle;
264 static ValueHandle toHandle(const Mesh* const /*_mesh*/, This::HalfedgeHandle _heh) { return _heh; }
265 };
266
270 typedef Iterators::GenericCirculatorT_DEPRECATED<FaceHalfedgeTraits> HalfedgeLoopIter;
271 typedef Iterators::GenericCirculatorT<FaceHalfedgeTraits, false> HalfedgeLoopCWIter;
275 typedef Iterators::GenericCirculatorT<FaceHalfedgeTraits, true> HalfedgeLoopCCWIter;
276
277 typedef VertexVertexIter ConstVertexVertexIter;
278 typedef VertexVertexCWIter ConstVertexVertexCWIter;
279 typedef VertexVertexCCWIter ConstVertexVertexCCWIter;
280 typedef VertexOHalfedgeIter ConstVertexOHalfedgeIter;
281 typedef VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter;
282 typedef VertexOHalfedgeCCWIter ConstVertexOHalfedgeCCWIter;
283 typedef VertexIHalfedgeIter ConstVertexIHalfedgeIter;
284 typedef VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter;
285 typedef VertexIHalfedgeCCWIter ConstVertexIHalfedgeCCWIter;
286 typedef VertexFaceIter ConstVertexFaceIter;
287 typedef VertexFaceCWIter ConstVertexFaceCWIter;
288 typedef VertexFaceCCWIter ConstVertexFaceCCWIter;
289 typedef VertexEdgeIter ConstVertexEdgeIter;
290 typedef VertexEdgeCWIter ConstVertexEdgeCWIter;
291 typedef VertexEdgeCCWIter ConstVertexEdgeCCWIter;
292
293 /*
294 * Face-centered circulators
295 */
296
297 struct FaceVertexTraits
298 {
299 using Mesh = This;
300 using CenterEntityHandle = This::FaceHandle;
301 using ValueHandle = This::VertexHandle;
302 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->to_vertex_handle(_heh); }
303 };
304
308 typedef Iterators::GenericCirculatorT_DEPRECATED<FaceVertexTraits> FaceVertexIter;
309 typedef Iterators::GenericCirculatorT<FaceVertexTraits, true> FaceVertexCCWIter;
310
314 typedef Iterators::GenericCirculatorT<FaceVertexTraits, false> FaceVertexCWIter;
315
319 typedef Iterators::GenericCirculatorT_DEPRECATED<FaceHalfedgeTraits> FaceHalfedgeIter;
320 typedef Iterators::GenericCirculatorT<FaceHalfedgeTraits, true> FaceHalfedgeCCWIter;
321
325 typedef Iterators::GenericCirculatorT<FaceHalfedgeTraits, false> FaceHalfedgeCWIter;
326
327
328 struct FaceEdgeTraits
329 {
330 using Mesh = This;
331 using CenterEntityHandle = This::FaceHandle;
332 using ValueHandle = This::EdgeHandle;
333 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->edge_handle(_heh); }
334 };
335
339 typedef Iterators::GenericCirculatorT_DEPRECATED<FaceEdgeTraits> FaceEdgeIter;
340 typedef Iterators::GenericCirculatorT<FaceEdgeTraits, true> FaceEdgeCCWIter;
341
345 typedef Iterators::GenericCirculatorT<FaceEdgeTraits, false> FaceEdgeCWIter;
346
347
348 struct FaceFaceTraits
349 {
350 using Mesh = This;
351 using CenterEntityHandle = This::FaceHandle;
352 using ValueHandle = This::FaceHandle;
353 static ValueHandle toHandle(const Mesh* const _mesh, This::HalfedgeHandle _heh) { return static_cast<const ArrayKernel*>(_mesh)->face_handle(_mesh->opposite_halfedge_handle(_heh)); }
354 };
355
359 typedef Iterators::GenericCirculatorT_DEPRECATED<FaceFaceTraits> FaceFaceIter;
360 typedef Iterators::GenericCirculatorT<FaceFaceTraits, true> FaceFaceCCWIter;
361
365 typedef Iterators::GenericCirculatorT<FaceFaceTraits, false> FaceFaceCWIter;
366
367 typedef FaceVertexIter ConstFaceVertexIter;
368 typedef FaceVertexCWIter ConstFaceVertexCWIter;
369 typedef FaceVertexCCWIter ConstFaceVertexCCWIter;
370 typedef FaceHalfedgeIter ConstFaceHalfedgeIter;
371 typedef FaceHalfedgeCWIter ConstFaceHalfedgeCWIter;
372 typedef FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter;
373 typedef FaceEdgeIter ConstFaceEdgeIter;
374 typedef FaceEdgeCWIter ConstFaceEdgeCWIter;
375 typedef FaceEdgeCCWIter ConstFaceEdgeCCWIter;
376 typedef FaceFaceIter ConstFaceFaceIter;
377 typedef FaceFaceCWIter ConstFaceFaceCWIter;
378 typedef FaceFaceCCWIter ConstFaceFaceCCWIter;
379
380 /*
381 * Halfedge circulator
382 */
383 typedef HalfedgeLoopIter ConstHalfedgeLoopIter;
384 typedef HalfedgeLoopCWIter ConstHalfedgeLoopCWIter;
385 typedef HalfedgeLoopCCWIter ConstHalfedgeLoopCCWIter;
386
388
389 // --- shortcuts
390
395 typedef VertexHandle VHandle;
397 typedef HalfedgeHandle HHandle;
398 typedef EdgeHandle EHandle;
399 typedef FaceHandle FHandle;
400
401 typedef VertexIter VIter;
402 typedef HalfedgeIter HIter;
403 typedef EdgeIter EIter;
404 typedef FaceIter FIter;
405
406 typedef ConstVertexIter CVIter;
407 typedef ConstHalfedgeIter CHIter;
408 typedef ConstEdgeIter CEIter;
409 typedef ConstFaceIter CFIter;
410
411 typedef VertexVertexIter VVIter;
412 typedef VertexVertexCWIter VVCWIter;
413 typedef VertexVertexCCWIter VVCCWIter;
414 typedef VertexOHalfedgeIter VOHIter;
415 typedef VertexOHalfedgeCWIter VOHCWIter;
416 typedef VertexOHalfedgeCCWIter VOHCCWIter;
417 typedef VertexIHalfedgeIter VIHIter;
418 typedef VertexIHalfedgeCWIter VIHICWter;
419 typedef VertexIHalfedgeCCWIter VIHICCWter;
420 typedef VertexEdgeIter VEIter;
421 typedef VertexEdgeCWIter VECWIter;
422 typedef VertexEdgeCCWIter VECCWIter;
423 typedef VertexFaceIter VFIter;
424 typedef VertexFaceCWIter VFCWIter;
425 typedef VertexFaceCCWIter VFCCWIter;
426 typedef FaceVertexIter FVIter;
427 typedef FaceVertexCWIter FVCWIter;
428 typedef FaceVertexCCWIter FVCCWIter;
429 typedef FaceHalfedgeIter FHIter;
430 typedef FaceHalfedgeCWIter FHCWIter;
431 typedef FaceHalfedgeCCWIter FHCWWIter;
432 typedef FaceEdgeIter FEIter;
433 typedef FaceEdgeCWIter FECWIter;
434 typedef FaceEdgeCCWIter FECWWIter;
435 typedef FaceFaceIter FFIter;
436
437 typedef ConstVertexVertexIter CVVIter;
438 typedef ConstVertexVertexCWIter CVVCWIter;
439 typedef ConstVertexVertexCCWIter CVVCCWIter;
440 typedef ConstVertexOHalfedgeIter CVOHIter;
441 typedef ConstVertexOHalfedgeCWIter CVOHCWIter;
442 typedef ConstVertexOHalfedgeCCWIter CVOHCCWIter;
443 typedef ConstVertexIHalfedgeIter CVIHIter;
444 typedef ConstVertexIHalfedgeCWIter CVIHCWIter;
445 typedef ConstVertexIHalfedgeCCWIter CVIHCCWIter;
446 typedef ConstVertexEdgeIter CVEIter;
447 typedef ConstVertexEdgeCWIter CVECWIter;
448 typedef ConstVertexEdgeCCWIter CVECCWIter;
449 typedef ConstVertexFaceIter CVFIter;
450 typedef ConstVertexFaceCWIter CVFCWIter;
451 typedef ConstVertexFaceCCWIter CVFCCWIter;
452 typedef ConstFaceVertexIter CFVIter;
453 typedef ConstFaceVertexCWIter CFVCWIter;
454 typedef ConstFaceVertexCCWIter CFVCCWIter;
455 typedef ConstFaceHalfedgeIter CFHIter;
456 typedef ConstFaceHalfedgeCWIter CFHCWIter;
457 typedef ConstFaceHalfedgeCCWIter CFHCCWIter;
458 typedef ConstFaceEdgeIter CFEIter;
459 typedef ConstFaceEdgeCWIter CFECWIter;
460 typedef ConstFaceEdgeCCWIter CFECCWIter;
461 typedef ConstFaceFaceIter CFFIter;
462 typedef ConstFaceFaceCWIter CFFCWIter;
463 typedef ConstFaceFaceCCWIter CFFCCWIter;
465
466 public:
467
468 PolyConnectivity() {}
469 virtual ~PolyConnectivity() {}
470
471 inline static bool is_triangles()
472 { return false; }
473
476 inline void assign_connectivity(const PolyConnectivity& _other)
477 { ArrayKernel::assign_connectivity(_other); }
478
482
484 inline SmartVertexHandle add_vertex();
485
493 SmartFaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
494
502 SmartFaceHandle add_face(const std::vector<SmartVertexHandle>& _vhandles);
503
504
514 SmartFaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
515
526 SmartFaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
527
536 SmartFaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
537
539
541
542
547 bool is_collapse_ok(HalfedgeHandle _he);
548
549
555 void delete_vertex(VertexHandle _vh, bool _delete_isolated_vertices = true);
556
565 void delete_edge(EdgeHandle _eh, bool _delete_isolated_vertices=true);
566
577 void delete_face(FaceHandle _fh, bool _delete_isolated_vertices=true);
578
579
581
585
586 using ArrayKernel::next_halfedge_handle;
587 using ArrayKernel::prev_halfedge_handle;
588 using ArrayKernel::opposite_halfedge_handle;
589 using ArrayKernel::ccw_rotated_halfedge_handle;
590 using ArrayKernel::cw_rotated_halfedge_handle;
591
592 inline SmartHalfedgeHandle next_halfedge_handle (SmartHalfedgeHandle _heh) const;
593 inline SmartHalfedgeHandle prev_halfedge_handle (SmartHalfedgeHandle _heh) const;
594 inline SmartHalfedgeHandle opposite_halfedge_handle (SmartHalfedgeHandle _heh) const;
595 inline SmartHalfedgeHandle ccw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const;
596 inline SmartHalfedgeHandle cw_rotated_halfedge_handle (SmartHalfedgeHandle _heh) const;
597
598 using ArrayKernel::s_halfedge_handle;
599 using ArrayKernel::s_edge_handle;
600
601 static SmartHalfedgeHandle s_halfedge_handle(SmartEdgeHandle _eh, unsigned int _i);
602 static SmartEdgeHandle s_edge_handle(SmartHalfedgeHandle _heh);
603
604 using ArrayKernel::halfedge_handle;
605 using ArrayKernel::edge_handle;
606 using ArrayKernel::face_handle;
607
608 inline SmartHalfedgeHandle halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) const;
609 inline SmartHalfedgeHandle halfedge_handle(SmartFaceHandle _fh) const;
610 inline SmartHalfedgeHandle halfedge_handle(SmartVertexHandle _vh) const;
611 inline SmartEdgeHandle edge_handle(SmartHalfedgeHandle _heh) const;
612 inline SmartFaceHandle face_handle(SmartHalfedgeHandle _heh) const;
613
614
616
620
622 VertexIter vertices_begin();
624 ConstVertexIter vertices_begin() const;
626 VertexIter vertices_end();
628 ConstVertexIter vertices_end() const;
629
631 HalfedgeIter halfedges_begin();
633 ConstHalfedgeIter halfedges_begin() const;
635 HalfedgeIter halfedges_end();
637 ConstHalfedgeIter halfedges_end() const;
638
640 EdgeIter edges_begin();
642 ConstEdgeIter edges_begin() const;
644 EdgeIter edges_end();
646 ConstEdgeIter edges_end() const;
647
649 FaceIter faces_begin();
651 ConstFaceIter faces_begin() const;
653 FaceIter faces_end();
655 ConstFaceIter faces_end() const;
657
658
662
664 VertexIter vertices_sbegin();
666 ConstVertexIter vertices_sbegin() const;
667
669 HalfedgeIter halfedges_sbegin();
671 ConstHalfedgeIter halfedges_sbegin() const;
672
674 EdgeIter edges_sbegin();
676 ConstEdgeIter edges_sbegin() const;
677
679 FaceIter faces_sbegin();
681 ConstFaceIter faces_sbegin() const;
682
684
685 //--- circulators ---
686
690
692 VertexVertexIter vv_iter(VertexHandle _vh);
694 VertexVertexCWIter vv_cwiter(VertexHandle _vh);
696 VertexVertexCCWIter vv_ccwiter(VertexHandle _vh);
698 VertexIHalfedgeIter vih_iter(VertexHandle _vh);
700 VertexIHalfedgeCWIter vih_cwiter(VertexHandle _vh);
702 VertexIHalfedgeCCWIter vih_ccwiter(VertexHandle _vh);
704 VertexOHalfedgeIter voh_iter(VertexHandle _vh);
706 VertexOHalfedgeCWIter voh_cwiter(VertexHandle _vh);
708 VertexOHalfedgeCCWIter voh_ccwiter(VertexHandle _vh);
710 VertexEdgeIter ve_iter(VertexHandle _vh);
712 VertexEdgeCWIter ve_cwiter(VertexHandle _vh);
714 VertexEdgeCCWIter ve_ccwiter(VertexHandle _vh);
716 VertexFaceIter vf_iter(VertexHandle _vh);
718 VertexFaceCWIter vf_cwiter(VertexHandle _vh);
720 VertexFaceCCWIter vf_ccwiter(VertexHandle _vh);
721
723 ConstVertexVertexIter cvv_iter(VertexHandle _vh) const;
725 ConstVertexVertexCWIter cvv_cwiter(VertexHandle _vh) const;
727 ConstVertexVertexCCWIter cvv_ccwiter(VertexHandle _vh) const;
729 ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const;
731 ConstVertexIHalfedgeCWIter cvih_cwiter(VertexHandle _vh) const;
733 ConstVertexIHalfedgeCCWIter cvih_ccwiter(VertexHandle _vh) const;
735 ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const;
737 ConstVertexOHalfedgeCWIter cvoh_cwiter(VertexHandle _vh) const;
739 ConstVertexOHalfedgeCCWIter cvoh_ccwiter(VertexHandle _vh) const;
741 ConstVertexEdgeIter cve_iter(VertexHandle _vh) const;
743 ConstVertexEdgeCWIter cve_cwiter(VertexHandle _vh) const;
745 ConstVertexEdgeCCWIter cve_ccwiter(VertexHandle _vh) const;
747 ConstVertexFaceIter cvf_iter(VertexHandle _vh) const;
749 ConstVertexFaceCWIter cvf_cwiter(VertexHandle _vh) const;
751 ConstVertexFaceCCWIter cvf_ccwiter(VertexHandle _vh) const;
752
754 FaceVertexIter fv_iter(FaceHandle _fh);
756 FaceVertexCWIter fv_cwiter(FaceHandle _fh);
758 FaceVertexCCWIter fv_ccwiter(FaceHandle _fh);
760 FaceHalfedgeIter fh_iter(FaceHandle _fh);
762 FaceHalfedgeCWIter fh_cwiter(FaceHandle _fh);
764 FaceHalfedgeCCWIter fh_ccwiter(FaceHandle _fh);
766 FaceEdgeIter fe_iter(FaceHandle _fh);
768 FaceEdgeCWIter fe_cwiter(FaceHandle _fh);
770 FaceEdgeCCWIter fe_ccwiter(FaceHandle _fh);
772 FaceFaceIter ff_iter(FaceHandle _fh);
774 FaceFaceCWIter ff_cwiter(FaceHandle _fh);
776 FaceFaceCCWIter ff_ccwiter(FaceHandle _fh);
777
779 ConstFaceVertexIter cfv_iter(FaceHandle _fh) const;
781 ConstFaceVertexCWIter cfv_cwiter(FaceHandle _fh) const;
783 ConstFaceVertexCCWIter cfv_ccwiter(FaceHandle _fh) const;
785 ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const;
787 ConstFaceHalfedgeCWIter cfh_cwiter(FaceHandle _fh) const;
789 ConstFaceHalfedgeCCWIter cfh_ccwiter(FaceHandle _fh) const;
791 ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const;
793 ConstFaceEdgeCWIter cfe_cwiter(FaceHandle _fh) const;
795 ConstFaceEdgeCCWIter cfe_ccwiter(FaceHandle _fh) const;
797 ConstFaceFaceIter cff_iter(FaceHandle _fh) const;
799 ConstFaceFaceCWIter cff_cwiter(FaceHandle _fh) const;
801 ConstFaceFaceCCWIter cff_ccwiter(FaceHandle _fh) const;
802
803 // 'begin' circulators
804
806 VertexVertexIter vv_begin(VertexHandle _vh);
808 VertexVertexCWIter vv_cwbegin(VertexHandle _vh);
810 VertexVertexCCWIter vv_ccwbegin(VertexHandle _vh);
812 VertexIHalfedgeIter vih_begin(VertexHandle _vh);
814 VertexIHalfedgeCWIter vih_cwbegin(VertexHandle _vh);
816 VertexIHalfedgeCCWIter vih_ccwbegin(VertexHandle _vh);
818 VertexOHalfedgeIter voh_begin(VertexHandle _vh);
820 VertexOHalfedgeCWIter voh_cwbegin(VertexHandle _vh);
822 VertexOHalfedgeCCWIter voh_ccwbegin(VertexHandle _vh);
824 VertexEdgeIter ve_begin(VertexHandle _vh);
826 VertexEdgeCWIter ve_cwbegin(VertexHandle _vh);
828 VertexEdgeCCWIter ve_ccwbegin(VertexHandle _vh);
830 VertexFaceIter vf_begin(VertexHandle _vh);
832 VertexFaceCWIter vf_cwbegin(VertexHandle _vh);
834 VertexFaceCCWIter vf_ccwbegin(VertexHandle _vh);
835
836
838 ConstVertexVertexIter cvv_begin(VertexHandle _vh) const;
840 ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const;
842 ConstVertexVertexCCWIter cvv_ccwbegin(VertexHandle _vh) const;
844 ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const;
846 ConstVertexIHalfedgeCWIter cvih_cwbegin(VertexHandle _vh) const;
848 ConstVertexIHalfedgeCCWIter cvih_ccwbegin(VertexHandle _vh) const;
850 ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const;
852 ConstVertexOHalfedgeCWIter cvoh_cwbegin(VertexHandle _vh) const;
854 ConstVertexOHalfedgeCCWIter cvoh_ccwbegin(VertexHandle _vh) const;
856 ConstVertexEdgeIter cve_begin(VertexHandle _vh) const;
858 ConstVertexEdgeCWIter cve_cwbegin(VertexHandle _vh) const;
860 ConstVertexEdgeCCWIter cve_ccwbegin(VertexHandle _vh) const;
862 ConstVertexFaceIter cvf_begin(VertexHandle _vh) const;
864 ConstVertexFaceCWIter cvf_cwbegin(VertexHandle _vh) const;
866 ConstVertexFaceCCWIter cvf_ccwbegin(VertexHandle _vh) const;
867
869 FaceVertexIter fv_begin(FaceHandle _fh);
871 FaceVertexCWIter fv_cwbegin(FaceHandle _fh);
873 FaceVertexCCWIter fv_ccwbegin(FaceHandle _fh);
875 FaceHalfedgeIter fh_begin(FaceHandle _fh);
877 FaceHalfedgeCWIter fh_cwbegin(FaceHandle _fh);
879 FaceHalfedgeCCWIter fh_ccwbegin(FaceHandle _fh);
881 FaceEdgeIter fe_begin(FaceHandle _fh);
883 FaceEdgeCWIter fe_cwbegin(FaceHandle _fh);
885 FaceEdgeCCWIter fe_ccwbegin(FaceHandle _fh);
887 FaceFaceIter ff_begin(FaceHandle _fh);
889 FaceFaceCWIter ff_cwbegin(FaceHandle _fh);
891 FaceFaceCCWIter ff_ccwbegin(FaceHandle _fh);
893 HalfedgeLoopIter hl_begin(HalfedgeHandle _heh);
895 HalfedgeLoopCWIter hl_cwbegin(HalfedgeHandle _heh);
897 HalfedgeLoopCCWIter hl_ccwbegin(HalfedgeHandle _heh);
898
900 ConstFaceVertexIter cfv_begin(FaceHandle _fh) const;
902 ConstFaceVertexCWIter cfv_cwbegin(FaceHandle _fh) const;
904 ConstFaceVertexCCWIter cfv_ccwbegin(FaceHandle _fh) const;
906 ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const;
908 ConstFaceHalfedgeCWIter cfh_cwbegin(FaceHandle _fh) const;
910 ConstFaceHalfedgeCCWIter cfh_ccwbegin(FaceHandle _fh) const;
912 ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const;
914 ConstFaceEdgeCWIter cfe_cwbegin(FaceHandle _fh) const;
916 ConstFaceEdgeCCWIter cfe_ccwbegin(FaceHandle _fh) const;
918 ConstFaceFaceIter cff_begin(FaceHandle _fh) const;
920 ConstFaceFaceCWIter cff_cwbegin(FaceHandle _fh) const;
922 ConstFaceFaceCCWIter cff_ccwbegin(FaceHandle _fh) const;
924 ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const;
926 ConstHalfedgeLoopCWIter chl_cwbegin(HalfedgeHandle _heh) const;
928 ConstHalfedgeLoopCCWIter chl_ccwbegin(HalfedgeHandle _heh) const;
929
930 // 'end' circulators
931
933 VertexVertexIter vv_end(VertexHandle _vh);
935 VertexVertexCWIter vv_cwend(VertexHandle _vh);
937 VertexVertexCCWIter vv_ccwend(VertexHandle _vh);
939 VertexIHalfedgeIter vih_end(VertexHandle _vh);
941 VertexIHalfedgeCWIter vih_cwend(VertexHandle _vh);
943 VertexIHalfedgeCCWIter vih_ccwend(VertexHandle _vh);
945 VertexOHalfedgeIter voh_end(VertexHandle _vh);
947 VertexOHalfedgeCWIter voh_cwend(VertexHandle _vh);
949 VertexOHalfedgeCCWIter voh_ccwend(VertexHandle _vh);
951 VertexEdgeIter ve_end(VertexHandle _vh);
953 VertexEdgeCWIter ve_cwend(VertexHandle _vh);
955 VertexEdgeCCWIter ve_ccwend(VertexHandle _vh);
957 VertexFaceIter vf_end(VertexHandle _vh);
959 VertexFaceCWIter vf_cwend(VertexHandle _vh);
961 VertexFaceCCWIter vf_ccwend(VertexHandle _vh);
962
964 ConstVertexVertexIter cvv_end(VertexHandle _vh) const;
966 ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const;
968 ConstVertexVertexCCWIter cvv_ccwend(VertexHandle _vh) const;
970 ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const;
972 ConstVertexIHalfedgeCWIter cvih_cwend(VertexHandle _vh) const;
974 ConstVertexIHalfedgeCCWIter cvih_ccwend(VertexHandle _vh) const;
976 ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const;
978 ConstVertexOHalfedgeCWIter cvoh_cwend(VertexHandle _vh) const;
980 ConstVertexOHalfedgeCCWIter cvoh_ccwend(VertexHandle _vh) const;
982 ConstVertexEdgeIter cve_end(VertexHandle _vh) const;
984 ConstVertexEdgeCWIter cve_cwend(VertexHandle _vh) const;
986 ConstVertexEdgeCCWIter cve_ccwend(VertexHandle _vh) const;
988 ConstVertexFaceIter cvf_end(VertexHandle _vh) const;
990 ConstVertexFaceCWIter cvf_cwend(VertexHandle _vh) const;
992 ConstVertexFaceCCWIter cvf_ccwend(VertexHandle _vh) const;
993
995 FaceVertexIter fv_end(FaceHandle _fh);
997 FaceVertexCWIter fv_cwend(FaceHandle _fh);
999 FaceVertexCCWIter fv_ccwend(FaceHandle _fh);
1001 FaceHalfedgeIter fh_end(FaceHandle _fh);
1003 FaceHalfedgeCWIter fh_cwend(FaceHandle _fh);
1005 FaceHalfedgeCCWIter fh_ccwend(FaceHandle _fh);
1007 FaceEdgeIter fe_end(FaceHandle _fh);
1009 FaceEdgeCWIter fe_cwend(FaceHandle _fh);
1011 FaceEdgeCCWIter fe_ccwend(FaceHandle _fh);
1013 FaceFaceIter ff_end(FaceHandle _fh);
1015 FaceFaceCWIter ff_cwend(FaceHandle _fh);
1017 FaceFaceCCWIter ff_ccwend(FaceHandle _fh);
1019 HalfedgeLoopIter hl_end(HalfedgeHandle _heh);
1021 HalfedgeLoopCWIter hl_cwend(HalfedgeHandle _heh);
1023 HalfedgeLoopCCWIter hl_ccwend(HalfedgeHandle _heh);
1024
1026 ConstFaceVertexIter cfv_end(FaceHandle _fh) const;
1028 ConstFaceVertexCWIter cfv_cwend(FaceHandle _fh) const;
1030 ConstFaceVertexCCWIter cfv_ccwend(FaceHandle _fh) const;
1032 ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const;
1034 ConstFaceHalfedgeCWIter cfh_cwend(FaceHandle _fh) const;
1036 ConstFaceHalfedgeCCWIter cfh_ccwend(FaceHandle _fh) const;
1038 ConstFaceEdgeIter cfe_end(FaceHandle _fh) const;
1040 ConstFaceEdgeCWIter cfe_cwend(FaceHandle _fh) const;
1042 ConstFaceEdgeCCWIter cfe_ccwend(FaceHandle _fh) const;
1044 ConstFaceFaceIter cff_end(FaceHandle _fh) const;
1046 ConstFaceFaceCWIter cff_cwend(FaceHandle _fh) const;
1048 ConstFaceFaceCCWIter cff_ccwend(FaceHandle _fh) const;
1050 ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const;
1052 ConstHalfedgeLoopCWIter chl_cwend(HalfedgeHandle _heh) const;
1054 ConstHalfedgeLoopCCWIter chl_ccwend(HalfedgeHandle _heh) const;
1056
1059
1060 typedef EntityRange<RangeTraitT<
1061 const PolyConnectivity,
1062 PolyConnectivity::ConstVertexIter,
1063 &PolyConnectivity::vertices_begin,
1064 &PolyConnectivity::vertices_end>> ConstVertexRange;
1065 typedef EntityRange<RangeTraitT<
1066 const PolyConnectivity,
1067 PolyConnectivity::ConstVertexIter,
1068 &PolyConnectivity::vertices_sbegin,
1069 &PolyConnectivity::vertices_end>> ConstVertexRangeSkipping;
1070 typedef EntityRange<RangeTraitT<
1071 const PolyConnectivity,
1072 PolyConnectivity::ConstHalfedgeIter,
1073 &PolyConnectivity::halfedges_begin,
1074 &PolyConnectivity::halfedges_end>> ConstHalfedgeRange;
1075 typedef EntityRange<RangeTraitT<
1076 const PolyConnectivity,
1077 PolyConnectivity::ConstHalfedgeIter,
1078 &PolyConnectivity::halfedges_sbegin,
1079 &PolyConnectivity::halfedges_end>> ConstHalfedgeRangeSkipping;
1080 typedef EntityRange<RangeTraitT<
1081 const PolyConnectivity,
1082 PolyConnectivity::ConstEdgeIter,
1083 &PolyConnectivity::edges_begin,
1084 &PolyConnectivity::edges_end>> ConstEdgeRange;
1085 typedef EntityRange<RangeTraitT<
1086 const PolyConnectivity,
1087 PolyConnectivity::ConstEdgeIter,
1088 &PolyConnectivity::edges_sbegin,
1089 &PolyConnectivity::edges_end>> ConstEdgeRangeSkipping;
1090 typedef EntityRange<RangeTraitT<
1091 const PolyConnectivity,
1092 PolyConnectivity::ConstFaceIter,
1093 &PolyConnectivity::faces_begin,
1094 &PolyConnectivity::faces_end>> ConstFaceRange;
1095 typedef EntityRange<RangeTraitT<
1096 const PolyConnectivity,
1097 PolyConnectivity::ConstFaceIter,
1098 &PolyConnectivity::faces_sbegin,
1099 &PolyConnectivity::faces_end>> ConstFaceRangeSkipping;
1100
1101
1102 template <typename HandleType>
1103 struct ElementRange;
1104
1109 ConstVertexRangeSkipping vertices() const;
1110
1115 ConstVertexRange all_vertices() const;
1116
1121 ConstHalfedgeRangeSkipping halfedges() const;
1122
1127 ConstHalfedgeRange all_halfedges() const;
1128
1133 ConstEdgeRangeSkipping edges() const;
1134
1139 ConstEdgeRange all_edges() const;
1140
1145 ConstFaceRangeSkipping faces() const;
1146
1151 ConstFaceRange all_faces() const;
1152
1157 template <typename HandleType>
1158 typename ElementRange<HandleType>::RangeSkipping elements() const;
1159
1164 template <typename HandleType>
1165 typename ElementRange<HandleType>::Range all_elements() const;
1166
1167
1168 typedef CirculatorRange<CirculatorRangeTraitT<
1169 PolyConnectivity,
1170 ConstVertexVertexCWIter,
1171 VertexHandle,
1172 VertexHandle,
1173 &PolyConnectivity::cvv_cwbegin,
1174 &PolyConnectivity::cvv_cwend>> ConstVertexVertexRange;
1175 typedef CirculatorRange<CirculatorRangeTraitT<
1176 PolyConnectivity,
1177 ConstVertexIHalfedgeIter,
1178 VertexHandle,
1179 HalfedgeHandle,
1180 &PolyConnectivity::cvih_begin,
1181 &PolyConnectivity::cvih_end>> ConstVertexIHalfedgeRange;
1182 typedef CirculatorRange<CirculatorRangeTraitT<
1183 PolyConnectivity,
1184 ConstVertexOHalfedgeIter,
1185 VertexHandle,
1186 HalfedgeHandle,
1187 &PolyConnectivity::cvoh_begin,
1188 &PolyConnectivity::cvoh_end>> ConstVertexOHalfedgeRange;
1189 typedef CirculatorRange<CirculatorRangeTraitT<
1190 PolyConnectivity,
1191 ConstVertexEdgeIter,
1192 VertexHandle,
1193 EdgeHandle,
1194 &PolyConnectivity::cve_begin,
1195 &PolyConnectivity::cve_end>> ConstVertexEdgeRange;
1196 typedef CirculatorRange<CirculatorRangeTraitT<
1197 PolyConnectivity,
1198 ConstVertexFaceIter,
1199 VertexHandle,
1200 FaceHandle,
1201 &PolyConnectivity::cvf_begin,
1202 &PolyConnectivity::cvf_end>> ConstVertexFaceRange;
1203 typedef CirculatorRange<CirculatorRangeTraitT<
1204 PolyConnectivity,
1205 ConstFaceVertexIter,
1206 FaceHandle,
1207 VertexHandle,
1208 &PolyConnectivity::cfv_begin,
1209 &PolyConnectivity::cfv_end>> ConstFaceVertexRange;
1210 typedef CirculatorRange<CirculatorRangeTraitT<
1211 PolyConnectivity,
1212 ConstFaceHalfedgeIter,
1213 FaceHandle,
1214 HalfedgeHandle,
1215 &PolyConnectivity::cfh_begin,
1216 &PolyConnectivity::cfh_end>> ConstFaceHalfedgeRange;
1217 typedef CirculatorRange<CirculatorRangeTraitT<
1218 PolyConnectivity,
1219 ConstFaceEdgeIter,
1220 FaceHandle,
1221 EdgeHandle,
1222 &PolyConnectivity::cfe_begin,
1223 &PolyConnectivity::cfe_end>> ConstFaceEdgeRange;
1224 typedef CirculatorRange<CirculatorRangeTraitT<
1225 PolyConnectivity,
1226 ConstFaceFaceIter,
1227 FaceHandle,
1228 FaceHandle,
1229 &PolyConnectivity::cff_begin,
1230 &PolyConnectivity::cff_end>> ConstFaceFaceRange;
1231
1236 ConstVertexVertexRange vv_range(VertexHandle _vh) const;
1237
1242 ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const;
1243
1248 ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const;
1249
1254 ConstVertexEdgeRange ve_range(VertexHandle _vh) const ;
1255
1260 ConstVertexFaceRange vf_range(VertexHandle _vh) const;
1261
1266 ConstFaceVertexRange fv_range(FaceHandle _fh) const;
1267
1272 ConstFaceHalfedgeRange fh_range(FaceHandle _fh) const;
1273
1278 ConstFaceEdgeRange fe_range(FaceHandle _fh) const;
1279
1284 ConstFaceFaceRange ff_range(FaceHandle _fh) const;
1285
1287
1288 //===========================================================================
1291 //===========================================================================
1292
1300 bool is_boundary(HalfedgeHandle _heh) const
1301 { return ArrayKernel::is_boundary(_heh); }
1302
1311 bool is_boundary(EdgeHandle _eh) const
1312 {
1313 return (is_boundary(halfedge_handle(_eh, 0)) ||
1314 is_boundary(halfedge_handle(_eh, 1)));
1315 }
1316
1328 bool is_boundary(VertexHandle _vh) const
1329 {
1330 HalfedgeHandle heh(halfedge_handle(_vh));
1331 return (!(heh.is_valid() && face_handle(heh).is_valid()));
1332 }
1333
1343 bool is_boundary(FaceHandle _fh, bool _check_vertex=false) const;
1344
1355 bool is_manifold(VertexHandle _vh) const;
1356
1359 // --- shortcuts ---
1360
1362 inline FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
1363 { return face_handle(opposite_halfedge_handle(_heh)); }
1364
1365 // --- misc ---
1366
1370 void adjust_outgoing_halfedge(VertexHandle _vh);
1371
1373 HalfedgeHandle find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh) const;
1375 uint valence(VertexHandle _vh) const;
1377 uint valence(FaceHandle _fh) const;
1378
1379 // --- connectivity operattions
1380
1395 void collapse(HalfedgeHandle _heh);
1400 bool is_simple_link(EdgeHandle _eh) const;
1405 bool is_simply_connected(FaceHandle _fh) const;
1418 FaceHandle remove_edge(EdgeHandle _eh);
1422 void reinsert_edge(EdgeHandle _eh);
1432 HalfedgeHandle insert_edge(HalfedgeHandle _prev_heh, HalfedgeHandle _next_heh);
1433
1446 void split(FaceHandle _fh, VertexHandle _vh);
1447
1461 void split_copy(FaceHandle _fh, VertexHandle _vh);
1462
1476 void triangulate(FaceHandle _fh);
1477
1480 void triangulate();
1481
1492 void split_edge(EdgeHandle _eh, VertexHandle _vh);
1493
1505 void split_edge_copy(EdgeHandle _eh, VertexHandle _vh);
1506
1507
1513 const Vertex& deref(VertexHandle _h) const { return vertex(_h); }
1515 Vertex& deref(VertexHandle _h) { return vertex(_h); }
1516 const Halfedge& deref(HalfedgeHandle _h) const { return halfedge(_h); }
1517 Halfedge& deref(HalfedgeHandle _h) { return halfedge(_h); }
1518 const Edge& deref(EdgeHandle _h) const { return edge(_h); }
1519 Edge& deref(EdgeHandle _h) { return edge(_h); }
1520 const Face& deref(FaceHandle _h) const { return face(_h); }
1521 Face& deref(FaceHandle _h) { return face(_h); }
1523
1524 protected:
1526 void collapse_edge(HalfedgeHandle _hh);
1528 void collapse_loop(HalfedgeHandle _hh);
1529
1530
1531
1532 private: // Working storage for add_face()
1533 struct AddFaceEdgeInfo
1534 {
1535 HalfedgeHandle halfedge_handle;
1536 bool is_new;
1537 bool needs_adjust;
1538 };
1539 std::vector<AddFaceEdgeInfo> edgeData_; //
1540 std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_; // cache for set_next_halfedge and vertex' set_halfedge
1541
1542 };
1543
1544 template <>
1545 struct PolyConnectivity::ElementRange<VertexHandle>
1546 {
1547 using Range = ConstVertexRange;
1548 using RangeSkipping = ConstVertexRangeSkipping;
1549 };
1550
1551 template <>
1552 struct PolyConnectivity::ElementRange<HalfedgeHandle>
1553 {
1554 using Range = ConstHalfedgeRange;
1555 using RangeSkipping = ConstHalfedgeRangeSkipping;
1556 };
1557
1558 template <>
1559 struct PolyConnectivity::ElementRange<EdgeHandle>
1560 {
1561 using Range = ConstEdgeRange;
1562 using RangeSkipping = ConstEdgeRangeSkipping;
1563 };
1564
1565 template <>
1566 struct PolyConnectivity::ElementRange<FaceHandle>
1567 {
1568 using Range = ConstFaceRange;
1569 using RangeSkipping = ConstFaceRangeSkipping;
1570 };
1571
1572 }//namespace OpenMesh
1573
1574 #include <OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh>
1575
1576 #endif//OPENMESH_POLYCONNECTIVITY_HH
OpenMesh::PolyConnectivity::VertexEdgeCCWIter
Iterators::GenericCirculatorT< VertexEdgeTraits, false > VertexEdgeCCWIter
Definition: PolyConnectivity.hh:256
OpenMesh::EdgeHandle
Handle for a edge entity.
Definition: Handles.hh:134
OpenMesh::FaceHandle
Handle for a face entity.
Definition: Handles.hh:141
OpenMesh::PolyConnectivity::HHandle
HalfedgeHandle HHandle
Alias typedef.
Definition: PolyConnectivity.hh:397
OpenMesh::PolyConnectivity::ConstFaceHalfedgeIter
FaceHalfedgeIter ConstFaceHalfedgeIter
Definition: PolyConnectivity.hh:370
OpenMesh::PolyConnectivity::CEIter
ConstEdgeIter CEIter
Alias typedef.
Definition: PolyConnectivity.hh:408
OpenMesh::PolyConnectivity::ConstVertexRangeSkipping
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_sbegin, &PolyConnectivity::vertices_end > > ConstVertexRangeSkipping
Definition: PolyConnectivity.hh:1069
OpenMesh::PolyConnectivity::ConstVertexIter
VertexIter ConstVertexIter
Linear iterator.
Definition: PolyConnectivity.hh:142
OpenMesh::PolyConnectivity::ConstFaceFaceCCWIter
FaceFaceCCWIter ConstFaceFaceCCWIter
Definition: PolyConnectivity.hh:378
OpenMesh::PolyConnectivity::vertices_end
VertexIter vertices_end()
End iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:175
OpenMesh::PolyConnectivity::cfe_end
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity_inline_impl.hh:746
OpenMesh::PolyConnectivity::ConstVertexEdgeRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexEdgeIter, VertexHandle, EdgeHandle, &PolyConnectivity::cve_begin, &PolyConnectivity::cve_end > > ConstVertexEdgeRange
Definition: PolyConnectivity.hh:1195
OpenMesh::PolyConnectivity::FHandle
FaceHandle FHandle
Alias typedef.
Definition: PolyConnectivity.hh:399
OpenMesh::PolyConnectivity::CVOHCCWIter
ConstVertexOHalfedgeCCWIter CVOHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:442
OpenMesh::Iterators::GenericCirculatorT
Definition: CirculatorsT.hh:254
OpenMesh::SmartHalfedgeHandle
Definition: SmartHandles.hh:114
OpenMesh::PolyConnectivity::ConstFaceHalfedgeCWIter
FaceHalfedgeCWIter ConstFaceHalfedgeCWIter
Definition: PolyConnectivity.hh:371
OpenMesh::PolyConnectivity::cfv_begin
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity_inline_impl.hh:543
OpenMesh::SmartEdgeHandle
Definition: SmartHandles.hh:137
OpenMesh::PolyConnectivity::CVECWIter
ConstVertexEdgeCWIter CVECWIter
Alias typedef.
Definition: PolyConnectivity.hh:447
OpenMesh::ArrayKernel
Definition: ArrayKernel.hh:87
OpenMesh::PolyConnectivity::FaceFaceIter
Iterators::GenericCirculatorT_DEPRECATED< FaceFaceTraits > FaceFaceIter
Definition: PolyConnectivity.hh:359
OpenMesh::PolyConnectivity::VertexIHalfedgeIter
Iterators::GenericCirculatorT_DEPRECATED< VertexOppositeHalfedgeTraits > VertexIHalfedgeIter
Definition: PolyConnectivity.hh:211
OpenMesh::PolyConnectivity::ConstHalfedgeLoopIter
HalfedgeLoopIter ConstHalfedgeLoopIter
Definition: PolyConnectivity.hh:383
OpenMesh::PolyConnectivity::CVOHIter
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
Definition: PolyConnectivity.hh:440
OpenMesh::PolyConnectivity::EIter
EdgeIter EIter
Alias typedef.
Definition: PolyConnectivity.hh:403
OpenMesh::PolyConnectivity::ConstVertexVertexCWIter
VertexVertexCWIter ConstVertexVertexCWIter
Definition: PolyConnectivity.hh:278
OpenMesh::PolyConnectivity::ConstVertexOHalfedgeIter
VertexOHalfedgeIter ConstVertexOHalfedgeIter
Definition: PolyConnectivity.hh:280
OpenMesh::PolyConnectivity::ConstVertexOHalfedgeCWIter
VertexOHalfedgeCWIter ConstVertexOHalfedgeCWIter
Definition: PolyConnectivity.hh:281
OpenMesh::PolyConnectivity::CFIter
ConstFaceIter CFIter
Alias typedef.
Definition: PolyConnectivity.hh:409
OpenMesh::PolyConnectivity::ConstFaceEdgeRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceEdgeIter, FaceHandle, EdgeHandle, &PolyConnectivity::cfe_begin, &PolyConnectivity::cfe_end > > ConstFaceEdgeRange
Definition: PolyConnectivity.hh:1223
OpenMesh::PolyConnectivity::VertexOppositeHalfedgeTraits
Definition: PolyConnectivity.hh:200
OpenMesh::PolyConnectivity::FaceEdgeIter
Iterators::GenericCirculatorT_DEPRECATED< FaceEdgeTraits > FaceEdgeIter
Definition: PolyConnectivity.hh:339
OpenMesh::HalfedgeHandle
Handle for a halfedge entity.
Definition: Handles.hh:127
OpenMesh::PolyConnectivity::ConstVertexFaceCWIter
VertexFaceCWIter ConstVertexFaceCWIter
Definition: PolyConnectivity.hh:287
OpenMesh::PolyConnectivity::FaceFaceTraits
Definition: PolyConnectivity.hh:348
OpenMesh::PolyConnectivity::EHandle
EdgeHandle EHandle
Alias typedef.
Definition: PolyConnectivity.hh:398
OpenMesh::PolyConnectivity::VertexFaceCWIter
Iterators::GenericCirculatorT< VertexFaceTraits, true > VertexFaceCWIter
Definition: PolyConnectivity.hh:232
OpenMesh::PolyConnectivity::faces_begin
FaceIter faces_begin()
Begin iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:205
OpenMesh::PolyConnectivity::ConstFaceFaceRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceFaceIter, FaceHandle, FaceHandle, &PolyConnectivity::cff_begin, &PolyConnectivity::cff_end > > ConstFaceFaceRange
Definition: PolyConnectivity.hh:1230
OpenMesh::PolyConnectivity::VVIter
VertexVertexIter VVIter
Alias typedef.
Definition: PolyConnectivity.hh:411
OpenMesh::PolyConnectivity::deref
Edge & deref(EdgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1519
OpenMesh::PolyConnectivity::ConstVertexIHalfedgeCCWIter
VertexIHalfedgeCCWIter ConstVertexIHalfedgeCCWIter
Definition: PolyConnectivity.hh:285
OpenMesh::PolyConnectivity::ConstVertexEdgeIter
VertexEdgeIter ConstVertexEdgeIter
Definition: PolyConnectivity.hh:289
OpenMesh::PolyConnectivity::HalfedgeLoopCCWIter
Iterators::GenericCirculatorT< FaceHalfedgeTraits, true > HalfedgeLoopCCWIter
Definition: PolyConnectivity.hh:275
OpenMesh::PolyConnectivity::VFCWIter
VertexFaceCWIter VFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:424
OpenMesh::PolyConnectivity::ConstHalfedgeLoopCWIter
HalfedgeLoopCWIter ConstHalfedgeLoopCWIter
Definition: PolyConnectivity.hh:384
OpenMesh::PolyConnectivity::ConstHalfedgeRange
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_begin, &PolyConnectivity::halfedges_end > > ConstHalfedgeRange
Definition: PolyConnectivity.hh:1074
OpenMesh::PolyConnectivity::cfh_begin
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:552
OpenMesh::PolyConnectivity::assign_connectivity
void assign_connectivity(const PolyConnectivity &_other)
Definition: PolyConnectivity.hh:476
OpenMesh::PolyConnectivity::CVOHCWIter
ConstVertexOHalfedgeCWIter CVOHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:441
OpenMesh::PolyConnectivity::FECWIter
FaceEdgeCWIter FECWIter
Alias typedef.
Definition: PolyConnectivity.hh:433
OpenMesh::PolyConnectivity::FaceEdgeTraits
Definition: PolyConnectivity.hh:328
OpenMesh::PolyConnectivity::VIHICWter
VertexIHalfedgeCWIter VIHICWter
Alias typedef.
Definition: PolyConnectivity.hh:418
OpenMesh::PolyConnectivity::VIHICCWter
VertexIHalfedgeCCWIter VIHICCWter
Alias typedef.
Definition: PolyConnectivity.hh:419
OpenMesh::PolyConnectivity::faces_end
FaceIter faces_end()
End iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:211
OpenMesh::PolyConnectivity::is_boundary
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
Definition: PolyConnectivity.hh:1328
OpenMesh::PolyConnectivity::ConstVertexOHalfedgeCCWIter
VertexOHalfedgeCCWIter ConstVertexOHalfedgeCCWIter
Definition: PolyConnectivity.hh:282
OpenMesh::PolyConnectivity::CFFIter
ConstFaceFaceIter CFFIter
Alias typedef.
Definition: PolyConnectivity.hh:461
OpenMesh::PolyConnectivity::ConstVertexVertexRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexVertexCWIter, VertexHandle, VertexHandle, &PolyConnectivity::cvv_cwbegin, &PolyConnectivity::cvv_cwend > > ConstVertexVertexRange
Definition: PolyConnectivity.hh:1174
OpenMesh::VertexHandle
Handle for a vertex entity.
Definition: Handles.hh:120
OpenMesh::PolyConnectivity::ConstVertexEdgeCCWIter
VertexEdgeCCWIter ConstVertexEdgeCCWIter
Definition: PolyConnectivity.hh:291
OpenMesh::PolyConnectivity::CFECWIter
ConstFaceEdgeCWIter CFECWIter
Alias typedef.
Definition: PolyConnectivity.hh:459
OpenMesh::PolyConnectivity::cfe_begin
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity_inline_impl.hh:561
OpenMesh::BaseHandle::is_valid
bool is_valid() const
The handle is valid iff the index is not negative.
Definition: Handles.hh:72
OpenMesh::PolyConnectivity::FHIter
FaceHalfedgeIter FHIter
Alias typedef.
Definition: PolyConnectivity.hh:429
OpenMesh::ArrayKernel::is_boundary
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:398
OpenMesh::PolyConnectivity::ConstVertexIHalfedgeIter
VertexIHalfedgeIter ConstVertexIHalfedgeIter
Definition: PolyConnectivity.hh:283
OpenMesh::RangeTraitT
Definition: PolyConnectivity.hh:76
OpenMesh::PolyConnectivity::FaceVertexIter
Iterators::GenericCirculatorT_DEPRECATED< FaceVertexTraits > FaceVertexIter
Definition: PolyConnectivity.hh:308
OpenMesh::PolyConnectivity::FaceFaceCCWIter
Iterators::GenericCirculatorT< FaceFaceTraits, true > FaceFaceCCWIter
Definition: PolyConnectivity.hh:360
OpenMesh::PolyConnectivity::ConstVertexRange
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstVertexIter, &PolyConnectivity::vertices_begin, &PolyConnectivity::vertices_end > > ConstVertexRange
Definition: PolyConnectivity.hh:1064
OpenMesh::PolyConnectivity::FFIter
FaceFaceIter FFIter
Alias typedef.
Definition: PolyConnectivity.hh:435
OpenMesh::PolyConnectivity::FVCCWIter
FaceVertexCCWIter FVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:428
OpenMesh::PolyConnectivity::CFHCCWIter
ConstFaceHalfedgeCCWIter CFHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:457
OpenMesh::PolyConnectivity::edges_end
EdgeIter edges_end()
End iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:199
OpenMesh::PolyConnectivity::VertexFaceCCWIter
Iterators::GenericCirculatorT< VertexFaceTraits, false > VertexFaceCCWIter
Definition: PolyConnectivity.hh:237
OpenMesh::PolyConnectivity::ConstFaceRange
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_begin, &PolyConnectivity::faces_end > > ConstFaceRange
Definition: PolyConnectivity.hh:1094
OpenMesh::PolyConnectivity::ConstHalfedgeLoopCCWIter
HalfedgeLoopCCWIter ConstHalfedgeLoopCCWIter
Definition: PolyConnectivity.hh:385
OpenMesh::PolyConnectivity::EdgeIter
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel, &ArrayKernel::has_edge_status, &ArrayKernel::n_edges > EdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:139
OpenMesh::PolyConnectivity::deref
const Face & deref(FaceHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1520
OpenMesh::PolyConnectivity::cfv_end
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity_inline_impl.hh:728
OpenMesh::PolyConnectivity::cvv_cwbegin
ConstVertexVertexCWIter cvv_cwbegin(VertexHandle _vh) const
const vertex circulator cw
Definition: PolyConnectivity_inline_impl.hh:454
OpenMesh::PolyConnectivity::deref
Vertex & deref(VertexHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1515
OpenMesh::PolyConnectivity::FaceIter
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel, &ArrayKernel::has_face_status, &ArrayKernel::n_faces > FaceIter
Linear iterator.
Definition: PolyConnectivity.hh:140
OpenMesh::PolyConnectivity::VertexFaceTraits
Definition: PolyConnectivity.hh:220
OpenMesh::PolyConnectivity::faces_sbegin
FaceIter faces_sbegin()
Begin iterator for faces.
Definition: PolyConnectivity_inline_impl.hh:236
OpenMesh::PolyConnectivity::VOHCCWIter
VertexOHalfedgeCCWIter VOHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:416
OpenMesh
Definition: MeshItems.hh:59
OpenMesh::PolyConnectivity::halfedges_sbegin
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:224
OpenMesh::ArrayKernel::assign_connectivity
void assign_connectivity(const ArrayKernel &_other)
Definition: ArrayKernel.cc:71
OpenMesh::PolyConnectivity::cvv_cwend
ConstVertexVertexCWIter cvv_cwend(VertexHandle _vh) const
const vertex circulator cw
Definition: PolyConnectivity_inline_impl.hh:639
OpenMesh::PolyConnectivity::VIHIter
VertexIHalfedgeIter VIHIter
Alias typedef.
Definition: PolyConnectivity.hh:417
OpenMesh::PolyConnectivity::VVCCWIter
VertexVertexCCWIter VVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:413
OpenMesh::PolyConnectivity::HalfedgeLoopCWIter
Iterators::GenericCirculatorT< FaceHalfedgeTraits, false > HalfedgeLoopCWIter
Definition: PolyConnectivity.hh:271
OpenMesh::PolyConnectivity::VertexEdgeCWIter
Iterators::GenericCirculatorT< VertexEdgeTraits, true > VertexEdgeCWIter
Definition: PolyConnectivity.hh:252
OpenMesh::PolyConnectivity::CVIHCWIter
ConstVertexIHalfedgeCWIter CVIHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:444
OpenMesh::PolyConnectivity::cvf_begin
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity_inline_impl.hh:487
OpenMesh::PolyConnectivity::VIter
VertexIter VIter
Alias typedef.
Definition: PolyConnectivity.hh:401
OpenMesh::PolyConnectivity::HalfedgeLoopIter
Iterators::GenericCirculatorT_DEPRECATED< FaceHalfedgeTraits > HalfedgeLoopIter
Definition: PolyConnectivity.hh:270
OpenMesh::PolyConnectivity::ConstVertexVertexIter
VertexVertexIter ConstVertexVertexIter
Definition: PolyConnectivity.hh:277
OpenMesh::PolyConnectivity::VEIter
VertexEdgeIter VEIter
Alias typedef.
Definition: PolyConnectivity.hh:420
OpenMesh::PolyConnectivity::FIter
FaceIter FIter
Alias typedef.
Definition: PolyConnectivity.hh:404
OpenMesh::PolyConnectivity::FEIter
FaceEdgeIter FEIter
Alias typedef.
Definition: PolyConnectivity.hh:432
OpenMesh::PolyConnectivity::ConstFaceRangeSkipping
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstFaceIter, &PolyConnectivity::faces_sbegin, &PolyConnectivity::faces_end > > ConstFaceRangeSkipping
Definition: PolyConnectivity.hh:1099
OpenMesh::PolyConnectivity::VertexOHalfedgeCCWIter
Iterators::GenericCirculatorT< VertexHalfedgeTraits, false > VertexOHalfedgeCCWIter
Definition: PolyConnectivity.hh:198
OpenMesh::PolyConnectivity::FVIter
FaceVertexIter FVIter
Alias typedef.
Definition: PolyConnectivity.hh:426
OpenMesh::PolyConnectivity::VertexEdgeTraits
Definition: PolyConnectivity.hh:240
OpenMesh::PolyConnectivity::VFIter
VertexFaceIter VFIter
Alias typedef.
Definition: PolyConnectivity.hh:423
OpenMesh::Iterators::GenericIteratorT
Definition: IteratorsT.hh:83
OpenMesh::PolyConnectivity::ConstFaceEdgeCWIter
FaceEdgeCWIter ConstFaceEdgeCWIter
Definition: PolyConnectivity.hh:374
OpenMesh::PolyConnectivity::VertexVertexIter
Iterators::GenericCirculatorT_DEPRECATED< VertexVertexTraits > VertexVertexIter
Definition: PolyConnectivity.hh:172
OpenMesh::PolyConnectivity::CVVCCWIter
ConstVertexVertexCCWIter CVVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:439
OpenMesh::PolyConnectivity::ConstFaceEdgeIter
FaceEdgeIter ConstFaceEdgeIter
Definition: PolyConnectivity.hh:373
OpenMesh::PolyConnectivity::is_boundary
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
Definition: PolyConnectivity.hh:1300
OpenMesh::PolyConnectivity::CVIHIter
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
Definition: PolyConnectivity.hh:443
OpenMesh::PolyConnectivity::VOHCWIter
VertexOHalfedgeCWIter VOHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:415
OpenMesh::CirculatorRange
Generic class for iterator ranges.
Definition: PolyConnectivity.hh:86
OpenMesh::PolyConnectivity::CFHCWIter
ConstFaceHalfedgeCWIter CFHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:456
OpenMesh::PolyConnectivity::cve_end
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity_inline_impl.hh:663
OpenMesh::PolyConnectivity::VVCWIter
VertexVertexCWIter VVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:412
OpenMesh::Iterators::GenericCirculatorT_DEPRECATED
Definition: CirculatorsT.hh:428
OpenMesh::PolyConnectivity::cfh_end
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:737
OpenMesh::PolyConnectivity::halfedges_begin
HalfedgeIter halfedges_begin()
Begin iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:181
OpenMesh::PolyConnectivity::cvoh_begin
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:469
OpenMesh::PolyConnectivity::deref
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1517
OpenMesh::PolyConnectivity::CFFCCWIter
ConstFaceFaceCCWIter CFFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:463
OpenMesh::PolyConnectivity::VertexFaceIter
Iterators::GenericCirculatorT_DEPRECATED< VertexFaceTraits > VertexFaceIter
Definition: PolyConnectivity.hh:231
OpenMesh::PolyConnectivity::VECWIter
VertexEdgeCWIter VECWIter
Alias typedef.
Definition: PolyConnectivity.hh:421
OpenMesh::PolyConnectivity::HalfedgeIter
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel, &ArrayKernel::has_halfedge_status, &ArrayKernel::n_halfedges > HalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:138
OpenMesh::PolyConnectivity::CFECCWIter
ConstFaceEdgeCCWIter CFECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:460
OpenMesh::PolyConnectivity::FaceVertexCWIter
Iterators::GenericCirculatorT< FaceVertexTraits, false > FaceVertexCWIter
Definition: PolyConnectivity.hh:314
OpenMesh::PolyConnectivity::FECWWIter
FaceEdgeCCWIter FECWWIter
Alias typedef.
Definition: PolyConnectivity.hh:434
OpenMesh::PolyConnectivity::FaceEdgeCCWIter
Iterators::GenericCirculatorT< FaceEdgeTraits, true > FaceEdgeCCWIter
Definition: PolyConnectivity.hh:340
OpenMesh::PolyConnectivity::deref
Face & deref(FaceHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:1521
OpenMesh::PolyConnectivity::CFVCWIter
ConstFaceVertexCWIter CFVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:453
OpenMesh::PolyConnectivity::FVCWIter
FaceVertexCWIter FVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:427
OpenMesh::CirculatorRangeTraitT
Definition: PolyConnectivity.hh:95
OpenMesh::PolyConnectivity::CFVIter
ConstFaceVertexIter CFVIter
Alias typedef.
Definition: PolyConnectivity.hh:452
OpenMesh::PolyConnectivity::VOHIter
VertexOHalfedgeIter VOHIter
Alias typedef.
Definition: PolyConnectivity.hh:414
OpenMesh::PolyConnectivity::CVVCWIter
ConstVertexVertexCWIter CVVCWIter
Alias typedef.
Definition: PolyConnectivity.hh:438
OpenMesh::PolyConnectivity::FHCWWIter
FaceHalfedgeCCWIter FHCWWIter
Alias typedef.
Definition: PolyConnectivity.hh:431
OpenMesh::PolyConnectivity::ConstVertexIHalfedgeRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexIHalfedgeIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvih_begin, &PolyConnectivity::cvih_end > > ConstVertexIHalfedgeRange
Definition: PolyConnectivity.hh:1181
OpenMesh::PolyConnectivity::FaceHalfedgeIter
Iterators::GenericCirculatorT_DEPRECATED< FaceHalfedgeTraits > FaceHalfedgeIter
Definition: PolyConnectivity.hh:319
OpenMesh::PolyConnectivity::ConstFaceVertexIter
FaceVertexIter ConstFaceVertexIter
Definition: PolyConnectivity.hh:367
OpenMesh::PolyConnectivity::VertexIHalfedgeCWIter
Iterators::GenericCirculatorT< VertexOppositeHalfedgeTraits, true > VertexIHalfedgeCWIter
Definition: PolyConnectivity.hh:212
OpenMesh::PolyConnectivity::FaceHalfedgeCWIter
Iterators::GenericCirculatorT< FaceHalfedgeTraits, false > FaceHalfedgeCWIter
Definition: PolyConnectivity.hh:325
OpenMesh::PolyConnectivity::ConstVertexFaceIter
VertexFaceIter ConstVertexFaceIter
Definition: PolyConnectivity.hh:286
OpenMesh::PolyConnectivity::ConstFaceFaceIter
FaceFaceIter ConstFaceFaceIter
Definition: PolyConnectivity.hh:376
OpenMesh::PolyConnectivity::CHIter
ConstHalfedgeIter CHIter
Alias typedef.
Definition: PolyConnectivity.hh:407
OpenMesh::PolyConnectivity::ConstFaceFaceCWIter
FaceFaceCWIter ConstFaceFaceCWIter
Definition: PolyConnectivity.hh:377
OpenMesh::PolyConnectivity::CVIter
ConstVertexIter CVIter
Alias typedef.
Definition: PolyConnectivity.hh:406
OpenMesh::PolyConnectivity::ConstFaceIter
FaceIter ConstFaceIter
Linear iterator.
Definition: PolyConnectivity.hh:145
OpenMesh::SmartFaceHandle
Definition: SmartHandles.hh:162
OpenMesh::EntityRange
Generic class for vertex/halfedge/edge/face ranges.
Definition: PolyConnectivity.hh:69
OpenMesh::PolyConnectivity::CVIHCCWIter
ConstVertexIHalfedgeCCWIter CVIHCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:445
OpenMesh::PolyConnectivity::ConstHalfedgeIter
HalfedgeIter ConstHalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:143
OpenMesh::PolyConnectivity::VertexVertexTraits
Definition: PolyConnectivity.hh:160
OpenMesh::PolyConnectivity::cve_begin
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity_inline_impl.hh:478
OpenMesh::PolyConnectivity::ConstEdgeRange
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_begin, &PolyConnectivity::edges_end > > ConstEdgeRange
Definition: PolyConnectivity.hh:1084
OpenMesh::PolyConnectivity::CVECCWIter
ConstVertexEdgeCCWIter CVECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:448
OpenMesh::PolyConnectivity::FaceHalfedgeCCWIter
Iterators::GenericCirculatorT< FaceHalfedgeTraits, true > FaceHalfedgeCCWIter
Definition: PolyConnectivity.hh:320
OpenMesh::PolyConnectivity::AddFaceEdgeInfo
Definition: PolyConnectivity.hh:1533
OpenMesh::PolyConnectivity::VFCCWIter
VertexFaceCCWIter VFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:425
OpenMesh::PolyConnectivity::vertices_begin
VertexIter vertices_begin()
Begin iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:169
OpenMesh::PolyConnectivity::ConstVertexIHalfedgeCWIter
VertexIHalfedgeCWIter ConstVertexIHalfedgeCWIter
Definition: PolyConnectivity.hh:284
OpenMesh::PolyConnectivity::FHCWIter
FaceHalfedgeCWIter FHCWIter
Alias typedef.
Definition: PolyConnectivity.hh:430
OpenMesh::PolyConnectivity::ConstVertexVertexCCWIter
VertexVertexCCWIter ConstVertexVertexCCWIter
Definition: PolyConnectivity.hh:279
OpenMesh::PolyConnectivity::FaceVertexCCWIter
Iterators::GenericCirculatorT< FaceVertexTraits, true > FaceVertexCCWIter
Definition: PolyConnectivity.hh:309
OpenMesh::SmartVertexHandle
Smart version of VertexHandle contains a pointer to the corresponding mesh and allows easier access t...
Definition: SmartHandles.hh:84
OpenMesh::PolyConnectivity::VertexOHalfedgeCWIter
Iterators::GenericCirculatorT< VertexHalfedgeTraits, true > VertexOHalfedgeCWIter
Definition: PolyConnectivity.hh:193
OpenMesh::PolyConnectivity::CVEIter
ConstVertexEdgeIter CVEIter
Alias typedef.
Definition: PolyConnectivity.hh:446
OpenMesh::PolyConnectivity::ConstVertexFaceRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexFaceIter, VertexHandle, FaceHandle, &PolyConnectivity::cvf_begin, &PolyConnectivity::cvf_end > > ConstVertexFaceRange
Definition: PolyConnectivity.hh:1202
OpenMesh::PolyConnectivity::ConstFaceVertexCWIter
FaceVertexCWIter ConstFaceVertexCWIter
Definition: PolyConnectivity.hh:368
OpenMesh::PolyConnectivity::FaceVertexTraits
Definition: PolyConnectivity.hh:297
OpenMesh::PolyConnectivity::ConstEdgeIter
EdgeIter ConstEdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:144
OpenMesh::PolyConnectivity::ConstFaceVertexRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceVertexIter, FaceHandle, VertexHandle, &PolyConnectivity::cfv_begin, &PolyConnectivity::cfv_end > > ConstFaceVertexRange
Definition: PolyConnectivity.hh:1209
OpenMesh::PolyConnectivity::ElementRange
Definition: PolyConnectivity.hh:1103
OpenMesh::PolyConnectivity::FaceEdgeCWIter
Iterators::GenericCirculatorT< FaceEdgeTraits, false > FaceEdgeCWIter
Definition: PolyConnectivity.hh:345
OpenMesh::PolyConnectivity::cff_begin
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity_inline_impl.hh:570
OpenMesh::PolyConnectivity::vertices_sbegin
VertexIter vertices_sbegin()
Begin iterator for vertices.
Definition: PolyConnectivity_inline_impl.hh:218
OpenMesh::PolyConnectivity::halfedges_end
HalfedgeIter halfedges_end()
End iterator for halfedges.
Definition: PolyConnectivity_inline_impl.hh:187
OpenMesh::PolyConnectivity::CFVCCWIter
ConstFaceVertexCCWIter CFVCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:454
OpenMesh::PolyConnectivity::InvalidHalfedgeHandle
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:120
OpenMesh::PolyConnectivity::InvalidEdgeHandle
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:122
OpenMesh::PolyConnectivity::CVFIter
ConstVertexFaceIter CVFIter
Alias typedef.
Definition: PolyConnectivity.hh:449
OpenMesh::PolyConnectivity::CFFCWIter
ConstFaceFaceCWIter CFFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:462
OpenMesh::PolyConnectivity::ConstHalfedgeRangeSkipping
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter, &PolyConnectivity::halfedges_sbegin, &PolyConnectivity::halfedges_end > > ConstHalfedgeRangeSkipping
Definition: PolyConnectivity.hh:1079
OpenMesh::PolyConnectivity::ConstFaceEdgeCCWIter
FaceEdgeCCWIter ConstFaceEdgeCCWIter
Definition: PolyConnectivity.hh:375
OpenMesh::PolyConnectivity::VertexEdgeIter
Iterators::GenericCirculatorT_DEPRECATED< VertexEdgeTraits > VertexEdgeIter
Definition: PolyConnectivity.hh:251
OpenMesh::PolyConnectivity
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:112
OpenMesh::PolyConnectivity::cvf_end
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity_inline_impl.hh:672
OpenMesh::PolyConnectivity::cvih_end
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:645
OpenMesh::PolyConnectivity::VECCWIter
VertexEdgeCCWIter VECCWIter
Alias typedef.
Definition: PolyConnectivity.hh:422
OpenMesh::PolyConnectivity::ConstFaceVertexCCWIter
FaceVertexCCWIter ConstFaceVertexCCWIter
Definition: PolyConnectivity.hh:369
OpenMesh::PolyConnectivity::ConstVertexFaceCCWIter
VertexFaceCCWIter ConstVertexFaceCCWIter
Definition: PolyConnectivity.hh:288
OpenMesh::PolyConnectivity::InvalidFaceHandle
static const FaceHandle InvalidFaceHandle
Invalid handle.
Definition: PolyConnectivity.hh:124
OpenMesh::PolyConnectivity::CVFCCWIter
ConstVertexFaceCCWIter CVFCCWIter
Alias typedef.
Definition: PolyConnectivity.hh:451
OpenMesh::PolyConnectivity::FaceFaceCWIter
Iterators::GenericCirculatorT< FaceFaceTraits, false > FaceFaceCWIter
Definition: PolyConnectivity.hh:365
OpenMesh::PolyConnectivity::CFHIter
ConstFaceHalfedgeIter CFHIter
Alias typedef.
Definition: PolyConnectivity.hh:455
OpenMesh::PolyConnectivity::ConstEdgeRangeSkipping
EntityRange< RangeTraitT< const PolyConnectivity, PolyConnectivity::ConstEdgeIter, &PolyConnectivity::edges_sbegin, &PolyConnectivity::edges_end > > ConstEdgeRangeSkipping
Definition: PolyConnectivity.hh:1089
OpenMesh::PolyConnectivity::CVFCWIter
ConstVertexFaceCWIter CVFCWIter
Alias typedef.
Definition: PolyConnectivity.hh:450
OpenMesh::PolyConnectivity::ConstVertexOHalfedgeRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstVertexOHalfedgeIter, VertexHandle, HalfedgeHandle, &PolyConnectivity::cvoh_begin, &PolyConnectivity::cvoh_end > > ConstVertexOHalfedgeRange
Definition: PolyConnectivity.hh:1188
OpenMesh::PolyConnectivity::edges_sbegin
EdgeIter edges_sbegin()
Begin iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:230
OpenMesh::PolyConnectivity::CVVIter
ConstVertexVertexIter CVVIter
Alias typedef.
Definition: PolyConnectivity.hh:437
OpenMesh::PolyConnectivity::deref
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1516
OpenMesh::PolyConnectivity::VertexIHalfedgeCCWIter
Iterators::GenericCirculatorT< VertexOppositeHalfedgeTraits, false > VertexIHalfedgeCCWIter
Definition: PolyConnectivity.hh:217
OpenMesh::PolyConnectivity::VertexOHalfedgeIter
Iterators::GenericCirculatorT_DEPRECATED< VertexHalfedgeTraits > VertexOHalfedgeIter
Definition: PolyConnectivity.hh:192
OpenMesh::PolyConnectivity::edges_begin
EdgeIter edges_begin()
Begin iterator for edges.
Definition: PolyConnectivity_inline_impl.hh:193
OpenMesh::PolyConnectivity::CFEIter
ConstFaceEdgeIter CFEIter
Alias typedef.
Definition: PolyConnectivity.hh:458
OpenMesh::PolyConnectivity::cff_end
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity_inline_impl.hh:755
OpenMesh::PolyConnectivity::cvoh_end
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:654
OpenMesh::PolyConnectivity::is_boundary
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
Definition: PolyConnectivity.hh:1311
OpenMesh::PolyConnectivity::FaceHalfedgeTraits
Definition: PolyConnectivity.hh:259
OpenMesh::PolyConnectivity::ConstFaceHalfedgeCCWIter
FaceHalfedgeCCWIter ConstFaceHalfedgeCCWIter
Definition: PolyConnectivity.hh:372
OpenMesh::PolyConnectivity::HIter
HalfedgeIter HIter
Alias typedef.
Definition: PolyConnectivity.hh:402
OpenMesh::PolyConnectivity::ConstFaceHalfedgeRange
CirculatorRange< CirculatorRangeTraitT< PolyConnectivity, ConstFaceHalfedgeIter, FaceHandle, HalfedgeHandle, &PolyConnectivity::cfh_begin, &PolyConnectivity::cfh_end > > ConstFaceHalfedgeRange
Definition: PolyConnectivity.hh:1216
OpenMesh::PolyConnectivity::VertexVertexCWIter
Iterators::GenericCirculatorT< VertexVertexTraits, true > VertexVertexCWIter
Definition: PolyConnectivity.hh:173
OpenMesh::PolyConnectivity::VertexVertexCCWIter
Iterators::GenericCirculatorT< VertexVertexTraits, false > VertexVertexCCWIter
Definition: PolyConnectivity.hh:178
OpenMesh::PolyConnectivity::opposite_face_handle
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
Definition: PolyConnectivity.hh:1362
OpenMesh::PolyConnectivity::VertexHalfedgeTraits
Definition: PolyConnectivity.hh:181
OpenMesh::PolyConnectivity::ConstVertexEdgeCWIter
VertexEdgeCWIter ConstVertexEdgeCWIter
Definition: PolyConnectivity.hh:290
OpenMesh::PolyConnectivity::cvih_begin
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity_inline_impl.hh:460
OpenMesh::PolyConnectivity::deref
const Edge & deref(EdgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:1518