28 float xmin,
float ymin,
float zmin,
float xmax,
float ymax,
float zmax,
29 float frecuency,
float lineWidth,
bool marks)
36 m_frequency(frecuency),
37 m_lineWidth(lineWidth)
43 m_textRot[0][0] = 180.f;
44 m_textRot[0][1] = 0.f;
45 m_textRot[0][2] = 90.f;
47 m_textRot[1][0] = 90.f;
48 m_textRot[1][1] = 0.f;
49 m_textRot[1][2] = 90.f;
51 m_textRot[2][0] = 180.f;
52 m_textRot[2][1] = 0.f;
53 m_textRot[2][2] = 90.f;
64 #if MRPT_HAS_OPENGL_GLUT 78 glColor4ub(m_color.R, m_color.G, m_color.B, m_color.A);
99 const float ml = m_markLen * m_frequency;
102 const std::array<mrpt::math::TPoint3Df, 3> init_trans = {
103 {{m_xmin, .0f, ml}, {.0f, m_ymin, ml}, {.0f, .0f, m_zmin}}};
104 const std::array<std::array<float, 2>, 3> xyz_ranges = {
105 {{m_xmin, m_xmax}, {m_ymin, m_ymax}, {m_zmin, m_zmax}}};
106 const std::array<mrpt::math::TPoint3Df, 3> tick0 = {
107 {{0, -ml, -ml}, {-ml, .0f, -ml}, {-ml, .0f, .0f}}};
108 const std::array<mrpt::math::TPoint3Df, 3> tick1 = {
109 {{0, ml, -ml}, {ml, .0f, -ml}, {ml, .0f, .0f}}};
110 const std::array<mrpt::math::TPoint3Df, 3> endMark = {
111 {{m_xmax + 1.0f * m_frequency, 0, 0},
112 {0, m_ymax + .5f * m_frequency, 0},
113 {0, 0, m_zmax + 0.5f * m_frequency}}};
114 const std::array<const char*, 3> axis2name = {{
"+X",
"+Y",
"+Z"}};
116 for (
int axis = 0; axis < 3; axis++)
118 if (!m_marks[axis])
continue;
121 const auto& tf = init_trans[axis];
123 for (
float i = xyz_ranges[axis][0]; i <= xyz_ranges[axis][1];
127 if (axis == 0 || std::abs(i) > 1e-4)
143 axis == 0 ? m_frequency : 0, axis == 1 ? m_frequency : 0,
144 axis == 2 ? m_frequency : 0);
167 writeToStreamRender(out);
168 out << m_xmin << m_ymin << m_zmin;
169 out << m_xmax << m_ymax << m_zmax;
170 out << m_frequency << m_lineWidth;
172 out << m_marks[0] << m_marks[1] << m_marks[2] << m_textScale;
173 for (
auto i : m_textRot)
174 for (
int j = 0; j < 3; j++) out << i[j];
187 readFromStreamRender(
in);
188 in >> m_xmin >> m_ymin >> m_zmin;
189 in >> m_xmax >> m_ymax >> m_zmax;
190 in >> m_frequency >> m_lineWidth;
193 in >> m_marks[0] >> m_marks[1] >> m_marks[2] >> m_textScale;
194 for (
auto& i : m_textRot)
195 for (
int j = 0; j < 3; j++) in >> i[j];
204 if (version >= 2)
in >> m_markLen;
262 float xmin,
float ymin,
float zmin,
float xmax,
float ymax,
float zmax)
273 int axis,
float yaw_deg,
float pitch_deg,
float roll_deg)
275 ASSERT_(axis >= 0 && axis < 3);
276 m_textRot[axis][0] = yaw_deg;
277 m_textRot[axis][1] = pitch_deg;
278 m_textRot[axis][2] = roll_deg;
281 int axis,
float& yaw_deg,
float& pitch_deg,
float& roll_deg)
const 283 ASSERT_(axis >= 0 && axis < 3);
284 yaw_deg = m_textRot[axis][0];
285 pitch_deg = m_textRot[axis][1];
286 roll_deg = m_textRot[axis][2];
float getFrequency() const
void notifyChange() const
Must be called to notify that the object has changed (so, the display list must be updated) ...
GLAPI void GLAPIENTRY glEnable(GLenum cap)
#define IMPLEMENTS_SERIALIZABLE(class_name, base, NameSpace)
To be added to all CSerializable-classes implementation files.
GLAPI void GLAPIENTRY glPopMatrix(void)
void serializeTo(mrpt::serialization::CArchive &out) const override
Pure virtual method for writing (serializing) to an abstract archive.
mrpt::img::TPixelCoordf glDrawText(const std::string &text, const double textScale, enum TOpenGLFontStyle style=NICE, double spacing=1.5, double kerning=0.1)
renders a string in GL using the current settings.
#define GL_ONE_MINUS_SRC_ALPHA
GLAPI void GLAPIENTRY glLineWidth(GLfloat width)
GLubyte GLubyte GLubyte GLubyte w
GLAPI void GLAPIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
A renderizable object suitable for rendering with OpenGL's display lists.
#define MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(__V)
For use in CSerializable implementations.
float getTextScale() const
#define ASSERT_(f)
Defines an assertion mechanism.
void enableTickMarks(bool v=true)
void setLineWidth(float w)
void render_dl() const override
Render.
GLAPI void GLAPIENTRY glBegin(GLenum mode)
void getTextLabelOrientation(int axis, float &yaw_deg, float &pitch_deg, float &roll_deg) const
axis: {0,1,2}=>{X,Y,Z}
GLAPI void GLAPIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z)
GLAPI void GLAPIENTRY glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
GLAPI void GLAPIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
void setTextLabelOrientation(int axis, float yaw_deg, float pitch_deg, float roll_deg)
axis: {0,1,2}=>{X,Y,Z}
float getLineWidth() const
void setTickMarksLength(float len)
As a ratio of "marks frequency" (default: 0.05)
Virtual base class for "archives": classes abstracting I/O streams.
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...
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
Draw a 3D world axis, with coordinate marks at some regular interval.
renders glyphs filled with antialiased outlines
void setFrequency(float f)
Changes the frequency of the "ticks".
The namespace for 3D scene representation and rendering.
GLAPI void GLAPIENTRY glEnd(void)
GLAPI void GLAPIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
GLAPI void GLAPIENTRY glPushMatrix(void)
void setAxisLimits(float xmin, float ymin, float zmin, float xmax, float ymax, float zmax)
renders glyphs as filled polygons
GLAPI void GLAPIENTRY glDisable(GLenum cap)
void setTextScale(float f)
Changes the size of text labels (default:0.25)
void serializeFrom(mrpt::serialization::CArchive &in, uint8_t serial_version) override
Pure virtual method for reading (deserializing) from an abstract archive.
int sprintf(char *buf, size_t bufSize, const char *format,...) noexcept MRPT_printf_format_check(3
An OS-independent version of sprintf (Notice the bufSize param, which may be ignored in some compiler...
uint8_t serializeGetVersion() const override
Must return the current versioning number of the object.