Developer documentation | Axl-2.5.1

axlPlaneParametricWriter.cpp
Go to the documentation of this file.
1 /* axlPlaneParametricWriter.cpp ---
2  *
3  * Author: Valentin Michelet
4  * Copyright (C) 2008-2013 - Valentin Michelet, Inria.
5  * Created: Mon Jul 29 11:13:23 2013 (+0200)
6  */
7 
8 /* Commentary:
9  *
10  */
11 
12 /* Change log:
13  *
14  */
15 
17 
18 #include <axlCore/axlPlane.h>
20 #include <axlCore/axlPoint.h>
22 
23 #include <dtkCoreSupport/dtkAbstractData.h>
24 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
26 
27 // /////////////////////////////////////////////////////////////////
28 // axlPlaneParametricWriter
29 // /////////////////////////////////////////////////////////////////
30 
32  this->setObjectName(this->description());
33 }
34 
36 }
37 
39  return "axlPlaneParametricWriter";
40 }
41 
43  return "axlPlaneParametricWriter";
44 }
45 
46 QStringList axlPlaneParametricWriter::handled(void) const {
47  return QStringList() << "axlPlaneParametric";
48 }
49 
51  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlPlaneParametricWriter", QStringList(), createaxlPlaneParametricWriter);
52 }
53 
54 bool axlPlaneParametricWriter::accept(dtkAbstractData *data) {
55  axlPlaneParametric *planeParam = dynamic_cast<axlPlaneParametric *>(data);
56  return planeParam != NULL;
57 }
58 
59 bool axlPlaneParametricWriter::reject(dtkAbstractData *data) {
60  return !this->accept(data);
61 }
62 
63 QDomElement axlPlaneParametricWriter::write(QDomDocument *doc, dtkAbstractData *data) {
64  // Get parametric plane
65  axlPlaneParametric *planeParam = dynamic_cast<axlPlaneParametric *>(data);
66  // Get plane
67  axlPlane* plane = planeParam->getPlane();
68 
69  // Create name
70  QDomElement planeParamElement = doc->createElement("planeParam");
71  planeParamElement.setAttribute("name",plane->name());
72 
73  // Create size
74  planeParamElement.setAttribute("size", QString::number(plane->size()));
75 
76  // Create color
77  QColor qcolor = plane->color();
78  QString color ;
79  QTextStream(&color) << QString::number(qcolor.red()) << " "
80  << QString::number(qcolor.green()) << " "
81  << QString::number(qcolor.blue()) << " "
82  << QString::number(plane->opacity());
83  planeParamElement.setAttribute("color", color);
84 
85  // Create shader
86  QString shader = plane->shader();
87  QFileInfo shaderFileInfo(shader);
88  planeParamElement.setAttribute("shader", shaderFileInfo.fileName());
89 
90  // Write plane param
91  // Create point
92  QDomElement point = doc->createElement("point");
93  QString pointStr;
94  QTextStream(&pointStr) << QString::number(plane->point()->x()) << " "<< QString::number(plane->point()->y()) << " "<< QString::number(plane->point()->z());
95  QDomText pointDomText = doc->createTextNode(pointStr);
96  point.appendChild(pointDomText);
97 
98  planeParamElement.appendChild(point);
99 
100  // Create normal
101  QDomElement normal = doc->createElement("normal");
102  QString normalStr;
103  QTextStream(&normalStr) << QString::number(plane->normal()->x()) << " "<< QString::number(plane->normal()->y()) << " "<< QString::number(plane->normal()->z());
104  QDomText normalDomText = doc->createTextNode(normalStr);
105  normal.appendChild(normalDomText);
106 
107  planeParamElement.appendChild(normal);
108 
109  // Create refdir
110  QDomElement refdir = doc->createElement("refdir");
111  QString refdirStr;
112  QTextStream(&refdirStr) << QString::number(planeParam->getI()->x()) << " "<< QString::number(planeParam->getI()->y()) << " "<< QString::number(planeParam->getI()->z());
113  QDomText refdirDomText = doc->createTextNode(refdirStr);
114  refdir.appendChild(refdirDomText);
115 
116  planeParamElement.appendChild(refdir);
117 
118  // Write fields if any
119  if (!plane->fields().isEmpty()) {
120  foreach(axlAbstractField *field, plane->fields()){
122  QDomElement fieldElement = field_writer->write(doc, field);
123  planeParamElement.appendChild(fieldElement);
124  }
125  }
126 
127  return planeParamElement;
128 }
129 
130 
131 QDomElement axlPlaneParametricWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data) {
132  QDomElement element;
133 
134  if(!axl_writer)
135  return element;
136 
137  if(!axl_writer->accept(data))
138  return element;
139 
140  element = axl_writer->write(doc, data);
141 
142  return element;
143 }
144 
145 dtkAbstractDataWriter *createaxlPlaneParametricWriter(void) {
146  return new axlPlaneParametricWriter;
147 }
axlPlane * getPlane(void) const
virtual bool accept(dtkAbstractData *data)=0
Class axlPlane defines 3D planes.
Definition: axlPlane.h:34
static axlFieldWritersFactory * instance(void)
axlPoint point
Definition: axlPlane.h:37
dtkAbstractDataWriter * createaxlPlaneParametricWriter(void)
virtual QString identifier(void) const
QStringList handled(void) const
dtkAbstractDataWriter * create(const QString &interface_name)
Class axlAbstractField defines an API for arrays of numeric data.
axlPoint normal
Definition: axlPlane.h:37
double y
Definition: axlPoint.h:37
bool accept(dtkAbstractData *data)
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
double z
Definition: axlPoint.h:38
axlPoint * getI(void) const
QList< axlAbstractField * > fields(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double x
Definition: axlPoint.h:37
bool reject(dtkAbstractData *data)