43 #ifndef PCL_GEOMETRY_MESH_CIRCULATORS_H 44 #define PCL_GEOMETRY_MESH_CIRCULATORS_H 46 #include <pcl/geometry/boost.h> 47 #include <pcl/geometry/mesh_indices.h> 63 template <
class MeshT>
65 : boost::equality_comparable <pcl::geometry::VertexAroundVertexCirculator <MeshT>
66 , boost::unit_steppable <pcl::geometry::VertexAroundVertexCirculator <MeshT>
71 typedef boost::equality_comparable <pcl::geometry::VertexAroundVertexCirculator <MeshT>
72 , boost::unit_steppable <pcl::geometry::VertexAroundVertexCirculator <MeshT> > >
Base;
171 template <
class MeshT>
173 : boost::equality_comparable <pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator <MeshT>
174 , boost::unit_steppable <pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator <MeshT>
179 typedef boost::equality_comparable <pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator <MeshT>
180 , boost::unit_steppable <pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator <MeshT> > >
Base;
279 template <
class MeshT>
281 : boost::equality_comparable <pcl::geometry::IncomingHalfEdgeAroundVertexCirculator <MeshT>
282 , boost::unit_steppable <pcl::geometry::IncomingHalfEdgeAroundVertexCirculator <MeshT>
287 typedef boost::equality_comparable <pcl::geometry::IncomingHalfEdgeAroundVertexCirculator <MeshT>
288 , boost::unit_steppable <pcl::geometry::IncomingHalfEdgeAroundVertexCirculator <MeshT> > >
Base;
298 idx_incoming_half_edge_ ()
306 idx_incoming_half_edge_ (mesh->getIncomingHalfEdgeIndex (idx_vertex))
314 idx_incoming_half_edge_ (idx_incoming_half_edge)
323 return (idx_incoming_half_edge_.isValid ());
338 idx_incoming_half_edge_ =
mesh_->getOppositeHalfEdgeIndex (
mesh_->getNextHalfEdgeIndex (idx_incoming_half_edge_));
346 idx_incoming_half_edge_ =
mesh_->getPrevHalfEdgeIndex (
mesh_->getOppositeHalfEdgeIndex (idx_incoming_half_edge_));
354 return (idx_incoming_half_edge_);
361 return (idx_incoming_half_edge_);
387 template <
class MeshT>
389 : boost::equality_comparable <pcl::geometry::FaceAroundVertexCirculator <MeshT>
390 , boost::unit_steppable <pcl::geometry::FaceAroundVertexCirculator <MeshT>
395 typedef boost::equality_comparable <pcl::geometry::FaceAroundVertexCirculator <MeshT>
396 , boost::unit_steppable <pcl::geometry::FaceAroundVertexCirculator <MeshT> > >
Base;
496 template <
class MeshT>
498 : boost::equality_comparable <pcl::geometry::VertexAroundFaceCirculator <MeshT>
499 , boost::unit_steppable <pcl::geometry::VertexAroundFaceCirculator <MeshT>
504 typedef boost::equality_comparable <pcl::geometry::VertexAroundFaceCirculator <MeshT>
505 , boost::unit_steppable <pcl::geometry::VertexAroundFaceCirculator <MeshT> > >
Base;
516 idx_inner_half_edge_ ()
524 idx_inner_half_edge_ (mesh->getInnerHalfEdgeIndex (idx_face))
532 idx_inner_half_edge_ (idx_inner_half_edge)
541 return (idx_inner_half_edge_.isValid ());
556 idx_inner_half_edge_ =
mesh_->getNextHalfEdgeIndex (idx_inner_half_edge_);
564 idx_inner_half_edge_ =
mesh_->getPrevHalfEdgeIndex (idx_inner_half_edge_);
572 return (
mesh_->getTerminatingVertexIndex (idx_inner_half_edge_));
579 return (idx_inner_half_edge_);
605 template <
class MeshT>
607 : boost::equality_comparable <pcl::geometry::InnerHalfEdgeAroundFaceCirculator <MeshT>
608 , boost::unit_steppable <pcl::geometry::InnerHalfEdgeAroundFaceCirculator <MeshT>
613 typedef boost::equality_comparable <pcl::geometry::InnerHalfEdgeAroundFaceCirculator <MeshT>
614 , boost::unit_steppable <pcl::geometry::InnerHalfEdgeAroundFaceCirculator <MeshT> > >
Base;
624 idx_inner_half_edge_ ()
632 idx_inner_half_edge_ (mesh->getInnerHalfEdgeIndex (idx_face))
640 idx_inner_half_edge_ (idx_inner_half_edge)
649 return (idx_inner_half_edge_.isValid ());
664 idx_inner_half_edge_ =
mesh_->getNextHalfEdgeIndex (idx_inner_half_edge_);
672 idx_inner_half_edge_ =
mesh_->getPrevHalfEdgeIndex (idx_inner_half_edge_);
680 return (idx_inner_half_edge_);
687 return (idx_inner_half_edge_);
713 template <
class MeshT>
715 : boost::equality_comparable <pcl::geometry::OuterHalfEdgeAroundFaceCirculator <MeshT>
716 , boost::unit_steppable <pcl::geometry::OuterHalfEdgeAroundFaceCirculator <MeshT>
721 typedef boost::equality_comparable <pcl::geometry::OuterHalfEdgeAroundFaceCirculator <MeshT>
722 , boost::unit_steppable <pcl::geometry::OuterHalfEdgeAroundFaceCirculator <MeshT> > >
Base;
732 idx_inner_half_edge_ ()
740 idx_inner_half_edge_ (mesh->getInnerHalfEdgeIndex (idx_face))
748 idx_inner_half_edge_ (idx_inner_half_edge)
757 return (idx_inner_half_edge_.isValid ());
772 idx_inner_half_edge_ =
mesh_->getNextHalfEdgeIndex (idx_inner_half_edge_);
780 idx_inner_half_edge_ =
mesh_->getPrevHalfEdgeIndex (idx_inner_half_edge_);
788 return (
mesh_->getOppositeHalfEdgeIndex (idx_inner_half_edge_));
795 return (idx_inner_half_edge_);
821 template <
class MeshT>
823 : boost::equality_comparable <pcl::geometry::FaceAroundFaceCirculator <MeshT>
824 , boost::unit_steppable <pcl::geometry::FaceAroundFaceCirculator <MeshT>
829 typedef boost::equality_comparable <pcl::geometry::FaceAroundFaceCirculator <MeshT>
830 , boost::unit_steppable <pcl::geometry::FaceAroundFaceCirculator <MeshT> > >
Base;
840 idx_inner_half_edge_ ()
848 idx_inner_half_edge_ (mesh->getInnerHalfEdgeIndex (idx_face))
856 idx_inner_half_edge_ (idx_inner_half_edge)
865 return (idx_inner_half_edge_.isValid ());
880 idx_inner_half_edge_ =
mesh_->getNextHalfEdgeIndex (idx_inner_half_edge_);
888 idx_inner_half_edge_ =
mesh_->getPrevHalfEdgeIndex (idx_inner_half_edge_);
896 return (
mesh_->getOppositeFaceIndex (idx_inner_half_edge_));
903 return (idx_inner_half_edge_);
915 #endif // PCL_GEOMETRY_MESH_CIRCULATORS_H HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
boost::equality_comparable< pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator< MeshT >, boost::unit_steppable< pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator< MeshT > > > Base
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
HalfEdgeIndex idx_inner_half_edge_
The inner half-edge of the face around which we want to circulate.
Mesh::FaceIndex FaceIndex
bool isValid() const
Check if the circulator is valid.
bool isValid() const
Check if the circulator is valid.
Mesh::HalfEdgeIndex HalfEdgeIndex
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
Mesh::HalfEdgeIndex HalfEdgeIndex
bool isValid() const
Check if the circulator is valid.
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
FaceAroundVertexCirculator(const VertexIndex &idx_vertex, Mesh *const mesh)
Construct from the vertex around which we want to circulate.
Self & operator--()
Decrement operators (with boost::operators): – (pre and post)
Mesh::VertexIndex VertexIndex
boost::equality_comparable< pcl::geometry::FaceAroundFaceCirculator< MeshT >, boost::unit_steppable< pcl::geometry::FaceAroundFaceCirculator< MeshT > > > Base
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
Mesh::HalfEdgeIndex HalfEdgeIndex
HalfEdgeIndex idx_incoming_half_edge_
The incoming half-edge of the vertex around which we want to circulate.
HalfEdgeIndex idx_inner_half_edge_
The inner half-edge of the face around which we want to circulate.
Circulates clockwise around a face and returns an index to the face of the outer half-edge (the targe...
Circulates counter-clockwise around a vertex and returns an index to the incoming half-edge (the targ...
OutgoingHalfEdgeAroundVertexCirculator(const VertexIndex &idx_vertex, Mesh *const mesh)
Construct from the vertex around which we want to circulate.
Mesh::HalfEdgeIndex HalfEdgeIndex
Mesh::FaceIndex FaceIndex
Mesh * mesh_
The mesh to which this circulator belongs to.
bool isValid() const
Check if the circulator is valid.
Mesh * mesh_
The mesh to which this circulator belongs to.
bool isValid() const
Check if the circulator is valid.
IncomingHalfEdgeAroundVertexCirculator(const HalfEdgeIndex &idx_incoming_half_edge, Mesh *const mesh)
Construct directly from the incoming half-edge.
pcl::geometry::VertexAroundFaceCirculator< MeshT > Self
Mesh::FaceIndex FaceIndex
Mesh::HalfEdgeIndex HalfEdgeIndex
HalfEdgeIndex getTargetIndex() const
Get the index to the outer half-edge.
VertexAroundFaceCirculator(const HalfEdgeIndex &idx_inner_half_edge, Mesh *const mesh)
Construct directly from the inner half-edge.
Mesh * mesh_
The mesh to which this circulator belongs to.
VertexIndex getTargetIndex() const
Get the index to the target vertex.
VertexAroundVertexCirculator(const VertexIndex &idx_vertex, Mesh *const mesh)
Construct from the vertex around which we want to circulate.
OutgoingHalfEdgeAroundVertexCirculator(const HalfEdgeIndex &idx_outgoing_half_edge, Mesh *const mesh)
Construct directly from the outgoing half-edge.
OuterHalfEdgeAroundFaceCirculator(const FaceIndex &idx_face, Mesh *const mesh)
Construct from the face around which we want to circulate.
HalfEdgeIndex getTargetIndex() const
Get the index to the incoming half-edge.
Mesh * mesh_
The mesh to which this circulator belongs to.
InnerHalfEdgeAroundFaceCirculator(const HalfEdgeIndex &idx_inner_half_edge, Mesh *const mesh)
Construct directly from the inner half-edge.
HalfEdgeIndex idx_inner_half_edge_
The inner half-edge of the face around which we want to circulate.
Mesh::VertexIndex VertexIndex
FaceAroundFaceCirculator()
Constructor resulting in an invalid circulator.
Circulates counter-clockwise around a vertex and returns an index to the terminating vertex of the ou...
Mesh::HalfEdgeIndex HalfEdgeIndex
Mesh::FaceIndex FaceIndex
bool isValid() const
Check if the circulator is valid.
Mesh * mesh_
The mesh to which this circulator belongs to.
boost::equality_comparable< pcl::geometry::OuterHalfEdgeAroundFaceCirculator< MeshT >, boost::unit_steppable< pcl::geometry::OuterHalfEdgeAroundFaceCirculator< MeshT > > > Base
Mesh::VertexIndex VertexIndex
Circulates clockwise around a face and returns an index to the terminating vertex of the inner half-e...
pcl::geometry::FaceAroundVertexCirculator< MeshT > Self
boost::equality_comparable< pcl::geometry::VertexAroundFaceCirculator< MeshT >, boost::unit_steppable< pcl::geometry::VertexAroundFaceCirculator< MeshT > > > Base
HalfEdgeIndex idx_outgoing_half_edge_
The outgoing half-edge of the vertex around which we want to circulate.
Mesh * mesh_
The mesh to which this circulator belongs to.
HalfEdgeIndex idx_inner_half_edge_
The inner half-edge of the face around which we want to circulate.
pcl::geometry::FaceAroundFaceCirculator< MeshT > Self
Self & operator++()
Increment operators (with boost::operators): ++ (pre and post)
boost::equality_comparable< pcl::geometry::FaceAroundVertexCirculator< MeshT >, boost::unit_steppable< pcl::geometry::FaceAroundVertexCirculator< MeshT > > > Base
Mesh::HalfEdgeIndex HalfEdgeIndex
Circulates counter-clockwise around a vertex and returns an index to the outgoing half-edge (the targ...
HalfEdgeIndex getTargetIndex() const
Get the index to the outgoing half-edge.
pcl::geometry::VertexAroundVertexCirculator< MeshT > Self
bool isValid() const
Check if the circulator is valid.
boost::equality_comparable< pcl::geometry::VertexAroundVertexCirculator< MeshT >, boost::unit_steppable< pcl::geometry::VertexAroundVertexCirculator< MeshT > > > Base
pcl::geometry::InnerHalfEdgeAroundFaceCirculator< MeshT > Self
VertexAroundFaceCirculator(const FaceIndex &idx_face, Mesh *const mesh)
Construct from the face around which we want to circulate.
Mesh::FaceIndex FaceIndex
boost::equality_comparable< pcl::geometry::InnerHalfEdgeAroundFaceCirculator< MeshT >, boost::unit_steppable< pcl::geometry::InnerHalfEdgeAroundFaceCirculator< MeshT > > > Base
OuterHalfEdgeAroundFaceCirculator()
Constructor resulting in an invalid circulator.
InnerHalfEdgeAroundFaceCirculator(const FaceIndex &idx_face, Mesh *const mesh)
Construct from the face around which we want to circulate.
Mesh::VertexIndex VertexIndex
VertexAroundVertexCirculator()
Constructor resulting in an invalid circulator.
HalfEdgeIndex getTargetIndex() const
Get the index to the inner half-edge.
pcl::geometry::OuterHalfEdgeAroundFaceCirculator< MeshT > Self
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
InnerHalfEdgeAroundFaceCirculator()
Constructor resulting in an invalid circulator.
FaceAroundFaceCirculator(const HalfEdgeIndex &idx_inner_half_edge, Mesh *const mesh)
Construct directly from the inner half-edge.
Mesh * mesh_
The mesh to which this circulator belongs to.
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
Mesh::HalfEdgeIndex HalfEdgeIndex
pcl::geometry::OutgoingHalfEdgeAroundVertexCirculator< MeshT > Self
Mesh * mesh_
The mesh to which this circulator belongs to.
FaceIndex getTargetIndex() const
Get the index to the target face.
bool isValid() const
Check if the circulator is valid.
bool operator==(const Self &other) const
Comparison operators (with boost::operators): == !=.
Circulates clockwise around a face and returns an index to the inner half-edge (the target)...
VertexAroundFaceCirculator()
Constructor resulting in an invalid circulator.
Mesh::VertexIndex VertexIndex
HalfEdgeIndex idx_outgoing_half_edge_
The outgoing half-edge of the vertex around which we want to circulate.
HalfEdgeIndex getCurrentHalfEdgeIndex() const
Get the half-edge that is currently stored in the circulator.
Circulates clockwise around a face and returns an index to the outer half-edge (the target)...
Circulates counter-clockwise around a vertex and returns an index to the face of the outgoing half-ed...
FaceAroundFaceCirculator(const FaceIndex &idx_face, Mesh *const mesh)
Construct from the face around which we want to circulate.
boost::equality_comparable< pcl::geometry::IncomingHalfEdgeAroundVertexCirculator< MeshT >, boost::unit_steppable< pcl::geometry::IncomingHalfEdgeAroundVertexCirculator< MeshT > > > Base
FaceAroundVertexCirculator(const HalfEdgeIndex &idx_outgoing_half_edge, Mesh *const mesh)
Construct directly from the outgoing half-edge.
IncomingHalfEdgeAroundVertexCirculator(const VertexIndex &idx_vertex, Mesh *const mesh)
Construct from the vertex around which we want to circulate.
FaceIndex getTargetIndex() const
Get the index to the target face.
IncomingHalfEdgeAroundVertexCirculator()
Constructor resulting in an invalid circulator.
OuterHalfEdgeAroundFaceCirculator(const HalfEdgeIndex &idx_inner_half_edge, Mesh *const mesh)
Construct directly from the inner half-edge.
pcl::geometry::IncomingHalfEdgeAroundVertexCirculator< MeshT > Self
HalfEdgeIndex idx_outgoing_half_edge_
The outgoing half-edge of the vertex around which we want to circulate.
OutgoingHalfEdgeAroundVertexCirculator()
Constructor resulting in an invalid circulator.
FaceAroundVertexCirculator()
Constructor resulting in an invalid circulator.
VertexAroundVertexCirculator(const HalfEdgeIndex &idx_outgoing_half_edge, Mesh *const mesh)
Construct directly from the outgoing half-edge.
VertexIndex getTargetIndex() const
Get the index to the target vertex.