31 #include "DGtal/io/boards/Board3DTo2D.h"
38 #include <cairo-pdf.h>
40 #include <cairo-svg.h>
71 out <<
"[Board3DTo2D]";
90 static void TransposeMt(
double tmat[16],
double mat[16])
92 tmat[0] = mat[0]; tmat[1] = mat[4]; tmat[2] = mat[8]; tmat[3] = mat[12];
93 tmat[4] = mat[1]; tmat[5] = mat[5]; tmat[6] = mat[9]; tmat[7] = mat[13];
94 tmat[8] = mat[2]; tmat[9] = mat[6]; tmat[10] = mat[10]; tmat[11] = mat[14];
95 tmat[12] = mat[3]; tmat[13] = mat[7]; tmat[14] = mat[11]; tmat[15] = mat[15];
104 static void MulMt(
double v[4],
double mat[16],
double b[4])
106 v[0] = mat[0] * b[0] + mat[1] * b[1] + mat[2] * b[2] + mat[3] * b[3];
107 v[1] = mat[4] * b[0] + mat[5] * b[1] + mat[6] * b[2] + mat[7] * b[3];
108 v[2] = mat[8] * b[0] + mat[9] * b[1] + mat[10] * b[2] + mat[11] * b[3];
109 v[3] = mat[12] * b[0] + mat[13] * b[1] + mat[14] * b[2] + mat[15] * b[3];
125 static void LookAtMt(
double mat[16],
126 double eyex,
double eyey,
double eyez,
127 double dirx,
double diry,
double dirz,
128 double upx,
double upy,
double upz)
130 double up[3]; up[0]= upx; up[1]= upy; up[2]= upz;
132 double z[3]; z[0]= -dirx; z[1]= -diry; z[2]= -dirz; normalize(z);
133 double x[3]; cross (x, up, z); normalize(x);
134 double y[3]; cross (y, z, x); normalize(y);
137 m[0] = x[0]; m[1] = x[1]; m[2] = x[2]; m[3] = 0;
138 m[4] = y[0]; m[5] = y[1]; m[6] = y[2]; m[7] = 0;
139 m[8] = z[0]; m[9] = z[1]; m[10] = z[2]; m[11] = 0;
140 m[12] = 0; m[13] = 0; m[14] = 0; m[15] = 1;
142 double e[4]; e[0]= -eyex; e[1]= -eyey; e[2]= -eyez; e[3]= 1;
143 double eyePrime[4]; MulMt(eyePrime, m, e);
146 mat[12] = eyePrime[0]; mat[13] = eyePrime[1]; mat[14] = eyePrime[2];
164 double fieldOfView =
M_PI/4.;
165 double f = 1.0/tan(fieldOfView/2.0);
166 double aspectRatio = (double)Viewport[2]/Viewport[3];
168 double Projection[16] = { f/aspectRatio, 0.00, 0.00, 0.00,
170 0.00, 0.00, (ZNear + ZFar) / (ZNear - ZFar), -1.00,
171 0.00, 0.00, 2.0 * ZNear * ZFar / (ZNear - ZFar), 0.00 };
173 double Modelview[16];
175 camera_position[0], camera_position[1], camera_position[2],
176 camera_direction[0], camera_direction[1], camera_direction[2],
177 camera_upVector[0], camera_upVector[1], camera_upVector[2]);
179 for (
unsigned short m=0; m<4; ++m)
181 for (
unsigned short l=0; l<4; ++l)
184 for (
unsigned short k=0; k<4; ++k)
185 sum += Projection[l+4*k]*Modelview[k+4*m];
202 v[0]=x3d; v[1]=y3d; v[2]=z3d; v[3]=1.0;
204 vs[0]=matrix[0 ]*v[0] + matrix[4 ]*v[1] + matrix[8 ]*v[2] + matrix[12 ]*v[3];
205 vs[1]=matrix[1 ]*v[0] + matrix[5 ]*v[1] + matrix[9 ]*v[2] + matrix[13 ]*v[3];
206 vs[2]=matrix[2 ]*v[0] + matrix[6 ]*v[1] + matrix[10]*v[2] + matrix[14 ]*v[3];
207 vs[3]=matrix[3 ]*v[0] + matrix[7 ]*v[1] + matrix[11]*v[2] + matrix[15 ]*v[3];
213 vs[0] = vs[0] * 0.5 + 0.5;
214 vs[1] = vs[1] * 0.5 + 0.5;
215 vs[2] = vs[2] * 0.5 + 0.5;
217 vs[0] = vs[0] * Viewport[2] + Viewport[0];
218 vs[1] = vs[1] * Viewport[3] + Viewport[1];
221 y2d = Viewport[3]-vs[1];
234 for(
unsigned int i =0; i< myClippingPlaneList.size(); i++)
235 trace.
info() <<
"-> ClippingPlane not implemented in Board3DTo2D" << std::endl;
237 Viewport[0] = 0; Viewport[1] = 0; Viewport[2] = bWidth; Viewport[3] = bHeight;
238 precompute_projection_matrix();
240 cairo_surface_t *surface;
246 surface = cairo_pdf_surface_create (filename, Viewport[2], Viewport[3]);
break;
248 surface = cairo_ps_surface_create (filename, Viewport[2], Viewport[3]);
break;
250 surface = cairo_ps_surface_create (filename, Viewport[2], Viewport[3]);
251 cairo_ps_surface_set_eps(surface,
true);
break;
253 surface = cairo_svg_surface_create (filename, Viewport[2], Viewport[3]);
break;
256 surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, Viewport[2], Viewport[3]);
259 cr = cairo_create (surface);
262 cairo_set_source_rgba (cr, .3, .3, .3, 1.);
263 cairo_rectangle (cr, 0, 0, Viewport[2], Viewport[3]);
269 for(
unsigned int i=0; i<myPointSetList.size(); i++)
271 for (std::vector<pointD3D>::iterator s_it = myPointSetList.at(i).begin();
272 s_it != myPointSetList.at(i).end();
278 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/255.0);
279 cairo_set_line_width (cr, 1.);
281 double x1, y1, x2, y2, x3, y3, x4, y4;
290 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
291 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
292 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x3, y3);
293 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x4, y4);
294 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
296 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x1, y1);
297 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x2, y2);
298 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
299 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
300 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
302 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x1, y1);
303 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
304 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
305 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x4, y4);
306 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
308 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
309 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x2, y2);
310 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x3, y3);
311 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
312 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
314 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
315 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
316 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
317 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x4, y4);
318 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
320 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
321 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x2, y2);
322 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
323 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
324 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
332 for(
unsigned int i=0; i<myLineSetList.size(); i++)
334 for (std::vector<lineD3D>::iterator s_it = myLineSetList.at(i).begin();
335 s_it != myLineSetList.at(i).end();
341 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/255.0);
345 project((*s_it).x1, (*s_it).y1, (*s_it).z1, x1, y1);
346 project((*s_it).x2, (*s_it).y2, (*s_it).z2, x2, y2);
347 cairo_move_to (cr, x1, y1);
348 cairo_line_to (cr, x2, y2);
351 cairo_set_line_width (cr, 1.);
361 for(
unsigned int i=0; i<myVoxelSetList.size(); i++)
363 for (std::vector<voxelD3D>::iterator s_it = myVoxelSetList.at(i).begin();
364 s_it != myVoxelSetList.at(i).end();
370 if (myModes[
"Board3DTo2D"]==
"SolidMode")
371 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/(255.0*1.75));
373 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/(255.0*0.75));
375 cairo_set_line_width (cr, 1.);
377 double x1, y1, x2, y2, x3, y3, x4, y4;
378 double width=(*s_it).width;
381 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
382 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
383 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x3, y3);
384 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x4, y4);
385 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
387 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x1, y1);
388 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x2, y2);
389 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
390 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
391 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
393 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x1, y1);
394 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
395 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
396 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x4, y4);
397 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
399 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
400 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x2, y2);
401 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x3, y3);
402 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
403 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
405 project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
406 project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
407 project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
408 project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x4, y4);
409 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
411 project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
412 project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x2, y2);
413 project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
414 project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
415 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
422 for(
unsigned int i=0; i<myQuadList.size(); i++)
423 trace.
info() <<
"-> Quad not YET implemented in Board3DTo2D" << std::endl;
428 for (std::vector<quadD3D>::iterator s_it = myKSSurfelList.begin();
429 s_it != myKSSurfelList.end();
435 if (myModes[
"Board3DTo2D"]==
"SolidMode")
436 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/(255.0*3.75));
438 cairo_set_source_rgba (cr, (*s_it).R/255.0, (*s_it).G/255.0, (*s_it).B/255.0, (*s_it).T/(255.0*0.75));
440 cairo_set_line_width (cr, 1.);
442 double x1, y1, x2, y2, x3, y3, x4, y4;
444 project((*s_it).x1, (*s_it).y1, (*s_it).z1, x1, y1);
445 project((*s_it).x2, (*s_it).y2, (*s_it).z2, x2, y2);
446 project((*s_it).x3, (*s_it).y3, (*s_it).z3, x3, y3);
447 project((*s_it).x4, (*s_it).y4, (*s_it).z4, x4, y4);
448 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
455 for(
unsigned int i=0; i< myKSLinelList.size();i++)
462 cairo_set_source_rgba (cr, myKSLinelList.at(i).R/255.0, myKSLinelList.at(i).G/255.0, myKSLinelList.at(i).B/255.0, myKSLinelList.at(i).T/255.0);
463 cairo_set_line_width (cr, 4.);
465 double x1, y1, x2, y2;
467 project(myKSLinelList.at(i).x1, myKSLinelList.at(i).y1, myKSLinelList.at(i).z1, x1, y1);
468 project(myKSLinelList.at(i).x2, myKSLinelList.at(i).y2, myKSLinelList.at(i).z2, x2, y2);
469 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_close_path (cr); cairo_stroke (cr);
477 for(
unsigned int i=0; i< myKSPointelList.size();i++)
484 cairo_set_source_rgba (cr, myKSPointelList.at(i).R/255.0, myKSPointelList.at(i).G/255.0, myKSPointelList.at(i).B/255.0, myKSPointelList.at(i).T/255.0);
485 cairo_set_line_width (cr, 1.);
487 double x1, y1, x2, y2, x3, y3, x4, y4;
492 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x1, y1);
493 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
494 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x3, y3);
495 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x4, y4);
496 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
498 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x1, y1);
499 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x2, y2);
500 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x3, y3);
501 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
502 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
504 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
505 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
506 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
507 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
508 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
510 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
511 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
512 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
513 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
514 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
516 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x1, y1);
517 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
518 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
519 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x4, y4);
520 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
522 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
523 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x2, y2);
524 project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x3, y3);
525 project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
526 cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_line_to (cr, x3, y3); cairo_line_to (cr, x4, y4); cairo_line_to (cr, x1, y1); cairo_close_path (cr); myModes[
"Board3DTo2D"]==
"SolidMode"?cairo_fill (cr):cairo_stroke (cr);
534 cairo_surface_write_to_png (surface, filename);
537 cairo_surface_destroy (surface);
546 createNewVoxelList(
true);
548 vector<lineD3D> listeLine;
549 myLineSetList.push_back(listeLine);
551 vector<pointD3D> listePoint;
552 myPointSetList.push_back(listePoint);
564 camera_position[0] = 5.000000; camera_position[1] = 5.000000; camera_position[2] = 29.893368;
565 camera_direction[0] = 0.000000; camera_direction[1] = 0.000000; camera_direction[2] = -1.000000;
566 camera_upVector[0] = 0.000000; camera_upVector[1] = 1.000000; camera_upVector[2] = 0.000000;
573 myModes[
"Board3DTo2D"]=
"SolidMode";