42 #include <visp/vpConfig.h>
44 #ifndef DOXYGEN_SHOULD_SKIP_THIS
54 #include <visp/vpMy.h>
55 #include <visp/vpArit.h>
56 #include <visp/vpView.h>
57 #include <visp/vpVwstack.h>
63 static View_parameters stack[STACKSIZE]= { vpDEFAULT_VIEW };
64 static View_parameters *sp = stack;
75 fprintf_vwstack (FILE *fp,
char *argv)
77 static char proc_name[] =
"fprintf_vwstack";
79 if (argv == NULL || strcmp (argv,
"type") == 0) {
87 typetoa =
"perspective";
93 fprintf (fp,
"(type\t%s)\n", typetoa);
94 if (argv != NULL)
return;
96 if (argv == NULL || strcmp (argv,
"cop") == 0) {
97 fprintf (fp,
"(cop\t%.3f\t%.3f\t%.3f)\n",
98 sp->cop.x, sp->cop.y, sp->cop.z);
99 if (argv != NULL)
return;
101 if (argv == NULL || strcmp (argv,
"vrp") == 0) {
102 fprintf (fp,
"(vrp\t%.3f\t%.3f\t%.3f)\n",
103 sp->vrp.x, sp->vrp.y, sp->vrp.z);
104 if (argv != NULL)
return;
106 if (argv == NULL || strcmp (argv,
"vpn") == 0) {
107 fprintf (fp,
"(vpn\t%.3f\t%.3f\t%.3f)\n",
108 sp->vpn.x, sp->vpn.y, sp->vpn.z);
109 if (argv != NULL)
return;
111 if (argv == NULL || strcmp (argv,
"vup") == 0) {
112 fprintf (fp,
"(vup\t%.3f\t%.3f\t%.3f)\n",
113 sp->vup.x, sp->vup.y, sp->vup.z);
114 if (argv != NULL)
return;
116 if (argv == NULL || strcmp (argv,
"window") == 0) {
117 fprintf (fp,
"(window\t%.3f\t%.3f\t%.3f\t%.3f)\n",
118 sp->vwd.umin,sp->vwd.umax,sp->vwd.vmin,sp->vwd.vmax);
119 if (argv != NULL)
return;
121 if (argv == NULL || strcmp (argv,
"depth") == 0) {
122 fprintf (fp,
"(depth\t%.3f\t%.3f)\n",
123 sp->depth.front, sp->depth.back);
124 if (argv != NULL)
return;
127 fprintf (stderr,
"%s: argument unknown\n", proc_name);
149 load_vwstack (View_parameters *vp)
161 static char proc_name[] =
"pop_vwstack";
164 fprintf (stderr,
"%s: stack underflow\n", proc_name);
177 static char proc_name[] =
"push_vwstack";
179 if (sp == stack + STACKSIZE - 1) {
180 fprintf (stderr,
"%s: stack overflow\n", proc_name);
194 View_parameters *vp, tmp;
196 vp = (sp == stack) ? sp + 1 : sp - 1;
208 add_vwstack (
const char* path, ... )
212 static char proc_name[] =
"add_vwstack";
218 argv = va_arg (ap,
char *);
219 if (strcmp (argv,
"cop") == 0) {
222 (
float) va_arg (ap,
double),
223 (
float) va_arg (ap,
double),
224 (
float) va_arg (ap,
double));
226 else if (strcmp (argv,
"depth") == 0) {
228 sp->depth.front = (float) va_arg (ap,
double);
229 sp->depth.back = (float) va_arg (ap,
double);
231 else if (strcmp (argv,
"type") == 0) {
233 sp->type = (Type) va_arg (ap,
int);
235 else if (strcmp (argv,
"vpn") == 0) {
237 float x = (float) va_arg (ap,
double);
238 float y = (float) va_arg (ap,
double);
239 float z = (float) va_arg (ap,
double);
242 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())
243 fprintf (stderr,
"%s: bad vpn\n", proc_name);
245 SET_COORD3(sp->vpn,x,y,z);
248 else if (strcmp (argv,
"vrp") == 0) {
251 (
float) va_arg (ap,
double),
252 (
float) va_arg (ap,
double),
253 (
float) va_arg (ap,
double));
255 else if (strcmp (argv,
"vup") == 0) {
257 float x = (float) va_arg (ap,
double);
258 float y = (float) va_arg (ap,
double);
259 float z = (float) va_arg (ap,
double);
262 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())
263 fprintf (stderr,
"%s: bad vup\n", proc_name);
265 SET_COORD3(sp->vup,x,y,z);
268 else if (strcmp (argv,
"window") == 0) {
270 sp->vwd.umin = (float) va_arg (ap,
double);
271 sp->vwd.umax = (float) va_arg (ap,
double);
272 sp->vwd.vmin = (float) va_arg (ap,
double);
273 sp->vwd.vmax = (float) va_arg (ap,
double);
276 fprintf (stderr,
"%s: bad argument\n", proc_name);