Developer documentation | Axl-2.5.1

axlCylinderWriter.cpp
Go to the documentation of this file.
1 /* axlCylinderWriter.cpp ---
2  *
3  * Author: Meriadeg Perrinel
4  * Copyright (C) 2008-2011 - Meriadeg Perrinel, Inria.
5  * Created: Wed Sep 21 11:36:52 2011 (+0200)
6  * Version: $Id$
7  * Last-Updated: Wed Sep 21 12:11:29 2011 (+0200)
8  * By: Meriadeg Perrinel
9  * Update #: 88
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlCylinderWriter.h"
21 
22 #include <axlCore/axlCylinder.h>
23 #include <axlCore/axlPoint.h>
25 
26 #include <dtkCoreSupport/dtkAbstractData.h>
27 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
29 
30 // /////////////////////////////////////////////////////////////////
31 // axlCylinderWriter
32 // /////////////////////////////////////////////////////////////////
33 
35 {
36  this->setObjectName(this->description());
37 }
38 
40 {
41 
42 }
43 
44 QString axlCylinderWriter::identifier(void) const
45 {
46  return "axlCylinderWriter";
47 }
48 
49 QString axlCylinderWriter::description(void) const
50 {
51  return "axlCylinderWriter";
52 }
53 
54 QStringList axlCylinderWriter::handled(void) const
55 {
56  return QStringList() << "axlCylinder";
57 }
58 
60 {
61  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlCylinderWriter", QStringList(), createaxlCylinderWriter);
62 }
63 
64 bool axlCylinderWriter::accept(dtkAbstractData *data)
65 {
66  axlCylinder *cylinder = dynamic_cast<axlCylinder *>(data);
67  if(cylinder)
68  return true;
69 
70  return false;
71 }
72 
73 bool axlCylinderWriter::reject(dtkAbstractData *data)
74 {
75  return !this->accept(data);
76 }
77 
78 QDomElement axlCylinderWriter::write(QDomDocument *doc, dtkAbstractData *data)
79 {
80  axlCylinder *cylinder = dynamic_cast<axlCylinder *>(data);
81 
83  QDomElement cylinderElement = doc->createElement("cylinder");
84  cylinderElement.setAttribute("name",cylinder->name());
85 
86 
88  cylinderElement.setAttribute("size", QString::number(cylinder->size()));
89 
90 
91 
93  QColor qcolor = cylinder->color();
94  QString color ;
95  QTextStream(&color) << QString::number(qcolor.red()) << " "
96  << QString::number(qcolor.green()) << " "
97  << QString::number(qcolor.blue()) << " "
98  << QString::number(cylinder->opacity());
99  cylinderElement.setAttribute("color", color);
100 
102  QString shader = cylinder->shader();
103  QFileInfo shaderFileInfo(shader);
104  cylinderElement.setAttribute("shader", shaderFileInfo.fileName());
105 
106  //Write cylinder
107  //firstPoint
108  QDomElement firstPoint = doc->createElement("point");
109  QString firstPointStr;
110  QTextStream(&firstPointStr) << QString::number(cylinder->firstPoint()->x()) << " "<< QString::number(cylinder->firstPoint()->y()) << " "<< QString::number(cylinder->firstPoint()->z());
111  QDomText firstPointDomText = doc->createTextNode(firstPointStr);
112  firstPoint.appendChild(firstPointDomText);
113 
114  cylinderElement.appendChild(firstPoint);
115 
116  //secondPoint
117  QDomElement secondPoint = doc->createElement("point");
118  QString secondPointStr;
119  QTextStream(&secondPointStr) << QString::number(cylinder->secondPoint()->x()) << " "<< QString::number(cylinder->secondPoint()->y()) << " "<< QString::number(cylinder->secondPoint()->z());
120  QDomText secondPointDomText = doc->createTextNode(secondPointStr);
121  secondPoint.appendChild(secondPointDomText);
122 
123  cylinderElement.appendChild(secondPoint);
124 
125  //radius
126  QDomElement radius = doc->createElement("radius");
127  QString radiusStr;
128  QTextStream(&radiusStr) << QString::number(cylinder->radius());
129  QDomText radiusDomText = doc->createTextNode(radiusStr);
130  radius.appendChild(radiusDomText);
131 
132  cylinderElement.appendChild(radius);
133 
134 
135  //Write fields if exist.
136  if(!cylinder->fields().isEmpty()){
137  foreach(axlAbstractField *field, cylinder->fields()){
139  QDomElement fieldElement = field_writer->write(doc, field);
140  cylinderElement.appendChild(fieldElement);
141  }
142  }
143 
144 
145  return cylinderElement;
146 }
147 
148 
149 QDomElement axlCylinderWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
150 {
151  QDomElement element;
152 
153  if(!axl_writer)
154  return element;
155 
156  if(!axl_writer->accept(data))
157  return element;
158 
159  element = axl_writer->write(doc, data);
160 
161  return element;
162 }
163 
164 dtkAbstractDataWriter *createaxlCylinderWriter(void)
165 {
166  return new axlCylinderWriter;
167 }
bool accept(dtkAbstractData *data)
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
QStringList handled(void) const
virtual bool accept(dtkAbstractData *data)=0
axlPoint * secondPoint(void) const
Returns second point of the cylinder.
Class axlCylinder defines 3D cylinders.
Definition: axlCylinder.h:33
bool reject(dtkAbstractData *data)
static axlFieldWritersFactory * instance(void)
axlPoint * firstPoint(void) const
Returns first point of the cylinder.
virtual QString identifier(void) const
dtkAbstractDataWriter * createaxlCylinderWriter(void)
QString description(void) const
dtkAbstractDataWriter * create(const QString &interface_name)
Class axlAbstractField defines an API for arrays of numeric data.
double y
Definition: axlPoint.h:37
static bool registered(void)
double z
Definition: axlPoint.h:38
QList< axlAbstractField * > fields(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double radius
Definition: axlCylinder.h:37
double x
Definition: axlPoint.h:37
QString identifier(void) const