improve name of helper class containing status access functions and implement is_boundary in the same way
This commit is contained in:
@@ -77,7 +77,7 @@ private:
|
|||||||
|
|
||||||
/// Base class for all smart handle types that contains status related methods
|
/// Base class for all smart handle types that contains status related methods
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
class SmartBaseHandleStatus
|
class SmartHandleStatusPredicates
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// Returns true iff the handle is marked as feature
|
/// Returns true iff the handle is marked as feature
|
||||||
@@ -96,8 +96,17 @@ public:
|
|||||||
bool deleted() const;
|
bool deleted() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Base class for all smart handle types that contains status related methods
|
||||||
|
template <typename HandleType>
|
||||||
|
class SmartHandleBoundaryPredicate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/// Returns true iff the handle is boundary
|
||||||
|
bool is_boundary() const;
|
||||||
|
};
|
||||||
|
|
||||||
/// Smart version of VertexHandle contains a pointer to the corresponding mesh and allows easier access to navigation methods
|
/// Smart version of VertexHandle contains a pointer to the corresponding mesh and allows easier access to navigation methods
|
||||||
struct OPENMESHDLLEXPORT SmartVertexHandle : public SmartBaseHandle, VertexHandle, SmartBaseHandleStatus<SmartVertexHandle>
|
struct OPENMESHDLLEXPORT SmartVertexHandle : public SmartBaseHandle, VertexHandle, SmartHandleStatusPredicates<SmartVertexHandle>, SmartHandleBoundaryPredicate<SmartVertexHandle>
|
||||||
{
|
{
|
||||||
explicit SmartVertexHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), VertexHandle(_idx) {}
|
explicit SmartVertexHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), VertexHandle(_idx) {}
|
||||||
|
|
||||||
@@ -121,13 +130,11 @@ struct OPENMESHDLLEXPORT SmartVertexHandle : public SmartBaseHandle, VertexHandl
|
|||||||
|
|
||||||
/// Returns valence of the vertex
|
/// Returns valence of the vertex
|
||||||
uint valence() const;
|
uint valence() const;
|
||||||
/// Returns true iff the vertex is incident to a boundary halfedge
|
|
||||||
bool is_boundary() const;
|
|
||||||
/// Returns true iff (the mesh at) the vertex is two-manifold ?
|
/// Returns true iff (the mesh at) the vertex is two-manifold ?
|
||||||
bool is_manifold() const;
|
bool is_manifold() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OPENMESHDLLEXPORT SmartHalfedgeHandle : public SmartBaseHandle, HalfedgeHandle, SmartBaseHandleStatus<SmartHalfedgeHandle>
|
struct OPENMESHDLLEXPORT SmartHalfedgeHandle : public SmartBaseHandle, HalfedgeHandle, SmartHandleStatusPredicates<SmartHalfedgeHandle>, SmartHandleBoundaryPredicate<SmartHalfedgeHandle>
|
||||||
{
|
{
|
||||||
explicit SmartHalfedgeHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), HalfedgeHandle(_idx) {}
|
explicit SmartHalfedgeHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), HalfedgeHandle(_idx) {}
|
||||||
|
|
||||||
@@ -148,12 +155,9 @@ struct OPENMESHDLLEXPORT SmartHalfedgeHandle : public SmartBaseHandle, HalfedgeH
|
|||||||
|
|
||||||
/// Returns a range of halfedges in the face of the halfedge (or along the boundary) (PolyConnectivity::hl_range())
|
/// 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 true iff the halfedge is on the boundary (i.e. it has no corresponding face)
|
|
||||||
bool is_boundary() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OPENMESHDLLEXPORT SmartEdgeHandle : public SmartBaseHandle, EdgeHandle, SmartBaseHandleStatus<SmartEdgeHandle>
|
struct OPENMESHDLLEXPORT SmartEdgeHandle : public SmartBaseHandle, EdgeHandle, SmartHandleStatusPredicates<SmartEdgeHandle>, SmartHandleBoundaryPredicate<SmartEdgeHandle>
|
||||||
{
|
{
|
||||||
explicit SmartEdgeHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), EdgeHandle(_idx) {}
|
explicit SmartEdgeHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), EdgeHandle(_idx) {}
|
||||||
|
|
||||||
@@ -173,12 +177,9 @@ struct OPENMESHDLLEXPORT SmartEdgeHandle : public SmartBaseHandle, EdgeHandle, S
|
|||||||
SmartVertexHandle v0() const;
|
SmartVertexHandle v0() const;
|
||||||
/// Shorthand for vertex(1)
|
/// Shorthand for vertex(1)
|
||||||
SmartVertexHandle v1() const;
|
SmartVertexHandle v1() const;
|
||||||
|
|
||||||
/// Returns true iff the edge lies on the boundary (i.e. one of the halfedges is boundary)
|
|
||||||
bool is_boundary() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OPENMESHDLLEXPORT SmartFaceHandle : public SmartBaseHandle, FaceHandle, SmartBaseHandleStatus<SmartFaceHandle>
|
struct OPENMESHDLLEXPORT SmartFaceHandle : public SmartBaseHandle, FaceHandle, SmartHandleStatusPredicates<SmartFaceHandle>, SmartHandleBoundaryPredicate<SmartFaceHandle>
|
||||||
{
|
{
|
||||||
explicit SmartFaceHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), FaceHandle(_idx) {}
|
explicit SmartFaceHandle(int _idx=-1, const PolyConnectivity* _mesh = nullptr) : SmartBaseHandle(_mesh), FaceHandle(_idx) {}
|
||||||
|
|
||||||
@@ -196,8 +197,6 @@ struct OPENMESHDLLEXPORT SmartFaceHandle : public SmartBaseHandle, FaceHandle, S
|
|||||||
|
|
||||||
/// Returns the valence of the face
|
/// Returns the valence of the face
|
||||||
uint valence() const;
|
uint valence() const;
|
||||||
/// Returns true iff the face lies at the boundary (i.e. one of the edges is boundary)
|
|
||||||
bool is_boundary() const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -231,7 +230,7 @@ template <> struct SmartHandle<FaceHandle> { using type = SmartFaceHandle;
|
|||||||
|
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::feature() const
|
inline bool SmartHandleStatusPredicates<HandleType>::feature() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -239,7 +238,7 @@ inline bool SmartBaseHandleStatus<HandleType>::feature() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::selected() const
|
inline bool SmartHandleStatusPredicates<HandleType>::selected() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -247,7 +246,7 @@ inline bool SmartBaseHandleStatus<HandleType>::selected() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::tagged() const
|
inline bool SmartHandleStatusPredicates<HandleType>::tagged() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -255,7 +254,7 @@ inline bool SmartBaseHandleStatus<HandleType>::tagged() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::tagged2() const
|
inline bool SmartHandleStatusPredicates<HandleType>::tagged2() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -263,7 +262,7 @@ inline bool SmartBaseHandleStatus<HandleType>::tagged2() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::locked() const
|
inline bool SmartHandleStatusPredicates<HandleType>::locked() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -271,7 +270,7 @@ inline bool SmartBaseHandleStatus<HandleType>::locked() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::hidden() const
|
inline bool SmartHandleStatusPredicates<HandleType>::hidden() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
@@ -279,13 +278,21 @@ inline bool SmartBaseHandleStatus<HandleType>::hidden() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename HandleType>
|
template <typename HandleType>
|
||||||
inline bool SmartBaseHandleStatus<HandleType>::deleted() const
|
inline bool SmartHandleStatusPredicates<HandleType>::deleted() const
|
||||||
{
|
{
|
||||||
const auto& handle = static_cast<const HandleType&>(*this);
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
assert(handle.mesh() != nullptr);
|
assert(handle.mesh() != nullptr);
|
||||||
return handle.mesh()->status(handle).deleted();
|
return handle.mesh()->status(handle).deleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename HandleType>
|
||||||
|
inline bool SmartHandleBoundaryPredicate<HandleType>::is_boundary() const
|
||||||
|
{
|
||||||
|
const auto& handle = static_cast<const HandleType&>(*this);
|
||||||
|
assert(handle.mesh() != nullptr);
|
||||||
|
return handle.mesh()->is_boundary(handle);
|
||||||
|
}
|
||||||
|
|
||||||
inline SmartHalfedgeHandle SmartVertexHandle::out() const
|
inline SmartHalfedgeHandle SmartVertexHandle::out() const
|
||||||
{
|
{
|
||||||
assert(mesh() != nullptr);
|
assert(mesh() != nullptr);
|
||||||
@@ -308,12 +315,6 @@ inline uint SmartVertexHandle::valence() const
|
|||||||
return mesh()->valence(*this);
|
return mesh()->valence(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool SmartVertexHandle::is_boundary() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->is_boundary(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool SmartVertexHandle::is_manifold() const
|
inline bool SmartVertexHandle::is_manifold() const
|
||||||
{
|
{
|
||||||
assert(mesh() != nullptr);
|
assert(mesh() != nullptr);
|
||||||
@@ -362,12 +363,6 @@ inline SmartFaceHandle SmartHalfedgeHandle::face() const
|
|||||||
return make_smart(mesh()->face_handle(*this), mesh());
|
return make_smart(mesh()->face_handle(*this), mesh());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool SmartHalfedgeHandle::is_boundary() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->is_boundary(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline SmartHalfedgeHandle SmartEdgeHandle::halfedge(unsigned int _i) const
|
inline SmartHalfedgeHandle SmartEdgeHandle::halfedge(unsigned int _i) const
|
||||||
{
|
{
|
||||||
assert(mesh() != nullptr);
|
assert(mesh() != nullptr);
|
||||||
@@ -409,12 +404,6 @@ inline SmartVertexHandle SmartEdgeHandle::v1() const
|
|||||||
return v(1);
|
return v(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool SmartEdgeHandle::is_boundary() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->is_boundary(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline SmartHalfedgeHandle SmartFaceHandle::halfedge() const
|
inline SmartHalfedgeHandle SmartFaceHandle::halfedge() const
|
||||||
{
|
{
|
||||||
assert(mesh() != nullptr);
|
assert(mesh() != nullptr);
|
||||||
@@ -427,11 +416,6 @@ inline uint SmartFaceHandle::valence() const
|
|||||||
return mesh()->valence(*this);
|
return mesh()->valence(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool SmartFaceHandle::is_boundary() const
|
|
||||||
{
|
|
||||||
assert(mesh() != nullptr);
|
|
||||||
return mesh()->is_boundary(*this);
|
|
||||||
}
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
} // namespace OpenMesh
|
} // namespace OpenMesh
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user