Main MRPT website > C++ reference for MRPT 1.9.9
CSetOfTriangles.h
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 #ifndef opengl_CSetOfTriangles_H
10 #define opengl_CSetOfTriangles_H
11 
13 #include <mrpt/math/geometry.h>
14 
15 namespace mrpt
16 {
17 namespace opengl
18 {
19 /** A set of colored triangles.
20  * This class can be used to draw any solid, arbitrarily complex object
21  * (without textures).
22  * \sa opengl::COpenGLScene, CSetOfTexturedTriangles
23  * \ingroup mrpt_opengl_grp
24  */
26 {
28  public:
29  /**
30  * Triangle definition. Each vertex has three spatial coordinates and four
31  * color values.
32  */
33  struct TTriangle
34  {
35  inline TTriangle()
36  {
37  for (size_t i = 0; i < 3; i++)
38  {
39  r[i] = g[i] = b[i] = a[i] = 1.0f;
40  }
41  }
43  {
44  ASSERT_(p.size() == 3);
45  for (size_t i = 0; i < 3; i++)
46  {
47  x[i] = p[i].x;
48  y[i] = p[i].y;
49  z[i] = p[i].z;
50  r[i] = g[i] = b[i] = a[i] = 1.0f;
51  }
52  }
53  float x[3], y[3], z[3];
54  float r[3], g[3], b[3], a[3];
55  };
58  std::vector<TTriangle>::const_reverse_iterator;
59 
60  protected:
61  /**
62  * List of triangles.
63  * \sa TTriangle
64  */
65  std::vector<TTriangle> m_triangles;
66  /**
67  * Transparency enabling.
68  */
70  /**
71  * Mutable variable used to check whether polygons need to be recalculated.
72  */
73  mutable bool polygonsUpToDate;
74  /**
75  * Polygon cache.
76  */
77  mutable std::vector<mrpt::math::TPolygonWithPlane> tmpPolygons;
78 
79  public:
80  /**
81  * Polygon cache updating.
82  */
83  void updatePolygons() const;
84  /**
85  * Clear this object.
86  */
87  inline void clearTriangles()
88  {
89  m_triangles.clear();
90  polygonsUpToDate = false;
92  }
93  /**
94  * Get triangle count.
95  */
96  inline size_t getTrianglesCount() const { return m_triangles.size(); }
97  /**
98  * Gets the triangle in a given position.
99  */
100  inline void getTriangle(size_t idx, TTriangle& t) const
101  {
102  ASSERT_(idx < m_triangles.size());
103  t = m_triangles[idx];
104  }
105  /**
106  * Inserts a triangle into the set.
107  */
108  inline void insertTriangle(const TTriangle& t)
109  {
110  m_triangles.push_back(t);
111  polygonsUpToDate = false;
113  }
114  /**
115  * Inserts a set of triangles, bounded by iterators, into this set.
116  * \sa insertTriangle
117  */
118  template <class InputIterator>
119  inline void insertTriangles(
120  const InputIterator& begin, const InputIterator& end)
121  {
122  m_triangles.insert(m_triangles.end(), begin, end);
123  polygonsUpToDate = false;
125  }
126  /**
127  * Inserts an existing CSetOfTriangles into this one.
128  */
130  /**
131  * Reserves memory for certain number of triangles, avoiding multiple
132  * memory allocation calls.
133  */
134  inline void reserve(size_t t)
135  {
136  m_triangles.reserve(t);
138  }
139 
140  /** Enables or disables transparency. */
141  inline void enableTransparency(bool v)
142  {
145  }
146 
147  CRenderizable& setColor_u8(const mrpt::img::TColor& c) override;
148  CRenderizable& setColorR_u8(const uint8_t r) override;
149  CRenderizable& setColorG_u8(const uint8_t g) override;
150  CRenderizable& setColorB_u8(const uint8_t b) override;
151  CRenderizable& setColorA_u8(const uint8_t a) override;
152 
153  /** Render
154  */
155  void render_dl() const override;
156 
157  /** Ray tracing
158  */
159  bool traceRay(const mrpt::poses::CPose3D& o, double& dist) const override;
160 
161  /**
162  * Gets the polygon cache.
163  * \sa insertTriangles
164  */
165  void getPolygons(std::vector<mrpt::math::TPolygon3D>& polys) const;
166 
167  /**
168  * Inserts a set of triangles, given in a container of either TTriangle's
169  * or TPolygon3D
170  * \sa insertTriangle
171  */
172  template <class CONTAINER>
173  inline void insertTriangles(const CONTAINER& c)
174  {
175  this->insertTriangles(c.begin(), c.end());
177  }
178 
179  /**
180  * Gets the beginning iterator to this object.
181  */
182  inline const_iterator begin() const { return m_triangles.begin(); }
183  /**
184  * Gets the ending iterator to this object.
185  */
186  inline const_iterator end() const { return m_triangles.end(); }
187  /**
188  * Gets the reverse beginning iterator to this object, which points to the
189  * last triangle.
190  */
192  {
193  return m_triangles.rbegin();
194  }
195  /**
196  * Gets the reverse ending iterator to this object, which points to the
197  * beginning of the actual set.
198  */
199  inline const_reverse_iterator rend() const { return m_triangles.rend(); }
200  /** Evaluates the bounding box of this object (including possible children)
201  * in the coordinate frame of the object parent. */
202  void getBoundingBox(
203  mrpt::math::TPoint3D& bb_min,
204  mrpt::math::TPoint3D& bb_max) const override;
205 
206  /** Constructor
207  */
209  : m_triangles(),
211  polygonsUpToDate(false)
212  {
213  }
214 
215  /** Private, virtual destructor: only can be deleted from smart pointers */
216  virtual ~CSetOfTriangles() {}
217 };
218 /** Inserts a set of triangles into the list; note that this method allows to
219  * pass another CSetOfTriangles as argument. Allows call chaining.
220  * \sa mrpt::opengl::CSetOfTriangles::insertTriangle
221  */
222 template <class T>
224 {
225  s->insertTriangles(t.begin(), t.end());
226  return s;
227 }
228 /** Inserts a triangle into the list. Allows call chaining.
229  * \sa mrpt::opengl::CSetOfTriangles::insertTriangle
230  */
231 template <>
234 {
235  s->insertTriangle(t);
236  return s;
237 }
238 
239 } // namespace opengl
240 
241 } // namespace mrpt
242 
243 #endif
mrpt::opengl::CSetOfTriangles::render_dl
void render_dl() const override
Render.
Definition: CSetOfTriangles.cpp:29
mrpt::opengl::CSetOfTriangles::TTriangle
Triangle definition.
Definition: CSetOfTriangles.h:33
const_iterator
const Scalar * const_iterator
Definition: eigen_plugins.h:27
mrpt::opengl::CSetOfTriangles::m_enableTransparency
bool m_enableTransparency
Transparency enabling.
Definition: CSetOfTriangles.h:69
mrpt::opengl::CSetOfTriangles::insertTriangles
void insertTriangles(const InputIterator &begin, const InputIterator &end)
Inserts a set of triangles, bounded by iterators, into this set.
Definition: CSetOfTriangles.h:119
s
GLdouble s
Definition: glext.h:3676
geometry.h
t
GLdouble GLdouble t
Definition: glext.h:3689
mrpt::opengl::CSetOfTriangles
A set of colored triangles.
Definition: CSetOfTriangles.h:25
mrpt::opengl::CSetOfTriangles::traceRay
bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const override
Ray tracing.
Definition: CSetOfTriangles.cpp:145
CRenderizableDisplayList.h
mrpt::opengl::CRenderizable
The base class of 3D objects that can be directly rendered through OpenGL.
Definition: CRenderizable.h:43
c
const GLubyte * c
Definition: glext.h:6313
end
GLuint GLuint end
Definition: glext.h:3528
mrpt::opengl::CSetOfTriangles::setColorR_u8
CRenderizable & setColorR_u8(const uint8_t r) override
Color components in the range [0,255].
Definition: CSetOfTriangles.cpp:300
mrpt::opengl::CRenderizableDisplayList
A renderizable object suitable for rendering with OpenGL's display lists.
Definition: CRenderizableDisplayList.h:39
mrpt::opengl::CSetOfTriangles::const_reverse_iterator
std::vector< TTriangle >::const_reverse_iterator const_reverse_iterator
Definition: CSetOfTriangles.h:58
mrpt::opengl::CRenderizableDisplayList::notifyChange
EIGEN_STRONG_INLINE void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated)
Definition: CRenderizableDisplayList.h:57
mrpt::opengl::CSetOfTriangles::end
const_iterator end() const
Gets the ending iterator to this object.
Definition: CSetOfTriangles.h:186
mrpt
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Definition: CKalmanFilterCapable.h:30
g
GLubyte g
Definition: glext.h:6279
uint8_t
unsigned char uint8_t
Definition: rptypes.h:41
mrpt::opengl::CSetOfTriangles::insertTriangles
void insertTriangles(const CONTAINER &c)
Inserts a set of triangles, given in a container of either TTriangle's or TPolygon3D.
Definition: CSetOfTriangles.h:173
ASSERT_
#define ASSERT_(f)
Defines an assertion mechanism.
Definition: exceptions.h:113
p
GLfloat GLfloat p
Definition: glext.h:6305
mrpt::opengl::CSetOfTriangles::getBoundingBox
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...
Definition: CSetOfTriangles.cpp:370
mrpt::opengl::CSetOfTriangles::TTriangle::TTriangle
TTriangle(const mrpt::math::TPolygon3D &p)
Definition: CSetOfTriangles.h:42
mrpt::opengl::CSetOfTriangles::updatePolygons
void updatePolygons() const
Polygon cache updating.
Definition: CSetOfTriangles.cpp:352
mrpt::opengl::CSetOfTriangles::insertTriangle
void insertTriangle(const TTriangle &t)
Inserts a triangle into the set.
Definition: CSetOfTriangles.h:108
mrpt::opengl::CSetOfTriangles::clearTriangles
void clearTriangles()
Clear this object.
Definition: CSetOfTriangles.h:87
mrpt::opengl::CSetOfTriangles::setColor_u8
CRenderizable & setColor_u8(const mrpt::img::TColor &c) override
Changes the default object color.
Definition: CSetOfTriangles.cpp:283
v
const GLdouble * v
Definition: glext.h:3678
mrpt::opengl::CSetOfTriangles::enableTransparency
void enableTransparency(bool v)
Enables or disables transparency.
Definition: CSetOfTriangles.h:141
r
GLdouble GLdouble GLdouble r
Definition: glext.h:3705
mrpt::opengl::CSetOfTriangles::polygonsUpToDate
bool polygonsUpToDate
Mutable variable used to check whether polygons need to be recalculated.
Definition: CSetOfTriangles.h:73
mrpt::opengl::CSetOfTriangles::CSetOfTriangles
CSetOfTriangles(bool enableTransparency=false)
Constructor.
Definition: CSetOfTriangles.h:208
mrpt::opengl::CSetOfTriangles::setColorB_u8
CRenderizable & setColorB_u8(const uint8_t b) override
Color components in the range [0,255].
Definition: CSetOfTriangles.cpp:322
mrpt::poses::CPose3D
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
Definition: CPose3D.h:88
b
GLubyte GLubyte b
Definition: glext.h:6279
mrpt::opengl::CSetOfTriangles::setColorA_u8
CRenderizable & setColorA_u8(const uint8_t a) override
Color components in the range [0,255].
Definition: CSetOfTriangles.cpp:333
mrpt::opengl::CSetOfTriangles::rbegin
const_reverse_iterator rbegin() const
Gets the reverse beginning iterator to this object, which points to the last triangle.
Definition: CSetOfTriangles.h:191
mrpt::img::TColor
A RGB color - 8bit.
Definition: TColor.h:22
mrpt::math::TPolygon3D
3D polygon, inheriting from std::vector<TPoint3D>
Definition: lightweight_geom_data.h:1458
mrpt::opengl::CSetOfTriangles::Ptr
std::shared_ptr< CSetOfTriangles > Ptr
Definition: CSetOfTriangles.h:27
mrpt::opengl::CSetOfTriangles::setColorG_u8
CRenderizable & setColorG_u8(const uint8_t g) override
Color components in the range [0,255].
Definition: CSetOfTriangles.cpp:311
mrpt::opengl::operator<<
mrpt::serialization::CArchive & operator<<(mrpt::serialization::CArchive &out, const mrpt::opengl::CLight &o)
Definition: CLight.cpp:130
mrpt::math::TPoint3D
Lightweight 3D point.
Definition: lightweight_geom_data.h:378
mrpt::opengl::CSetOfTriangles::TTriangle::TTriangle
TTriangle()
Definition: CSetOfTriangles.h:35
mrpt::opengl::CSetOfTriangles::rend
const_reverse_iterator rend() const
Gets the reverse ending iterator to this object, which points to the beginning of the actual set.
Definition: CSetOfTriangles.h:199
mrpt::opengl::CSetOfTriangles::tmpPolygons
std::vector< mrpt::math::TPolygonWithPlane > tmpPolygons
Polygon cache.
Definition: CSetOfTriangles.h:77
DEFINE_SERIALIZABLE
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
Definition: CSerializable.h:102
z
GLdouble GLdouble z
Definition: glext.h:3872
mrpt::opengl::CSetOfTriangles::~CSetOfTriangles
virtual ~CSetOfTriangles()
Private, virtual destructor: only can be deleted from smart pointers.
Definition: CSetOfTriangles.h:216
mrpt::opengl::CSetOfTriangles::getTrianglesCount
size_t getTrianglesCount() const
Get triangle count.
Definition: CSetOfTriangles.h:96
mrpt::opengl::CSetOfTriangles::getPolygons
void getPolygons(std::vector< mrpt::math::TPolygon3D > &polys) const
Gets the polygon cache.
Definition: CSetOfTriangles.cpp:344
mrpt::opengl::CSetOfTriangles::const_iterator
std::vector< TTriangle >::const_iterator const_iterator
Definition: CSetOfTriangles.h:56
mrpt::opengl::CSetOfTriangles::reserve
void reserve(size_t t)
Reserves memory for certain number of triangles, avoiding multiple memory allocation calls.
Definition: CSetOfTriangles.h:134
y
GLenum GLint GLint y
Definition: glext.h:3538
mrpt::opengl::CSetOfTriangles::m_triangles
std::vector< TTriangle > m_triangles
List of triangles.
Definition: CSetOfTriangles.h:65
x
GLenum GLint x
Definition: glext.h:3538
mrpt::opengl::CSetOfTriangles::begin
const_iterator begin() const
Gets the beginning iterator to this object.
Definition: CSetOfTriangles.h:182
mrpt::opengl::CSetOfTriangles::getTriangle
void getTriangle(size_t idx, TTriangle &t) const
Gets the triangle in a given position.
Definition: CSetOfTriangles.h:100
a
GLubyte GLubyte GLubyte a
Definition: glext.h:6279



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