DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Data Fields | Protected Member Functions | Private Member Functions | Private Attributes
DGtal::Board3DTo2D Class Reference

#include <Board3DTo2D.h>

Inheritance diagram for DGtal::Board3DTo2D:
Inheritance graph
[legend]
Collaboration diagram for DGtal::Board3DTo2D:
Collaboration graph
[legend]

Public Types

enum  CairoType {
  CairoPDF, CairoPNG, CairoPS, CairoEPS,
  CairoSVG
}
- Public Types inherited from DGtal::Display3D
enum  StreamKey { addNewList, updateDisplay, shiftSurfelVisu }
typedef std::map< std::string,
std::string > 
ModeMapping
typedef std::map< std::string,
CountedPtr
< DrawableWithDisplay3D > > 
StyleMapping

Public Member Functions

 Board3DTo2D ()
 ~Board3DTo2D ()
std::string className () const
void setCameraPosition (double x, double y, double z)
void setCameraDirection (double x, double y, double z)
void setCameraUpVector (double x, double y, double z)
void setNearFar (double _near, double _far)
void saveCairo (const char *filename, CairoType type, int bWidth, int bHeight)
Board3DTo2Doperator<< (const DGtal::Color &aColor)
template<typename TDrawableWithDisplay3D >
Board3DTo2Doperator<< (const TDrawableWithDisplay3D &object)
void selfDisplay (std::ostream &out) const
bool isValid () const
- Public Member Functions inherited from DGtal::Display3D
virtual ~Display3D ()
 Display3D ()
virtual void setFillColor (DGtal::Color aColor)
virtual void setLineColor (DGtal::Color aColor)
virtual DGtal::Color getFillColor ()
virtual DGtal::Color getLineColor ()
virtual void addClippingPlane (double a, double b, double c, double d, bool drawPlane)
virtual std::string getMode (const std::string &objectName) const
virtual void createNewLineList ()
virtual void createNewPointList ()
virtual void createNewVoxelList (bool depthTest=true)
virtual void addQuad (double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4, DGtal::Color aColor)
virtual void addTriangle (double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, DGtal::Color aColor)
virtual void addPolygon (std::vector< pointD3D > vectPointsPolygon, DGtal::Color aColor)
virtual void addLine (double x1, double y1, double z1, double x2, double y2, double z2, const DGtal::Color &color=DGtal::Color(20, 20, 20, 200), double width=1.5)
virtual void addVoxel (DGtal::int64_t x, DGtal::int64_t y, DGtal::int64_t z, DGtal::Color color=DGtal::Color(220, 220, 220), double width=0.5, bool withWire=false)
virtual void addPoint (double x, double y, double z, const DGtal::Color &color=DGtal::Color(200, 20, 20), double size=40)
virtual void addKSSurfel (double x, double y, double z, bool xSurfel, bool ySurfel, bool zSurfel, double sizeShiftFactor, double positionShift=0.0, double sizeFactor=1.0, bool isSigned=false, bool aSign=true, bool basicMode=false)
virtual void addKSVoxel (int x, int y, int z, double sizeFactor=0.94)
virtual void addKSPointel (double x, double y, double z, double size=0.1, bool isSigned=false, bool aSign=true)
virtual void addKSLinel (double x1, double y1, double z1, double x2, double y2, double z2, double width=0.02, bool isSigned=false, bool aSign=true)
void updateBoundingBox (double x, double y, double z)
void exportToMesh (MeshFromPoints< Display3D::pointD3D > &aMesh) const
void setScale (float sx, float sy, float sz)

Data Fields

DGtal::Color myDefaultColor
- Data Fields inherited from DGtal::Display3D
ModeMapping myModes
StyleMapping myStyles
bool myBoundingPtEmptyTag
double myBoundingPtUp [3]
double myBoundingPtLow [3]

Protected Member Functions

virtual void init ()

Private Member Functions

void precompute_projection_matrix ()
void project (double x3d, double y3d, double z3d, double &x2d, double &y2d)

Private Attributes

int Viewport [4]
double matrix [16]
double camera_position [3]
double camera_direction [3]
double camera_upVector [3]
double ZNear
double ZFar

