Commit f0ee8876 authored by Jan Möbius's avatar Jan Möbius

Merge branch 'halfedge_loop_range' into 'master'

Halfedge loop range

See merge request !277
parents 83f36625 787c00f3
Pipeline #14907 passed with stages
in 127 minutes and 42 seconds
......@@ -17,6 +17,7 @@
<b>Core</b>
<ul>
<li>Add filtered range that stores reference instead of copy if the filter is not an rvalue reference</li>
<li>Add halfedge loop range corresponding to hl_iter()</li>
</ul>
<b>Build System</b>
......
......@@ -1230,6 +1230,13 @@ public:
FaceHandle,
&PolyConnectivity::cff_begin,
&PolyConnectivity::cff_end>> ConstFaceFaceRange;
typedef CirculatorRange<CirculatorRangeTraitT<
PolyConnectivity,
ConstHalfedgeLoopIter,
HalfedgeHandle,
HalfedgeHandle,
&PolyConnectivity::chl_begin,
&PolyConnectivity::chl_end>> ConstHalfedgeLoopRange;
/**
* @return The vertices adjacent to the specified vertex
......@@ -1285,6 +1292,12 @@ public:
*/
ConstFaceFaceRange ff_range(FaceHandle _fh) const;
/**
* @return The halfedges in the face
* as a range object suitable for C++11 range based for loops.
*/
ConstHalfedgeLoopRange hl_range(HalfedgeHandle _heh) const;
//@}
//===========================================================================
......
......@@ -164,6 +164,11 @@ inline PolyConnectivity::ConstFaceFaceRange PolyConnectivity::ff_range(FaceHandl
return ConstFaceFaceRange(*this, _fh);
}
inline PolyConnectivity::ConstHalfedgeLoopRange PolyConnectivity::hl_range(HalfedgeHandle _heh) const {
return ConstHalfedgeLoopRange(*this, _heh);
}
inline PolyConnectivity::VertexIter PolyConnectivity::vertices_begin()
......@@ -804,6 +809,14 @@ SmartVertexHandle::outgoing_halfedges() const
return mesh()->voh_range(*this);
}
inline PolyConnectivity::ConstHalfedgeLoopRange
SmartHalfedgeHandle::loop() const
{
assert(mesh() != nullptr);
return mesh()->hl_range(*this);
}
inline PolyConnectivity::ConstFaceVertexRange SmartFaceHandle::vertices() const
{
assert(mesh() != nullptr);
......
......@@ -123,6 +123,9 @@ struct OPENMESHDLLEXPORT SmartHalfedgeHandle : public SmartBaseHandle, HalfedgeH
/// Returns incident face of halfedge
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;
/// Returns true iff the halfedge is on the boundary (i.e. it has no corresponding face)
bool is_boundary() const;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment