Developer documentation | Axl-2.5.1

axlTorusParametricWriter.cpp
Go to the documentation of this file.
1 /* axlTorusParametricWriter.cpp ---
2  *
3  * Author: Valentin Michelet
4  * Copyright (C) 2008-2013 - Valentin Michelet, Inria.
5  * Created: Tue Aug 6 11:13:23 2013 (+0200)
6  */
7 
8 /* Commentary:
9  *
10  */
11 
12 /* Change log:
13  *
14  */
15 
17 
18 #include <axlCore/axlTorus.h>
20 #include <axlCore/axlPoint.h>
22 
23 #include <dtkCoreSupport/dtkAbstractData.h>
24 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
26 
27 // /////////////////////////////////////////////////////////////////
28 // axlTorusParametricWriter
29 // /////////////////////////////////////////////////////////////////
30 
32  this->setObjectName(this->description());
33 }
34 
36 }
37 
39  return "axlTorusParametricWriter";
40 }
41 
43  return "axlTorusParametricWriter";
44 }
45 
46 QStringList axlTorusParametricWriter::handled(void) const {
47  return QStringList() << "axlTorusParametric";
48 }
49 
51  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlTorusParametricWriter", QStringList(), createaxlTorusParametricWriter);
52 }
53 
54 bool axlTorusParametricWriter::accept(dtkAbstractData *data) {
55  axlTorusParametric *torusParam = dynamic_cast<axlTorusParametric *>(data);
56  return torusParam != NULL;
57 }
58 
59 bool axlTorusParametricWriter::reject(dtkAbstractData *data) {
60  return !this->accept(data);
61 }
62 
63 QDomElement axlTorusParametricWriter::write(QDomDocument *doc, dtkAbstractData *data) {
64  // Get torus param
65  axlTorusParametric *torusParam = dynamic_cast<axlTorusParametric *>(data);
66  // Get torus
67  axlTorus* torus = torusParam->getTorus();
68 
69  // Create name
70  QDomElement torusParamElement = doc->createElement("torusParam");
71  torusParamElement.setAttribute("name",torus->name());
72 
73  // Create size
74  torusParamElement.setAttribute("size", QString::number(torus->size()));
75 
76  // Create color
77  QColor qcolor = torus->color();
78  QString color ;
79  QTextStream(&color) << QString::number(qcolor.red()) << " "
80  << QString::number(qcolor.green()) << " "
81  << QString::number(qcolor.blue()) << " "
82  << QString::number(torus->opacity());
83  torusParamElement.setAttribute("color", color);
84 
85  // Create shader
86  QString shader = torus->shader();
87  QFileInfo shaderFileInfo(shader);
88  torusParamElement.setAttribute("shader", shaderFileInfo.fileName());
89 
90  // Write torus
91  // Create center
92  QDomElement center = doc->createElement("center");
93  QString centerStr;
94  QTextStream(&centerStr) << QString::number(torus->centerPoint()->x()) << " "<< QString::number(torus->centerPoint()->y()) << " "<< QString::number(torus->centerPoint()->z());
95  QDomText centerDomText = doc->createTextNode(centerStr);
96  center.appendChild(centerDomText);
97 
98  torusParamElement.appendChild(center);
99 
100  // Create direction
101  QDomElement direction = doc->createElement("direction");
102  QString directionStr;
103  QTextStream(&directionStr) << QString::number(torus->direction()->x()) << " "<< QString::number(torus->direction()->y()) << " "<< QString::number(torus->direction()->z());
104  QDomText directionDomText = doc->createTextNode(directionStr);
105  direction.appendChild(directionDomText);
106 
107  torusParamElement.appendChild(direction);
108 
109  // Create ring radius
110  QDomElement ringRadius = doc->createElement("ringRadius");
111  QString ringRadiusStr;
112  QTextStream(&ringRadiusStr) << QString::number(torus->ringRadius());
113  QDomText ringRadiusDomText = doc->createTextNode(ringRadiusStr);
114  ringRadius.appendChild(ringRadiusDomText);
115 
116  torusParamElement.appendChild(ringRadius);
117 
118  // Create cross section radius
119  QDomElement crossSectionRadius = doc->createElement("crossSectionRadius");
120  QString crossSectionRadiusStr;
121  QTextStream(&crossSectionRadiusStr) << QString::number(torus->crossSectionRadius());
122  QDomText crossSectionRadiusDomText = doc->createTextNode(crossSectionRadiusStr);
123  crossSectionRadius.appendChild(crossSectionRadiusDomText);
124 
125  torusParamElement.appendChild(crossSectionRadius);
126 
127  // Create refdir
128  QDomElement refdir = doc->createElement("refdir");
129  QString refdirStr;
130  QTextStream(&refdirStr) << QString::number(torusParam->getR()->x()) << " "<< QString::number(torusParam->getR()->y()) << " "<< QString::number(torusParam->getR()->z());
131  QDomText refdirDomText = doc->createTextNode(refdirStr);
132  refdir.appendChild(refdirDomText);
133 
134  torusParamElement.appendChild(refdir);
135 
136  // Write fields if exist.
137  if(!torus->fields().isEmpty()){
138  foreach(axlAbstractField *field, torus->fields()){
140  QDomElement fieldElement = field_writer->write(doc, field);
141  torusParamElement.appendChild(fieldElement);
142  }
143  }
144 
145  return torusParamElement;
146 }
147 
148 
149 QDomElement axlTorusParametricWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data) {
150  QDomElement element;
151 
152  if(!axl_writer)
153  return element;
154 
155  if(!axl_writer->accept(data))
156  return element;
157 
158  element = axl_writer->write(doc, data);
159 
160  return element;
161 }
162 
163 dtkAbstractDataWriter *createaxlTorusParametricWriter(void) {
164  return new axlTorusParametricWriter;
165 }
axlTorus * getTorus(void) const
double crossSectionRadius
Definition: axlTorus.h:32
axlPoint centerPoint
Definition: axlTorus.h:30
virtual bool accept(dtkAbstractData *data)=0
QStringList handled(void) const
static axlFieldWritersFactory * instance(void)
virtual QString identifier(void) const
dtkAbstractDataWriter * create(const QString &interface_name)
Class axlAbstractField defines an API for arrays of numeric data.
double ringRadius
Definition: axlTorus.h:31
double y
Definition: axlPoint.h:37
dtkAbstractDataWriter * createaxlTorusParametricWriter(void)
double z
Definition: axlPoint.h:38
axlPoint direction
Definition: axlTorus.h:30
axlPoint * getR(void) const
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
bool accept(dtkAbstractData *data)
QList< axlAbstractField * > fields(void)
bool reject(dtkAbstractData *data)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double x
Definition: axlPoint.h:37