Developer documentation | Axl-2.5.1

axlConeWriter.cpp
Go to the documentation of this file.
1 /* axlConeWriter.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 "axlConeWriter.h"
21 
22 #include <axlCore/axlCone.h>
23 #include <axlCore/axlPoint.h>
25 
26 #include <dtkCoreSupport/dtkAbstractData.h>
27 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
28 
30 
31 // /////////////////////////////////////////////////////////////////
32 // axlConeWriter
33 // /////////////////////////////////////////////////////////////////
34 
36 {
37  this->setObjectName(this->description());
38 }
39 
41 {
42 
43 }
44 
45 QString axlConeWriter::identifier(void) const
46 {
47  return "axlConeWriter";
48 }
49 
50 QString axlConeWriter::description(void) const
51 {
52  return "axlConeWriter";
53 }
54 
55 QStringList axlConeWriter::handled(void) const
56 {
57  return QStringList() << "axlCone";
58 }
59 
61 {
62  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlConeWriter", QStringList(), createaxlConeWriter);
63 }
64 
65 bool axlConeWriter::accept(dtkAbstractData *data)
66 {
67  axlCone *cone = dynamic_cast<axlCone *>(data);
68  if(cone)
69  return true;
70 
71  return false;
72 }
73 
74 bool axlConeWriter::reject(dtkAbstractData *data)
75 {
76  return !this->accept(data);
77 }
78 
79 QDomElement axlConeWriter::write(QDomDocument *doc, dtkAbstractData *data)
80 {
81  axlCone *cone = dynamic_cast<axlCone *>(data);
82 
84  QDomElement coneElement = doc->createElement("cone");
85  coneElement.setAttribute("name",cone->name());
86 
87 
89  coneElement.setAttribute("size", QString::number(cone->size()));
90 
91 
92 
94  QColor qcolor = cone->color();
95  QString color ;
96  QTextStream(&color) << QString::number(qcolor.red()) << " "
97  << QString::number(qcolor.green()) << " "
98  << QString::number(qcolor.blue()) << " "
99  << QString::number(cone->opacity());
100  coneElement.setAttribute("color", color);
101 
103  QString shader = cone->shader();
104  QFileInfo shaderFileInfo(shader);
105  coneElement.setAttribute("shader", shaderFileInfo.fileName());
106 
107  //Write cone
108  //apex
109  QDomElement apex = doc->createElement("point");
110  QString apexStr;
111  QTextStream(&apexStr) << QString::number(cone->apex()->x()) << " "<< QString::number(cone->apex()->y()) << " "<< QString::number(cone->apex()->z());
112  QDomText apexDomText = doc->createTextNode(apexStr);
113  apex.appendChild(apexDomText);
114 
115  coneElement.appendChild(apex);
116 
117  //apex
118  QDomElement basePoint = doc->createElement("point");
119  QString basePointStr;
120  QTextStream(&basePointStr) << QString::number(cone->basePoint()->x()) << " "<< QString::number(cone->basePoint()->y()) << " "<< QString::number(cone->basePoint()->z());
121  QDomText basePointDomText = doc->createTextNode(basePointStr);
122  basePoint.appendChild(basePointDomText);
123 
124  coneElement.appendChild(basePoint);
125 
126  //radius
127  QDomElement radius = doc->createElement("radius");
128  QString radiusStr;
129  QTextStream(&radiusStr) << QString::number(cone->radius());
130  QDomText radiusDomText = doc->createTextNode(radiusStr);
131  radius.appendChild(radiusDomText);
132 
133  coneElement.appendChild(radius);
134 
135  //Write fields if exist.
136  if(!cone->fields().isEmpty()){
137  foreach(axlAbstractField *field, cone->fields()){
139  QDomElement fieldElement = field_writer->write(doc, field);
140  coneElement.appendChild(fieldElement);
141  }
142  }
143 
144 
145  return coneElement;
146 }
147 
148 
149 QDomElement axlConeWriter::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 *createaxlConeWriter(void)
165 {
166  return new axlConeWriter;
167 }
bool reject(dtkAbstractData *data)
QString identifier(void) const
axlPoint apex
Definition: axlCone.h:37
virtual bool accept(dtkAbstractData *data)=0
axlPoint basePoint
Definition: axlCone.h:37
static axlFieldWritersFactory * instance(void)
virtual QString identifier(void) const
QString description(void) const
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
static bool registered(void)
dtkAbstractDataWriter * create(const QString &interface_name)
Class axlAbstractField defines an API for arrays of numeric data.
double y
Definition: axlPoint.h:37
bool accept(dtkAbstractData *data)
double radius
Definition: axlCone.h:38
QStringList handled(void) const
double z
Definition: axlPoint.h:38
Class axlCone defines 3D cones.
Definition: axlCone.h:34
QList< axlAbstractField * > fields(void)
dtkAbstractDataWriter * createaxlConeWriter(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double x
Definition: axlPoint.h:37