Developer documentation | Axl-2.5.1

axlPointSetWriter.cpp
Go to the documentation of this file.
1 /* axlPointSetWriter.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 "axlPointSetWriter.h"
21 
22 #include <axlCore/axlPoint.h>
23 #include <axlCore/axlPointSet.h>
24 
25 #include <dtkCoreSupport/dtkAbstractData.h>
26 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
27 
28 // /////////////////////////////////////////////////////////////////
29 // axlPointSetWriter
30 // /////////////////////////////////////////////////////////////////
31 
33 {
34  this->setObjectName(this->description());
35 }
36 
38 {
39 
40 }
41 
42 QString axlPointSetWriter::identifier(void) const
43 {
44  return "axlPointSetWriter";
45 }
46 
47 QString axlPointSetWriter::description(void) const
48 {
49  return "axlPointSetWriter";
50 }
51 
52 QStringList axlPointSetWriter::handled(void) const
53 {
54  return QStringList() << "axlPointSet";
55 }
56 
58 {
59  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlPointSetWriter", QStringList(), createaxlPointSetWriter);
60 }
61 
62 bool axlPointSetWriter::accept(dtkAbstractData *data)
63 {
64  axlPointSet *pointSet = dynamic_cast<axlPointSet *>(data);
65  if(pointSet)
66  return true;
67 
68  return false;
69 }
70 
71 bool axlPointSetWriter::reject(dtkAbstractData *data)
72 {
73  return !this->accept(data);
74 }
75 
76 QDomElement axlPointSetWriter::write(QDomDocument *doc, dtkAbstractData *data)
77 {
78  axlPointSet *pointSet = dynamic_cast<axlPointSet *>(data);
79 
81  QDomElement pointElement = doc->createElement("pointset");
82  pointElement.setAttribute("name",pointSet->name());
83 
84 
86  pointElement.setAttribute("size", QString::number(pointSet->size()));
87 
88  //pointElement.setAttribute("numberOfPoints", QString::number(pointSet->numberOfPoints()));
89 
90 
91 
93  QString color ;
94  if(pointSet->isUniqueColor())
95  {
96  QColor qcolor = pointSet->color();
97  QTextStream(&color) << QString::number(qcolor.red()) << " "
98  << QString::number(qcolor.green()) << " "
99  << QString::number(qcolor.blue()) << " "
100  << QString::number(pointSet->opacity());
101  }
102  else
103  color = "rgb";
104  pointElement.setAttribute("color", color);
105 
107  QString shader = pointSet->shader();
108  QFileInfo shaderFileInfo(shader);
109  pointElement.setAttribute("shader", shaderFileInfo.fileName());
110 
111  //Write point
112  //number of points
113  QDomElement numberofpoints = doc->createElement("numberofpoints");
114  QString numberofpointsStr;
115  QTextStream(&numberofpointsStr) << QString::number(pointSet->numberOfPoints());
116  QDomText numberofpointsDomText = doc->createTextNode(numberofpointsStr);
117  numberofpoints.appendChild(numberofpointsDomText);
118 
119  pointElement.appendChild(numberofpoints);
120 
121  //coordinate
122  QDomElement coordinates = doc->createElement("points");
123  QString pointSetText;
124  if(pointSet->isUniqueColor())
125  {
126  for(int i = 0 ; i < pointSet->numberOfPoints(); i++)
127  QTextStream(&pointSetText)<< "\n" << QString::number(pointSet->value(i)->x()) << " "<< QString::number(pointSet->value(i)->y()) << " "<< QString::number(pointSet->value(i)->z());
128  }
129  else
130  {
131  for(int i = 0 ; i < pointSet->numberOfPoints(); i++)
132  QTextStream(&pointSetText)<< "\n" << QString::number(pointSet->value(i)->x()) << " "<< QString::number(pointSet->value(i)->y()) << " "<< QString::number(pointSet->value(i)->z())<< " " << QString::number(pointSet->value(i)->color().red()) << " "<< QString::number(pointSet->value(i)->color().green()) << " "<< QString::number(pointSet->value(i)->color().blue());
133  }
134  QTextStream(&pointSetText)<< "\n"; // for easy read of the file
135 
136  QDomText pointDomText = doc->createTextNode(pointSetText);
137 
138  coordinates.appendChild(pointDomText);
139 
140  pointElement.appendChild(coordinates);
141 
142  return pointElement;
143 }
144 
145 
146 QDomElement axlPointSetWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
147 {
148  QDomElement element;
149 
150  if(!axl_writer)
151  return element;
152 
153  if(!axl_writer->accept(data))
154  return element;
155 
156  element = axl_writer->write(doc, data);
157 
158  return element;
159 }
160 
161 dtkAbstractDataWriter *createaxlPointSetWriter(void)
162 {
163  return new axlPointSetWriter;
164 }
virtual bool accept(dtkAbstractData *data)=0
dtkAbstractDataWriter * createaxlPointSetWriter(void)
axlPoint * value(int n) const
QString identifier(void) const
static bool registered(void)
bool isUniqueColor(void) const
Definition: axlPointSet.cpp:75
bool accept(dtkAbstractData *data)
double y
Definition: axlPoint.h:37
double z
Definition: axlPoint.h:38
bool reject(dtkAbstractData *data)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
double x
Definition: axlPoint.h:37
QStringList handled(void) const
QString description(void) const
int numberOfPoints(void) const
Definition: axlPointSet.cpp:85
QDomElement write(QDomDocument *doc, dtkAbstractData *data)