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
248 char *ptenv = getenv(
"VISP_INPUT_IMAGE_PATH");
253 if (! env_ipath.empty())
257 if (getOptions(argc, argv, opt_ipath, opt_dtype, opt_list,
258 opt_click_allowed, opt_display) ==
false) {
264 unsigned nbDevices = 0;
265 std::cout <<
"List of video-devices available: \n";
266 #if defined VISP_HAVE_GTK
267 std::cout <<
" GTK (use \"-t GTK\" option to use it)\n";
270 #if defined VISP_HAVE_X11
271 std::cout <<
" X11 (use \"-t X11\" option to use it)\n";
274 #if defined VISP_HAVE_GDI
275 std::cout <<
" GDI (use \"-t GDI\" option to use it)\n";
278 #if defined VISP_HAVE_D3D9
279 std::cout <<
" D3D (use \"-t D3D\" option to use it)\n";
282 #if defined VISP_HAVE_OPENCV
283 std::cout <<
" CV (use \"-t CV\" option to use it)\n";
287 std::cout <<
" No display is available\n";
294 if (!opt_ipath.empty())
299 if (!opt_ipath.empty() && !env_ipath.empty()) {
300 if (ipath != env_ipath) {
301 std::cout << std::endl
302 <<
"WARNING: " << std::endl;
303 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
304 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
305 <<
" we skip the environment variable." << std::endl;
310 if (opt_ipath.empty() && env_ipath.empty()){
311 usage(argv[0], NULL, ipath, opt_dtype);
312 std::cerr << std::endl
313 <<
"ERROR:" << std::endl;
314 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
316 <<
" environment variable to specify the location of the " << std::endl
317 <<
" image path where test images are located." << std::endl << std::endl;
326 vpCTRACE <<
"Load " << filename << std::endl;
334 std::cout <<
"Requested X11 display functionnalities..." << std::endl;
335 #if defined VISP_HAVE_X11
338 std::cout <<
" Sorry, X11 video device is not available.\n";
339 std::cout <<
"Use \"" << argv[0]
340 <<
" -l\" to print the list of available devices.\n";
345 std::cout <<
"Requested GTK display functionnalities..." << std::endl;
346 #if defined VISP_HAVE_GTK
349 std::cout <<
" Sorry, GTK video device is not available.\n";
350 std::cout <<
"Use \"" << argv[0]
351 <<
" -l\" to print the list of available devices.\n";
356 std::cout <<
"Requested GDI display functionnalities..." << std::endl;
357 #if defined VISP_HAVE_GDI
360 std::cout <<
" Sorry, GDI video device is not available.\n";
361 std::cout <<
"Use \"" << argv[0]
362 <<
" -l\" to print the list of available devices.\n";
367 std::cout <<
"Requested D3D display functionnalities..." << std::endl;
368 #if defined VISP_HAVE_D3D9
371 std::cout <<
" Sorry, D3D video device is not available.\n";
372 std::cout <<
"Use \"" << argv[0]
373 <<
" -l\" to print the list of available devices.\n";
378 std::cout <<
"Requested OpenCV display functionnalities..." << std::endl;
379 #if defined VISP_HAVE_OPENCV
382 std::cout <<
" Sorry, OpenCV video device is not available.\n";
383 std::cout <<
"Use \"" << argv[0]
384 <<
" -l\" to print the list of available devices.\n";
394 display->
init(I, 100, 100,
"Display...") ;
404 if ( opt_click_allowed ){
405 std::cout <<
"Click on a pixel to get his coordinates...\n";
409 std::cout <<
" You click down on pixel (" << ip <<
") ";
416 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)