From c6daa6bcb2a7f798268040d17038f915cbb7813d Mon Sep 17 00:00:00 2001 From: Max Lyon Date: Tue, 5 Nov 2019 13:29:08 +0100 Subject: [PATCH] move inline implementation of polyconnectivity into its own file --- src/OpenMesh/Core/Mesh/PolyConnectivity.hh | 731 +--------------- .../Core/Mesh/PolyConnectivity_inline_impl.hh | 777 ++++++++++++++++++ 2 files changed, 778 insertions(+), 730 deletions(-) create mode 100644 src/OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh diff --git a/src/OpenMesh/Core/Mesh/PolyConnectivity.hh b/src/OpenMesh/Core/Mesh/PolyConnectivity.hh index c84392b7..544ee6c6 100644 --- a/src/OpenMesh/Core/Mesh/PolyConnectivity.hh +++ b/src/OpenMesh/Core/Mesh/PolyConnectivity.hh @@ -1571,735 +1571,6 @@ struct PolyConnectivity::ElementRange }//namespace OpenMesh - -#include -#include -#include - -namespace OpenMesh { - - -inline SmartVertexHandle PolyConnectivity::add_vertex() { return make_smart(new_vertex(), *this); } - -inline SmartHalfedgeHandle PolyConnectivity::next_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(next_halfedge_handle(HalfedgeHandle(_heh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::prev_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(prev_halfedge_handle(HalfedgeHandle(_heh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::opposite_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(opposite_halfedge_handle(HalfedgeHandle(_heh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::ccw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(ccw_rotated_halfedge_handle(HalfedgeHandle(_heh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::cw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(cw_rotated_halfedge_handle(HalfedgeHandle(_heh)), *this); } - -inline SmartHalfedgeHandle PolyConnectivity::s_halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) { return make_smart(ArrayKernel::s_halfedge_handle(EdgeHandle(_eh), _i), _eh.mesh()); } -inline SmartEdgeHandle PolyConnectivity::s_edge_handle(SmartHalfedgeHandle _heh) { return make_smart(ArrayKernel::s_edge_handle(HalfedgeHandle(_heh)), _heh.mesh()); } - -inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) const { return make_smart(halfedge_handle(EdgeHandle(_eh), _i), *this); } -inline SmartEdgeHandle PolyConnectivity::edge_handle(SmartHalfedgeHandle _heh) const { return make_smart(edge_handle(HalfedgeHandle(_heh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartFaceHandle _fh) const { return make_smart(halfedge_handle(FaceHandle(_fh)), *this); } -inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartVertexHandle _vh) const { return make_smart(halfedge_handle(VertexHandle(_vh)), *this); } - -inline SmartFaceHandle PolyConnectivity::face_handle(SmartHalfedgeHandle _heh) const { return make_smart(face_handle(HalfedgeHandle(_heh)), *this); } - - - -/// Generic class for vertex/halfedge/edge/face ranges. -template -class EntityRange : public SmartRangeT, typename RangeTraitT::ITER_TYPE::SmartHandle> { - public: - typedef typename RangeTraitT::ITER_TYPE iterator; - typedef typename RangeTraitT::ITER_TYPE const_iterator; - - explicit EntityRange(typename RangeTraitT::CONTAINER_TYPE &container) : container_(container) {} - typename RangeTraitT::ITER_TYPE begin() const { return RangeTraitT::begin(container_); } - typename RangeTraitT::ITER_TYPE end() const { return RangeTraitT::end(container_); } - - private: - typename RangeTraitT::CONTAINER_TYPE &container_; -}; - - -/// Generic class for iterator ranges. -template -//class CirculatorRange : public SmartRangeT, decltype (make_smart(std::declval(), std::declval()))>{ -class CirculatorRange : public SmartRangeT, typename SmartHandle::type>{ - public: - typedef typename CirculatorRangeTraitT::ITER_TYPE ITER_TYPE; - typedef typename CirculatorRangeTraitT::CENTER_ENTITY_TYPE CENTER_ENTITY_TYPE; - typedef typename CirculatorRangeTraitT::CONTAINER_TYPE CONTAINER_TYPE; - typedef ITER_TYPE iterator; - typedef ITER_TYPE const_iterator; - - CirculatorRange( - const CONTAINER_TYPE &container, - CENTER_ENTITY_TYPE center) : - container_(container), center_(center) {} - ITER_TYPE begin() const { return CirculatorRangeTraitT::begin(container_, center_); } - ITER_TYPE end() const { return CirculatorRangeTraitT::end(container_, center_); } - - private: - const CONTAINER_TYPE &container_; - CENTER_ENTITY_TYPE center_; -}; - -inline PolyConnectivity::ConstVertexRangeSkipping PolyConnectivity::vertices() const { return ConstVertexRangeSkipping(*this); } -inline PolyConnectivity::ConstVertexRange PolyConnectivity::all_vertices() const { return ConstVertexRange(*this); } -inline PolyConnectivity::ConstHalfedgeRangeSkipping PolyConnectivity::halfedges() const { return ConstHalfedgeRangeSkipping(*this); } -inline PolyConnectivity::ConstHalfedgeRange PolyConnectivity::all_halfedges() const { return ConstHalfedgeRange(*this); } -inline PolyConnectivity::ConstEdgeRangeSkipping PolyConnectivity::edges() const { return ConstEdgeRangeSkipping(*this); } -inline PolyConnectivity::ConstEdgeRange PolyConnectivity::all_edges() const { return ConstEdgeRange(*this); } -inline PolyConnectivity::ConstFaceRangeSkipping PolyConnectivity::faces() const { return ConstFaceRangeSkipping(*this); } -inline PolyConnectivity::ConstFaceRange PolyConnectivity::all_faces() const { return ConstFaceRange(*this); } - -template <> inline PolyConnectivity::ConstVertexRangeSkipping PolyConnectivity::elements() const { return vertices(); } -template <> inline PolyConnectivity::ConstVertexRange PolyConnectivity::all_elements() const { return all_vertices(); } -template <> inline PolyConnectivity::ConstHalfedgeRangeSkipping PolyConnectivity::elements() const { return halfedges(); } -template <> inline PolyConnectivity::ConstHalfedgeRange PolyConnectivity::all_elements() const { return all_halfedges(); } -template <> inline PolyConnectivity::ConstEdgeRangeSkipping PolyConnectivity::elements() const { return edges(); } -template <> inline PolyConnectivity::ConstEdgeRange PolyConnectivity::all_elements() const { return all_edges(); } -template <> inline PolyConnectivity::ConstFaceRangeSkipping PolyConnectivity::elements() const { return faces(); } -template <> inline PolyConnectivity::ConstFaceRange PolyConnectivity::all_elements() const { return all_faces(); } - -inline PolyConnectivity::ConstVertexVertexRange PolyConnectivity::vv_range(VertexHandle _vh) const { - return ConstVertexVertexRange(*this, _vh); -} - -inline PolyConnectivity::ConstVertexIHalfedgeRange PolyConnectivity::vih_range(VertexHandle _vh) const { - return ConstVertexIHalfedgeRange(*this, _vh); -} - -inline PolyConnectivity::ConstVertexOHalfedgeRange PolyConnectivity::voh_range(VertexHandle _vh) const { - return ConstVertexOHalfedgeRange(*this, _vh); -} - -inline PolyConnectivity::ConstVertexEdgeRange PolyConnectivity::ve_range(VertexHandle _vh) const { - return ConstVertexEdgeRange(*this, _vh); -} - -inline PolyConnectivity::ConstVertexFaceRange PolyConnectivity::vf_range(VertexHandle _vh) const { - return ConstVertexFaceRange(*this, _vh); -} - -inline PolyConnectivity::ConstFaceVertexRange PolyConnectivity::fv_range(FaceHandle _fh) const { - return ConstFaceVertexRange(*this, _fh); -} - -inline PolyConnectivity::ConstFaceHalfedgeRange PolyConnectivity::fh_range(FaceHandle _fh) const { - return ConstFaceHalfedgeRange(*this, _fh); -} - -inline PolyConnectivity::ConstFaceEdgeRange PolyConnectivity::fe_range(FaceHandle _fh) const { - return ConstFaceEdgeRange(*this, _fh); -} - -inline PolyConnectivity::ConstFaceFaceRange PolyConnectivity::ff_range(FaceHandle _fh) const { - return ConstFaceFaceRange(*this, _fh); -} - - - -inline PolyConnectivity::VertexIter PolyConnectivity::vertices_begin() -{ return VertexIter(*this, VertexHandle(0)); } - -inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_begin() const -{ return ConstVertexIter(*this, VertexHandle(0)); } - -inline PolyConnectivity::VertexIter PolyConnectivity::vertices_end() -{ return VertexIter(*this, VertexHandle( int(n_vertices() ) )); } - -inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_end() const -{ return ConstVertexIter(*this, VertexHandle( int(n_vertices()) )); } - -inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_begin() -{ return HalfedgeIter(*this, HalfedgeHandle(0)); } - -inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_begin() const -{ return ConstHalfedgeIter(*this, HalfedgeHandle(0)); } - -inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_end() -{ return HalfedgeIter(*this, HalfedgeHandle(int(n_halfedges()))); } - -inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_end() const -{ return ConstHalfedgeIter(*this, HalfedgeHandle(int(n_halfedges()))); } - -inline PolyConnectivity::EdgeIter PolyConnectivity::edges_begin() -{ return EdgeIter(*this, EdgeHandle(0)); } - -inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_begin() const -{ return ConstEdgeIter(*this, EdgeHandle(0)); } - -inline PolyConnectivity::EdgeIter PolyConnectivity::edges_end() -{ return EdgeIter(*this, EdgeHandle(int(n_edges()))); } - -inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_end() const -{ return ConstEdgeIter(*this, EdgeHandle(int(n_edges()))); } - -inline PolyConnectivity::FaceIter PolyConnectivity::faces_begin() -{ return FaceIter(*this, FaceHandle(0)); } - -inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_begin() const -{ return ConstFaceIter(*this, FaceHandle(0)); } - -inline PolyConnectivity::FaceIter PolyConnectivity::faces_end() -{ return FaceIter(*this, FaceHandle(int(n_faces()))); } - - -inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_end() const -{ return ConstFaceIter(*this, FaceHandle(int(n_faces()))); } - -inline PolyConnectivity::VertexIter PolyConnectivity::vertices_sbegin() -{ return VertexIter(*this, VertexHandle(0), true); } - -inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_sbegin() const -{ return ConstVertexIter(*this, VertexHandle(0), true); } - -inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_sbegin() -{ return HalfedgeIter(*this, HalfedgeHandle(0), true); } - -inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_sbegin() const -{ return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); } - -inline PolyConnectivity::EdgeIter PolyConnectivity::edges_sbegin() -{ return EdgeIter(*this, EdgeHandle(0), true); } - -inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_sbegin() const -{ return ConstEdgeIter(*this, EdgeHandle(0), true); } - -inline PolyConnectivity::FaceIter PolyConnectivity::faces_sbegin() -{ return FaceIter(*this, FaceHandle(0), true); } - -inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_sbegin() const -{ return ConstFaceIter(*this, FaceHandle(0), true); } - -inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_iter(ArrayKernel::VertexHandle _vh) -{ return VertexVertexIter(*this, _vh); } - -inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwiter(ArrayKernel::VertexHandle _vh) -{ return VertexVertexCWIter(*this, _vh); } - -inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwiter(ArrayKernel::VertexHandle _vh) -{ return VertexVertexCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_iter(ArrayKernel::VertexHandle _vh) -{ return VertexIHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwiter(ArrayKernel::VertexHandle _vh) -{ return VertexIHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwiter(ArrayKernel::VertexHandle _vh) -{ return VertexIHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_iter(ArrayKernel::VertexHandle _vh) -{ return VertexOHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwiter(ArrayKernel::VertexHandle _vh) -{ return VertexOHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwiter(ArrayKernel::VertexHandle _vh) -{ return VertexOHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_iter(ArrayKernel::VertexHandle _vh) -{ return VertexEdgeIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwiter(ArrayKernel::VertexHandle _vh) -{ return VertexEdgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwiter(ArrayKernel::VertexHandle _vh) -{ return VertexEdgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_iter(ArrayKernel::VertexHandle _vh) -{ return VertexFaceIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwiter(ArrayKernel::VertexHandle _vh) -{ return VertexFaceCWIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwiter(ArrayKernel::VertexHandle _vh) -{ return VertexFaceCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_iter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexVertexIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexVertexCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexVertexCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_iter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexIHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexIHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexIHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_iter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexOHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexOHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexOHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_iter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexEdgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexEdgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexEdgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_iter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexFaceIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexFaceCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwiter(ArrayKernel::VertexHandle _vh) const -{ return ConstVertexFaceCCWIter(*this, _vh); } - -inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_iter(ArrayKernel::FaceHandle _fh) -{ return FaceVertexIter(*this, _fh); } - -inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwiter(ArrayKernel::FaceHandle _fh) -{ return FaceVertexCWIter(*this, _fh); } - -inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwiter(ArrayKernel::FaceHandle _fh) -{ return FaceVertexCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_iter(ArrayKernel::FaceHandle _fh) -{ return FaceHalfedgeIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwiter(ArrayKernel::FaceHandle _fh) -{ return FaceHalfedgeCWIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwiter(ArrayKernel::FaceHandle _fh) -{ return FaceHalfedgeCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_iter(ArrayKernel::FaceHandle _fh) -{ return FaceEdgeIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwiter(ArrayKernel::FaceHandle _fh) -{ return FaceEdgeCWIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwiter(ArrayKernel::FaceHandle _fh) -{ return FaceEdgeCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_iter(ArrayKernel::FaceHandle _fh) -{ return FaceFaceIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwiter(ArrayKernel::FaceHandle _fh) -{ return FaceFaceCWIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwiter(ArrayKernel::FaceHandle _fh) -{ return FaceFaceCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_iter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceVertexIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceVertexCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceVertexCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_iter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceHalfedgeIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceHalfedgeCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceHalfedgeCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_iter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceEdgeIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceEdgeCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceEdgeCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_iter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceFaceIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceFaceCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwiter(ArrayKernel::FaceHandle _fh) const -{ return ConstFaceFaceCCWIter(*this, _fh); } - - -inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_begin(VertexHandle _vh) -{ return VertexVertexIter(*this, _vh); } - -inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwbegin(VertexHandle _vh) -{ return VertexVertexCWIter(*this, _vh); } - -inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwbegin(VertexHandle _vh) -{ return VertexVertexCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_begin(VertexHandle _vh) -{ return VertexIHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwbegin(VertexHandle _vh) -{ return VertexIHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwbegin(VertexHandle _vh) -{ return VertexIHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_begin(VertexHandle _vh) -{ return VertexOHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwbegin(VertexHandle _vh) -{ return VertexOHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwbegin(VertexHandle _vh) -{ return VertexOHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_begin(VertexHandle _vh) -{ return VertexEdgeIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwbegin(VertexHandle _vh) -{ return VertexEdgeCWIter(*this, _vh); } - -inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwbegin(VertexHandle _vh) -{ return VertexEdgeCCWIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_begin(VertexHandle _vh) -{ return VertexFaceIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwbegin(VertexHandle _vh) -{ return VertexFaceCWIter(*this, _vh); } - -inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwbegin(VertexHandle _vh) -{ return VertexFaceCCWIter(*this, _vh); } - - -inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_begin(VertexHandle _vh) const -{ return ConstVertexVertexIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwbegin(VertexHandle _vh) const -{ return ConstVertexVertexCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwbegin(VertexHandle _vh) const -{ return ConstVertexVertexCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_begin(VertexHandle _vh) const -{ return ConstVertexIHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwbegin(VertexHandle _vh) const -{ return ConstVertexIHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwbegin(VertexHandle _vh) const -{ return ConstVertexIHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_begin(VertexHandle _vh) const -{ return ConstVertexOHalfedgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwbegin(VertexHandle _vh) const -{ return ConstVertexOHalfedgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwbegin(VertexHandle _vh) const -{ return ConstVertexOHalfedgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_begin(VertexHandle _vh) const -{ return ConstVertexEdgeIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwbegin(VertexHandle _vh) const -{ return ConstVertexEdgeCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwbegin(VertexHandle _vh) const -{ return ConstVertexEdgeCCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_begin(VertexHandle _vh) const -{ return ConstVertexFaceIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwbegin(VertexHandle _vh) const -{ return ConstVertexFaceCWIter(*this, _vh); } - -inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwbegin(VertexHandle _vh) const -{ return ConstVertexFaceCCWIter(*this, _vh); } - - -inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_begin(FaceHandle _fh) -{ return FaceVertexIter(*this, _fh); } - -inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwbegin(FaceHandle _fh) -{ return FaceVertexCWIter(*this, _fh); } - -inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwbegin(FaceHandle _fh) -{ return FaceVertexCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_begin(FaceHandle _fh) -{ return FaceHalfedgeIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwbegin(FaceHandle _fh) -{ return FaceHalfedgeCWIter(*this, _fh); } - -inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwbegin(FaceHandle _fh) -{ return FaceHalfedgeCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_begin(FaceHandle _fh) -{ return FaceEdgeIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwbegin(FaceHandle _fh) -{ return FaceEdgeCWIter(*this, _fh); } - -inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwbegin(FaceHandle _fh) -{ return FaceEdgeCCWIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_begin(FaceHandle _fh) -{ return FaceFaceIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwbegin(FaceHandle _fh) -{ return FaceFaceCWIter(*this, _fh); } - -inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwbegin(FaceHandle _fh) -{ return FaceFaceCCWIter(*this, _fh); } - -inline PolyConnectivity::HalfedgeLoopIter PolyConnectivity::hl_begin(HalfedgeHandle _heh) -{ return HalfedgeLoopIter(*this, _heh); } - -inline PolyConnectivity::HalfedgeLoopCWIter PolyConnectivity::hl_cwbegin(HalfedgeHandle _heh) -{ return HalfedgeLoopCWIter(*this, _heh); } - -inline PolyConnectivity::HalfedgeLoopCCWIter PolyConnectivity::hl_ccwbegin(HalfedgeHandle _heh) -{ return HalfedgeLoopCCWIter(*this, _heh); } - - -inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_begin(FaceHandle _fh) const -{ return ConstFaceVertexIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwbegin(FaceHandle _fh) const -{ return ConstFaceVertexCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwbegin(FaceHandle _fh) const -{ return ConstFaceVertexCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_begin(FaceHandle _fh) const -{ return ConstFaceHalfedgeIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwbegin(FaceHandle _fh) const -{ return ConstFaceHalfedgeCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwbegin(FaceHandle _fh) const -{ return ConstFaceHalfedgeCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_begin(FaceHandle _fh) const -{ return ConstFaceEdgeIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwbegin(FaceHandle _fh) const -{ return ConstFaceEdgeCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwbegin(FaceHandle _fh) const -{ return ConstFaceEdgeCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_begin(FaceHandle _fh) const -{ return ConstFaceFaceIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwbegin(FaceHandle _fh) const -{ return ConstFaceFaceCWIter(*this, _fh); } - -inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwbegin(FaceHandle _fh) const -{ return ConstFaceFaceCCWIter(*this, _fh); } - -inline PolyConnectivity::ConstHalfedgeLoopIter PolyConnectivity::chl_begin(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopIter(*this, _heh); } - -inline PolyConnectivity::ConstHalfedgeLoopCWIter PolyConnectivity::chl_cwbegin(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopCWIter(*this, _heh); } - -inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwbegin(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopCCWIter(*this, _heh); } - -// 'end' circulators - -inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_end(VertexHandle _vh) -{ return VertexVertexIter(*this, _vh, true); } - -inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwend(VertexHandle _vh) -{ return VertexVertexCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwend(VertexHandle _vh) -{ return VertexVertexCCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_end(VertexHandle _vh) -{ return VertexIHalfedgeIter(*this, _vh, true); } - -inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwend(VertexHandle _vh) -{ return VertexIHalfedgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwend(VertexHandle _vh) -{ return VertexIHalfedgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_end(VertexHandle _vh) -{ return VertexOHalfedgeIter(*this, _vh, true); } - -inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwend(VertexHandle _vh) -{ return VertexOHalfedgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwend(VertexHandle _vh) -{ return VertexOHalfedgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_end(VertexHandle _vh) -{ return VertexEdgeIter(*this, _vh, true); } - -inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwend(VertexHandle _vh) -{ return VertexEdgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwend(VertexHandle _vh) -{ return VertexEdgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_end(VertexHandle _vh) -{ return VertexFaceIter(*this, _vh, true); } - -inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwend(VertexHandle _vh) -{ return VertexFaceCWIter(*this, _vh, true); } - -inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwend(VertexHandle _vh) -{ return VertexFaceCCWIter(*this, _vh, true); } - - -inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_end(VertexHandle _vh) const -{ return ConstVertexVertexIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwend(VertexHandle _vh) const -{ return ConstVertexVertexCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwend(VertexHandle _vh) const -{ return ConstVertexVertexCCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_end(VertexHandle _vh) const -{ return ConstVertexIHalfedgeIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwend(VertexHandle _vh) const -{ return ConstVertexIHalfedgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwend(VertexHandle _vh) const -{ return ConstVertexIHalfedgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_end(VertexHandle _vh) const -{ return ConstVertexOHalfedgeIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwend(VertexHandle _vh) const -{ return ConstVertexOHalfedgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwend(VertexHandle _vh) const -{ return ConstVertexOHalfedgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_end(VertexHandle _vh) const -{ return ConstVertexEdgeIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwend(VertexHandle _vh) const -{ return ConstVertexEdgeCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwend(VertexHandle _vh) const -{ return ConstVertexEdgeCCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_end(VertexHandle _vh) const -{ return ConstVertexFaceIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwend(VertexHandle _vh) const -{ return ConstVertexFaceCWIter(*this, _vh, true); } - -inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwend(VertexHandle _vh) const -{ return ConstVertexFaceCCWIter(*this, _vh, true); } - - -inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_end(FaceHandle _fh) -{ return FaceVertexIter(*this, _fh, true); } - -inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwend(FaceHandle _fh) -{ return FaceVertexCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwend(FaceHandle _fh) -{ return FaceVertexCCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_end(FaceHandle _fh) -{ return FaceHalfedgeIter(*this, _fh, true); } - -inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwend(FaceHandle _fh) -{ return FaceHalfedgeCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwend(FaceHandle _fh) -{ return FaceHalfedgeCCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_end(FaceHandle _fh) -{ return FaceEdgeIter(*this, _fh, true); } - -inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwend(FaceHandle _fh) -{ return FaceEdgeCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwend(FaceHandle _fh) -{ return FaceEdgeCCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_end(FaceHandle _fh) -{ return FaceFaceIter(*this, _fh, true); } - -inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwend(FaceHandle _fh) -{ return FaceFaceCWIter(*this, _fh, true); } - -inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwend(FaceHandle _fh) -{ return FaceFaceCCWIter(*this, _fh, true); } - -inline PolyConnectivity::HalfedgeLoopIter PolyConnectivity::hl_end(HalfedgeHandle _heh) -{ return HalfedgeLoopIter(*this, _heh, true); } - -inline PolyConnectivity::HalfedgeLoopCWIter PolyConnectivity::hl_cwend(HalfedgeHandle _heh) -{ return HalfedgeLoopCWIter(*this, _heh, true); } - -inline PolyConnectivity::HalfedgeLoopCCWIter PolyConnectivity::hl_ccwend(HalfedgeHandle _heh) -{ return HalfedgeLoopCCWIter(*this, _heh, true); } - - -inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_end(FaceHandle _fh) const -{ return ConstFaceVertexIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwend(FaceHandle _fh) const -{ return ConstFaceVertexCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwend(FaceHandle _fh) const -{ return ConstFaceVertexCCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_end(FaceHandle _fh) const -{ return ConstFaceHalfedgeIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwend(FaceHandle _fh) const -{ return ConstFaceHalfedgeCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwend(FaceHandle _fh) const -{ return ConstFaceHalfedgeCCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_end(FaceHandle _fh) const -{ return ConstFaceEdgeIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwend(FaceHandle _fh) const -{ return ConstFaceEdgeCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwend(FaceHandle _fh) const -{ return ConstFaceEdgeCCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_end(FaceHandle _fh) const -{ return ConstFaceFaceIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwend(FaceHandle _fh) const -{ return ConstFaceFaceCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwend(FaceHandle _fh) const -{ return ConstFaceFaceCCWIter(*this, _fh, true); } - -inline PolyConnectivity::ConstHalfedgeLoopIter PolyConnectivity::chl_end(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopIter(*this, _heh, true); } - -inline PolyConnectivity::ConstHalfedgeLoopCWIter PolyConnectivity::chl_cwend(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopCWIter(*this, _heh, true); } - -inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwend(HalfedgeHandle _heh) const -{ return ConstHalfedgeLoopCCWIter(*this, _heh, true); } - - -}//namespace OpenMesh - +#include #endif//OPENMESH_POLYCONNECTIVITY_HH diff --git a/src/OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh b/src/OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh new file mode 100644 index 00000000..bde8f4cf --- /dev/null +++ b/src/OpenMesh/Core/Mesh/PolyConnectivity_inline_impl.hh @@ -0,0 +1,777 @@ +/* ========================================================================= * + * * + * OpenMesh * + * Copyright (c) 2001-2015, RWTH-Aachen University * + * Department of Computer Graphics and Multimedia * + * All rights reserved. * + * www.openmesh.org * + * * + *---------------------------------------------------------------------------* + * This file is part of OpenMesh. * + *---------------------------------------------------------------------------* + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * + * 1. Redistributions of source code must retain the above copyright notice, * + * this list of conditions and the following disclaimer. * + * * + * 2. Redistributions in binary form must reproduce the above copyright * + * notice, this list of conditions and the following disclaimer in the * + * documentation and/or other materials provided with the distribution. * + * * + * 3. Neither the name of the copyright holder nor the names of its * + * contributors may be used to endorse or promote products derived from * + * this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER * + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + * * + * ========================================================================= */ + +#ifndef OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH +#define OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH + +#include +#include +#include +#include + +namespace OpenMesh { + + +inline SmartVertexHandle PolyConnectivity::add_vertex() { return make_smart(new_vertex(), *this); } + +inline SmartHalfedgeHandle PolyConnectivity::next_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(next_halfedge_handle(HalfedgeHandle(_heh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::prev_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(prev_halfedge_handle(HalfedgeHandle(_heh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::opposite_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(opposite_halfedge_handle(HalfedgeHandle(_heh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::ccw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(ccw_rotated_halfedge_handle(HalfedgeHandle(_heh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::cw_rotated_halfedge_handle(SmartHalfedgeHandle _heh) const { return make_smart(cw_rotated_halfedge_handle(HalfedgeHandle(_heh)), *this); } + +inline SmartHalfedgeHandle PolyConnectivity::s_halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) { return make_smart(ArrayKernel::s_halfedge_handle(EdgeHandle(_eh), _i), _eh.mesh()); } +inline SmartEdgeHandle PolyConnectivity::s_edge_handle(SmartHalfedgeHandle _heh) { return make_smart(ArrayKernel::s_edge_handle(HalfedgeHandle(_heh)), _heh.mesh()); } + +inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartEdgeHandle _eh, unsigned int _i) const { return make_smart(halfedge_handle(EdgeHandle(_eh), _i), *this); } +inline SmartEdgeHandle PolyConnectivity::edge_handle(SmartHalfedgeHandle _heh) const { return make_smart(edge_handle(HalfedgeHandle(_heh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartFaceHandle _fh) const { return make_smart(halfedge_handle(FaceHandle(_fh)), *this); } +inline SmartHalfedgeHandle PolyConnectivity::halfedge_handle(SmartVertexHandle _vh) const { return make_smart(halfedge_handle(VertexHandle(_vh)), *this); } + +inline SmartFaceHandle PolyConnectivity::face_handle(SmartHalfedgeHandle _heh) const { return make_smart(face_handle(HalfedgeHandle(_heh)), *this); } + + + +/// Generic class for vertex/halfedge/edge/face ranges. +template +class EntityRange : public SmartRangeT, typename RangeTraitT::ITER_TYPE::SmartHandle> { + public: + typedef typename RangeTraitT::ITER_TYPE iterator; + typedef typename RangeTraitT::ITER_TYPE const_iterator; + + explicit EntityRange(typename RangeTraitT::CONTAINER_TYPE &container) : container_(container) {} + typename RangeTraitT::ITER_TYPE begin() const { return RangeTraitT::begin(container_); } + typename RangeTraitT::ITER_TYPE end() const { return RangeTraitT::end(container_); } + + private: + typename RangeTraitT::CONTAINER_TYPE &container_; +}; + +/// Generic class for iterator ranges. +template +//class CirculatorRange : public SmartRangeT, decltype (make_smart(std::declval(), std::declval()))>{ +class CirculatorRange : public SmartRangeT, typename SmartHandle::type>{ + public: + typedef typename CirculatorRangeTraitT::ITER_TYPE ITER_TYPE; + typedef typename CirculatorRangeTraitT::CENTER_ENTITY_TYPE CENTER_ENTITY_TYPE; + typedef typename CirculatorRangeTraitT::CONTAINER_TYPE CONTAINER_TYPE; + typedef ITER_TYPE iterator; + typedef ITER_TYPE const_iterator; + + CirculatorRange( + const CONTAINER_TYPE &container, + CENTER_ENTITY_TYPE center) : + container_(container), center_(center) {} + ITER_TYPE begin() const { return CirculatorRangeTraitT::begin(container_, center_); } + ITER_TYPE end() const { return CirculatorRangeTraitT::end(container_, center_); } + + private: + const CONTAINER_TYPE &container_; + CENTER_ENTITY_TYPE center_; +}; + + +inline PolyConnectivity::ConstVertexRangeSkipping PolyConnectivity::vertices() const { return ConstVertexRangeSkipping(*this); } +inline PolyConnectivity::ConstVertexRange PolyConnectivity::all_vertices() const { return ConstVertexRange(*this); } +inline PolyConnectivity::ConstHalfedgeRangeSkipping PolyConnectivity::halfedges() const { return ConstHalfedgeRangeSkipping(*this); } +inline PolyConnectivity::ConstHalfedgeRange PolyConnectivity::all_halfedges() const { return ConstHalfedgeRange(*this); } +inline PolyConnectivity::ConstEdgeRangeSkipping PolyConnectivity::edges() const { return ConstEdgeRangeSkipping(*this); } +inline PolyConnectivity::ConstEdgeRange PolyConnectivity::all_edges() const { return ConstEdgeRange(*this); } +inline PolyConnectivity::ConstFaceRangeSkipping PolyConnectivity::faces() const { return ConstFaceRangeSkipping(*this); } +inline PolyConnectivity::ConstFaceRange PolyConnectivity::all_faces() const { return ConstFaceRange(*this); } + +template <> inline PolyConnectivity::ConstVertexRangeSkipping PolyConnectivity::elements() const { return vertices(); } +template <> inline PolyConnectivity::ConstVertexRange PolyConnectivity::all_elements() const { return all_vertices(); } +template <> inline PolyConnectivity::ConstHalfedgeRangeSkipping PolyConnectivity::elements() const { return halfedges(); } +template <> inline PolyConnectivity::ConstHalfedgeRange PolyConnectivity::all_elements() const { return all_halfedges(); } +template <> inline PolyConnectivity::ConstEdgeRangeSkipping PolyConnectivity::elements() const { return edges(); } +template <> inline PolyConnectivity::ConstEdgeRange PolyConnectivity::all_elements() const { return all_edges(); } +template <> inline PolyConnectivity::ConstFaceRangeSkipping PolyConnectivity::elements() const { return faces(); } +template <> inline PolyConnectivity::ConstFaceRange PolyConnectivity::all_elements() const { return all_faces(); } + + +inline PolyConnectivity::ConstVertexVertexRange PolyConnectivity::vv_range(VertexHandle _vh) const { + return ConstVertexVertexRange(*this, _vh); +} + +inline PolyConnectivity::ConstVertexIHalfedgeRange PolyConnectivity::vih_range(VertexHandle _vh) const { + return ConstVertexIHalfedgeRange(*this, _vh); +} + +inline PolyConnectivity::ConstVertexOHalfedgeRange PolyConnectivity::voh_range(VertexHandle _vh) const { + return ConstVertexOHalfedgeRange(*this, _vh); +} + +inline PolyConnectivity::ConstVertexEdgeRange PolyConnectivity::ve_range(VertexHandle _vh) const { + return ConstVertexEdgeRange(*this, _vh); +} + +inline PolyConnectivity::ConstVertexFaceRange PolyConnectivity::vf_range(VertexHandle _vh) const { + return ConstVertexFaceRange(*this, _vh); +} + +inline PolyConnectivity::ConstFaceVertexRange PolyConnectivity::fv_range(FaceHandle _fh) const { + return ConstFaceVertexRange(*this, _fh); +} + +inline PolyConnectivity::ConstFaceHalfedgeRange PolyConnectivity::fh_range(FaceHandle _fh) const { + return ConstFaceHalfedgeRange(*this, _fh); +} + +inline PolyConnectivity::ConstFaceEdgeRange PolyConnectivity::fe_range(FaceHandle _fh) const { + return ConstFaceEdgeRange(*this, _fh); +} + +inline PolyConnectivity::ConstFaceFaceRange PolyConnectivity::ff_range(FaceHandle _fh) const { + return ConstFaceFaceRange(*this, _fh); +} + + + +inline PolyConnectivity::VertexIter PolyConnectivity::vertices_begin() +{ return VertexIter(*this, VertexHandle(0)); } + +inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_begin() const +{ return ConstVertexIter(*this, VertexHandle(0)); } + +inline PolyConnectivity::VertexIter PolyConnectivity::vertices_end() +{ return VertexIter(*this, VertexHandle( int(n_vertices() ) )); } + +inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_end() const +{ return ConstVertexIter(*this, VertexHandle( int(n_vertices()) )); } + +inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_begin() +{ return HalfedgeIter(*this, HalfedgeHandle(0)); } + +inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_begin() const +{ return ConstHalfedgeIter(*this, HalfedgeHandle(0)); } + +inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_end() +{ return HalfedgeIter(*this, HalfedgeHandle(int(n_halfedges()))); } + +inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_end() const +{ return ConstHalfedgeIter(*this, HalfedgeHandle(int(n_halfedges()))); } + +inline PolyConnectivity::EdgeIter PolyConnectivity::edges_begin() +{ return EdgeIter(*this, EdgeHandle(0)); } + +inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_begin() const +{ return ConstEdgeIter(*this, EdgeHandle(0)); } + +inline PolyConnectivity::EdgeIter PolyConnectivity::edges_end() +{ return EdgeIter(*this, EdgeHandle(int(n_edges()))); } + +inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_end() const +{ return ConstEdgeIter(*this, EdgeHandle(int(n_edges()))); } + +inline PolyConnectivity::FaceIter PolyConnectivity::faces_begin() +{ return FaceIter(*this, FaceHandle(0)); } + +inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_begin() const +{ return ConstFaceIter(*this, FaceHandle(0)); } + +inline PolyConnectivity::FaceIter PolyConnectivity::faces_end() +{ return FaceIter(*this, FaceHandle(int(n_faces()))); } + + +inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_end() const +{ return ConstFaceIter(*this, FaceHandle(int(n_faces()))); } + +inline PolyConnectivity::VertexIter PolyConnectivity::vertices_sbegin() +{ return VertexIter(*this, VertexHandle(0), true); } + +inline PolyConnectivity::ConstVertexIter PolyConnectivity::vertices_sbegin() const +{ return ConstVertexIter(*this, VertexHandle(0), true); } + +inline PolyConnectivity::HalfedgeIter PolyConnectivity::halfedges_sbegin() +{ return HalfedgeIter(*this, HalfedgeHandle(0), true); } + +inline PolyConnectivity::ConstHalfedgeIter PolyConnectivity::halfedges_sbegin() const +{ return ConstHalfedgeIter(*this, HalfedgeHandle(0), true); } + +inline PolyConnectivity::EdgeIter PolyConnectivity::edges_sbegin() +{ return EdgeIter(*this, EdgeHandle(0), true); } + +inline PolyConnectivity::ConstEdgeIter PolyConnectivity::edges_sbegin() const +{ return ConstEdgeIter(*this, EdgeHandle(0), true); } + +inline PolyConnectivity::FaceIter PolyConnectivity::faces_sbegin() +{ return FaceIter(*this, FaceHandle(0), true); } + +inline PolyConnectivity::ConstFaceIter PolyConnectivity::faces_sbegin() const +{ return ConstFaceIter(*this, FaceHandle(0), true); } + +inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_iter(ArrayKernel::VertexHandle _vh) +{ return VertexVertexIter(*this, _vh); } + +inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwiter(ArrayKernel::VertexHandle _vh) +{ return VertexVertexCWIter(*this, _vh); } + +inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwiter(ArrayKernel::VertexHandle _vh) +{ return VertexVertexCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_iter(ArrayKernel::VertexHandle _vh) +{ return VertexIHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwiter(ArrayKernel::VertexHandle _vh) +{ return VertexIHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwiter(ArrayKernel::VertexHandle _vh) +{ return VertexIHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_iter(ArrayKernel::VertexHandle _vh) +{ return VertexOHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwiter(ArrayKernel::VertexHandle _vh) +{ return VertexOHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwiter(ArrayKernel::VertexHandle _vh) +{ return VertexOHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_iter(ArrayKernel::VertexHandle _vh) +{ return VertexEdgeIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwiter(ArrayKernel::VertexHandle _vh) +{ return VertexEdgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwiter(ArrayKernel::VertexHandle _vh) +{ return VertexEdgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_iter(ArrayKernel::VertexHandle _vh) +{ return VertexFaceIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwiter(ArrayKernel::VertexHandle _vh) +{ return VertexFaceCWIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwiter(ArrayKernel::VertexHandle _vh) +{ return VertexFaceCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_iter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexVertexIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexVertexCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexVertexCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_iter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexIHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexIHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexIHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_iter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexOHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexOHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexOHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_iter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexEdgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexEdgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexEdgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_iter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexFaceIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexFaceCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwiter(ArrayKernel::VertexHandle _vh) const +{ return ConstVertexFaceCCWIter(*this, _vh); } + +inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_iter(ArrayKernel::FaceHandle _fh) +{ return FaceVertexIter(*this, _fh); } + +inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwiter(ArrayKernel::FaceHandle _fh) +{ return FaceVertexCWIter(*this, _fh); } + +inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwiter(ArrayKernel::FaceHandle _fh) +{ return FaceVertexCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_iter(ArrayKernel::FaceHandle _fh) +{ return FaceHalfedgeIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwiter(ArrayKernel::FaceHandle _fh) +{ return FaceHalfedgeCWIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwiter(ArrayKernel::FaceHandle _fh) +{ return FaceHalfedgeCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_iter(ArrayKernel::FaceHandle _fh) +{ return FaceEdgeIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwiter(ArrayKernel::FaceHandle _fh) +{ return FaceEdgeCWIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwiter(ArrayKernel::FaceHandle _fh) +{ return FaceEdgeCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_iter(ArrayKernel::FaceHandle _fh) +{ return FaceFaceIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwiter(ArrayKernel::FaceHandle _fh) +{ return FaceFaceCWIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwiter(ArrayKernel::FaceHandle _fh) +{ return FaceFaceCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_iter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceVertexIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceVertexCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceVertexCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_iter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceHalfedgeIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceHalfedgeCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceHalfedgeCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_iter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceEdgeIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceEdgeCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceEdgeCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_iter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceFaceIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceFaceCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwiter(ArrayKernel::FaceHandle _fh) const +{ return ConstFaceFaceCCWIter(*this, _fh); } + + +inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_begin(VertexHandle _vh) +{ return VertexVertexIter(*this, _vh); } + +inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwbegin(VertexHandle _vh) +{ return VertexVertexCWIter(*this, _vh); } + +inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwbegin(VertexHandle _vh) +{ return VertexVertexCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_begin(VertexHandle _vh) +{ return VertexIHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwbegin(VertexHandle _vh) +{ return VertexIHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwbegin(VertexHandle _vh) +{ return VertexIHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_begin(VertexHandle _vh) +{ return VertexOHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwbegin(VertexHandle _vh) +{ return VertexOHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwbegin(VertexHandle _vh) +{ return VertexOHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_begin(VertexHandle _vh) +{ return VertexEdgeIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwbegin(VertexHandle _vh) +{ return VertexEdgeCWIter(*this, _vh); } + +inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwbegin(VertexHandle _vh) +{ return VertexEdgeCCWIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_begin(VertexHandle _vh) +{ return VertexFaceIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwbegin(VertexHandle _vh) +{ return VertexFaceCWIter(*this, _vh); } + +inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwbegin(VertexHandle _vh) +{ return VertexFaceCCWIter(*this, _vh); } + + +inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_begin(VertexHandle _vh) const +{ return ConstVertexVertexIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwbegin(VertexHandle _vh) const +{ return ConstVertexVertexCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwbegin(VertexHandle _vh) const +{ return ConstVertexVertexCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_begin(VertexHandle _vh) const +{ return ConstVertexIHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwbegin(VertexHandle _vh) const +{ return ConstVertexIHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwbegin(VertexHandle _vh) const +{ return ConstVertexIHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_begin(VertexHandle _vh) const +{ return ConstVertexOHalfedgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwbegin(VertexHandle _vh) const +{ return ConstVertexOHalfedgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwbegin(VertexHandle _vh) const +{ return ConstVertexOHalfedgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_begin(VertexHandle _vh) const +{ return ConstVertexEdgeIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwbegin(VertexHandle _vh) const +{ return ConstVertexEdgeCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwbegin(VertexHandle _vh) const +{ return ConstVertexEdgeCCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_begin(VertexHandle _vh) const +{ return ConstVertexFaceIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwbegin(VertexHandle _vh) const +{ return ConstVertexFaceCWIter(*this, _vh); } + +inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwbegin(VertexHandle _vh) const +{ return ConstVertexFaceCCWIter(*this, _vh); } + + +inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_begin(FaceHandle _fh) +{ return FaceVertexIter(*this, _fh); } + +inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwbegin(FaceHandle _fh) +{ return FaceVertexCWIter(*this, _fh); } + +inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwbegin(FaceHandle _fh) +{ return FaceVertexCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_begin(FaceHandle _fh) +{ return FaceHalfedgeIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwbegin(FaceHandle _fh) +{ return FaceHalfedgeCWIter(*this, _fh); } + +inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwbegin(FaceHandle _fh) +{ return FaceHalfedgeCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_begin(FaceHandle _fh) +{ return FaceEdgeIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwbegin(FaceHandle _fh) +{ return FaceEdgeCWIter(*this, _fh); } + +inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwbegin(FaceHandle _fh) +{ return FaceEdgeCCWIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_begin(FaceHandle _fh) +{ return FaceFaceIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwbegin(FaceHandle _fh) +{ return FaceFaceCWIter(*this, _fh); } + +inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwbegin(FaceHandle _fh) +{ return FaceFaceCCWIter(*this, _fh); } + +inline PolyConnectivity::HalfedgeLoopIter PolyConnectivity::hl_begin(HalfedgeHandle _heh) +{ return HalfedgeLoopIter(*this, _heh); } + +inline PolyConnectivity::HalfedgeLoopCWIter PolyConnectivity::hl_cwbegin(HalfedgeHandle _heh) +{ return HalfedgeLoopCWIter(*this, _heh); } + +inline PolyConnectivity::HalfedgeLoopCCWIter PolyConnectivity::hl_ccwbegin(HalfedgeHandle _heh) +{ return HalfedgeLoopCCWIter(*this, _heh); } + + +inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_begin(FaceHandle _fh) const +{ return ConstFaceVertexIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwbegin(FaceHandle _fh) const +{ return ConstFaceVertexCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwbegin(FaceHandle _fh) const +{ return ConstFaceVertexCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_begin(FaceHandle _fh) const +{ return ConstFaceHalfedgeIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwbegin(FaceHandle _fh) const +{ return ConstFaceHalfedgeCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwbegin(FaceHandle _fh) const +{ return ConstFaceHalfedgeCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_begin(FaceHandle _fh) const +{ return ConstFaceEdgeIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwbegin(FaceHandle _fh) const +{ return ConstFaceEdgeCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwbegin(FaceHandle _fh) const +{ return ConstFaceEdgeCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_begin(FaceHandle _fh) const +{ return ConstFaceFaceIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwbegin(FaceHandle _fh) const +{ return ConstFaceFaceCWIter(*this, _fh); } + +inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwbegin(FaceHandle _fh) const +{ return ConstFaceFaceCCWIter(*this, _fh); } + +inline PolyConnectivity::ConstHalfedgeLoopIter PolyConnectivity::chl_begin(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopIter(*this, _heh); } + +inline PolyConnectivity::ConstHalfedgeLoopCWIter PolyConnectivity::chl_cwbegin(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopCWIter(*this, _heh); } + +inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwbegin(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopCCWIter(*this, _heh); } + +// 'end' circulators + +inline PolyConnectivity::VertexVertexIter PolyConnectivity::vv_end(VertexHandle _vh) +{ return VertexVertexIter(*this, _vh, true); } + +inline PolyConnectivity::VertexVertexCWIter PolyConnectivity::vv_cwend(VertexHandle _vh) +{ return VertexVertexCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexVertexCCWIter PolyConnectivity::vv_ccwend(VertexHandle _vh) +{ return VertexVertexCCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexIHalfedgeIter PolyConnectivity::vih_end(VertexHandle _vh) +{ return VertexIHalfedgeIter(*this, _vh, true); } + +inline PolyConnectivity::VertexIHalfedgeCWIter PolyConnectivity::vih_cwend(VertexHandle _vh) +{ return VertexIHalfedgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexIHalfedgeCCWIter PolyConnectivity::vih_ccwend(VertexHandle _vh) +{ return VertexIHalfedgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexOHalfedgeIter PolyConnectivity::voh_end(VertexHandle _vh) +{ return VertexOHalfedgeIter(*this, _vh, true); } + +inline PolyConnectivity::VertexOHalfedgeCWIter PolyConnectivity::voh_cwend(VertexHandle _vh) +{ return VertexOHalfedgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexOHalfedgeCCWIter PolyConnectivity::voh_ccwend(VertexHandle _vh) +{ return VertexOHalfedgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexEdgeIter PolyConnectivity::ve_end(VertexHandle _vh) +{ return VertexEdgeIter(*this, _vh, true); } + +inline PolyConnectivity::VertexEdgeCWIter PolyConnectivity::ve_cwend(VertexHandle _vh) +{ return VertexEdgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexEdgeCCWIter PolyConnectivity::ve_ccwend(VertexHandle _vh) +{ return VertexEdgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexFaceIter PolyConnectivity::vf_end(VertexHandle _vh) +{ return VertexFaceIter(*this, _vh, true); } + +inline PolyConnectivity::VertexFaceCWIter PolyConnectivity::vf_cwend(VertexHandle _vh) +{ return VertexFaceCWIter(*this, _vh, true); } + +inline PolyConnectivity::VertexFaceCCWIter PolyConnectivity::vf_ccwend(VertexHandle _vh) +{ return VertexFaceCCWIter(*this, _vh, true); } + + +inline PolyConnectivity::ConstVertexVertexIter PolyConnectivity::cvv_end(VertexHandle _vh) const +{ return ConstVertexVertexIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexVertexCWIter PolyConnectivity::cvv_cwend(VertexHandle _vh) const +{ return ConstVertexVertexCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexVertexCCWIter PolyConnectivity::cvv_ccwend(VertexHandle _vh) const +{ return ConstVertexVertexCCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexIHalfedgeIter PolyConnectivity::cvih_end(VertexHandle _vh) const +{ return ConstVertexIHalfedgeIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexIHalfedgeCWIter PolyConnectivity::cvih_cwend(VertexHandle _vh) const +{ return ConstVertexIHalfedgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexIHalfedgeCCWIter PolyConnectivity::cvih_ccwend(VertexHandle _vh) const +{ return ConstVertexIHalfedgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexOHalfedgeIter PolyConnectivity::cvoh_end(VertexHandle _vh) const +{ return ConstVertexOHalfedgeIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexOHalfedgeCWIter PolyConnectivity::cvoh_cwend(VertexHandle _vh) const +{ return ConstVertexOHalfedgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexOHalfedgeCCWIter PolyConnectivity::cvoh_ccwend(VertexHandle _vh) const +{ return ConstVertexOHalfedgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexEdgeIter PolyConnectivity::cve_end(VertexHandle _vh) const +{ return ConstVertexEdgeIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexEdgeCWIter PolyConnectivity::cve_cwend(VertexHandle _vh) const +{ return ConstVertexEdgeCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexEdgeCCWIter PolyConnectivity::cve_ccwend(VertexHandle _vh) const +{ return ConstVertexEdgeCCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexFaceIter PolyConnectivity::cvf_end(VertexHandle _vh) const +{ return ConstVertexFaceIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexFaceCWIter PolyConnectivity::cvf_cwend(VertexHandle _vh) const +{ return ConstVertexFaceCWIter(*this, _vh, true); } + +inline PolyConnectivity::ConstVertexFaceCCWIter PolyConnectivity::cvf_ccwend(VertexHandle _vh) const +{ return ConstVertexFaceCCWIter(*this, _vh, true); } + + +inline PolyConnectivity::FaceVertexIter PolyConnectivity::fv_end(FaceHandle _fh) +{ return FaceVertexIter(*this, _fh, true); } + +inline PolyConnectivity::FaceVertexCWIter PolyConnectivity::fv_cwend(FaceHandle _fh) +{ return FaceVertexCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceVertexCCWIter PolyConnectivity::fv_ccwend(FaceHandle _fh) +{ return FaceVertexCCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceHalfedgeIter PolyConnectivity::fh_end(FaceHandle _fh) +{ return FaceHalfedgeIter(*this, _fh, true); } + +inline PolyConnectivity::FaceHalfedgeCWIter PolyConnectivity::fh_cwend(FaceHandle _fh) +{ return FaceHalfedgeCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceHalfedgeCCWIter PolyConnectivity::fh_ccwend(FaceHandle _fh) +{ return FaceHalfedgeCCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceEdgeIter PolyConnectivity::fe_end(FaceHandle _fh) +{ return FaceEdgeIter(*this, _fh, true); } + +inline PolyConnectivity::FaceEdgeCWIter PolyConnectivity::fe_cwend(FaceHandle _fh) +{ return FaceEdgeCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceEdgeCCWIter PolyConnectivity::fe_ccwend(FaceHandle _fh) +{ return FaceEdgeCCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceFaceIter PolyConnectivity::ff_end(FaceHandle _fh) +{ return FaceFaceIter(*this, _fh, true); } + +inline PolyConnectivity::FaceFaceCWIter PolyConnectivity::ff_cwend(FaceHandle _fh) +{ return FaceFaceCWIter(*this, _fh, true); } + +inline PolyConnectivity::FaceFaceCCWIter PolyConnectivity::ff_ccwend(FaceHandle _fh) +{ return FaceFaceCCWIter(*this, _fh, true); } + +inline PolyConnectivity::HalfedgeLoopIter PolyConnectivity::hl_end(HalfedgeHandle _heh) +{ return HalfedgeLoopIter(*this, _heh, true); } + +inline PolyConnectivity::HalfedgeLoopCWIter PolyConnectivity::hl_cwend(HalfedgeHandle _heh) +{ return HalfedgeLoopCWIter(*this, _heh, true); } + +inline PolyConnectivity::HalfedgeLoopCCWIter PolyConnectivity::hl_ccwend(HalfedgeHandle _heh) +{ return HalfedgeLoopCCWIter(*this, _heh, true); } + + +inline PolyConnectivity::ConstFaceVertexIter PolyConnectivity::cfv_end(FaceHandle _fh) const +{ return ConstFaceVertexIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceVertexCWIter PolyConnectivity::cfv_cwend(FaceHandle _fh) const +{ return ConstFaceVertexCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceVertexCCWIter PolyConnectivity::cfv_ccwend(FaceHandle _fh) const +{ return ConstFaceVertexCCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceHalfedgeIter PolyConnectivity::cfh_end(FaceHandle _fh) const +{ return ConstFaceHalfedgeIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceHalfedgeCWIter PolyConnectivity::cfh_cwend(FaceHandle _fh) const +{ return ConstFaceHalfedgeCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceHalfedgeCCWIter PolyConnectivity::cfh_ccwend(FaceHandle _fh) const +{ return ConstFaceHalfedgeCCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceEdgeIter PolyConnectivity::cfe_end(FaceHandle _fh) const +{ return ConstFaceEdgeIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceEdgeCWIter PolyConnectivity::cfe_cwend(FaceHandle _fh) const +{ return ConstFaceEdgeCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceEdgeCCWIter PolyConnectivity::cfe_ccwend(FaceHandle _fh) const +{ return ConstFaceEdgeCCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceFaceIter PolyConnectivity::cff_end(FaceHandle _fh) const +{ return ConstFaceFaceIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceFaceCWIter PolyConnectivity::cff_cwend(FaceHandle _fh) const +{ return ConstFaceFaceCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstFaceFaceCCWIter PolyConnectivity::cff_ccwend(FaceHandle _fh) const +{ return ConstFaceFaceCCWIter(*this, _fh, true); } + +inline PolyConnectivity::ConstHalfedgeLoopIter PolyConnectivity::chl_end(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopIter(*this, _heh, true); } + +inline PolyConnectivity::ConstHalfedgeLoopCWIter PolyConnectivity::chl_cwend(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopCWIter(*this, _heh, true); } + +inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwend(HalfedgeHandle _heh) const +{ return ConstHalfedgeLoopCCWIter(*this, _heh, true); } + + +}//namespace OpenMesh + +#endif // OPENMESH_POLYCONNECTIVITY_INLINE_IMPL_HH +