Additional Inherited Members

- Protected Attributes inherited from DGtal::Display3D
float myScaleX
float myScaleY
float myScaleZ
DGtal::Color myCurrentFillColor
DGtal::Color myCurrentLineColor
double myCurrentfShiftVisuKSSurfels
std::vector< std::vector
< voxelD3D > > 
myVoxelSetList
std::vector< std::vector
< lineD3D > > 
myLineSetList
std::vector< std::vector
< pointD3D > > 
myPointSetList
std::vector< clippingPlaneD3DmyClippingPlaneList
std::vector< quadD3DmyKSSurfelList
std::vector< pointD3DmyKSPointelList
std::vector< lineD3DmyKSLinelList
std::vector< quadD3DmyQuadList
std::vector< triangleD3DmyTriangleList
std::vector< polygonD3DmyPolygonList
std::vector< bool > myListVoxelDepthTest
float myMeshDefaultLineWidth

Detailed Description

Class for PDF, PNG, PS, EPS, SVG export drawings with Cairo with 3D->2D projection.

Description of class 'Board3DTo2D'

Examples:
io/boards/dgtalBoard3DTo2D-1-points.cpp, io/boards/dgtalBoard3DTo2D-2-sets.cpp, io/boards/dgtalBoard3DTo2D-2bis-sets.cpp, io/boards/dgtalBoard3DTo2D-3-objects.cpp, io/boards/dgtalBoard3DTo2D-4-modes.cpp, io/boards/dgtalBoard3DTo2D-5-custom.cpp, io/boards/dgtalBoard3DTo2D-6.cpp, and io/boards/dgtalBoard3DTo2D-KSCell.cpp.

Definition at line 66 of file Board3DTo2D.h.


Member Enumeration Documentation

Cairo type for save files.

Enumerator:
CairoPDF 
CairoPNG 
CairoPS 
CairoEPS 
CairoSVG 

Definition at line 72 of file Board3DTo2D.h.


Constructor & Destructor Documentation

DGtal::Board3DTo2D::Board3DTo2D ( )

Constructor.

Definition at line 56 of file Board3DTo2D.cpp.

{
init();
}
DGtal::Board3DTo2D::~Board3DTo2D ( )
inline

Definition at line 80 of file Board3DTo2D.h.

{};

Member Function Documentation

std::string DGtal::Board3DTo2D::className ( ) const
inline
Returns:
the style name used for drawing this object.
Examples:
io/boards/dgtalBoard3DTo2D-1-points.cpp, io/boards/dgtalBoard3DTo2D-2bis-sets.cpp, and io/boards/dgtalBoard3DTo2D-5-custom.cpp.

Definition at line 86 of file Board3DTo2D.h.

{
return "Board3DTo2D";
}
void DGtal::Board3DTo2D::init ( )
protectedvirtual

init function (should be in Constructor).

Definition at line 544 of file Board3DTo2D.cpp.

{
vector<lineD3D> listeLine;
myLineSetList.push_back(listeLine);
vector<pointD3D> listePoint;
myPointSetList.push_back(listePoint);
myCurrentFillColor = DGtal::Color (220, 220, 220);
myCurrentLineColor = DGtal::Color (22, 22, 222, 50);
/*createNewVoxelList(true);
std::vector<voxelD3D> aKSVoxelList;*/
myDefaultColor= DGtal::Color(255, 255, 255);
//
camera_position[0] = 5.000000; camera_position[1] = 5.000000; camera_position[2] = 29.893368;
camera_direction[0] = 0.000000; camera_direction[1] = 0.000000; camera_direction[2] = -1.000000;
camera_upVector[0] = 0.000000; camera_upVector[1] = 1.000000; camera_upVector[2] = 0.000000;
ZNear = 0.001;
ZFar = 100.0;
//ZNear = 4.578200;
//ZFar = 22.578199;
myModes["Board3DTo2D"]="SolidMode";
}
bool DGtal::Board3DTo2D::isValid ( ) const

Checks the validity/consistency of the object.

Returns:
'true' if the object is valid, 'false' otherwise.

