Go to the documentation of this file.
9 #ifndef opengl_CGeneralizedCylinder_H
10 #define opengl_CGeneralizedCylinder_H
23 class CGeneralizedCylinder;
86 for (
int i = 0; i < 4; i++)
points[i] =
p[i];
107 mutable std::vector<TQuadrilateral>
mesh;
117 mutable std::vector<mrpt::math::TPolygonWithPlane>
polys;
143 const std::vector<mrpt::math::TPoint3D>&
axis,
144 const std::vector<mrpt::math::TPoint3D>&
generatrix);
158 inline void getAxis(std::vector<mrpt::math::TPoint3D>&
a)
const
161 size_t N =
axis.size();
163 for (
size_t i = 0; i < N; i++)
165 a[i].x =
axis[i].x();
166 a[i].y =
axis[i].y();
167 a[i].z =
axis[i].z();
180 inline void setAxis(
const std::vector<mrpt::math::TPoint3D>&
a)
252 return axis.size() ? (
axis.size() - 1) : 0;
304 throw std::logic_error(
"Wrong bound definition");
320 throw std::logic_error(
"No more sections");
335 throw std::logic_error(
"No more sections");
390 const std::vector<mrpt::math::TPoint3D>& pIn,
401 const std::vector<TQuadrilateral>& m,
423 const std::vector<mrpt::math::TPoint3D>&
a,
424 const std::vector<mrpt::math::TPoint3D>&
g)
EIGEN_STRONG_INLINE iterator begin()
const Scalar * const_iterator
bool fullyVisible
Flag to determine whether the object is fully visible or only some sections are.
static Ptr Create(Args &&... args)
void render_dl() const override
Render.
void getAxis(mrpt::aligned_std_vector< mrpt::poses::CPose3D > &a) const
Get axis, including angular coordinates.
bool getLastVisibleSectionPose(mrpt::poses::CPose3D &p)
Gets the axis pose of the last section, returning false if there is no such pose.
bool meshUpToDate
Mutable flag which tells if recalculations are needed.
void getEnd(CPolyhedron::Ptr &poly) const
Get a polyhedron containing the ending point of the cylinder (its "base").
A renderizable object suitable for rendering with OpenGL's display lists.
GLsizei const GLfloat * points
void removeVisibleSectionAtEnd()
Removes a visible section from the ending of the currently visible set.
EIGEN_STRONG_INLINE void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
bool polysUpToDate
Mutable flag telling whether ray tracing temporary data must be recalculated or not.
void addVisibleSectionAtStart()
Adds another visible section at the start of the cylinder.
void setAxis(const std::vector< mrpt::math::TPoint3D > &a)
Set the axis points.
size_t lastSection
Last visible section, if fullyVisible is set to false.
void setGeneratrix(const std::vector< mrpt::math::TPoint3D > &g)
Set cylinder's profile.
void getClosedSection(size_t index, CPolyhedron::Ptr &poly) const
Get a polyhedron consisting of a single section of the cylinder.
CGeneralizedCylinder(const std::vector< mrpt::math::TPoint3D > &a, const std::vector< mrpt::math::TPoint3D > &g)
Constructor with axis and generatrix.
bool getFirstSectionPose(mrpt::poses::CPose3D &p)
Gets the axis pose of the first section, returning false if there is no such pose.
void setClosed(bool c=true)
Set whether each section is a closed polygon or not.
virtual ~CGeneralizedCylinder()
Destructor.
void getAsPolygonUnsafe(mrpt::math::TPolygon3D &vec) const
Given a polygon with 4 already positions allocated, this method fills it with the quadrilateral point...
std::vector< T, mrpt::aligned_allocator_cpp11< T > > aligned_std_vector
~TQuadrilateral()
Destructor.
mrpt::aligned_std_vector< mrpt::poses::CPose3D > axis
Cylinder's axis.
bool closed
Boolean variable which determines if the profile is closed at each section.
Auxiliary struct holding any quadrilateral, represented by foour points.
void calculateNormal()
Automatically compute a vector normal to this quadrilateral.
void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max) const override
Evaluates the bounding box of this object (including possible children) in the coordinate frame of th...
std::shared_ptr< CPolyhedron > Ptr
TQuadrilateral(const T(&p)[4])
Construction from any array of four compatible objects.
void getGeneratrix(std::vector< mrpt::math::TPoint3D > &g) const
Get cylinder's profile.
std::vector< TQuadrilateral > mesh
Mutable object with mesh information, used to avoid repeated computations.
CGeneralizedCylinder()
Basic constructor with default initialization.
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
This object represents any figure obtained by extruding any profile along a given axis.
bool getLastSectionPose(mrpt::poses::CPose3D &p)
Gets the axis pose of the last section, returning false if there is no such pose.
void setAllSectionsInvisible(size_t pointer=0)
Hides all sections.
void getVisibleSections(size_t &first, size_t &last) const
Gets the cylinder's visible sections.
3D polygon, inheriting from std::vector<TPoint3D>
std::vector< mrpt::math::TPoint3D > generatrix
Object's generatrix, that is, profile which will be extruded.
void updatePolys() const
Updates the mutable set of polygons used in ray tracing.
void setVisibleSections(size_t first, size_t last)
Sets which sections are visible.
bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const override
Ray tracing.
void getClosedSection(size_t index1, size_t index2, CPolyhedron::Ptr &poly) const
Get a polyhedron consisting of a set of closed sections of the cylinder.
void generateSetOfPolygons(std::vector< mrpt::math::TPolygon3D > &res) const
Get the cylinder as a set of polygons in 3D.
TQuadrilateral(const mrpt::math::TPoint3D &p1, const mrpt::math::TPoint3D &p2, const mrpt::math::TPoint3D &p3, const mrpt::math::TPoint3D &p4)
Constructor from 4 points.
void generatePoses(const std::vector< mrpt::math::TPoint3D > &pIn, mrpt::aligned_std_vector< mrpt::poses::CPose3D > &pOut)
Updates the axis, transforming each point into a pose pointing to the next section.
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
void updateMesh() const
Updates the mutable mesh.
size_t getVisibleSections() const
Get how many visible sections are in the cylinder.
GLsizei const GLvoid * pointer
void getOrigin(CPolyhedron::Ptr &poly) const
Get a polyhedron containing the starting point of the cylinder (its "base").
void addVisibleSectionAtEnd()
Adds another visible section at the end of the cylinder.
bool getFirstVisibleSectionPose(mrpt::poses::CPose3D &p)
Gets the axis pose of the first visible section, returning false if there is no such pose.
mrpt::math::CMatrixTemplate< mrpt::math::TPoint3D > pointsMesh
Mutable object with the cylinder's points, used to avoid repeated computations.
std::vector< mrpt::math::TPolygonWithPlane > polys
Mutable set of data used in ray tracing.
std::shared_ptr< CGeneralizedCylinder > Ptr
TQuadrilateral()
Empty constructor.
size_t getNumberOfSections() const
Get the number of sections in this cylinder.
void removeVisibleSectionAtStart()
Removes a visible section from the start of the currently visible set.
size_t firstSection
First visible section, if fullyVisible is set to false.
bool isClosed() const
Returns true if each section is a closed polygon.
void getAxis(std::vector< mrpt::math::TPoint3D > &a) const
Get axis's spatial coordinates.
double normal[3]
Normal vector.
void setAllSectionsVisible()
Sets all sections visible.
GLubyte GLubyte GLubyte a
void getMeshIterators(const std::vector< TQuadrilateral > &m, std::vector< TQuadrilateral >::const_iterator &begin, std::vector< TQuadrilateral >::const_iterator &end) const
Given a vector of polyhedrons, gets the starting and ending iterators to the section to be actually r...
Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST | |