42 #ifndef OPENMESH_POLYCONNECTIVITY_HH
43 #define OPENMESH_POLYCONNECTIVITY_HH
45 #include <OpenMesh/Core/Mesh/ArrayKernel.hh>
46 #include <OpenMesh/Core/Mesh/IteratorsT.hh>
47 #include <OpenMesh/Core/Mesh/CirculatorsT.hh>
210 inline static bool is_triangles()
224 {
return new_vertex(); }
233 FaceHandle add_face(
const std::vector<VertexHandle>& _vhandles);
286 void delete_vertex(
VertexHandle _vh,
bool _delete_isolated_vertices =
true);
296 void delete_edge(
EdgeHandle _eh,
bool _delete_isolated_vertices=
true);
308 void delete_face(
FaceHandle _fh,
bool _delete_isolated_vertices=
true);
317 VertexIter vertices_begin();
319 ConstVertexIter vertices_begin()
const;
321 VertexIter vertices_end();
323 ConstVertexIter vertices_end()
const;
326 HalfedgeIter halfedges_begin();
328 ConstHalfedgeIter halfedges_begin()
const;
330 HalfedgeIter halfedges_end();
332 ConstHalfedgeIter halfedges_end()
const;
335 EdgeIter edges_begin();
337 ConstEdgeIter edges_begin()
const;
339 EdgeIter edges_end();
341 ConstEdgeIter edges_end()
const;
344 FaceIter faces_begin();
346 ConstFaceIter faces_begin()
const;
348 FaceIter faces_end();
350 ConstFaceIter faces_end()
const;
352 template<
typename CONTAINER_TYPE,
typename ITER_TYPE, ITER_TYPE (CONTAINER_TYPE::*begin_fn)(), ITER_TYPE (CONTAINER_TYPE::*end_fn)()>
355 EntityRange(CONTAINER_TYPE &container) : container_(container) {}
356 ITER_TYPE begin() {
return (container_.*begin_fn)(); }
357 ITER_TYPE end() {
return (container_.*end_fn)(); }
360 CONTAINER_TYPE &container_;
647 return (is_boundary(halfedge_handle(_eh, 0)) ||
648 is_boundary(halfedge_handle(_eh, 1)));
665 return (!(heh.
is_valid() && face_handle(heh).is_valid()));
677 bool is_boundary(
FaceHandle _fh,
bool _check_vertex=
false)
const;
697 {
return face_handle(opposite_halfedge_handle(_heh)); }
739 bool is_simply_connected(
FaceHandle _fh)
const;
847 const Vertex& deref(
VertexHandle _h)
const {
return vertex(_h); }
867 struct AddFaceEdgeInfo
873 std::vector<AddFaceEdgeInfo> edgeData_;
874 std::vector<std::pair<HalfedgeHandle, HalfedgeHandle> > next_cache_;
875 uint next_cache_count_;
881 #endif//OPENMESH_POLYCONNECTIVITY_HH
EntityRange< const PolyConnectivity, PolyConnectivity::ConstEdgeIter,&PolyConnectivity::edges_begin,&PolyConnectivity::edges_end > ConstEdgeRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:364
VertexEdgeIter VEIter
Alias typedef.
Definition: PolyConnectivity.hh:187
Connectivity Class for polygonal meshes.
Definition: PolyConnectivity.hh:54
Handle for a edge entity.
Definition: Handles.hh:128
ConstVertexVertexIter cvv_end(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:573
VertexEdgeIter ve_end(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:566
FaceEdgeIter fe_iter(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:469
ConstFaceVertexIter cfv_begin(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:539
ConstFaceVertexIter cfv_end(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:605
VertexOHalfedgeIter VOHIter
Alias typedef.
Definition: PolyConnectivity.hh:185
FaceFaceIter ff_end(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:598
bool is_boundary(HalfedgeHandle _heh) const
Check if the halfedge is at the boundary.
Definition: PolyConnectivity.hh:634
FaceIter faces_sbegin()
Begin iterator for faces.
Definition: PolyConnectivity.hh:416
Face & deref(FaceHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:855
VertexVertexIter vv_iter(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:431
VertexVertexIter vv_end(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:557
ConstVertexIHalfedgeIter CVIHIter
Alias typedef.
Definition: PolyConnectivity.hh:196
ConstFaceEdgeIter cfe_iter(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:482
ConstFaceVertexIter cfv_iter(FaceHandle _fh) const
const face - vertex circulator
Definition: PolyConnectivity.hh:476
ConstFaceEdgeIter CFEIter
Alias typedef.
Definition: PolyConnectivity.hh:201
FaceEdgeIter FEIter
Alias typedef.
Definition: PolyConnectivity.hh:191
ConstFaceIter CFIter
Alias typedef.
Definition: PolyConnectivity.hh:182
FaceFaceIter FFIter
Alias typedef.
Definition: PolyConnectivity.hh:192
ConstVertexOHalfedgeIter cvoh_end(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:579
ConstVertexIHalfedgeIter cvih_end(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:576
ConstVertexEdgeIter cve_begin(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:516
Definition: CirculatorsT.hh:159
HalfedgeLoopIter hl_end(HalfedgeHandle _heh)
face - face circulator
Definition: PolyConnectivity.hh:601
ConstFaceHalfedgeIter CFHIter
Alias typedef.
Definition: PolyConnectivity.hh:200
VertexIHalfedgeIter vih_begin(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:494
FaceHalfedgeIter FHIter
Alias typedef.
Definition: PolyConnectivity.hh:190
bool is_valid() const
The handle is valid iff the index is not equal to -1.
Definition: Handles.hh:70
VertexIHalfedgeIter vih_end(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:560
FaceHalfedgeIter fh_iter(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:466
static const HalfedgeHandle InvalidHalfedgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:62
FaceEdgeIter fe_begin(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:529
HalfedgeHandle HHandle
Alias typedef.
Definition: PolyConnectivity.hh:170
HalfedgeIter HIter
Alias typedef.
Definition: PolyConnectivity.hh:175
ConstVertexOHalfedgeIter cvoh_begin(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:513
EdgeIter edges_sbegin()
Begin iterator for edges.
Definition: PolyConnectivity.hh:409
ConstVertexEdgeIter cve_end(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:582
ConstVertexIter vertices_sbegin() const
Const begin iterator for vertices.
Definition: PolyConnectivity.hh:398
VertexFaceIter vf_iter(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:443
VertexIHalfedgeIter VIHIter
Alias typedef.
Definition: PolyConnectivity.hh:186
ConstHalfedgeRange halfedges() const
Definition: PolyConnectivity.hh:375
Halfedge & deref(HalfedgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:851
ConstFaceHalfedgeIter cfh_iter(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:479
ConstVertexVertexIter cvv_begin(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:507
ConstFaceFaceIter cff_begin(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:548
ConstHalfedgeLoopIter chl_begin(HalfedgeHandle _heh) const
const halfedge circulator
Definition: PolyConnectivity.hh:551
FaceVertexIter fv_iter(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:463
VertexOHalfedgeIter voh_begin(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:497
bool is_boundary(EdgeHandle _eh) const
Is the edge a boundary edge?
Definition: PolyConnectivity.hh:645
ConstVertexEdgeIter CVEIter
Alias typedef.
Definition: PolyConnectivity.hh:197
Iterators::GenericIteratorT< This, This::EdgeHandle, ArrayKernel,&This::has_edge_status,&This::n_edges > EdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:81
HalfedgeIter halfedges_sbegin()
Begin iterator for halfedges.
Definition: PolyConnectivity.hh:402
ConstFaceEdgeIter cfe_begin(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:545
ConstEdgeIter edges_sbegin() const
Const begin iterator for edges.
Definition: PolyConnectivity.hh:412
ConstHalfedgeIter halfedges_sbegin() const
Const begin iterator for halfedges.
Definition: PolyConnectivity.hh:405
VertexIter VIter
Alias typedef.
Definition: PolyConnectivity.hh:174
ConstVertexVertexIter CVVIter
Alias typedef.
Definition: PolyConnectivity.hh:194
HalfedgeIter ConstHalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:85
VertexFaceIter vf_end(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:569
ConstFaceRange faces() const
Definition: PolyConnectivity.hh:385
Handle for a face entity.
Definition: Handles.hh:135
Handle for a vertex entity.
Definition: Handles.hh:114
Edge & deref(EdgeHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:853
Definition: IteratorsT.hh:82
VertexVertexIter VVIter
Alias typedef.
Definition: PolyConnectivity.hh:184
ConstEdgeIter CEIter
Alias typedef.
Definition: PolyConnectivity.hh:181
FaceEdgeIter fe_end(FaceHandle _fh)
face - edge circulator
Definition: PolyConnectivity.hh:595
FaceFaceIter ff_iter(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:472
ConstFaceFaceIter cff_iter(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:485
FaceIter ConstFaceIter
Linear iterator.
Definition: PolyConnectivity.hh:87
Iterators::GenericIteratorT< This, This::HalfedgeHandle, ArrayKernel,&This::has_halfedge_status,&This::n_halfedges > HalfedgeIter
Linear iterator.
Definition: PolyConnectivity.hh:80
VertexEdgeIter ve_iter(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:440
VertexFaceIter VFIter
Alias typedef.
Definition: PolyConnectivity.hh:188
FaceHandle FHandle
Alias typedef.
Definition: PolyConnectivity.hh:172
ConstVertexIter CVIter
Alias typedef.
Definition: PolyConnectivity.hh:179
EntityRange< const PolyConnectivity, PolyConnectivity::ConstFaceIter,&PolyConnectivity::faces_begin,&PolyConnectivity::faces_end > ConstFaceRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:365
ConstFaceHalfedgeIter cfh_end(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:608
const Halfedge & deref(HalfedgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:850
Vertex & deref(VertexHandle _h)
Get item from handle.
Definition: PolyConnectivity.hh:849
bool is_boundary(HalfedgeHandle _heh) const
Is halfedge _heh a boundary halfedge (is its face handle invalid) ?
Definition: ArrayKernel.hh:358
VertexIHalfedgeIter vih_iter(VertexHandle _vh)
vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:434
EdgeIter EIter
Alias typedef.
Definition: PolyConnectivity.hh:176
VertexVertexIter vv_begin(VertexHandle _vh)
vertex - vertex circulator
Definition: PolyConnectivity.hh:491
ConstVertexFaceIter cvf_iter(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:459
static const FaceHandle InvalidFaceHandle
Invalid handle.
Definition: PolyConnectivity.hh:66
ConstVertexFaceIter cvf_begin(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:519
FaceVertexIter FVIter
Alias typedef.
Definition: PolyConnectivity.hh:189
ConstVertexOHalfedgeIter CVOHIter
Alias typedef.
Definition: PolyConnectivity.hh:195
ConstVertexRange vertices() const
Definition: PolyConnectivity.hh:370
ConstHalfedgeLoopIter chl_end(HalfedgeHandle _heh) const
const face - face circulator
Definition: PolyConnectivity.hh:617
ConstVertexFaceIter CVFIter
Alias typedef.
Definition: PolyConnectivity.hh:198
EntityRange< const PolyConnectivity, PolyConnectivity::ConstVertexIter,&PolyConnectivity::vertices_begin,&PolyConnectivity::vertices_end > ConstVertexRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:362
void assign_connectivity(const ArrayKernel &_other)
ArrayKernel uses the default copy constructor and assignment operator, which means that the connectiv...
Definition: ArrayKernel.cc:69
ConstFaceFaceIter CFFIter
Alias typedef.
Definition: PolyConnectivity.hh:202
ConstVertexIHalfedgeIter cvih_begin(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:510
VertexIter ConstVertexIter
Linear iterator.
Definition: PolyConnectivity.hh:84
ConstVertexOHalfedgeIter cvoh_iter(VertexHandle _vh) const
const vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:453
ConstVertexEdgeIter cve_iter(VertexHandle _vh) const
const vertex - edge circulator
Definition: PolyConnectivity.hh:456
ConstFaceIter faces_sbegin() const
Const begin iterator for faces.
Definition: PolyConnectivity.hh:419
VertexIter vertices_sbegin()
Begin iterator for vertices.
Definition: PolyConnectivity.hh:395
VertexHandle add_vertex()
Add a new vertex.
Definition: PolyConnectivity.hh:223
EntityRange< const PolyConnectivity, PolyConnectivity::ConstHalfedgeIter,&PolyConnectivity::halfedges_begin,&PolyConnectivity::halfedges_end > ConstHalfedgeRange
Begin iterator for vertices.
Definition: PolyConnectivity.hh:363
void assign_connectivity(const PolyConnectivity &_other)
assign_connectivity() method.
Definition: PolyConnectivity.hh:215
FaceVertexIter fv_begin(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:523
const Face & deref(FaceHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:854
FaceHalfedgeIter fh_begin(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:526
FaceFaceIter ff_begin(FaceHandle _fh)
face - face circulator
Definition: PolyConnectivity.hh:532
Definition: CirculatorsT.hh:221
Definition: PolyConnectivity.hh:353
FaceIter FIter
Alias typedef.
Definition: PolyConnectivity.hh:177
Mesh kernel using arrays for mesh item storage.
Definition: ArrayKernel.hh:85
const Edge & deref(EdgeHandle _h) const
Get item from handle.
Definition: PolyConnectivity.hh:852
ConstFaceHalfedgeIter cfh_begin(FaceHandle _fh) const
const face - halfedge circulator
Definition: PolyConnectivity.hh:542
EdgeHandle EHandle
Alias typedef.
Definition: PolyConnectivity.hh:171
bool is_boundary(VertexHandle _vh) const
Is vertex _vh a boundary vertex ?
Definition: PolyConnectivity.hh:662
ConstVertexIHalfedgeIter cvih_iter(VertexHandle _vh) const
const vertex - incoming halfedge circulator
Definition: PolyConnectivity.hh:450
ConstVertexFaceIter cvf_end(VertexHandle _vh) const
const vertex - face circulator
Definition: PolyConnectivity.hh:585
Handle for a halfedge entity.
Definition: Handles.hh:121
VertexFaceIter vf_begin(VertexHandle _vh)
vertex - face circulator
Definition: PolyConnectivity.hh:503
VertexEdgeIter ve_begin(VertexHandle _vh)
vertex - edge circulator
Definition: PolyConnectivity.hh:500
ConstHalfedgeIter CHIter
Alias typedef.
Definition: PolyConnectivity.hh:180
HalfedgeLoopIter hl_begin(HalfedgeHandle _heh)
halfedge circulator
Definition: PolyConnectivity.hh:535
Iterators::GenericIteratorT< This, This::FaceHandle, ArrayKernel,&This::has_face_status,&This::n_faces > FaceIter
Linear iterator.
Definition: PolyConnectivity.hh:82
ConstVertexVertexIter cvv_iter(VertexHandle _vh) const
const vertex circulator
Definition: PolyConnectivity.hh:447
ConstFaceFaceIter cff_end(FaceHandle _fh) const
const face - face circulator
Definition: PolyConnectivity.hh:614
FaceHandle opposite_face_handle(HalfedgeHandle _heh) const
returns the face handle of the opposite halfedge
Definition: PolyConnectivity.hh:696
ConstEdgeRange edges() const
Definition: PolyConnectivity.hh:380
ConstFaceVertexIter CFVIter
Alias typedef.
Definition: PolyConnectivity.hh:199
VertexOHalfedgeIter voh_end(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:563
VertexOHalfedgeIter voh_iter(VertexHandle _vh)
vertex - outgoing halfedge circulator
Definition: PolyConnectivity.hh:437
FaceVertexIter fv_end(FaceHandle _fh)
face - vertex circulator
Definition: PolyConnectivity.hh:589
FaceHalfedgeIter fh_end(FaceHandle _fh)
face - halfedge circulator
Definition: PolyConnectivity.hh:592
static const EdgeHandle InvalidEdgeHandle
Invalid handle.
Definition: PolyConnectivity.hh:64
ConstFaceEdgeIter cfe_end(FaceHandle _fh) const
const face - edge circulator
Definition: PolyConnectivity.hh:611
EdgeIter ConstEdgeIter
Linear iterator.
Definition: PolyConnectivity.hh:86