Reimplemented from DGtal::Display3D.

Definition at line 79 of file Board3DTo2D.cpp.

{
return true;
}
DGtal::Board3DTo2D & DGtal::Board3DTo2D::operator<< ( const DGtal::Color aColor)
inline

Set the default color for future drawing.

Parameters:
aColor,:a DGtal::Color (allow to set a trasnparency value).

Definition at line 50 of file Board3DTo2D.ih.

References myDefaultColor.

{
return *this;
}
template<typename TDrawableWithDisplay3D >
DGtal::Board3DTo2D & DGtal::Board3DTo2D::operator<< ( const TDrawableWithDisplay3D &  object)
inline

Draws the drawable [object] in this board. It should satisfy the concept CDrawableWithDisplay3D, which requires for instance a method setStyle( Board3DTo2D & ).

Parameters:
objectany drawable object.
Returns:
a reference on 'this'.

Draws the drawable [object] in this board. It should satisfy the concept CDrawableWithBoard3DTo2D, which requires for instance a method setStyle( Board3DTo2D & ).

Parameters:
objectany drawable object.
Returns:
a reference on 'this'.

Reimplemented from DGtal::Display3D.

Definition at line 67 of file Board3DTo2D.ih.

References DGtal::Display3DFactory::draw().

{
return *this;
}
void DGtal::Board3DTo2D::precompute_projection_matrix ( )
private

Precompute 4x4 projection matrix for 3D->2D projection.

Definition at line 152 of file Board3DTo2D.cpp.

References M_PI.

