39 #include <visp3/core/vpConfig.h>
41 #ifndef DOXYGEN_SHOULD_SKIP_THIS
51 #include <visp3/robot/vpMy.h>
52 #include <visp3/robot/vpArit.h>
53 #include <visp3/robot/vpView.h>
54 #include <visp3/robot/vpVwstack.h>
60 static View_parameters stack[STACKSIZE]= { vpDEFAULT_VIEW };
61 static View_parameters *sp = stack;
72 fprintf_vwstack (FILE *fp,
char *argv)
74 static char proc_name[] =
"fprintf_vwstack";
76 if (argv == NULL || strcmp (argv,
"type") == 0) {
84 typetoa =
"perspective";
90 fprintf (fp,
"(type\t%s)\n", typetoa);
91 if (argv != NULL)
return;
93 if (argv == NULL || strcmp (argv,
"cop") == 0) {
94 fprintf (fp,
"(cop\t%.3f\t%.3f\t%.3f)\n",
95 sp->cop.x, sp->cop.y, sp->cop.z);
96 if (argv != NULL)
return;
98 if (argv == NULL || strcmp (argv,
"vrp") == 0) {
99 fprintf (fp,
"(vrp\t%.3f\t%.3f\t%.3f)\n",
100 sp->vrp.x, sp->vrp.y, sp->vrp.z);
101 if (argv != NULL)
return;
103 if (argv == NULL || strcmp (argv,
"vpn") == 0) {
104 fprintf (fp,
"(vpn\t%.3f\t%.3f\t%.3f)\n",
105 sp->vpn.x, sp->vpn.y, sp->vpn.z);
106 if (argv != NULL)
return;
108 if (argv == NULL || strcmp (argv,
"vup") == 0) {
109 fprintf (fp,
"(vup\t%.3f\t%.3f\t%.3f)\n",
110 sp->vup.x, sp->vup.y, sp->vup.z);
111 if (argv != NULL)
return;
113 if (argv == NULL || strcmp (argv,
"window") == 0) {
114 fprintf (fp,
"(window\t%.3f\t%.3f\t%.3f\t%.3f)\n",
115 sp->vwd.umin,sp->vwd.umax,sp->vwd.vmin,sp->vwd.vmax);
116 if (argv != NULL)
return;
118 if (argv == NULL || strcmp (argv,
"depth") == 0) {
119 fprintf (fp,
"(depth\t%.3f\t%.3f)\n",
120 sp->depth.front, sp->depth.back);
121 if (argv != NULL)
return;
124 fprintf (stderr,
"%s: argument unknown\n", proc_name);
146 load_vwstack (View_parameters *vp)
158 static char proc_name[] =
"pop_vwstack";
161 fprintf (stderr,
"%s: stack underflow\n", proc_name);
174 static char proc_name[] =
"push_vwstack";
176 if (sp == stack + STACKSIZE - 1) {
177 fprintf (stderr,
"%s: stack overflow\n", proc_name);
191 View_parameters *vp, tmp;
193 vp = (sp == stack) ? sp + 1 : sp - 1;
205 add_vwstack (
const char* path, ... )
209 static char proc_name[] =
"add_vwstack";
215 argv = va_arg (ap,
char *);
216 if (strcmp (argv,
"cop") == 0) {
219 (
float) va_arg (ap,
double),
220 (
float) va_arg (ap,
double),
221 (
float) va_arg (ap,
double));
223 else if (strcmp (argv,
"depth") == 0) {
225 sp->depth.front = (float) va_arg (ap,
double);
226 sp->depth.back = (float) va_arg (ap,
double);
228 else if (strcmp (argv,
"type") == 0) {
230 sp->type = (Type) va_arg (ap,
int);
232 else if (strcmp (argv,
"vpn") == 0) {
234 float x = (float) va_arg (ap,
double);
235 float y = (float) va_arg (ap,
double);
236 float z = (float) va_arg (ap,
double);
239 if (std::fabs(x) <= std::numeric_limits<double>::epsilon() && std::fabs(y) <= std::numeric_limits<double>::epsilon() && std::fabs(z) <= std::numeric_limits<double>::epsilon())
240 fprintf (stderr,
"%s: bad vpn\n", proc_name);
242 SET_COORD3(sp->vpn,x,y,z);
245 else if (strcmp (argv,
"vrp") == 0) {
248 (
float) va_arg (ap,
double),
249 (
float) va_arg (ap,
double),
250 (
float) va_arg (ap,
double));
252 else if (strcmp (argv,
"vup") == 0) {
254 float x = (float) va_arg (ap,
double);
255 float y = (float) va_arg (ap,
double);
256 float z = (float) va_arg (ap,
double);
259 if (std::fabs(x) <= std::numeric_limits<double>::epsilon() && std::fabs(y) <= std::numeric_limits<double>::epsilon() && std::fabs(z) <= std::numeric_limits<double>::epsilon())
260 fprintf (stderr,
"%s: bad vup\n", proc_name);
262 SET_COORD3(sp->vup,x,y,z);
265 else if (strcmp (argv,
"window") == 0) {
267 sp->vwd.umin = (float) va_arg (ap,
double);
268 sp->vwd.umax = (float) va_arg (ap,
double);
269 sp->vwd.vmin = (float) va_arg (ap,
double);
270 sp->vwd.vmax = (float) va_arg (ap,
double);
273 fprintf (stderr,
"%s: bad argument\n", proc_name);