Developer documentation | Axl-2.5.1

axlCircleArcWriter.cpp
Go to the documentation of this file.
1 /* axlCircleArcWriter.cpp ---
2  *
3  * Author: Valentin Michelet
4  * Copyright (C) 2008 - Valentin Michelet, Inria.
5  * Created: Tue Nov 9 16:58:59 2010 (+0100)
6  * Version: $Id$
7  * Last-Updated: Tue Nov 9 17:09:38 2010 (+0100)
8  * By: Valentin Michelet
9  * Update #: 19
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlCircleArcWriter.h"
21 
22 #include <axlCore/axlCircleArc.h>
23 #include <axlCore/axlPoint.h>
25 
26 #include <dtkCoreSupport/dtkAbstractData.h>
27 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
28 
30 
31 // /////////////////////////////////////////////////////////////////
32 // axlCircleArcWriter
33 // /////////////////////////////////////////////////////////////////
34 
36  this->setObjectName(this->description());
37 }
38 
40 }
41 
42 QString axlCircleArcWriter::identifier(void) const {
43  return "axlCircleArcWriter";
44 }
45 
46 QString axlCircleArcWriter::description(void) const {
47  return "axlCircleArcWriter";
48 }
49 
50 QStringList axlCircleArcWriter::handled(void) const {
51  return QStringList() << "axlCircleArc";
52 }
53 
55  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlCircleArcWriter", QStringList(), createaxlCircleArcWriter);
56 }
57 
58 bool axlCircleArcWriter::accept(dtkAbstractData *data) {
59  axlCircleArc* arc = dynamic_cast<axlCircleArc*>(data);
60  if (arc)
61  return true;
62  return false;
63 }
64 
65 bool axlCircleArcWriter::reject(dtkAbstractData *data) {
66  return !this->accept(data);
67 }
68 
69 QDomElement axlCircleArcWriter::write(QDomDocument *doc, dtkAbstractData *data) {
70 
71  // Get circle arc pointer
72  axlCircleArc* arc = dynamic_cast<axlCircleArc*>(data);
73 
74  // Create name
75  QDomElement arcElement = doc->createElement("arc");
76  arcElement.setAttribute("name", arc->name());
77 
78  // Create size
79  arcElement.setAttribute("size", QString::number(arc->size()));
80 
81  // Create color
82  QColor qcolor = arc->color();
83  QString color;
84  QTextStream(&color) << QString::number(qcolor.red()) << " "
85  << QString::number(qcolor.green()) << " "
86  << QString::number(qcolor.blue()) << " "
87  << QString::number(arc->opacity());
88  arcElement.setAttribute("color", color);
89 
90  // Create shader
91  QString shader = arc->shader();
92  QFileInfo shaderFileInfo(shader);
93  arcElement.setAttribute("shader", shaderFileInfo.fileName());
94 
95  // Write arc
96  // Create first point
97  QDomElement point1Element = doc->createElement("point1");
98  QString point1Str;
99  QTextStream(&point1Str) << QString::number(arc->point1().x()) << " "
100  << QString::number(arc->point1().y()) << " "
101  << QString::number(arc->point1().z());
102  QDomText point1DomText = doc->createTextNode(point1Str);
103  point1Element.appendChild(point1DomText);
104 
105  arcElement.appendChild(point1Element);
106 
107  // Create second point
108  QDomElement Point2Element = doc->createElement("point2");
109  QString Point2Str;
110  QTextStream(&Point2Str) << QString::number(arc->point2().x()) << " "
111  << QString::number(arc->point2().y()) << " "
112  << QString::number(arc->point2().z());
113  QDomText Point2DomText = doc->createTextNode(Point2Str);
114  Point2Element.appendChild(Point2DomText);
115 
116  arcElement.appendChild(Point2Element);
117 
118  // Create center
119  QDomElement centerElement = doc->createElement("center");
120  QString centerStr;
121  QTextStream(&centerStr) << QString::number(arc->center().x()) << " "
122  << QString::number(arc->center().y()) << " "
123  << QString::number(arc->center().z());
124  QDomText centerDomText = doc->createTextNode(centerStr);
125  centerElement.appendChild(centerDomText);
126 
127  arcElement.appendChild(centerElement);
128 
129  // Create normal
130  QDomElement normalElement = doc->createElement("normal");
131  QString normalStr;
132  QTextStream(&normalStr) << QString::number(arc->normal().x()) << " "
133  << QString::number(arc->normal().y()) << " "
134  << QString::number(arc->normal().z());
135  QDomText normalDomText = doc->createTextNode(normalStr);
136  normalElement.appendChild(normalDomText);
137 
138  arcElement.appendChild(normalElement);
139 
140  // Create counter clockwise bool
141  QDomElement cCWElement = doc->createElement("ccw");
142  QString cCWStr;
143  QTextStream(&cCWStr) << arc->isDirect();
144  QDomText cCWDomText = doc->createTextNode(cCWStr);
145  cCWElement.appendChild(cCWDomText);
146 
147  arcElement.appendChild(cCWElement);
148 
149 
150  // Write fields if exist.
151  if(!arc->fields().isEmpty()){
152  foreach(axlAbstractField *field, arc->fields()){
154  QDomElement fieldElement = field_writer->write(doc, field);
155  arcElement.appendChild(fieldElement);
156  }
157  }
158 
159  return arcElement;
160 }
161 
162 QDomElement axlCircleArcWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data) {
163  QDomElement element;
164 
165  if (!axl_writer)
166  return element;
167  if(!axl_writer->accept(data))
168  return element;
169 
170  element = axl_writer->write(doc, data);
171 
172  return element;
173 }
174 
175 dtkAbstractDataWriter *createaxlCircleArcWriter(void) {
176  return new axlCircleArcWriter;
177 }
bool isDirect(void) const
axlPoint point1(void) const
bool accept(dtkAbstractData *data)
virtual bool accept(dtkAbstractData *data)=0
QStringList handled(void) const
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
QString description(void) const
static axlFieldWritersFactory * instance(void)
axlPoint center(void) const
QString identifier(void) const
virtual QString identifier(void) const
dtkAbstractDataWriter * createaxlCircleArcWriter(void)
dtkAbstractDataWriter * create(const QString &interface_name)
axlPoint point2(void) const
bool reject(dtkAbstractData *data)
Class axlAbstractField defines an API for arrays of numeric data.
virtual ~axlCircleArcWriter(void)
double y
Definition: axlPoint.h:37
static bool registered(void)
axlPoint normal(void) const
double z
Definition: axlPoint.h:38
QList< axlAbstractField * > fields(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double x
Definition: axlPoint.h:37