{
// Projection: from qglviewer
/*const double f = 1.0/tan(fieldOfView()/2.0);
projectionMatrix_[0] = f/aspectRatio();
projectionMatrix_[5] = f;
projectionMatrix_[10] = (ZNear + ZFar) / (ZNear - ZFar);
projectionMatrix_[11] = -1.0;
projectionMatrix_[14] = 2.0 * ZNear * ZFar / (ZNear - ZFar);
projectionMatrix_[15] = 0.0;
// same as gluPerspective( 180.0*fieldOfView()/M_PI, aspectRatio(), zNear(), zFar() );*/
double fieldOfView = M_PI/4.;
double f = 1.0/tan(fieldOfView/2.0);
double aspectRatio = (double)Viewport[2]/Viewport[3];
double Projection[16] = { f/aspectRatio, 0.00, 0.00, 0.00,
0.00, f, 0.00, 0.00,
0.00, 0.00, (ZNear + ZFar) / (ZNear - ZFar), -1.00,
0.00, 0.00, 2.0 * ZNear * ZFar / (ZNear - ZFar), 0.00 };
double Modelview[16];
LookAtMt(Modelview,
for (unsigned short m=0; m<4; ++m)
{
for (unsigned short l=0; l<4; ++l)
{
double sum = 0.0;
for (unsigned short k=0; k<4; ++k)
sum += Projection[l+4*k]*Modelview[k+4*m];
matrix[l+4*m] = sum;
}
}
}
void DGtal::Board3DTo2D::project ( double  x3d,
double  y3d,
double  z3d,
double &  x2d,
double &  y2d 
)
private

Project a 3d point (3D->2D).

Parameters:
x3dx position of the 3d point.
y3dy position of the 3d point.
z3dz position of the 3d point.
x2dx destination projection position of the 2d point.
y2dy destination projection position of the 2d point.

Definition at line 199 of file Board3DTo2D.cpp.

{
double v[4], vs[4];
v[0]=x3d; v[1]=y3d; v[2]=z3d; v[3]=1.0;
vs[0]=matrix[0 ]*v[0] + matrix[4 ]*v[1] + matrix[8 ]*v[2] + matrix[12 ]*v[3];
vs[1]=matrix[1 ]*v[0] + matrix[5 ]*v[1] + matrix[9 ]*v[2] + matrix[13 ]*v[3];
vs[2]=matrix[2 ]*v[0] + matrix[6 ]*v[1] + matrix[10]*v[2] + matrix[14 ]*v[3];
vs[3]=matrix[3 ]*v[0] + matrix[7 ]*v[1] + matrix[11]*v[2] + matrix[15 ]*v[3];
vs[0] /= vs[3];
vs[1] /= vs[3];
vs[2] /= vs[3];
vs[0] = vs[0] * 0.5 + 0.5;
vs[1] = vs[1] * 0.5 + 0.5;
vs[2] = vs[2] * 0.5 + 0.5;
vs[0] = vs[0] * Viewport[2] + Viewport[0];
vs[1] = vs[1] * Viewport[3] + Viewport[1];
x2d = vs[0];
y2d = Viewport[3]-vs[1];
}
void DGtal::Board3DTo2D::saveCairo ( const char *  filename,
CairoType  type,
int  bWidth,
int  bHeight 
)

Save a Cairo image.

Parameters:
filenamefilename of the image to save.
typetype of the image to save (CairoPDF, CairoPNG, CairoPS, CairoEPS, CairoSVG).
bWidthwidth of the image to save.
bHeightheight of the image to save.
Examples:
io/boards/dgtalBoard3DTo2D-1-points.cpp, io/boards/dgtalBoard3DTo2D-2-sets.cpp, io/boards/dgtalBoard3DTo2D-2bis-sets.cpp, io/boards/dgtalBoard3DTo2D-3-objects.cpp, io/boards/dgtalBoard3DTo2D-4-modes.cpp, io/boards/dgtalBoard3DTo2D-5-custom.cpp, io/boards/dgtalBoard3DTo2D-6.cpp, and io/boards/dgtalBoard3DTo2D-KSCell.cpp.

Definition at line 232 of file Board3DTo2D.cpp.

References DGtal::Trace::info(), and DGtal::trace.

{
for(unsigned int i =0; i< myClippingPlaneList.size(); i++)
trace.info() << "-> ClippingPlane not implemented in Board3DTo2D" << std::endl;
Viewport[0] = 0; Viewport[1] = 0; Viewport[2] = bWidth; Viewport[3] = bHeight;
cairo_surface_t *surface;
cairo_t *cr;
switch (type)
{
case CairoPDF:
surface = cairo_pdf_surface_create (filename, Viewport[2], Viewport[3]); break;
case CairoPS:
surface = cairo_ps_surface_create (filename, Viewport[2], Viewport[3]); break;
case CairoEPS:
surface = cairo_ps_surface_create (filename, Viewport[2], Viewport[3]);
cairo_ps_surface_set_eps(surface, true); break;
case CairoSVG:
surface = cairo_svg_surface_create (filename, Viewport[2], Viewport[3]); break;
case CairoPNG:
default:
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, Viewport[2], Viewport[3]);
}
cr = cairo_create (surface);
// Fill the background with gray
cairo_set_source_rgba (cr, .3, .3, .3, 1.);
cairo_rectangle (cr, 0, 0, Viewport[2], Viewport[3]);
cairo_fill (cr);
// Draw the shapes
// myPointSetList
for(unsigned int i=0; i<myPointSetList.size(); i++)
{
for (std::vector<pointD3D>::iterator s_it = myPointSetList.at(i).begin();
s_it != myPointSetList.at(i).end();
++s_it)
{
{
cairo_save (cr);
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);
cairo_set_line_width (cr, 1.); // arbitraire car non set
double x1, y1, x2, y2, x3, y3, x4, y4;
//double width=(*s_it).size/120.; // arbitraire
double width=0.05; // arbitraire
// TODO:
/*double distCam =sqrt((camera_position[0]-centerS.x)*(camera_position[0]-centerS.x)+
(camera_position[1]-centerS.y)*(camera_position[1]-centerS.y)+
(camera_position[2]-centerS.z)*(camera_position[2]-centerS.z));*/
//z+
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x4, y4);
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);
//z-
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//x+
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//x-
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//y+
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x4, y4);
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);
//y-
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
cairo_restore (cr);
}
}
}
// myLineSetList
for(unsigned int i=0; i<myLineSetList.size(); i++)
{
for (std::vector<lineD3D>::iterator s_it = myLineSetList.at(i).begin();
s_it != myLineSetList.at(i).end();
++s_it)
{
{
cairo_save (cr);
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);
double x1, y1;
double x2, y2;
project((*s_it).x1, (*s_it).y1, (*s_it).z1, x1, y1);
project((*s_it).x2, (*s_it).y2, (*s_it).z2, x2, y2);
cairo_move_to (cr, x1, y1);
cairo_line_to (cr, x2, y2);
//cairo_set_line_width (cr, (*s_it).width);
cairo_set_line_width (cr, 1.); // arbitraire car non set
cairo_stroke (cr);
cairo_restore (cr);
}
}
}
// myVoxelSetList
for(unsigned int i=0; i<myVoxelSetList.size(); i++)
{
for (std::vector<voxelD3D>::iterator s_it = myVoxelSetList.at(i).begin();
s_it != myVoxelSetList.at(i).end();
++s_it)
{
{
cairo_save (cr);
if (myModes["Board3DTo2D"]=="SolidMode")
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)); // *1.75 arbitraire
else
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)); // *0.75 arbitraire
cairo_set_line_width (cr, 1.); // arbitraire car non set
double x1, y1, x2, y2, x3, y3, x4, y4;
double width=(*s_it).width;
//z+
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x4, y4);
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);
//z-
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//x+
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//x-
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
//y+
project((*s_it).x-width, (*s_it).y+width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y+width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y+width, (*s_it).z-width, x4, y4);
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);
//y-
project((*s_it).x-width, (*s_it).y-width, (*s_it).z+width, x1, y1);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z+width, x2, y2);
project((*s_it).x+width, (*s_it).y-width, (*s_it).z-width, x3, y3);
project((*s_it).x-width, (*s_it).y-width, (*s_it).z-width, x4, y4);
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);
cairo_restore (cr);
}
}
}
for(unsigned int i=0; i<myQuadList.size(); i++)
trace.info() << "-> Quad not YET implemented in Board3DTo2D" << std::endl;
// Drawing all Khalimsky Space Cells
// KSSurfel (from updateList)
for (std::vector<quadD3D>::iterator s_it = myKSSurfelList.begin();
s_it != myKSSurfelList.end();
++s_it)
{
{
cairo_save (cr);
if (myModes["Board3DTo2D"]=="SolidMode")
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)); // *3.75 arbitraire
else
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)); // *0.75 arbitraire
cairo_set_line_width (cr, 1.); // arbitraire car non set
double x1, y1, x2, y2, x3, y3, x4, y4;
project((*s_it).x1, (*s_it).y1, (*s_it).z1, x1, y1);
project((*s_it).x2, (*s_it).y2, (*s_it).z2, x2, y2);
project((*s_it).x3, (*s_it).y3, (*s_it).z3, x3, y3);
project((*s_it).x4, (*s_it).y4, (*s_it).z4, x4, y4);
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);
cairo_restore (cr);
}
}
// KSLinel
for(unsigned int i=0; i< myKSLinelList.size();i++)
{
//if (!myKSLinelList.at(i).isSigned) // for the moment, same for Signed or NonSigned
{
{
cairo_save (cr);
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);
cairo_set_line_width (cr, 4.); // arbitraire car non set
double x1, y1, x2, y2;
project(myKSLinelList.at(i).x1, myKSLinelList.at(i).y1, myKSLinelList.at(i).z1, x1, y1);
project(myKSLinelList.at(i).x2, myKSLinelList.at(i).y2, myKSLinelList.at(i).z2, x2, y2);
cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_close_path (cr); cairo_stroke (cr);
cairo_restore (cr);
}
}
}
// KSPointel
for(unsigned int i=0; i< myKSPointelList.size();i++)
{
//if (!myKSPointelList.at(i).isSigned) // for the moment, same for Signed or NonSigned
{
{
cairo_save (cr);
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);
cairo_set_line_width (cr, 1.); // arbitraire car non set
double x1, y1, x2, y2, x3, y3, x4, y4;
//double width=myKSPointelList.at(i).size/120.; // arbitraire
double width=0.04; // arbitraire
//z+
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x1, y1);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x3, y3);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x4, y4);
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);
//z-
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x1, y1);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x2, y2);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x3, y3);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
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);
//x+
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
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);
//x-
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
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);
//y+
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x1, y1);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z+width, x2, y2);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x3, y3);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y+width, myKSPointelList.at(i).z-width, x4, y4);
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);
//y-
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x1, y1);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z+width, x2, y2);
project(myKSPointelList.at(i).x+width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x3, y3);
project(myKSPointelList.at(i).x-width, myKSPointelList.at(i).y-width, myKSPointelList.at(i).z-width, x4, y4);
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);
cairo_restore (cr);
}
}
}
if (type==CairoPNG)
cairo_surface_write_to_png (surface, filename);
cairo_destroy (cr);
cairo_surface_destroy (surface);
}
void DGtal::Board3DTo2D::selfDisplay ( std::ostream &  out) const

