42 #include <visp/vpConfig.h>
43 #include <visp/vpDebug.h>
49 #if (defined (VISP_HAVE_GTK) || defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_D3D9) || defined(VISP_HAVE_OPENCV))
51 #include <visp/vpImage.h>
52 #include <visp/vpImageIo.h>
53 #include <visp/vpParseArgv.h>
54 #include <visp/vpIoTools.h>
56 #include <visp/vpDisplayOpenCV.h>
57 #include <visp/vpDisplayGTK.h>
58 #include <visp/vpDisplayX.h>
59 #include <visp/vpDisplayGDI.h>
60 #include <visp/vpDisplayD3D.h>
70 #define GETOPTARGS "i:hlt:dc"
80 void usage(
const char *name,
const char *badparam, std::string ipath, vpDisplayType &dtype);
81 bool getOptions(
int argc,
const char **argv,
82 std::string &ipath, vpDisplayType &dtype,
bool &list,
83 bool &click_allowed,
bool &display );
95 void usage(
const char *name,
const char *badparam, std::string ipath, vpDisplayType &dtype)
98 Test click functionnalities in video devices or display.\n\
101 %s [-i <input image path>] \n\
102 [-t <type of video device>] [-l] [-c] [-d] [-h]\n\
107 case vpX11: display =
"X11";
break;
108 case vpGTK: display =
"GTK";
break;
109 case vpGDI: display =
"GDI";
break;
110 case vpD3D: display =
"D3D";
break;
111 case vpCV: display =
"CV";
break;
116 -i <input image path> %s\n\
117 Set image input path.\n\
118 From this path read \"ViSP-images/Klimt/Klimt.pgm\"\n\
119 and \"ViSP-images/Klimt/Klimt.ppm\" images.\n\
120 Setting the VISP_INPUT_IMAGE_PATH environment\n\
121 variable produces the same behaviour than using\n\
124 -t <type of video device> \"%s\"\n\
125 String specifying the video device to use.\n\
127 \"X11\": only on UNIX platforms,\n\
128 \"GTK\": on all plaforms,\n\
129 \"GDI\": only on Windows platform (Graphics Device Interface),\n\
130 \"D3D\": only on Windows platform (Direct3D).\n\
131 \"CV\" : (OpenCV).\n\
134 Print the list of video-devices available and exit.\n\
137 Disable the mouse click. Useful to automaze the \n\
138 execution of this program without humain intervention.\n\
141 Turn off the display.\n\
144 Print the help.\n\n",
145 ipath.c_str(), display.c_str());
148 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
169 bool getOptions(
int argc,
const char **argv,
170 std::string &ipath, vpDisplayType &dtype,
bool &list,
171 bool &click_allowed,
bool &display)
175 std::string sDisplayType;
179 case 'i': ipath = optarg_;
break;
180 case 'l': list =
true;
break;
181 case 't': sDisplayType = optarg_;
183 if (sDisplayType.compare(
"X11") == 0) {
186 else if (sDisplayType.compare(
"GTK") == 0) {
189 else if (sDisplayType.compare(
"GDI") == 0) {
192 else if (sDisplayType.compare(
"D3D") == 0) {
195 else if (sDisplayType.compare(
"CV") == 0) {
200 case 'h': usage(argv[0], NULL, ipath, dtype);
return false;
break;
201 case 'c': click_allowed =
false;
break;
202 case 'd': display =
false;
break;
205 usage(argv[0], optarg_, ipath, dtype);
return false;
break;
210 if ((c == 1) || (c == -1)) {
212 usage(argv[0], NULL, ipath, dtype);
213 std::cerr <<
"ERROR: " << std::endl;
214 std::cerr <<
" Bad argument " << optarg_ << std::endl << std::endl;
222 main(
int argc,
const char ** argv)
225 std::string env_ipath;
226 std::string opt_ipath;
227 bool opt_list =
false;
228 vpDisplayType opt_dtype;
230 std::string filename;
231 bool opt_click_allowed =
true;
232 bool opt_display =
true;
235 #if defined VISP_HAVE_GTK
237 #elif defined VISP_HAVE_X11
239 #elif defined VISP_HAVE_GDI
241 #elif defined VISP_HAVE_D3D9
243 #elif defined VISP_HAVE_OPENCV
251 if (! env_ipath.empty())
255 if (getOptions(argc, argv, opt_ipath, opt_dtype, opt_list,
256 opt_click_allowed, opt_display) ==
false) {
262 unsigned nbDevices = 0;
263 std::cout <<
"List of video-devices available: \n";
264 #if defined VISP_HAVE_GTK
265 std::cout <<
" GTK (use \"-t GTK\" option to use it)\n";
268 #if defined VISP_HAVE_X11
269 std::cout <<
" X11 (use \"-t X11\" option to use it)\n";
272 #if defined VISP_HAVE_GDI
273 std::cout <<
" GDI (use \"-t GDI\" option to use it)\n";
276 #if defined VISP_HAVE_D3D9
277 std::cout <<
" D3D (use \"-t D3D\" option to use it)\n";
280 #if defined VISP_HAVE_OPENCV
281 std::cout <<
" CV (use \"-t CV\" option to use it)\n";
285 std::cout <<
" No display is available\n";
292 if (!opt_ipath.empty())
297 if (!opt_ipath.empty() && !env_ipath.empty()) {
298 if (ipath != env_ipath) {
299 std::cout << std::endl
300 <<
"WARNING: " << std::endl;
301 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
302 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
303 <<
" we skip the environment variable." << std::endl;
308 if (opt_ipath.empty() && env_ipath.empty()){
309 usage(argv[0], NULL, ipath, opt_dtype);
310 std::cerr << std::endl
311 <<
"ERROR:" << std::endl;
312 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
314 <<
" environment variable to specify the location of the " << std::endl
315 <<
" image path where test images are located." << std::endl << std::endl;
324 vpCTRACE <<
"Load " << filename << std::endl;
332 std::cout <<
"Requested X11 display functionnalities..." << std::endl;
333 #if defined VISP_HAVE_X11
336 std::cout <<
" Sorry, X11 video device is not available.\n";
337 std::cout <<
"Use \"" << argv[0]
338 <<
" -l\" to print the list of available devices.\n";
343 std::cout <<
"Requested GTK display functionnalities..." << std::endl;
344 #if defined VISP_HAVE_GTK
347 std::cout <<
" Sorry, GTK video device is not available.\n";
348 std::cout <<
"Use \"" << argv[0]
349 <<
" -l\" to print the list of available devices.\n";
354 std::cout <<
"Requested GDI display functionnalities..." << std::endl;
355 #if defined VISP_HAVE_GDI
358 std::cout <<
" Sorry, GDI video device is not available.\n";
359 std::cout <<
"Use \"" << argv[0]
360 <<
" -l\" to print the list of available devices.\n";
365 std::cout <<
"Requested D3D display functionnalities..." << std::endl;
366 #if defined VISP_HAVE_D3D9
369 std::cout <<
" Sorry, D3D video device is not available.\n";
370 std::cout <<
"Use \"" << argv[0]
371 <<
" -l\" to print the list of available devices.\n";
376 std::cout <<
"Requested OpenCV display functionnalities..." << std::endl;
377 #if defined(VISP_HAVE_OPENCV)
380 std::cout <<
" Sorry, OpenCV video device is not available.\n";
381 std::cout <<
"Use \"" << argv[0]
382 <<
" -l\" to print the list of available devices.\n";
392 display->
init(I, 100, 100,
"Display...") ;
402 if ( opt_click_allowed ){
403 std::cout <<
"Click on a pixel to get his coordinates...\n";
407 std::cout <<
" You click down on pixel (" << ip <<
") ";
415 std::cout <<
" You click up on pixel (" << ip <<
") ";
423 std::cout <<
" Pointer poisition : " << ip << std::endl;
424 std::cout <<
"A click to exit...\n";
virtual void init(vpImage< unsigned char > &I, int x=-1, int y=-1, const char *title=NULL)=0
Class that defines generic functionnalities for display.
Display for windows using GDI (available on any windows 32 platform).
Define the X11 console to display images.
virtual bool getClickUp(vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)=0
static void flush(const vpImage< unsigned char > &I)
static bool parse(int *argcPtr, const char **argv, vpArgvInfo *argTable, int flags)
Display for windows using Direct3D.
virtual bool getPointerPosition(vpImagePoint &ip)=0
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the opencv library.
The vpDisplayGTK allows to display image using the GTK+ library version 1.2.
virtual bool getClick(bool blocking=true)=0
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
static void read(vpImage< unsigned char > &I, const char *filename)