Merge branch 'master' into CustomProperties
This commit is contained in:
@@ -60,6 +60,9 @@
|
||||
//== NAMESPACES ===============================================================
|
||||
|
||||
namespace OpenMesh {
|
||||
|
||||
template <typename> class CirculatorRange;
|
||||
|
||||
namespace Iterators {
|
||||
|
||||
template<class Mesh, class CenterEntityHandle, bool CW>
|
||||
@@ -153,7 +156,21 @@ class GenericCirculator_ValueHandleFnsT {
|
||||
inline static bool is_valid(const typename Mesh::HalfedgeHandle &heh, const int lap_counter) {
|
||||
return ( heh.is_valid() && (lap_counter == 0 ) );
|
||||
}
|
||||
inline static void init(const Mesh*, typename Mesh::HalfedgeHandle&, typename Mesh::HalfedgeHandle&, int&) {};
|
||||
inline static void init(const Mesh* mesh, typename Mesh::HalfedgeHandle& heh, typename Mesh::HalfedgeHandle& start, int& lap_counter, bool adjust_for_ccw)
|
||||
{
|
||||
if (!CW) // TODO: constexpr if
|
||||
{
|
||||
if (adjust_for_ccw)
|
||||
{
|
||||
// increment current heh and start so that cw and ccw version dont start with the same element but ranges are actually reversed
|
||||
int lc = lap_counter;
|
||||
increment(mesh, heh, start, lap_counter);
|
||||
start = heh;
|
||||
lap_counter = lc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline static void increment(const Mesh *mesh, typename Mesh::HalfedgeHandle &heh, typename Mesh::HalfedgeHandle &start, int &lap_counter) {
|
||||
GenericCirculator_CenterEntityFnsT<Mesh, CenterEntityHandle, CW>::increment(mesh, heh, start, lap_counter);
|
||||
}
|
||||
@@ -170,7 +187,19 @@ class GenericCirculator_ValueHandleFnsT<Mesh, CenterEntityHandle, typename Mesh:
|
||||
inline static bool is_valid(const typename Mesh::HalfedgeHandle &heh, const int lap_counter) {
|
||||
return ( heh.is_valid() && (lap_counter == 0));
|
||||
}
|
||||
inline static void init(const Mesh *mesh, typename Mesh::HalfedgeHandle &heh, typename Mesh::HalfedgeHandle &start, int &lap_counter) {
|
||||
inline static void init(const Mesh *mesh, typename Mesh::HalfedgeHandle &heh, typename Mesh::HalfedgeHandle &start, int &lap_counter, bool adjust_for_ccw)
|
||||
{
|
||||
if (!CW) // TODO: constexpr if
|
||||
{
|
||||
if (adjust_for_ccw)
|
||||
{
|
||||
// increment current heh and start so that cw and ccw version dont start with the same element but ranges are actually reversed
|
||||
int lc = lap_counter;
|
||||
increment(mesh, heh, start, lap_counter);
|
||||
start = heh;
|
||||
lap_counter = lc;
|
||||
}
|
||||
}
|
||||
if (heh.is_valid() && !GenericCirculator_DereferenciabilityCheck::isDereferenciable(mesh, heh) && lap_counter == 0 )
|
||||
increment(mesh, heh, start, lap_counter);
|
||||
};
|
||||
@@ -192,6 +221,8 @@ class GenericCirculatorBaseT {
|
||||
typedef const Mesh* mesh_ptr;
|
||||
typedef const Mesh& mesh_ref;
|
||||
|
||||
template <typename> friend class OpenMesh::CirculatorRange;
|
||||
|
||||
public:
|
||||
GenericCirculatorBaseT() : mesh_(0), lap_counter_(0) {}
|
||||
|
||||
@@ -267,17 +298,21 @@ class GenericCirculatorT : protected GenericCirculatorBaseT<typename GenericCirc
|
||||
typedef typename GenericCirculatorBaseT<Mesh>::mesh_ref mesh_ref;
|
||||
typedef GenericCirculator_ValueHandleFnsT<Mesh, CenterEntityHandle, value_type, CW> GenericCirculator_ValueHandleFns;
|
||||
|
||||
template <typename> friend class OpenMesh::CirculatorRange;
|
||||
|
||||
public:
|
||||
GenericCirculatorT() {}
|
||||
GenericCirculatorT(mesh_ref mesh, CenterEntityHandle start, bool end = false) :
|
||||
GenericCirculatorBaseT<Mesh>(mesh, mesh.halfedge_handle(start), end) {
|
||||
|
||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||
GenericCirculatorBaseT<Mesh>(mesh, mesh.halfedge_handle(start), end)
|
||||
{
|
||||
bool adjust_for_ccw = true;
|
||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_, adjust_for_ccw);
|
||||
}
|
||||
GenericCirculatorT(mesh_ref mesh, typename Mesh::HalfedgeHandle heh, bool end = false) :
|
||||
GenericCirculatorBaseT<Mesh>(mesh, heh, end) {
|
||||
|
||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_);
|
||||
GenericCirculatorBaseT<Mesh>(mesh, heh, end)
|
||||
{
|
||||
bool adjust_for_ccw = false; // if iterator is initialized with specific heh, we want to start there
|
||||
GenericCirculator_ValueHandleFns::init(this->mesh_, this->heh_, this->start_, this->lap_counter_, adjust_for_ccw);
|
||||
}
|
||||
GenericCirculatorT(const GenericCirculatorT &rhs) : GenericCirculatorBaseT<Mesh>(rhs) {}
|
||||
|
||||
@@ -440,6 +475,8 @@ class GenericCirculatorT_DEPRECATED : protected GenericCirculatorBaseT<typename
|
||||
typedef typename GenericCirculatorBaseT<Mesh>::mesh_ref mesh_ref;
|
||||
typedef GenericCirculator_ValueHandleFnsT_DEPRECATED<Mesh, CenterEntityHandle, value_type> GenericCirculator_ValueHandleFns;
|
||||
|
||||
template <typename> friend class OpenMesh::CirculatorRange;
|
||||
|
||||
public:
|
||||
GenericCirculatorT_DEPRECATED() {}
|
||||
GenericCirculatorT_DEPRECATED(mesh_ref mesh, CenterEntityHandle start, bool end = false) :
|
||||
|
||||
@@ -98,8 +98,10 @@ struct CirculatorRangeTraitT
|
||||
using ITER_TYPE = ITER_T;
|
||||
using CENTER_ENTITY_TYPE = CENTER_ENTITY_T;
|
||||
using TO_ENTITYE_TYPE = TO_ENTITY_T;
|
||||
static ITER_TYPE begin(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*begin_fn)(_ce); }
|
||||
static ITER_TYPE end(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*end_fn)(_ce); }
|
||||
static ITER_TYPE begin(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*begin_fn)(_ce); }
|
||||
static ITER_TYPE begin(const CONTAINER_TYPE& _container, HalfedgeHandle _heh, int) { return ITER_TYPE(_container, _heh); }
|
||||
static ITER_TYPE end(const CONTAINER_TYPE& _container, CENTER_ENTITY_TYPE _ce) { return (_container.*end_fn)(_ce); }
|
||||
static ITER_TYPE end(const CONTAINER_TYPE& _container, HalfedgeHandle _heh, int) { return ITER_TYPE(_container, _heh, true); }
|
||||
};
|
||||
|
||||
struct SmartVertexHandle;
|
||||
@@ -1167,76 +1169,38 @@ public:
|
||||
typename ElementRange<HandleType>::Range all_elements() const;
|
||||
|
||||
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstVertexVertexCWIter,
|
||||
VertexHandle,
|
||||
VertexHandle,
|
||||
&PolyConnectivity::cvv_cwbegin,
|
||||
&PolyConnectivity::cvv_cwend>> ConstVertexVertexRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstVertexIHalfedgeIter,
|
||||
VertexHandle,
|
||||
HalfedgeHandle,
|
||||
&PolyConnectivity::cvih_begin,
|
||||
&PolyConnectivity::cvih_end>> ConstVertexIHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstVertexOHalfedgeIter,
|
||||
VertexHandle,
|
||||
HalfedgeHandle,
|
||||
&PolyConnectivity::cvoh_begin,
|
||||
&PolyConnectivity::cvoh_end>> ConstVertexOHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstVertexEdgeIter,
|
||||
VertexHandle,
|
||||
EdgeHandle,
|
||||
&PolyConnectivity::cve_begin,
|
||||
&PolyConnectivity::cve_end>> ConstVertexEdgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstVertexFaceIter,
|
||||
VertexHandle,
|
||||
FaceHandle,
|
||||
&PolyConnectivity::cvf_begin,
|
||||
&PolyConnectivity::cvf_end>> ConstVertexFaceRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstFaceVertexIter,
|
||||
FaceHandle,
|
||||
VertexHandle,
|
||||
&PolyConnectivity::cfv_begin,
|
||||
&PolyConnectivity::cfv_end>> ConstFaceVertexRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstFaceHalfedgeIter,
|
||||
FaceHandle,
|
||||
HalfedgeHandle,
|
||||
&PolyConnectivity::cfh_begin,
|
||||
&PolyConnectivity::cfh_end>> ConstFaceHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstFaceEdgeIter,
|
||||
FaceHandle,
|
||||
EdgeHandle,
|
||||
&PolyConnectivity::cfe_begin,
|
||||
&PolyConnectivity::cfe_end>> ConstFaceEdgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstFaceFaceIter,
|
||||
FaceHandle,
|
||||
FaceHandle,
|
||||
&PolyConnectivity::cff_begin,
|
||||
&PolyConnectivity::cff_end>> ConstFaceFaceRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<
|
||||
PolyConnectivity,
|
||||
ConstHalfedgeLoopIter,
|
||||
HalfedgeHandle,
|
||||
HalfedgeHandle,
|
||||
&PolyConnectivity::chl_begin,
|
||||
&PolyConnectivity::chl_end>> ConstHalfedgeLoopRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexVertexIter , VertexHandle , VertexHandle , &PolyConnectivity::cvv_begin , &PolyConnectivity::cvv_end >> ConstVertexVertexRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexIHalfedgeIter , VertexHandle , HalfedgeHandle, &PolyConnectivity::cvih_begin , &PolyConnectivity::cvih_end >> ConstVertexIHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexOHalfedgeIter , VertexHandle , HalfedgeHandle, &PolyConnectivity::cvoh_begin , &PolyConnectivity::cvoh_end >> ConstVertexOHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexEdgeIter , VertexHandle , EdgeHandle , &PolyConnectivity::cve_begin , &PolyConnectivity::cve_end >> ConstVertexEdgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexFaceIter , VertexHandle , FaceHandle , &PolyConnectivity::cvf_begin , &PolyConnectivity::cvf_end >> ConstVertexFaceRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceVertexIter , FaceHandle , VertexHandle , &PolyConnectivity::cfv_begin , &PolyConnectivity::cfv_end >> ConstFaceVertexRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceHalfedgeIter , FaceHandle , HalfedgeHandle, &PolyConnectivity::cfh_begin , &PolyConnectivity::cfh_end >> ConstFaceHalfedgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceEdgeIter , FaceHandle , EdgeHandle , &PolyConnectivity::cfe_begin , &PolyConnectivity::cfe_end >> ConstFaceEdgeRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceFaceIter , FaceHandle , FaceHandle , &PolyConnectivity::cff_begin , &PolyConnectivity::cff_end >> ConstFaceFaceRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstHalfedgeLoopIter , HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_begin , &PolyConnectivity::chl_end >> ConstHalfedgeLoopRange;
|
||||
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexVertexCWIter , VertexHandle , VertexHandle , &PolyConnectivity::cvv_cwbegin , &PolyConnectivity::cvv_cwend >> ConstVertexVertexCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexIHalfedgeCWIter , VertexHandle , HalfedgeHandle, &PolyConnectivity::cvih_cwbegin , &PolyConnectivity::cvih_cwend >> ConstVertexIHalfedgeCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexOHalfedgeCWIter , VertexHandle , HalfedgeHandle, &PolyConnectivity::cvoh_cwbegin , &PolyConnectivity::cvoh_cwend >> ConstVertexOHalfedgeCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexEdgeCWIter , VertexHandle , EdgeHandle , &PolyConnectivity::cve_cwbegin , &PolyConnectivity::cve_cwend >> ConstVertexEdgeCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexFaceCWIter , VertexHandle , FaceHandle , &PolyConnectivity::cvf_cwbegin , &PolyConnectivity::cvf_cwend >> ConstVertexFaceCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceVertexCWIter , FaceHandle , VertexHandle , &PolyConnectivity::cfv_cwbegin , &PolyConnectivity::cfv_cwend >> ConstFaceVertexCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceHalfedgeCWIter , FaceHandle , HalfedgeHandle, &PolyConnectivity::cfh_cwbegin , &PolyConnectivity::cfh_cwend >> ConstFaceHalfedgeCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceEdgeCWIter , FaceHandle , EdgeHandle , &PolyConnectivity::cfe_cwbegin , &PolyConnectivity::cfe_cwend >> ConstFaceEdgeCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceFaceCWIter , FaceHandle , FaceHandle , &PolyConnectivity::cff_cwbegin , &PolyConnectivity::cff_cwend >> ConstFaceFaceCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstHalfedgeLoopCWIter , HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_cwbegin , &PolyConnectivity::chl_cwend >> ConstHalfedgeLoopCWRange;
|
||||
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexVertexCCWIter , VertexHandle , VertexHandle , &PolyConnectivity::cvv_ccwbegin , &PolyConnectivity::cvv_ccwend >> ConstVertexVertexCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexIHalfedgeCCWIter, VertexHandle , HalfedgeHandle, &PolyConnectivity::cvih_ccwbegin , &PolyConnectivity::cvih_ccwend >> ConstVertexIHalfedgeCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexOHalfedgeCCWIter, VertexHandle , HalfedgeHandle, &PolyConnectivity::cvoh_ccwbegin , &PolyConnectivity::cvoh_ccwend >> ConstVertexOHalfedgeCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexEdgeCCWIter , VertexHandle , EdgeHandle , &PolyConnectivity::cve_ccwbegin , &PolyConnectivity::cve_ccwend >> ConstVertexEdgeCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstVertexFaceCCWIter , VertexHandle , FaceHandle , &PolyConnectivity::cvf_ccwbegin , &PolyConnectivity::cvf_ccwend >> ConstVertexFaceCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceVertexCCWIter , FaceHandle , VertexHandle , &PolyConnectivity::cfv_ccwbegin , &PolyConnectivity::cfv_ccwend >> ConstFaceVertexCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceHalfedgeCCWIter , FaceHandle , HalfedgeHandle, &PolyConnectivity::cfh_ccwbegin , &PolyConnectivity::cfh_ccwend >> ConstFaceHalfedgeCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceEdgeCCWIter , FaceHandle , EdgeHandle , &PolyConnectivity::cfe_ccwbegin , &PolyConnectivity::cfe_ccwend >> ConstFaceEdgeCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstFaceFaceCCWIter , FaceHandle , FaceHandle , &PolyConnectivity::cff_ccwbegin , &PolyConnectivity::cff_ccwend >> ConstFaceFaceCCWRange;
|
||||
typedef CirculatorRange<CirculatorRangeTraitT<PolyConnectivity, ConstHalfedgeLoopCCWIter , HalfedgeHandle, HalfedgeHandle, &PolyConnectivity::chl_ccwbegin , &PolyConnectivity::chl_ccwend >> ConstHalfedgeLoopCCWRange;
|
||||
|
||||
/**
|
||||
* @return The vertices adjacent to the specified vertex
|
||||
@@ -1250,12 +1214,26 @@ public:
|
||||
*/
|
||||
ConstVertexIHalfedgeRange vih_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The incoming halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like vih_range(VertexHandle _heh.to()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexIHalfedgeRange vih_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexOHalfedgeRange voh_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like voh_range(VertexHandle _heh.from()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexOHalfedgeRange voh_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The edges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
@@ -1298,6 +1276,156 @@ public:
|
||||
*/
|
||||
ConstHalfedgeLoopRange hl_range(HalfedgeHandle _heh) const;
|
||||
|
||||
|
||||
/**
|
||||
* @return The vertices adjacent to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexVertexCWRange vv_cw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The incoming halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexIHalfedgeCWRange vih_cw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The incoming halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like vih_cw_range(VertexHandle _heh.to()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexIHalfedgeCWRange vih_cw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexOHalfedgeCWRange voh_cw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like voh_cw_range(VertexHandle _heh.from()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexOHalfedgeCWRange voh_cw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The edges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexEdgeCWRange ve_cw_range(VertexHandle _vh) const ;
|
||||
|
||||
/**
|
||||
* @return The faces incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexFaceCWRange vf_cw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The vertices incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceVertexCWRange fv_cw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The halfedges incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceHalfedgeCWRange fh_cw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The edges incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceEdgeCWRange fe_cw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The faces adjacent to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceFaceCWRange ff_cw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The halfedges in the face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstHalfedgeLoopCWRange hl_cw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
|
||||
/**
|
||||
* @return The vertices adjacent to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexVertexCCWRange vv_ccw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The incoming halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexIHalfedgeCCWRange vih_ccw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The incoming halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like vih_ccw_range(VertexHandle _heh.to()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexIHalfedgeCCWRange vih_ccw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexOHalfedgeCCWRange voh_ccw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The outgoing halfedges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
* Like voh_ccw_range(VertexHandle _heh.from()) but starts iteration at _heh
|
||||
*/
|
||||
ConstVertexOHalfedgeCCWRange voh_ccw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
/**
|
||||
* @return The edges incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexEdgeCCWRange ve_ccw_range(VertexHandle _vh) const ;
|
||||
|
||||
/**
|
||||
* @return The faces incident to the specified vertex
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstVertexFaceCCWRange vf_ccw_range(VertexHandle _vh) const;
|
||||
|
||||
/**
|
||||
* @return The vertices incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceVertexCCWRange fv_ccw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The halfedges incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceHalfedgeCCWRange fh_ccw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The edges incident to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceEdgeCCWRange fe_ccw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The faces adjacent to the specified face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstFaceFaceCCWRange ff_ccw_range(FaceHandle _fh) const;
|
||||
|
||||
/**
|
||||
* @return The halfedges in the face
|
||||
* as a range object suitable for C++11 range based for loops.
|
||||
*/
|
||||
ConstHalfedgeLoopCCWRange hl_ccw_range(HalfedgeHandle _heh) const;
|
||||
|
||||
//@}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#error Do not include this directly, include instead PolyConnectivity.hh
|
||||
#endif // OPENMESH_POLYCONNECTIVITY_INTERFACE_INCLUDE
|
||||
|
||||
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh> // To help some IDEs
|
||||
#include <OpenMesh/Core/Mesh/IteratorsT.hh>
|
||||
#include <OpenMesh/Core/Mesh/CirculatorsT.hh>
|
||||
|
||||
@@ -99,13 +100,23 @@ class CirculatorRange : public SmartRangeT<CirculatorRange<CirculatorRangeTraitT
|
||||
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_); }
|
||||
container_(container), heh_()
|
||||
{
|
||||
auto it = CirculatorRangeTraitT::begin(container_, center);
|
||||
heh_ = it.heh_;
|
||||
}
|
||||
|
||||
CirculatorRange(
|
||||
const CONTAINER_TYPE &container,
|
||||
HalfedgeHandle heh, int) :
|
||||
container_(container), heh_(heh) {}
|
||||
|
||||
ITER_TYPE begin() const { return CirculatorRangeTraitT::begin(container_, heh_, 1); }
|
||||
ITER_TYPE end() const { return CirculatorRangeTraitT::end(container_, heh_, 1); }
|
||||
|
||||
private:
|
||||
const CONTAINER_TYPE &container_;
|
||||
CENTER_ENTITY_TYPE center_;
|
||||
HalfedgeHandle heh_;
|
||||
};
|
||||
|
||||
|
||||
@@ -136,10 +147,18 @@ inline PolyConnectivity::ConstVertexIHalfedgeRange PolyConnectivity::vih_range(V
|
||||
return ConstVertexIHalfedgeRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeRange PolyConnectivity::vih_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexIHalfedgeRange(*this, opposite_halfedge_handle(_heh), 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeRange PolyConnectivity::voh_range(VertexHandle _vh) const {
|
||||
return ConstVertexOHalfedgeRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeRange PolyConnectivity::voh_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexOHalfedgeRange(*this, _heh, 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexEdgeRange PolyConnectivity::ve_range(VertexHandle _vh) const {
|
||||
return ConstVertexEdgeRange(*this, _vh);
|
||||
}
|
||||
@@ -169,6 +188,104 @@ inline PolyConnectivity::ConstHalfedgeLoopRange PolyConnectivity::hl_range(Halfe
|
||||
}
|
||||
|
||||
|
||||
inline PolyConnectivity::ConstVertexVertexCWRange PolyConnectivity::vv_cw_range(VertexHandle _vh) const {
|
||||
return ConstVertexVertexCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCWRange PolyConnectivity::vih_cw_range(VertexHandle _vh) const {
|
||||
return ConstVertexIHalfedgeCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCWRange PolyConnectivity::vih_cw_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexIHalfedgeCWRange(*this, opposite_halfedge_handle(_heh), 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCWRange PolyConnectivity::voh_cw_range(VertexHandle _vh) const {
|
||||
return ConstVertexOHalfedgeCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCWRange PolyConnectivity::voh_cw_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexOHalfedgeCWRange(*this, _heh, 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexEdgeCWRange PolyConnectivity::ve_cw_range(VertexHandle _vh) const {
|
||||
return ConstVertexEdgeCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexFaceCWRange PolyConnectivity::vf_cw_range(VertexHandle _vh) const {
|
||||
return ConstVertexFaceCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceVertexCWRange PolyConnectivity::fv_cw_range(FaceHandle _fh) const {
|
||||
return ConstFaceVertexCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceHalfedgeCWRange PolyConnectivity::fh_cw_range(FaceHandle _fh) const {
|
||||
return ConstFaceHalfedgeCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceEdgeCWRange PolyConnectivity::fe_cw_range(FaceHandle _fh) const {
|
||||
return ConstFaceEdgeCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceFaceCWRange PolyConnectivity::ff_cw_range(FaceHandle _fh) const {
|
||||
return ConstFaceFaceCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstHalfedgeLoopCWRange PolyConnectivity::hl_cw_range(HalfedgeHandle _heh) const {
|
||||
return ConstHalfedgeLoopCWRange(*this, _heh);
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline PolyConnectivity::ConstVertexVertexCCWRange PolyConnectivity::vv_ccw_range(VertexHandle _vh) const {
|
||||
return ConstVertexVertexCCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCCWRange PolyConnectivity::vih_ccw_range(VertexHandle _vh) const {
|
||||
return ConstVertexIHalfedgeCCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCCWRange PolyConnectivity::vih_ccw_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexIHalfedgeCCWRange(*this, opposite_halfedge_handle(_heh), 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCCWRange PolyConnectivity::voh_ccw_range(VertexHandle _vh) const {
|
||||
return ConstVertexOHalfedgeCCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCCWRange PolyConnectivity::voh_ccw_range(HalfedgeHandle _heh) const {
|
||||
return ConstVertexOHalfedgeCCWRange(*this, _heh, 1);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexEdgeCCWRange PolyConnectivity::ve_ccw_range(VertexHandle _vh) const {
|
||||
return ConstVertexEdgeCCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstVertexFaceCCWRange PolyConnectivity::vf_ccw_range(VertexHandle _vh) const {
|
||||
return ConstVertexFaceCCWRange(*this, _vh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceVertexCCWRange PolyConnectivity::fv_ccw_range(FaceHandle _fh) const {
|
||||
return ConstFaceVertexCCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceHalfedgeCCWRange PolyConnectivity::fh_ccw_range(FaceHandle _fh) const {
|
||||
return ConstFaceHalfedgeCCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceEdgeCCWRange PolyConnectivity::fe_ccw_range(FaceHandle _fh) const {
|
||||
return ConstFaceEdgeCCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceFaceCCWRange PolyConnectivity::ff_ccw_range(FaceHandle _fh) const {
|
||||
return ConstFaceFaceCCWRange(*this, _fh);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstHalfedgeLoopCCWRange PolyConnectivity::hl_ccw_range(HalfedgeHandle _heh) const {
|
||||
return ConstHalfedgeLoopCCWRange(*this, _heh);
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline PolyConnectivity::VertexIter PolyConnectivity::vertices_begin()
|
||||
@@ -776,70 +893,54 @@ inline PolyConnectivity::ConstHalfedgeLoopCCWIter PolyConnectivity::chl_ccwend(H
|
||||
{ return ConstHalfedgeLoopCCWIter(*this, _heh, true); }
|
||||
|
||||
|
||||
inline PolyConnectivity::ConstVertexFaceRange SmartVertexHandle::faces() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->vf_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexFaceRange SmartVertexHandle::faces() const { assert(mesh() != nullptr); return mesh()->vf_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexFaceCWRange SmartVertexHandle::faces_cw() const { assert(mesh() != nullptr); return mesh()->vf_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexFaceCCWRange SmartVertexHandle::faces_ccw() const { assert(mesh() != nullptr); return mesh()->vf_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstVertexEdgeRange SmartVertexHandle::edges() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->ve_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexEdgeRange SmartVertexHandle::edges() const { assert(mesh() != nullptr); return mesh()->ve_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexEdgeCWRange SmartVertexHandle::edges_cw() const { assert(mesh() != nullptr); return mesh()->ve_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexEdgeCCWRange SmartVertexHandle::edges_ccw() const { assert(mesh() != nullptr); return mesh()->ve_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstVertexVertexRange
|
||||
SmartVertexHandle::vertices() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->vv_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexVertexRange SmartVertexHandle::vertices() const { assert(mesh() != nullptr); return mesh()->vv_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexVertexCWRange SmartVertexHandle::vertices_cw() const { assert(mesh() != nullptr); return mesh()->vv_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexVertexCCWRange SmartVertexHandle::vertices_ccw() const { assert(mesh() != nullptr); return mesh()->vv_ccw_range (*this); }
|
||||
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeRange
|
||||
SmartVertexHandle::incoming_halfedges() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->vih_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeRange SmartVertexHandle::incoming_halfedges() const { assert(mesh() != nullptr); return mesh()->vih_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCWRange SmartVertexHandle::incoming_halfedges_cw() const { assert(mesh() != nullptr); return mesh()->vih_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCCWRange SmartVertexHandle::incoming_halfedges_ccw() const { assert(mesh() != nullptr); return mesh()->vih_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeRange
|
||||
SmartVertexHandle::outgoing_halfedges() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->voh_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeRange SmartVertexHandle::incoming_halfedges (HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->vih_range (_heh); }
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCWRange SmartVertexHandle::incoming_halfedges_cw (HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->vih_cw_range (_heh); }
|
||||
inline PolyConnectivity::ConstVertexIHalfedgeCCWRange SmartVertexHandle::incoming_halfedges_ccw(HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->vih_ccw_range(_heh); }
|
||||
|
||||
inline PolyConnectivity::ConstHalfedgeLoopRange
|
||||
SmartHalfedgeHandle::loop() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->hl_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeRange SmartVertexHandle::outgoing_halfedges() const { assert(mesh() != nullptr); return mesh()->voh_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCWRange SmartVertexHandle::outgoing_halfedges_cw() const { assert(mesh() != nullptr); return mesh()->voh_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCCWRange SmartVertexHandle::outgoing_halfedges_ccw() const { assert(mesh() != nullptr); return mesh()->voh_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeRange SmartVertexHandle::outgoing_halfedges (HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->voh_range (_heh); }
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCWRange SmartVertexHandle::outgoing_halfedges_cw (HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->voh_cw_range (_heh); }
|
||||
inline PolyConnectivity::ConstVertexOHalfedgeCCWRange SmartVertexHandle::outgoing_halfedges_ccw(HalfedgeHandle _heh) const { assert(mesh() != nullptr); return mesh()->voh_ccw_range(_heh); }
|
||||
|
||||
|
||||
inline PolyConnectivity::ConstFaceVertexRange SmartFaceHandle::vertices() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->fv_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstHalfedgeLoopRange SmartHalfedgeHandle::loop() const { assert(mesh() != nullptr); return mesh()->hl_range (*this); }
|
||||
inline PolyConnectivity::ConstHalfedgeLoopCWRange SmartHalfedgeHandle::loop_cw() const { assert(mesh() != nullptr); return mesh()->hl_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstHalfedgeLoopCCWRange SmartHalfedgeHandle::loop_ccw() const { assert(mesh() != nullptr); return mesh()->hl_ccw_range (*this); }
|
||||
|
||||
inline PolyConnectivity::ConstFaceHalfedgeRange
|
||||
SmartFaceHandle::halfedges() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->fh_range(*this);
|
||||
}
|
||||
|
||||
inline PolyConnectivity::ConstFaceEdgeRange SmartFaceHandle::edges() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->fe_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstFaceVertexRange SmartFaceHandle::vertices() const { assert(mesh() != nullptr); return mesh()->fv_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceVertexCWRange SmartFaceHandle::vertices_cw() const { assert(mesh() != nullptr); return mesh()->fv_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceVertexCCWRange SmartFaceHandle::vertices_ccw() const { assert(mesh() != nullptr); return mesh()->fv_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstFaceFaceRange SmartFaceHandle::faces() const
|
||||
{
|
||||
assert(mesh() != nullptr);
|
||||
return mesh()->ff_range(*this);
|
||||
}
|
||||
inline PolyConnectivity::ConstFaceHalfedgeRange SmartFaceHandle::halfedges() const { assert(mesh() != nullptr); return mesh()->fh_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceHalfedgeCWRange SmartFaceHandle::halfedges_cw() const { assert(mesh() != nullptr); return mesh()->fh_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceHalfedgeCCWRange SmartFaceHandle::halfedges_ccw() const { assert(mesh() != nullptr); return mesh()->fh_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstFaceEdgeRange SmartFaceHandle::edges() const { assert(mesh() != nullptr); return mesh()->fe_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceEdgeCWRange SmartFaceHandle::edges_cw() const { assert(mesh() != nullptr); return mesh()->fe_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceEdgeCCWRange SmartFaceHandle::edges_ccw() const { assert(mesh() != nullptr); return mesh()->fe_ccw_range(*this); }
|
||||
|
||||
inline PolyConnectivity::ConstFaceFaceRange SmartFaceHandle::faces() const { assert(mesh() != nullptr); return mesh()->ff_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceFaceCWRange SmartFaceHandle::faces_cw() const { assert(mesh() != nullptr); return mesh()->ff_cw_range (*this); }
|
||||
inline PolyConnectivity::ConstFaceFaceCCWRange SmartFaceHandle::faces_ccw() const { assert(mesh() != nullptr); return mesh()->ff_ccw_range(*this); }
|
||||
|
||||
}//namespace OpenMesh
|
||||
|
||||
@@ -118,15 +118,47 @@ struct OPENMESHDLLEXPORT SmartVertexHandle : public SmartBaseHandle, VertexHandl
|
||||
SmartHalfedgeHandle in() const;
|
||||
|
||||
/// Returns a range of faces incident to the vertex (PolyConnectivity::vf_range())
|
||||
PolyConnectivity::ConstVertexFaceRange faces() const;
|
||||
PolyConnectivity::ConstVertexFaceRange faces() const;
|
||||
/// Returns a range of faces incident to the vertex (PolyConnectivity::vf_cw_range())
|
||||
PolyConnectivity::ConstVertexFaceCWRange faces_cw() const;
|
||||
/// Returns a range of faces incident to the vertex (PolyConnectivity::vf_ccw_range())
|
||||
PolyConnectivity::ConstVertexFaceCCWRange faces_ccw() const;
|
||||
/// Returns a range of edges incident to the vertex (PolyConnectivity::ve_range())
|
||||
PolyConnectivity::ConstVertexEdgeRange edges() const;
|
||||
PolyConnectivity::ConstVertexEdgeRange edges() const;
|
||||
/// Returns a range of edges incident to the vertex (PolyConnectivity::ve_cw_range())
|
||||
PolyConnectivity::ConstVertexEdgeCWRange edges_cw() const;
|
||||
/// Returns a range of edges incident to the vertex (PolyConnectivity::ve_ccw_range())
|
||||
PolyConnectivity::ConstVertexEdgeCCWRange edges_ccw() const;
|
||||
/// Returns a range of vertices adjacent to the vertex (PolyConnectivity::vv_range())
|
||||
PolyConnectivity::ConstVertexVertexRange vertices() const;
|
||||
PolyConnectivity::ConstVertexVertexRange vertices() const;
|
||||
/// Returns a range of vertices adjacent to the vertex (PolyConnectivity::vv_cw_range())
|
||||
PolyConnectivity::ConstVertexVertexCWRange vertices_cw() const;
|
||||
/// Returns a range of vertices adjacent to the vertex (PolyConnectivity::vv_ccw_range())
|
||||
PolyConnectivity::ConstVertexVertexCCWRange vertices_ccw() const;
|
||||
/// Returns a range of outgoing halfedges incident to the vertex (PolyConnectivity::voh_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeRange incoming_halfedges() const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::vih_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeRange outgoing_halfedges() const;
|
||||
PolyConnectivity::ConstVertexIHalfedgeRange incoming_halfedges() const;
|
||||
/// Returns a range of outgoing halfedges incident to the vertex (PolyConnectivity::voh_cw_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeCWRange incoming_halfedges_cw() const;
|
||||
/// Returns a range of outgoing halfedges incident to the vertex (PolyConnectivity::voh_ccw_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeCCWRange incoming_halfedges_ccw() const;
|
||||
/// Returns a range of outgoing halfedges incident to the vertex (PolyConnectivity::vih_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeRange incoming_halfedges(HalfedgeHandle _heh) const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::vih_cw_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeCWRange incoming_halfedges_cw(HalfedgeHandle _heh) const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::vih_ccw_range())
|
||||
PolyConnectivity::ConstVertexIHalfedgeCCWRange incoming_halfedges_ccw(HalfedgeHandle _heh) const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeRange outgoing_halfedges() const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_cw_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeCWRange outgoing_halfedges_cw() const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_ccw_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeCCWRange outgoing_halfedges_ccw() const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeRange outgoing_halfedges(HalfedgeHandle _heh) const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_cw_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeCWRange outgoing_halfedges_cw(HalfedgeHandle _heh) const;
|
||||
/// Returns a range of incoming halfedges incident to the vertex (PolyConnectivity::voh_ccw_range())
|
||||
PolyConnectivity::ConstVertexOHalfedgeCCWRange outgoing_halfedges_ccw(HalfedgeHandle _heh) const;
|
||||
|
||||
/// Returns valence of the vertex
|
||||
uint valence() const;
|
||||
@@ -154,7 +186,11 @@ struct OPENMESHDLLEXPORT SmartHalfedgeHandle : public SmartBaseHandle, HalfedgeH
|
||||
SmartFaceHandle face() const;
|
||||
|
||||
/// Returns a range of halfedges in the face of the halfedge (or along the boundary) (PolyConnectivity::hl_range())
|
||||
PolyConnectivity::ConstHalfedgeLoopRange loop() const;
|
||||
PolyConnectivity::ConstHalfedgeLoopRange loop() const;
|
||||
/// Returns a range of halfedges in the face of the halfedge (or along the boundary) (PolyConnectivity::hl_cw_range())
|
||||
PolyConnectivity::ConstHalfedgeLoopCWRange loop_cw() const;
|
||||
/// Returns a range of halfedges in the face of the halfedge (or along the boundary) (PolyConnectivity::hl_ccw_range())
|
||||
PolyConnectivity::ConstHalfedgeLoopCCWRange loop_ccw() const;
|
||||
};
|
||||
|
||||
struct OPENMESHDLLEXPORT SmartEdgeHandle : public SmartBaseHandle, EdgeHandle, SmartHandleStatusPredicates<SmartEdgeHandle>, SmartHandleBoundaryPredicate<SmartEdgeHandle>
|
||||
@@ -187,13 +223,29 @@ struct OPENMESHDLLEXPORT SmartFaceHandle : public SmartBaseHandle, FaceHandle, S
|
||||
SmartHalfedgeHandle halfedge() const;
|
||||
|
||||
/// Returns a range of vertices incident to the face (PolyConnectivity::fv_range())
|
||||
PolyConnectivity::ConstFaceVertexRange vertices() const;
|
||||
PolyConnectivity::ConstFaceVertexRange vertices() const;
|
||||
/// Returns a range of vertices incident to the face (PolyConnectivity::fv_cw_range())
|
||||
PolyConnectivity::ConstFaceVertexCWRange vertices_cw() const;
|
||||
/// Returns a range of vertices incident to the face (PolyConnectivity::fv_ccw_range())
|
||||
PolyConnectivity::ConstFaceVertexCCWRange vertices_ccw() const;
|
||||
/// Returns a range of halfedges of the face (PolyConnectivity::fh_range())
|
||||
PolyConnectivity::ConstFaceHalfedgeRange halfedges() const;
|
||||
PolyConnectivity::ConstFaceHalfedgeRange halfedges() const;
|
||||
/// Returns a range of halfedges of the face (PolyConnectivity::fh_cw_range())
|
||||
PolyConnectivity::ConstFaceHalfedgeCWRange halfedges_cw() const;
|
||||
/// Returns a range of halfedges of the face (PolyConnectivity::fh_ccw_range())
|
||||
PolyConnectivity::ConstFaceHalfedgeCCWRange halfedges_ccw() const;
|
||||
/// Returns a range of edges of the face (PolyConnectivity::fv_range())
|
||||
PolyConnectivity::ConstFaceEdgeRange edges() const;
|
||||
PolyConnectivity::ConstFaceEdgeRange edges() const;
|
||||
/// Returns a range of edges of the face (PolyConnectivity::fv_cw_range())
|
||||
PolyConnectivity::ConstFaceEdgeCWRange edges_cw() const;
|
||||
/// Returns a range of edges of the face (PolyConnectivity::fv_ccw_range())
|
||||
PolyConnectivity::ConstFaceEdgeCCWRange edges_ccw() const;
|
||||
/// Returns a range adjacent faces of the face (PolyConnectivity::ff_range())
|
||||
PolyConnectivity::ConstFaceFaceRange faces() const;
|
||||
PolyConnectivity::ConstFaceFaceRange faces() const;
|
||||
/// Returns a range adjacent faces of the face (PolyConnectivity::ff_cw_range())
|
||||
PolyConnectivity::ConstFaceFaceCWRange faces_cw() const;
|
||||
/// Returns a range adjacent faces of the face (PolyConnectivity::ff_ccw_range())
|
||||
PolyConnectivity::ConstFaceFaceCCWRange faces_ccw() const;
|
||||
|
||||
/// Returns the valence of the face
|
||||
uint valence() const;
|
||||
|
||||
Reference in New Issue
Block a user