2#include <visp3/core/vpConfig.h>
7#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_VISUALIZATION)
10#include <visp3/core/vpIoTools.h>
14#include "ClassUsingDisplayPCL.h"
17#ifdef ENABLE_VISP_NAMESPACE
26typedef enum DisplayMode
39std::string displayModeToString(
const DisplayMode &mode)
59DisplayMode displayModeFromString(
const std::string &name)
61 DisplayMode res = DisplayMode::MODE_COUNT;
62 bool wasFound =
false;
65 while ((i < DisplayMode::MODE_COUNT) && (!wasFound)) {
66 DisplayMode candidate = (DisplayMode)i;
67 if (lowerCaseName == displayModeToString(candidate)) {
84std::string getAvailableDisplayMode(
const std::string &prefix =
"< ",
const std::string &sep =
" , ",
const std::string &suffix =
" >")
86 std::string modes(prefix);
87 for (
unsigned int i = 0;
i < DisplayMode::MODE_COUNT - 1; ++
i) {
88 DisplayMode candidate = (DisplayMode)i;
89 modes += displayModeToString(candidate) + sep;
91 DisplayMode candidate = (DisplayMode)(DisplayMode::MODE_COUNT - 1);
92 modes += displayModeToString(candidate) + suffix;
97int main(
int argc,
char *argv[])
100 const double def_addedNoise = 0.;
101 const unsigned int def_order = 2;
102 const std::pair<double, double> def_xlim = std::pair<double, double>(-2.5, 2.5);
103 const std::pair<double, double> def_ylim = std::pair<double, double>(-2.5, 2.5);
104 const std::pair<unsigned int, unsigned int> def_reso = std::pair<unsigned int, unsigned int>(50, 50);
105 const DisplayMode def_mode = DisplayMode::MONOTHREAD;
109 double opt_addedNoise = def_addedNoise;
110 unsigned int opt_order = def_order;
111 std::pair<double, double> opt_xlim = def_xlim;
112 std::pair<double, double> opt_ylim = def_ylim;
113 std::pair<unsigned int, unsigned int> opt_reso = def_reso;
114 DisplayMode opt_mode = def_mode;
116 for (
int i = 1;
i < argc;
i++) {
117 if (std::string(argv[i]) ==
"--noise" && i + 1 < argc) {
118 opt_addedNoise = atof(argv[i + 1]);
121 else if (std::string(argv[i]) ==
"--order" && i + 1 < argc) {
122 opt_order = atoi(argv[i + 1]);
125 else if (std::string(argv[i]) ==
"--x-lim" && i + 2 < argc) {
126 opt_xlim.first = atof(argv[i + 1]);
127 opt_xlim.second = atof(argv[i + 2]);
130 else if (std::string(argv[i]) ==
"--y-lim" && i + 2 < argc) {
131 opt_ylim.first = atof(argv[i + 1]);
132 opt_ylim.second = atof(argv[i + 2]);
135 else if (std::string(argv[i]) ==
"--reso" && i + 2 < argc) {
136 opt_reso.first = atoi(argv[i + 1]);
137 opt_reso.second = atoi(argv[i + 2]);
140 else if (std::string(argv[i]) ==
"--display-mode" && i + 1 < argc) {
141 opt_mode = displayModeFromString(std::string(argv[i + 1]));
144 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
146 std::cout <<
"NAME" << std::endl;
147 std::cout <<
"\t" << argv[0] <<
" Test programm for the PCL-based point-cloud visualizer." << std::endl
149 std::cout <<
"SYNOPSIS" << std::endl;
150 std::cout <<
"\t" << argv[0]
151 <<
"\t[--noise <stdev_noise>] (default: " + std::to_string(def_addedNoise) <<
")\n"
152 <<
"\t[--order <surface-order>](default: " + std::to_string(def_order) <<
")\n"
153 <<
"\t[--x-lim <xmin xmax>](default: [" + std::to_string(def_xlim.first) +
";" + std::to_string(def_xlim.second) <<
"])\n"
154 <<
"\t[--y-lim <ymin ymax>](default: [" + std::to_string(def_ylim.first) +
";" + std::to_string(def_ylim.second) <<
"])\n"
155 <<
"\t[--reso <x_resolution y_resolution>](default: [" + std::to_string(def_reso.first) +
";" + std::to_string(def_reso.second) <<
"])\n"
156 <<
"\t[--display-mode " << getAvailableDisplayMode() <<
"](default: " << displayModeToString(def_mode) <<
")\n"
157 <<
"\t[--help] [-h]" << std::endl
163 std::cerr <<
"Option '" << argv[
i] <<
"' is not known. Please run '" << argv[0] <<
" --help' to have the list of options." << std::endl;
169 std::cout <<
"Parameters:" << std::endl;
170 std::cout <<
"\tSurface order: " << opt_order << std::endl;
171 std::cout <<
"\tX-axis limits: [" << opt_xlim.first <<
" ; " << opt_xlim.first <<
"]" << std::endl;
172 std::cout <<
"\tY-axis limits: [" << opt_ylim.first <<
" ; " << opt_ylim.first <<
"]" << std::endl;
173 std::cout <<
"\tGrid resolution: [" << opt_reso.first <<
" x " << opt_reso.first <<
"]" << std::endl;
174 std::cout <<
"\tNoise standard deviation: " << opt_addedNoise << std::endl;
175 std::cout <<
"\tDisplay mode: " << displayModeToString(opt_mode) << std::endl;
179 if (opt_mode == DisplayMode::THREADED) {
180 useMonothread =
false;
183 demo.runDemo(opt_addedNoise, opt_order, useMonothread);
187 if (opt_mode == DisplayMode::MONOTHREAD) {
188 useMonothread =
true;
191 demo.runDemo(opt_addedNoise, opt_order, useMonothread);
201 std::cout <<
"ViSP seems to have been compiled without PCL visualization module." << std::endl;
202 std::cout <<
"Please install PCL visualization module and recompile ViSP." << std::endl;