Main MRPT website > C++ reference for MRPT 1.4.0
CCanvas.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-2016, 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 CCanvas_H
10#define CCanvas_H
11
13#include <mrpt/utils/TColor.h>
15
16namespace mrpt
17{
18 namespace utils
19 {
20 class CImage;
21
22 /** This virtual class defines the interface of any object accepting drawing primitives on it.
23 *
24 * A number of text fonts can be selected with CCanvas::selectTextFont(). These are the
25 * implemented font names:
26 *
27 * - "6x13"
28 * - "6x13B" (bold)
29 * - "6x13O" (italic)
30 * - "9x15"
31 * - "9x15B" (bold)
32 * - "10x20"
33 * - "18x18ja" (Japanese, UNICODE character values)
34 *
35 * For an example of each font check the <a href="http://www.mrpt.org/Implemented_2D_Fonts">corresponding wiki page</a>.
36 *
37 * \sa CImage
38 * \ingroup mrpt_base_grp
39 */
41 {
42 protected:
43 std::string m_selectedFont; //!< The selected font name.
44
45 const uint32_t *m_selectedFontBitmaps; //!< Direct access to character bitmaps.
46
47 public:
48
50
51 /** Definition of pen styles
52 */
54 {
55 psSolid = 0,
56 psDash, /* ------- */
57 psDot, /* ....... */
58 psDashDot, /* _._._._ */
59 psDashDotDot /* _.._.._ */
60 };
61
62 /** Dummy virtual destructor:
63 */
64 virtual ~CCanvas()
65 {
66 }
67
68 /** Changes the value of the pixel (x,y).
69 * Pixel coordinates starts at the left-top corner of the image, and start in (0,0).
70 * The meaning of the parameter "color" depends on the implementation: it will usually
71 * be a 24bit RGB value (0x00RRGGBB), but it can also be just a 8bit gray level.
72 *
73 * You can also use a TColor() type as input and it will be automatically converted to size_t.
74 *
75 * This method must support (x,y) values OUT of the actual image size without neither
76 * raising exceptions, nor leading to memory access errors.
77 *
78 */
79 virtual void setPixel( int x, int y, size_t color) =0;
80
81 /** Returns the width of the image in pixels
82 */
83 virtual size_t getWidth() const = 0;
84
85 /** Returns the height of the image in pixels
86 */
87 virtual size_t getHeight() const = 0;
88
89 /** Draws a line.
90 * \param x0 The starting point x coordinate
91 * \param y0 The starting point y coordinate
92 * \param x1 The end point x coordinate
93 * \param y1 The end point y coordinate
94 * \param color The color of the line
95 * \param width The desired width of the line (this is IGNORED in this virtual class)
96 * This method may be redefined in some classes implementing this interface in a more appropiate manner.
97 */
98 virtual void line(
99 int x0,
100 int y0,
101 int x1,
102 int y1,
103 const mrpt::utils::TColor color,
104 unsigned int width = 1,
105 TPenStyle penStyle = psSolid);
106
107 /** Draws a rectangle (an empty rectangle, without filling)
108 * \param x0 The top-left x coordinate
109 * \param y0 The top-left y coordinate
110 * \param x1 The right-bottom x coordinate
111 * \param y1 The right-bottom y coordinate
112 * \param color The color of the line
113 * \param width The desired width of the line.
114 * \sa filledRectangle
115 */
117 int x0,
118 int y0,
119 int x1,
120 int y1,
121 const mrpt::utils::TColor color,
122 unsigned int width = 1 );
123
124 /*****************************************************AJOGD***************************************************/
125 /** Draws a triangle
126 * \param x0 The triangle center x coordinate
127 * \param y0 The triangle center y coordinate
128 * \param size The size of the triangle
129 * \param color The color of the line
130 * \param inferior The position of the triangle
131 * \param width The desired width of the line.
132 * \sa triangle
133 */
135 int x0,
136 int y0,
137 int size,
138 const mrpt::utils::TColor color,
139 bool inferior = true,
140 unsigned int width = 1 );
141 /************************************************************************************************************/
142
143 /** Draws a filled rectangle.
144 * \param x0 The top-left x coordinate
145 * \param y0 The top-left y coordinate
146 * \param x1 The right-bottom x coordinate
147 * \param y1 The right-bottom y coordinate
148 * \param color The color of the rectangle fill
149 * This method may be redefined in some classes implementing this interface in a more appropiate manner.
150 * \sa rectangle
151 */
152 virtual void filledRectangle(
153 int x0,
154 int y0,
155 int x1,
156 int y1,
157 const mrpt::utils::TColor color
158 );
159
160 /** Renders 2D text using bitmap fonts.
161 * \param x0 The x coordinates
162 * \param y0 The y coordinates
163 * \param str The string to put. If using UNICODE characters, use UTF-8 encoding.
164 * \param color The text color
165 *
166 * \sa selectTextFont
167 */
168 virtual void textOut(
169 int x0,
170 int y0,
171 const std::string &str,
172 const mrpt::utils::TColor color
173 );
174
175 /** Select the current font used when drawing text.
176 * \param fontName The name of the font
177 *
178 * Valid font names:
179 * - 5x7
180 * - 6x13
181 * - 6x13B
182 * - 6x13O
183 * - 9x15 (Default at start-up)
184 * - 9x15B
185 * - 10x20
186 * - 18x18ja (Asian characters for UTF-8 strings - Only available if MRPT is built with MRPT_HAS_ASIAN_FONTS = true)
187 *
188 * <img src="sample_textFonts.png" >
189 *
190 * \sa textOut, The example in <a href="http://www.mrpt.org/Implemented_2D_Fonts">this page</a>.
191 */
192 virtual void selectTextFont( const std::string &fontName );
193
194 /** Draws an image as a bitmap at a given position.
195 * \param x0 The top-left corner x coordinates on this canvas where the image is to be drawn
196 * \param y0 The top-left corner y coordinates on this canvas where the image is to be drawn
197 * \param img The image to be drawn in this canvas
198 * This method may be redefined in some classes implementing this interface in a more appropiate manner.
199 */
200 virtual void drawImage(
201 int x,
202 int y,
203 const utils::CImage &img );
204
205 /** Draw a cross.
206 * \param x0 The point x coordinate
207 * \param y0 The point y coordinate
208 * \param color The color of the cross
209 * \param size The size of the cross
210 * \param type The cross type. It could be: 'x', '+' or ':'(like '+' but clear at the center dot)
211 * \param width The desired width of the cross (this is IGNORED yet)
212 */
213 void cross (int x0,int y0, const mrpt::utils::TColor color,char type, unsigned int size=5, unsigned int width = 1);
214
215 /** Draws an image as a bitmap at a given position, with some custom scale and rotation changes.
216 * \param x0 The top-left corner x coordinates on this canvas where the image is to be drawn
217 * \param y0 The top-left corner y coordinates on this canvas where the image is to be drawn
218 * \param rotation The rotation in radians, positive values being anti-clockwise direction, 0 is the normal position.
219 * \param scale The scale factor, e.g. 2 means twice the original size.
220 * \param img The image to be drawn in this canvas
221 * This method may be redefined in some classes implementing this interface in a more appropiate manner.
222 */
223 virtual void drawImage(
224 int x,
225 int y,
226 const utils::CImage &img,
227 float rotation,
228 float scale );
229
230 /** Draws a circle of a given radius.
231 * \param x The center - x coordinate in pixels.
232 * \param y The center - y coordinate in pixels.
233 * \param radius The radius - in pixels.
234 * \param color The color of the circle.
235 * \param width The desired width of the line (this is IGNORED in this virtual class)
236 */
237 virtual void drawCircle(
238 int x,
239 int y,
240 int radius,
241 const mrpt::utils::TColor &color = mrpt::utils::TColor(255,255,255),
242 unsigned int width = 1 );
243
244 /** Draws an ellipse representing a given confidence interval of a 2D Gaussian distribution.
245 * \param mean_x The x coordinate of the center point of the ellipse.
246 * \param mean_y The y coordinate of the center point of the ellipse.
247 * \param cov2D A 2x2 covariance matrix.
248 * \param confIntervalStds How many "sigmas" for the confidence level (i.e. 2->95%, 3=99.97%,...)
249 * \param color The color of the ellipse
250 * \param width The desired width of the line (this is IGNORED in this virtual class)
251 * \param nEllipsePoints The number of points to generate to approximate the ellipse shape.
252 * \exception std::exception On an invalid matrix.
253 */
254 template <class MATRIX2X2>
256 const MATRIX2X2 *cov2D,
257 const double mean_x,
258 const double mean_y,
259 double confIntervalStds = 2,
260 const mrpt::utils::TColor &color = mrpt::utils::TColor(255,255,255),
261 unsigned int width = 1,
262 int nEllipsePoints = 20
263 )
264 {
266 int x1=0,y1=0,x2=0,y2=0;
267 double ang;
268 MATRIX2X2 eigVal,eigVec;
269 int i;
270
271 // Compute the eigen-vectors & values:
272 cov2D->eigenVectors(eigVec,eigVal);
273
274 eigVal = eigVal.array().sqrt().matrix();
275 MATRIX2X2 M;
276 M.multiply_ABt(eigVal, eigVec);
277
278 // Compute the points of the 2D ellipse:
279 for (i=0,ang=0;i<nEllipsePoints;i++,ang+= (M_2PI/(nEllipsePoints-1)))
280 {
281 double ccos = cos(ang);
282 double ssin = sin(ang);
283
284 x2 = round( mean_x + confIntervalStds * (ccos * M(0,0) + ssin * M(1,0)) );
285 y2 = round( mean_y + confIntervalStds * (ccos * M(0,1) + ssin * M(1,1)) );
286
287 if (i>0)
288 line( x1, y1,x2, y2,color,width );
289
290 x1 = x2;
291 y1 = y2;
292 } // end for points on ellipse
293
295 std::cout << "Covariance matrix leading to error is:" << std::endl << *cov2D << std::endl; \
296 );
297 }
298
299 /** Draws a set of marks onto the image, given a generic container of entities having just "x" and "y" fields.
300 * The class of FEATURELIST can be, for example, std::vector<mrpt::math::TPoint2D>, std::vector<TPixelCoordsf> or mrpt::vision::CFeatureList
301 * \sa drawFeatures
302 */
303 template <class FEATURELIST>
304 void drawFeaturesSimple( const FEATURELIST &list, const TColor &color = TColor::red, const int cross_size = 5 )
305 {
306 for(size_t i=0;i<list.size(); ++i )
307 {
308 const int x = round( list.getFeatureX(i) );
309 const int y = round( list.getFeatureY(i) );
310 this->cross( x,y, color, '+', cross_size );
311 }
312 }
313
314 /** Draws a set of marks (or scaled circles for features with scale) onto the image, given a generic container of features.
315 * The class of FEATURELIST can be:
316 * - mrpt::vision::CFeatureList
317 * - mrpt::vision::TSimpleFeatureList
318 *
319 * \sa drawFeaturesSimple
320 */
321 template <class FEATURELIST>
322 void drawFeatures( const FEATURELIST &list, const TColor &color = TColor::red, const bool showIDs = false, const bool showResponse = false )
323 {
324 for(size_t i=0;i<list.size(); ++i )
325 {
326 const int x = round( list.getFeatureX(i) );
327 const int y = round( list.getFeatureY(i) );
328 this->cross(x,y, color, '+' );
329 if( showIDs ) this->textOut(x,y, format("%u", static_cast<unsigned int>(list.getFeatureID(i))), TColor::red );
330 if (showResponse) this->textOut( x,y+10, format("R:%u", static_cast<unsigned int>(list.getFeatureResponse(i))), TColor::red );
331 if( ! list.isPointFeature(i) ) this->drawCircle(x,y, list.getScale(i), TColor::red );
332 }
333 }
334 }; // End of class
335
336 } // end of namespace utils
337
338} // end of namespace mrpt
339
340#endif
This virtual class defines the interface of any object accepting drawing primitives on it.
Definition: CCanvas.h:41
void cross(int x0, int y0, const mrpt::utils::TColor color, char type, unsigned int size=5, unsigned int width=1)
Draw a cross.
virtual void selectTextFont(const std::string &fontName)
Select the current font used when drawing text.
TPenStyle
Definition of pen styles.
Definition: CCanvas.h:54
virtual void filledRectangle(int x0, int y0, int x1, int y1, const mrpt::utils::TColor color)
Draws a filled rectangle.
virtual size_t getWidth() const =0
Returns the width of the image in pixels.
void ellipseGaussian(const MATRIX2X2 *cov2D, const double mean_x, const double mean_y, double confIntervalStds=2, const mrpt::utils::TColor &color=mrpt::utils::TColor(255, 255, 255), unsigned int width=1, int nEllipsePoints=20)
Draws an ellipse representing a given confidence interval of a 2D Gaussian distribution.
Definition: CCanvas.h:255
virtual void setPixel(int x, int y, size_t color)=0
Changes the value of the pixel (x,y).
virtual void textOut(int x0, int y0, const std::string &str, const mrpt::utils::TColor color)
Renders 2D text using bitmap fonts.
virtual void drawImage(int x, int y, const utils::CImage &img)
Draws an image as a bitmap at a given position.
const uint32_t * m_selectedFontBitmaps
Direct access to character bitmaps.
Definition: CCanvas.h:45
virtual void drawImage(int x, int y, const utils::CImage &img, float rotation, float scale)
Draws an image as a bitmap at a given position, with some custom scale and rotation changes.
virtual void drawCircle(int x, int y, int radius, const mrpt::utils::TColor &color=mrpt::utils::TColor(255, 255, 255), unsigned int width=1)
Draws a circle of a given radius.
void rectangle(int x0, int y0, int x1, int y1, const mrpt::utils::TColor color, unsigned int width=1)
Draws a rectangle (an empty rectangle, without filling)
void drawFeaturesSimple(const FEATURELIST &list, const TColor &color=TColor::red, const int cross_size=5)
Draws a set of marks onto the image, given a generic container of entities having just "x" and "y" fi...
Definition: CCanvas.h:304
virtual size_t getHeight() const =0
Returns the height of the image in pixels.
virtual ~CCanvas()
Dummy virtual destructor:
Definition: CCanvas.h:64
virtual void line(int x0, int y0, int x1, int y1, const mrpt::utils::TColor color, unsigned int width=1, TPenStyle penStyle=psSolid)
Draws a line.
void drawFeatures(const FEATURELIST &list, const TColor &color=TColor::red, const bool showIDs=false, const bool showResponse=false)
Draws a set of marks (or scaled circles for features with scale) onto the image, given a generic cont...
Definition: CCanvas.h:322
std::string m_selectedFont
The selected font name.
Definition: CCanvas.h:43
void triangle(int x0, int y0, int size, const mrpt::utils::TColor color, bool inferior=true, unsigned int width=1)
Draws a triangle.
A class for storing images as grayscale or RGB bitmaps.
Definition: CImage.h:102
int round(const T value)
Returns the closer integer (int) to x.
Definition: round.h:26
#define MRPT_START
Definition: mrpt_macros.h:349
#define M_2PI
Definition: mrpt_macros.h:363
#define MRPT_END_WITH_CLEAN_UP(stuff)
Definition: mrpt_macros.h:356
class BASE_IMPEXP CImage
Definition: CImage.h:52
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
std::string BASE_IMPEXP format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
unsigned long uint32_t
Definition: pstdint.h:216
A RGB color - 8bit.
Definition: TColor.h:26



Page generated by Doxygen 1.9.6 for MRPT 1.4.0 SVN: at Fri Jan 20 00:13:14 UTC 2023