Visual Servoing Platform  version 3.6.1 under development (2024-05-27)
vpDisplayX.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4  *
5  * This software is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See https://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Image display.
32  */
33 
34 #ifndef vpDisplayX_h
35 #define vpDisplayX_h
36 
37 #include <visp3/core/vpConfig.h>
38 #ifdef VISP_HAVE_X11
39 #include <visp3/core/vpDisplay.h>
40 #include <visp3/core/vpImage.h>
41 #include <visp3/core/vpRect.h>
42 
127 class VISP_EXPORT vpDisplayX : public vpDisplay
128 {
129  // private:
130  //#ifndef DOXYGEN_SHOULD_SKIP_THIS
131  // vpDisplayX(const vpDisplayX &)
132  // : vpDisplay(), display(nullptr), window(), Ximage(nullptr), lut(),
133  // context(), screen(), event(), pixmap(),
134  // x_color(nullptr), screen_depth(8), xcolor(), values(),
135  // ximage_data_init(false), RMask(0), GMask(0), BMask(0), RShift(0),
136  // GShift(0), BShift(0)
137  // {
138  // throw vpException(vpException::functionNotImplementedError, "Not
139  // implemented!");
140  // }
141  // vpDisplayX &operator=(const vpDisplayX &){
142  // throw vpException(vpException::functionNotImplementedError, "Not
143  // implemented!"); return *this;
144  // }
145  //#endif
146 
147 public:
148  vpDisplayX();
149  vpDisplayX(int winx, int winy, const std::string &title = "");
151  vpDisplayX(vpImage<unsigned char> &I, int winx = -1, int winy = -1, const std::string &title = "",
152  vpScaleType type = SCALE_DEFAULT);
154  vpDisplayX(vpImage<vpRGBa> &I, int winx = -1, int winy = -1, const std::string &title = "",
155  vpScaleType type = SCALE_DEFAULT);
156 
157  virtual ~vpDisplayX() vp_override;
158 
159  void getImage(vpImage<vpRGBa> &I) vp_override;
160  unsigned int getScreenDepth();
161  unsigned int getScreenHeight() vp_override;
162  void getScreenSize(unsigned int &width, unsigned int &height) vp_override;
163  unsigned int getScreenWidth() vp_override;
164 
165  void init(vpImage<unsigned char> &I, int win_x = -1, int win_y = -1, const std::string &win_title = "") vp_override;
166  void init(vpImage<vpRGBa> &I, int win_x = -1, int win_y = -1, const std::string &win_title = "") vp_override;
167  void init(unsigned int win_width, unsigned int win_height, int win_x = -1, int win_y = -1,
168  const std::string &win_title = "") vp_override;
169 
170 protected:
171  void clearDisplay(const vpColor &color = vpColor::white) vp_override;
172 
173  void closeDisplay() vp_override;
174 
175  void displayArrow(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color = vpColor::white,
176  unsigned int w = 4, unsigned int h = 2, unsigned int thickness = 1) vp_override;
177 
178  void displayCircle(const vpImagePoint &center, unsigned int radius, const vpColor &color, bool fill = false,
179  unsigned int thickness = 1) vp_override;
180  void displayCross(const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness = 1) vp_override;
181  void displayDotLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color,
182  unsigned int thickness = 1) vp_override;
183 
184  void displayImage(const vpImage<unsigned char> &I) vp_override;
185  void displayImage(const vpImage<vpRGBa> &I) vp_override;
186  void displayImage(const unsigned char *I);
187 
188  void displayImageROI(const vpImage<unsigned char> &I, const vpImagePoint &iP, unsigned int width,
189  unsigned int height) vp_override;
190  void displayImageROI(const vpImage<vpRGBa> &I, const vpImagePoint &iP, unsigned int width, unsigned int height) vp_override;
191 
192  void displayLine(const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness = 1) vp_override;
193  void displayPoint(const vpImagePoint &ip, const vpColor &color, unsigned int thickness = 1) vp_override;
194 
195  void displayRectangle(const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color,
196  bool fill = false, unsigned int thickness = 1) vp_override;
197  void displayRectangle(const vpImagePoint &topLeft, const vpImagePoint &bottomRight, const vpColor &color,
198  bool fill = false, unsigned int thickness = 1) vp_override;
199  void displayRectangle(const vpRect &rectangle, const vpColor &color, bool fill = false, unsigned int thickness = 1) vp_override;
200 
201  void displayText(const vpImagePoint &ip, const std::string &text, const vpColor &color = vpColor::green) vp_override;
202 
203  void flushDisplay() vp_override;
204  void flushDisplayROI(const vpImagePoint &iP, unsigned int width, unsigned int height) vp_override;
205 
206  bool getClick(bool blocking = true) vp_override;
207  bool getClick(vpImagePoint &ip, bool blocking = true) vp_override;
208  bool getClick(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking = true) vp_override;
209  bool getClickUp(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking = true) vp_override;
210 
211  bool getKeyboardEvent(bool blocking = true) vp_override;
212  bool getKeyboardEvent(std::string &key, bool blocking = true) vp_override;
213 
214  bool getPointerMotionEvent(vpImagePoint &ip) vp_override;
215  bool getPointerPosition(vpImagePoint &ip) vp_override;
216 
217  void setFont(const std::string &font) vp_override;
218  void setTitle(const std::string &title) vp_override;
219  void setWindowPosition(int win_x, int win_y) vp_override;
220 
221 private:
222  // Implementation
223  class Impl;
224  Impl *m_impl;
225 };
226 
227 #endif
228 #endif
Class to define RGB colors available for display functionalities.
Definition: vpColor.h:152
static const vpColor white
Definition: vpColor.h:206
static const vpColor green
Definition: vpColor.h:214
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
Definition: vpDisplayX.h:128
Class that defines generic functionalities for display.
Definition: vpDisplay.h:173
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void displayCircle(const vpImage< unsigned char > &I, const vpImageCircle &circle, const vpColor &color, bool fill=false, unsigned int thickness=1)
static bool getKeyboardEvent(const vpImage< unsigned char > &I, bool blocking=true)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static void getImage(const vpImage< unsigned char > &Is, vpImage< vpRGBa > &Id)
Definition: vpDisplay.cpp:138
static bool getClickUp(const vpImage< unsigned char > &I, vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void setTitle(const vpImage< unsigned char > &I, const std::string &windowtitle)
static void displayArrow(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color=vpColor::white, unsigned int w=4, unsigned int h=2, unsigned int thickness=1)
static void displayPoint(const vpImage< unsigned char > &I, const vpImagePoint &ip, const vpColor &color, unsigned int thickness=1)
static void setFont(const vpImage< unsigned char > &I, const std::string &font)
static void displayDotLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1)
static bool getPointerPosition(const vpImage< unsigned char > &I, vpImagePoint &ip)
static bool getPointerMotionEvent(const vpImage< unsigned char > &I, vpImagePoint &ip)
static void displayRectangle(const vpImage< unsigned char > &I, const vpImagePoint &topLeft, unsigned int width, unsigned int height, const vpColor &color, bool fill=false, unsigned int thickness=1)
static void setWindowPosition(const vpImage< unsigned char > &I, int winx, int winy)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:82
Defines a rectangle in the plane.
Definition: vpRect.h:76