#include <iostream>
#include <visp3/core/vpConfig.h>
#include <visp3/core/vpDebug.h>
#if (defined(VISP_HAVE_D3D9))
#include <visp3/gui/vpDisplayD3D.h>
#include <visp3/core/vpImage.h>
#include <visp3/core/vpIoTools.h>
#include <visp3/io/vpImageIo.h>
#include <visp3/io/vpParseArgv.h>
#define GETOPTARGS "cdi:o:h"
void usage(const char *name, const char *badparam, std::string ipath, std::string opath, std::string user)
{
fprintf(stdout, "\n\
Read an image on the disk, display it using D3D, display some\n\
features (line, circle, caracters) in overlay and finaly write \n\
the image and the overlayed features in an image on the disk\n\
\n\
SYNOPSIS\n\
%s [-i <input image path>] [-o <output image path>]\n\
[-c] [-d] [-h]\n \
", name);
fprintf(stdout, "\n\
OPTIONS: Default\n\
-i <input image path> %s\n\
Set image input path.\n\
From this path read \"Klimt/Klimt.pgm\"\n\
image.\n\
Setting the VISP_INPUT_IMAGE_PATH environment\n\
variable produces the same behaviour than using\n\
this option.\n\
\n\
-o <output image path> %s\n\
Set image output path.\n\
From this directory, creates the \"%s\"\n\
subdirectory depending on the username, where \n\
Klimt_grey.overlay.ppm output image is written.\n\
\n\
-c\n\
Disable the mouse click. Useful to automate the \n\
execution of this program without humain intervention.\n\
\n\
-d \n\
Disable the image display. This can be useful \n\
for automatic tests using the task manager under \n\
Windows.\n\
\n\
-h\n\
Print the help.\n\n", ipath.c_str(), opath.c_str(), user.c_str());
if (badparam) {
fprintf(stderr, "ERROR: \n");
fprintf(stderr, "\nBad parameter [%s]\n", badparam);
}
}
bool getOptions(int argc, const char **argv, std::string &ipath, std::string &opath, bool &click_allowed,
const std::string &user, bool &display)
{
const char *optarg;
int c;
switch (c) {
case 'c':
click_allowed = false;
break;
case 'd':
display = false;
break;
case 'i':
ipath = optarg;
break;
case 'o':
opath = optarg;
break;
case 'h':
usage(argv[0], NULL, ipath, opath, user);
return false;
break;
default:
usage(argv[0], optarg, ipath, opath, user);
return false;
break;
}
}
if ((c == 1) || (c == -1)) {
usage(argv[0], NULL, ipath, opath, user);
std::cerr << "ERROR: " << std::endl;
std::cerr << " Bad argument " << optarg << std::endl << std::endl;
return false;
}
return true;
}
int main(int argc, const char **argv)
{
try {
std::string env_ipath;
std::string opt_ipath;
std::string opt_opath;
std::string ipath;
std::string opath;
std::string filename;
std::string username;
bool opt_click_allowed = true;
bool opt_display = true;
if (!env_ipath.empty())
ipath = env_ipath;
opt_opath = "C:\\temp";
if (getOptions(argc, argv, opt_ipath, opt_opath, opt_click_allowed, username, opt_display) == false) {
exit(-1);
}
if (!opt_ipath.empty())
ipath = opt_ipath;
if (!opt_opath.empty())
opath = opt_opath;
try {
} catch (...) {
usage(argv[0], NULL, ipath, opath, username);
std::cerr << std::endl << "ERROR:" << std::endl;
std::cerr << " Cannot create " << odirname << std::endl;
std::cerr << " Check your -o " << opath << " option " << std::endl;
exit(-1);
}
}
if (!opt_ipath.empty() && !env_ipath.empty()) {
if (ipath != env_ipath) {
std::cout << std::endl << "WARNING: " << std::endl;
std::cout << " Since -i <visp image path=" << ipath << "> "
<< " is different from VISP_IMAGE_PATH=" << env_ipath << std::endl
<< " we skip the environment variable." << std::endl;
}
}
if (opt_ipath.empty() && env_ipath.empty()) {
usage(argv[0], NULL, ipath, opath, username);
std::cerr << std::endl << "ERROR:" << std::endl;
std::cerr << " Use -i <visp image path> option or set VISP_INPUT_IMAGE_PATH " << std::endl
<< " environment variable to specify the location of the " << std::endl
<< " image path where test images are located." << std::endl
<< std::endl;
exit(-1);
}
if (opt_display) {
display.
init(I, 100, 100,
"X11 display");
for (
unsigned i = 0; i < I.
getHeight(); i += 20) {
}
for (
unsigned i = 0; i < I.
getWidth(); i += 20) {
}
for (unsigned int i = 0; i < 100; i += 20) {
}
if (opt_click_allowed) {
std::cout << "\nA click to close the windows..." << std::endl;
}
}
if (opt_display) {
displayRGBa.
init(Irgba, 100, 100,
"X11 color display");
if (opt_click_allowed) {
std::cout << "\nA click to display a cross..." << std::endl;
std::cout << "Cross position: " << ip << std::endl;
} else {
std::cout << "Cross position: " << ip << std::endl;
}
if (opt_click_allowed) {
std::cout << "\nA click to exit the program..." << std::endl;
std::cout << "Bye" << std::endl;
}
}
return EXIT_SUCCESS;
std::cout << "Catch an exception: " << e << std::endl;
return EXIT_FAILURE;
}
}
#else
int main()
{
std::cout << "You do not have Direct 3D functionalities to display images..." << std::endl;
std::cout << "Tip if you are on a windows system:" << std::endl;
std::cout << "- Install Direct 3D, configure again ViSP using cmake and build again this example" << std::endl;
return EXIT_SUCCESS;
}
#endif