Developer documentation | Axl-2.5.1

axlPlaneWriter.cpp
Go to the documentation of this file.
1 /* axlPlaneWriter.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 "axlPlaneWriter.h"
21 
22 #include <axlCore/axlPlane.h>
23 #include <axlCore/axlPoint.h>
25 
26 #include <dtkCoreSupport/dtkAbstractData.h>
27 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
29 
30 // /////////////////////////////////////////////////////////////////
31 // axlPlaneWriter
32 // /////////////////////////////////////////////////////////////////
33 
35 {
36  this->setObjectName(this->description());
37 }
38 
40 {
41 
42 }
43 
44 QString axlPlaneWriter::identifier(void) const
45 {
46  return "axlPlaneWriter";
47 }
48 
49 QString axlPlaneWriter::description(void) const
50 {
51  return "axlPlaneWriter";
52 }
53 
54 QStringList axlPlaneWriter::handled(void) const
55 {
56  return QStringList() << "axlPlane";
57 }
58 
60 {
61  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlPlaneWriter", QStringList(), createaxlPlaneWriter);
62 }
63 
64 bool axlPlaneWriter::accept(dtkAbstractData *data)
65 {
66  axlPlane *plane = dynamic_cast<axlPlane *>(data);
67  if(plane)
68  return true;
69 
70  return false;
71 }
72 
73 bool axlPlaneWriter::reject(dtkAbstractData *data)
74 {
75  return !this->accept(data);
76 }
77 
78 QDomElement axlPlaneWriter::write(QDomDocument *doc, dtkAbstractData *data)
79 {
80  axlPlane *plane = dynamic_cast<axlPlane *>(data);
81 
83  QDomElement planeElement = doc->createElement("plane");
84  planeElement.setAttribute("name",plane->name());
85 
86 
88  planeElement.setAttribute("size", QString::number(plane->size()));
89 
90 
91 
93  QColor qcolor = plane->color();
94  QString color ;
95  QTextStream(&color) << QString::number(qcolor.red()) << " "
96  << QString::number(qcolor.green()) << " "
97  << QString::number(qcolor.blue()) << " "
98  << QString::number(plane->opacity());
99  planeElement.setAttribute("color", color);
100 
102  QString shader = plane->shader();
103  QFileInfo shaderFileInfo(shader);
104  planeElement.setAttribute("shader", shaderFileInfo.fileName());
105 
106  //Write plane
107  //point
108  QDomElement point = doc->createElement("point");
109  QString pointStr;
110  QTextStream(&pointStr) << QString::number(plane->point()->x()) << " "<< QString::number(plane->point()->y()) << " "<< QString::number(plane->point()->z());
111  QDomText pointDomText = doc->createTextNode(pointStr);
112  point.appendChild(pointDomText);
113 
114  planeElement.appendChild(point);
115 
116  //point
117  QDomElement normal = doc->createElement("normal");
118  QString normalStr;
119  QTextStream(&normalStr) << QString::number(plane->normal()->x()) << " "<< QString::number(plane->normal()->y()) << " "<< QString::number(plane->normal()->z());
120  QDomText normalDomText = doc->createTextNode(normalStr);
121  normal.appendChild(normalDomText);
122 
123  planeElement.appendChild(normal);
124 
125 
126  //Write fields if exist.
127  if(!plane->fields().isEmpty()){
128  foreach(axlAbstractField *field, plane->fields()){
130  QDomElement fieldElement = field_writer->write(doc, field);
131  planeElement.appendChild(fieldElement);
132  }
133  }
134 
135 
136  return planeElement;
137 }
138 
139 
140 QDomElement axlPlaneWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
141 {
142  QDomElement element;
143 
144  if(!axl_writer)
145  return element;
146 
147  if(!axl_writer->accept(data))
148  return element;
149 
150  element = axl_writer->write(doc, data);
151 
152  return element;
153 }
154 
155 dtkAbstractDataWriter *createaxlPlaneWriter(void)
156 {
157  return new axlPlaneWriter;
158 }
bool reject(dtkAbstractData *data)
dtkAbstractDataWriter * createaxlPlaneWriter(void)
virtual bool accept(dtkAbstractData *data)=0
Class axlPlane defines 3D planes.
Definition: axlPlane.h:34
static axlFieldWritersFactory * instance(void)
axlPoint point
Definition: axlPlane.h:37
virtual QString identifier(void) const
QStringList handled(void) const
dtkAbstractDataWriter * create(const QString &interface_name)
Class axlAbstractField defines an API for arrays of numeric data.
axlPoint normal
Definition: axlPlane.h:37
double y
Definition: axlPoint.h:37
QString identifier(void) const
double z
Definition: axlPoint.h:38
bool accept(dtkAbstractData *data)
QList< axlAbstractField * > fields(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
QString description(void) const
double x
Definition: axlPoint.h:37
static bool registered(void)