54 #include <visp/vpDebug.h>
55 #include <visp/vpConfig.h>
62 #if (defined (VISP_HAVE_X11) || defined(VISP_HAVE_GTK) || defined(VISP_HAVE_GDI))
64 #include <visp/vpImage.h>
65 #include <visp/vpImageIo.h>
66 #include <visp/vpDisplayX.h>
67 #include <visp/vpDisplayGTK.h>
68 #include <visp/vpDisplayGDI.h>
69 #include <visp/vpColor.h>
71 #include <visp/vpMeEllipse.h>
72 #include <visp/vpParseArgv.h>
73 #include <visp/vpIoTools.h>
76 #define GETOPTARGS "cdi:h"
87 void usage(
const char *name,
const char *badparam, std::string ipath)
90 Test auto detection of dots using vpDot2.\n\
93 %s [-i <input image path>] [-c] [-d] [-h]\n", name);
97 -i <input image path> %s\n\
98 Set image input path.\n\
99 From this path read \"ViSP-images/circle/circle.pgm\"\n\
101 Setting the VISP_INPUT_IMAGE_PATH environment\n\
102 variable produces the same behaviour than using\n\
106 Disable the mouse click. Useful to automaze the \n\
107 execution of this program without humain intervention.\n\
110 Turn off the display.\n\
117 fprintf(stdout,
"\nERROR: Bad parameter [%s]\n", badparam);
132 bool getOptions(
int argc,
const char **argv, std::string &ipath,
133 bool &click_allowed,
bool &display)
140 case 'c': click_allowed =
false;
break;
141 case 'd': display =
false;
break;
142 case 'i': ipath = optarg;
break;
143 case 'h': usage(argv[0], NULL, ipath);
return false;
break;
146 usage(argv[0], optarg, ipath);
151 if ((c == 1) || (c == -1)) {
153 usage(argv[0], NULL, ipath);
154 std::cerr <<
"ERROR: " << std::endl;
155 std::cerr <<
" Bad argument " << optarg << std::endl << std::endl;
164 main(
int argc,
const char ** argv)
166 std::string env_ipath;
167 std::string opt_ipath;
170 std::string filename;
171 bool opt_click_allowed =
true;
172 bool opt_display =
true;
175 char *ptenv = getenv(
"VISP_INPUT_IMAGE_PATH");
180 if (! env_ipath.empty())
185 if (getOptions(argc, argv, opt_ipath, opt_click_allowed,
186 opt_display) ==
false) {
191 if (!opt_ipath.empty())
196 if (!opt_ipath.empty() && !env_ipath.empty()) {
197 if (ipath != env_ipath) {
198 std::cout << std::endl
199 <<
"WARNING: " << std::endl;
200 std::cout <<
" Since -i <visp image path=" << ipath <<
"> "
201 <<
" is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
202 <<
" we skip the environment variable." << std::endl;
207 if (opt_ipath.empty() && env_ipath.empty()){
208 usage(argv[0], NULL, ipath);
209 std::cerr << std::endl
210 <<
"ERROR:" << std::endl;
211 std::cerr <<
" Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH "
213 <<
" environment variable to specify the location of the " << std::endl
214 <<
" image path where test images are located." << std::endl << std::endl;
228 filename = dirname +
"circle.pgm";
237 vpCTRACE <<
"Load: " << filename << std::endl;
247 std::cerr << std::endl
248 <<
"ERROR:" << std::endl;
249 std::cerr <<
" Cannot read " << filename << std::endl;
250 std::cerr <<
" Check your -i " << ipath <<
" option " << std::endl
251 <<
" or VISP_INPUT_IMAGE_PATH environment variable."
258 #if defined VISP_HAVE_X11
260 #elif defined VISP_HAVE_GTK
262 #elif defined VISP_HAVE_GDI
269 display.
init(I, 100, 100,
"Display...") ;
299 if (opt_display && opt_click_allowed) {
321 std::cout <<
"Tracking on image: " << filename << std::endl;
327 if (opt_display && opt_click_allowed) {
328 std::cout <<
"A click to exit..." << std::endl;
331 std::cout <<
"------------------------------------------------------------"<<std::endl;
338 vpERROR_TRACE(
"You do not have X11, GTK or GDI display functionalities...");