Main MRPT website > C++ reference for MRPT 1.9.9
CDisplayWindow.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-2017, 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 CDisplayWindow_H
10 #define CDisplayWindow_H
11 
13 #include <mrpt/utils/CImage.h>
14 #include <mrpt/system/os.h>
15 #include <vector>
16 
17 namespace mrpt
18 {
19 /** Classes for creating GUI windows for 2D and 3D visualization. \ingroup
20  * mrpt_gui_grp */
21 namespace gui
22 {
23 /** This class creates a window as a graphical user interface (GUI) for
24  * displaying images to the user.
25  *
26  * For a list of supported events with the observer/observable pattern, see the
27  * discussion in mrpt::gui::CBaseGUIWindow.
28  * \ingroup mrpt_gui_grp
29  */
31 {
32  public:
33  using Ptr = std::shared_ptr<CDisplayWindow>;
34  using ConstPtr = std::shared_ptr<const CDisplayWindow>;
35 
36  protected:
37  /** Enables or disables the visualization of cursor coordinates on the
38  * window caption.
39  */
41 
42  public:
43  /** Constructor
44  */
46  const std::string& windowCaption = std::string(),
47  unsigned int initWidth = 400, unsigned int initHeight = 400);
48 
49  /** Class factory returning a smart pointer */
51  const std::string& windowCaption, unsigned int initWidth = 400,
52  unsigned int initHeight = 400);
53 
54  /** Destructor
55  */
56  virtual ~CDisplayWindow();
57 
58  /** Gets the last x,y pixel coordinates of the mouse. \return False if the
59  * window is closed. */
60  virtual bool getLastMousePosition(int& x, int& y) const override;
61 
62  /** Set cursor style to default (cursorIsCross=false) or to a cross
63  * (cursorIsCross=true) */
64  virtual void setCursorCross(bool cursorIsCross) override;
65 
66  /** Show a given color or grayscale image on the window and print a set of
67  * points on it.
68  * It adapts the size of the window to that of the image.
69  */
70  void showImageAndPoints(
74  const bool& showNumbers = false);
75  /** \overload */
76  void showImageAndPoints(
77  const mrpt::utils::CImage& img, const std::vector<float>& x,
78  const std::vector<float>& y,
80  const bool& showNumbers = false);
81 
82  /** Show a given color or grayscale image on the window and print a set of
83  * points on it.
84  * It adapts the size of the window to that of the image.
85  * The class of FEATURELIST can be: mrpt::vision::CFeatureList or any STL
86  * container of entities having "x","y" and "ID" fields.
87  */
88  template <class FEATURELIST>
90  const mrpt::utils::CImage& img, const FEATURELIST& list,
92  const bool& showIDs = false)
93  {
95  mrpt::utils::CImage imgColor(1, 1, CH_RGB);
96  img.colorImage(imgColor); // Create a colorimage
97  imgColor.drawFeatures(list, color, showIDs);
98  showImage(imgColor);
99  MRPT_END
100  }
101 
102  /** Show a given color or grayscale image on the window and print a set of
103  * points on it and a set of lines splitting the image in tiles.
104  * It adapts the size of the window to that of the image.
105  * The class of FEATURELIST can be: mrpt::vision::CFeatureList
106  */
107  template <class FEATURELIST>
109  const mrpt::utils::CImage& img, const FEATURELIST& list,
111  {
112  MRPT_START
113  using mrpt::utils::TColor;
114  mrpt::utils::CImage imgColor(1, 1, 3);
115  img.colorImage(imgColor); // Create a colorimage
116 
117  // Print the 4 tile lines
118  unsigned int w = imgColor.getWidth();
119  unsigned int h = imgColor.getHeight();
120  imgColor.line(0, h / 2, w - 1, h / 2, TColor::green());
121  imgColor.line(w / 4, 0, w / 4, h, TColor::green());
122  imgColor.line(w / 2, 0, w / 2, h, TColor::green());
123  imgColor.line(3 * w / 4, 0, 3 * w / 4, h, TColor::green());
124 
125  showImageAndPoints(imgColor, list, color);
126 
127  MRPT_END
128  }
129 
130  /** Show a pair of given color or grayscale images (put together) on the
131  * window and print a set of matches on them.
132  * It adapts the size of the window to that of the image.
133  * MATCHEDLIST can be of the class: mrpt::vision::CMatchedFeatureList, or
134  * any STL container of pairs of anything having ".x" and ".y" (e.g.
135  * mrpt::math::TPoint2D)
136  */
137  template <class MATCHEDLIST>
139  const mrpt::utils::CImage& img1, const mrpt::utils::CImage& img2,
140  const MATCHEDLIST& mList,
142  bool showNumbers = false)
143  {
144  MRPT_START
145 
146  mrpt::utils::CImage imgColor;
147 
148  // img1.colorImage( imgColor ); // Create a colorimage
149  imgColor.joinImagesHorz(img1, img2);
150 
151  unsigned int w = img1.getWidth();
152  unsigned int nf = 0;
153 
154  for (typename MATCHEDLIST::const_iterator i = mList.begin();
155  i != mList.end(); ++i, ++nf)
156  {
157  imgColor.drawCircle(
158  round(i->first->x), round(i->first->y), 4, color);
159  imgColor.drawCircle(
160  round(i->second->x + w), round(i->second->y), 4, color);
161  // imgColor.line( round( i->first->x ), round( i->first->y ), round(
162  // i->second->x + w ), round( i->second->y ), color );
163  if (showNumbers)
164  {
165  char buf[15];
167  buf, 15, "%d[%u]", nf, (unsigned int)i->first->ID);
168  imgColor.textOut(
169  round(i->first->x) - 10, round(i->first->y), buf, color);
171  buf, 15, "%d[%u]", nf, (unsigned int)i->second->ID);
172  imgColor.textOut(
173  round(i->second->x + w) + 10, round(i->second->y), buf,
174  color);
175  }
176  }
177  showImage(imgColor);
178 
179  MRPT_END
180  }
181 
182  /** Show a pair of given color or grayscale images (put together) on the
183  * window and print a set of matches on them.
184  * It adapts the size of the window to that of the image.
185  * FEATURELIST can be of the class: mrpt::vision::CFeatureList
186  */
187  template <class FEATURELIST>
189  const mrpt::utils::CImage& img1, const mrpt::utils::CImage& img2,
190  const FEATURELIST& leftList, const FEATURELIST& rightList,
192  {
193  MRPT_START
194 
195  mrpt::utils::CImage imgColor;
196 
197  // img1.colorImage( imgColor ); // Create a colorimage
198  ASSERT_(leftList.size() == rightList.size());
199  imgColor.joinImagesHorz(img1, img2);
200 
201  unsigned int w = img1.getWidth();
202 
203  for (typename FEATURELIST::const_iterator iL = leftList.begin(),
204  iR = rightList.begin();
205  iL != leftList.end(); ++iL, ++iR)
206  {
207  imgColor.drawCircle(round((*iL)->x), round((*iL)->y), 4, color);
208  imgColor.drawCircle(round((*iR)->x + w), round((*iR)->y), 4, color);
209  imgColor.line(
210  round((*iL)->x), round((*iL)->y), round((*iR)->x + w),
211  round((*iR)->y), color);
212  }
213  showImage(imgColor);
214 
215  MRPT_END
216  }
217 
218  /** Show a given color or grayscale image on the window.
219  * It adapts the size of the window to that of the image.
220  */
221  void showImage(const mrpt::utils::CImage& img);
222 
223  /** Plots a graph in MATLAB-like style.
224  */
225  void plot(
227 
228  /** Plots a graph in MATLAB-like style.
229  */
230  void plot(const mrpt::math::CVectorFloat& y);
231 
232  /** Resizes the window, stretching the image to fit into the display area.
233  */
234  void resize(unsigned int width, unsigned int height) override;
235 
236  /** Changes the position of the window on the screen.
237  */
238  void setPos(int x, int y) override;
239 
240  /** Enables or disables the visualization of cursor coordinates on the
241  * window caption (default = enabled).
242  */
243  inline void enableCursorCoordinatesVisualization(bool enable)
244  {
245  m_enableCursorCoordinates = enable;
246  }
247 
248  /** Changes the window title text.
249  */
250  void setWindowTitle(const std::string& str) override;
251 
252 }; // End of class def.
253 
254 } // End of namespace
255 
256 } // End of namespace
257 
258 #endif
#define CH_RGB
Definition: CImage.h:43
The base class for GUI window classes.
This class creates a window as a graphical user interface (GUI) for displaying images to the user.
virtual void setCursorCross(bool cursorIsCross) override
Set cursor style to default (cursorIsCross=false) or to a cross (cursorIsCross=true)
virtual bool getLastMousePosition(int &x, int &y) const override
Gets the last x,y pixel coordinates of the mouse.
void showImagesAndMatchedPoints(const mrpt::utils::CImage &img1, const mrpt::utils::CImage &img2, const MATCHEDLIST &mList, const mrpt::utils::TColor &color=mrpt::utils::TColor::red(), bool showNumbers=false)
Show a pair of given color or grayscale images (put together) on the window and print a set of matche...
void setWindowTitle(const std::string &str) override
Changes the window title text.
bool m_enableCursorCoordinates
Enables or disables the visualization of cursor coordinates on the window caption.
void setPos(int x, int y) override
Changes the position of the window on the screen.
void showTiledImageAndPoints(const mrpt::utils::CImage &img, const FEATURELIST &list, const mrpt::utils::TColor &color=mrpt::utils::TColor::red())
Show a given color or grayscale image on the window and print a set of points on it and a set of line...
void showImagesAndMatchedPoints(const mrpt::utils::CImage &img1, const mrpt::utils::CImage &img2, const FEATURELIST &leftList, const FEATURELIST &rightList, const mrpt::utils::TColor &color=mrpt::utils::TColor::red())
Show a pair of given color or grayscale images (put together) on the window and print a set of matche...
std::shared_ptr< CDisplayWindow > Ptr
void plot(const mrpt::math::CVectorFloat &x, const mrpt::math::CVectorFloat &y)
Plots a graph in MATLAB-like style.
void enableCursorCoordinatesVisualization(bool enable)
Enables or disables the visualization of cursor coordinates on the window caption (default = enabled)...
std::shared_ptr< const CDisplayWindow > ConstPtr
void showImageAndPoints(const mrpt::utils::CImage &img, const mrpt::math::CVectorFloat &x, const mrpt::math::CVectorFloat &y, const mrpt::utils::TColor &color=mrpt::utils::TColor::red(), const bool &showNumbers=false)
Show a given color or grayscale image on the window and print a set of points on it.
CDisplayWindow(const std::string &windowCaption=std::string(), unsigned int initWidth=400, unsigned int initHeight=400)
Constructor.
virtual ~CDisplayWindow()
Destructor.
static CDisplayWindow::Ptr Create(const std::string &windowCaption, unsigned int initWidth=400, unsigned int initHeight=400)
Class factory returning a smart pointer.
void showImage(const mrpt::utils::CImage &img)
Show a given color or grayscale image on the window.
void showImageAndPoints(const mrpt::utils::CImage &img, const FEATURELIST &list, const mrpt::utils::TColor &color=mrpt::utils::TColor::red(), const bool &showIDs=false)
Show a given color or grayscale image on the window and print a set of points on it.
void resize(unsigned int width, unsigned int height) override
Resizes the window, stretching the image to fit into the display area.
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction.
Definition: types_math.h:70
A class for storing images as grayscale or RGB bitmaps.
Definition: CImage.h:119
void joinImagesHorz(const CImage &im1, const CImage &im2)
Joins two images side-by-side horizontally.
Definition: CImage.cpp:2451
size_t getHeight() const override
Returns the height of the image in pixels.
Definition: CImage.cpp:897
size_t getWidth() const override
Returns the width of the image in pixels.
Definition: CImage.cpp:869
void line(int x0, int y0, int x1, int y1, const mrpt::utils::TColor color, unsigned int width=1, TPenStyle penStyle=psSolid) override
Draws a line.
Definition: CImage.cpp:1304
const Scalar * const_iterator
Definition: eigen_plugins.h:27
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:4178
GLclampf green
Definition: glext.h:3525
GLuint color
Definition: glext.h:8300
GLenum GLint GLint y
Definition: glext.h:3538
GLenum GLsizei width
Definition: glext.h:3531
GLint GLvoid * img
Definition: glext.h:3763
GLenum GLint x
Definition: glext.h:3538
GLenum GLsizei GLsizei height
Definition: glext.h:3554
GLsizei const GLchar ** string
Definition: glext.h:4101
int round(const T value)
Returns the closer integer (int) to x.
Definition: round.h:25
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...
Definition: os.cpp:188
#define MRPT_START
Definition: mrpt_macros.h:425
#define ASSERT_(f)
Definition: mrpt_macros.h:309
#define MRPT_END
Definition: mrpt_macros.h:429
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A RGB color - 8bit.
Definition: TColor.h:26
static constexpr TColor red()
Predefined colors.
Definition: TColor.h:63



Page generated by Doxygen 1.9.1 for MRPT 1.9.9 Git: 63ea9d1f1 Thu Nov 23 00:06:53 2017 +0100 at mar 26 may 2026 12:19:29 CEST