Writes/Displays the object on an output stream.

Parameters:
outthe output stream where the object is written.

Reimplemented from DGtal::Display3D.

Definition at line 69 of file Board3DTo2D.cpp.

{
out << "[Board3DTo2D]";
}
void DGtal::Board3DTo2D::setCameraDirection ( double  x,
double  y,
double  z 
)
inlinevirtual

Set camera direction.

Parameters:
xx direction.
yy direction.
zz direction.

Reimplemented from DGtal::Display3D.

Definition at line 106 of file Board3DTo2D.h.

References camera_direction.

void DGtal::Board3DTo2D::setCameraPosition ( double  x,
double  y,
double  z 
)
inlinevirtual

Set camera position.

Parameters:
xx position.
yy position.
zz position.

Reimplemented from DGtal::Display3D.

Definition at line 97 of file Board3DTo2D.h.

References camera_position.

{ camera_position[0] = x; camera_position[1] = y; camera_position[2] = z; }
void DGtal::Board3DTo2D::setCameraUpVector ( double  x,
double  y,
double  z 
)
inlinevirtual

Set camera up-vector.

Parameters:
xx coordinate of up-vector.
yy coordinate of up-vector.
zz coordinate of up-vector.

Reimplemented from DGtal::Display3D.

Definition at line 115 of file Board3DTo2D.h.

References camera_upVector.

{ camera_upVector[0] = x; camera_upVector[1] = y; camera_upVector[2] = z; }
void DGtal::Board3DTo2D::setNearFar ( double  _near,
double  _far 
)
inlinevirtual

Set near and far distance.

Parameters:
nearnear distance.
farfar distance.

Reimplemented from DGtal::Display3D.

Definition at line 123 of file Board3DTo2D.h.

References ZFar, and ZNear.

{ ZNear = _near; ZFar = _far; }

Field Documentation

double DGtal::Board3DTo2D::camera_direction[3]
private

camera direction

Definition at line 213 of file Board3DTo2D.h.

Referenced by setCameraDirection().

double DGtal::Board3DTo2D::camera_position[3]
private

camera position

Definition at line 212 of file Board3DTo2D.h.

Referenced by setCameraPosition().

double DGtal::Board3DTo2D::camera_upVector[3]
private

camera up-vector

Definition at line 214 of file Board3DTo2D.h.

Referenced by setCameraUpVector().

double DGtal::Board3DTo2D::matrix[16]
private

projection matrix

Definition at line 210 of file Board3DTo2D.h.

DGtal::Color DGtal::Board3DTo2D::myDefaultColor

default color

The associated map type for storing possible modes used for displaying for digital objects. The associated map type for storing the default styles of digital objects.

Definition at line 146 of file Board3DTo2D.h.

Referenced by operator<<().

int DGtal::Board3DTo2D::Viewport[4]
private

2D viewport

Definition at line 209 of file Board3DTo2D.h.

double DGtal::Board3DTo2D::ZFar
private

zfar distance

Definition at line 217 of file Board3DTo2D.h.

Referenced by setNearFar().

double DGtal::Board3DTo2D::ZNear
private

znear distance

Definition at line 216 of file Board3DTo2D.h.

Referenced by setNearFar().


The documentation for this class was generated from the following files: