Developer documentation | Axl-2.5.1

axlDataDynamicWriter.cpp
Go to the documentation of this file.
1 /* axlDataDynamicWriter.cpp ---
2  *
3  * Author: Anais Ducoffe
4  * Copyright (C) 2013 - Anais Ducoffe, Inria.
5  */
6 
7 /* Commentary:
8  *
9  */
10 
11 /* Change log:
12  *
13  */
14 
15 #include "axlDataDynamicWriter.h"
16 
17 #include <axlCore/axlDataDynamic.h>
18 #include <axlCore/axlDouble.h>
20 
21 #include <dtkCoreSupport/dtkAbstractData.h>
22 
24 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
26 
27 // /////////////////////////////////////////////////////////////////
28 // axlDataDynamicWriter
29 // /////////////////////////////////////////////////////////////////
30 
32 {
33  this->setObjectName(this->description());
34 }
35 
37 {
38 
39 }
40 
42 {
43  return "axlDataDynamicWriter";
44 }
45 
47 {
48  return "axlDataDynamicWriter";
49 }
50 
51 QStringList axlDataDynamicWriter::handled(void) const
52 {
53  return QStringList() << "axlDataDynamic";
54 }
55 
57 {
58  return dtkAbstractDataFactory::instance()->registerDataWriterType("axlDataDynamicWriter", QStringList(), createaxlDataDynamicWriter);
59 }
60 
61 bool axlDataDynamicWriter::accept(dtkAbstractData *data)
62 {
63  axlDataDynamic *dataDynamic = dynamic_cast<axlDataDynamic *>(data);
64  if(dataDynamic)
65  return true;
66 
67  return false;
68 }
69 
70 bool axlDataDynamicWriter::reject(dtkAbstractData *data)
71 {
72  return !this->accept(data);
73 }
74 
75 QDomElement axlDataDynamicWriter::write(QDomDocument *doc, dtkAbstractData *data)
76 {
77  axlDataDynamic *dataDynamic = dynamic_cast<axlDataDynamic *>(data);
78 
80  //QDomElement dataDynamicElement = doc->createElement("dataDynamic");
81  QDomElement dataDynamicElement = doc->createElement("process");
82  //dataDynamicElement.setAttribute("name",dataDynamic->name());
83  dataDynamicElement.setAttribute("type", dataDynamic->process()->identifier());
84  if(dataDynamic->getType() == axlDataDynamic::Static){
85  dataDynamicElement.setAttribute("status", "static");
86  }else{
87  dataDynamicElement.setAttribute("status", "dynamic");
88  }
89  dataDynamicElement.setAttribute("name", dataDynamic->name());
90 
92  //dataDynamicElement.setAttribute("size", QString::number(dataDynamic->size()));
93 
94  // ////Color
95  // QColor qcolor = dataDynamic->color();
96  // QString color ;
97  // QTextStream(&color) << QString::number(qcolor.red()) << " "
98  // << QString::number(qcolor.green()) << " "
99  // << QString::number(qcolor.blue())<< " "
100  // << QString::number(dataDynamic->opacity());
101  // dataDynamicElement.setAttribute("color", color);
102 
103  // ////Shader
104  // QString shader = dataDynamic->shader();
105  // QFileInfo shaderFileInfo(shader);
106  // dataDynamicElement.setAttribute("shader", shaderFileInfo.fileName());
107 
108  //Write process name
109  //dataDynamicElement.setAttribute("name_process", dataDynamic->process()->identifier());
110 
111 
112  //Write inputs
113  int channelCountDouble = 0;
114  int channelCountData = 0;
115  foreach(axlAbstractData *axlvalue, dataDynamic->inputs()){
116  QDomElement newInput = doc->createElement("input");
117  if(axlDouble *value = dynamic_cast<axlDouble *>(axlvalue)){
118  newInput.setAttribute("value", value->value());
119  newInput.setAttribute("type","double");
120  //newInput.setAttribute("channel", QString::number(channelCountDouble));
121  dataDynamicElement.appendChild(newInput);
122  channelCountDouble++;
123 
124  }else {
125  newInput.setAttribute("name", axlvalue->name());
126  newInput.setAttribute("type", "data");
127  //newInput.setAttribute("channel", QString::number(channelCountData));
128  dataDynamicElement.appendChild(newInput);
129  channelCountData++;
130  }
131 
132  }
133 
134 
135  //Write outputs
136  for(int i = 0; i < dataDynamic->numberOfChannels();i++ ){
137  QDomElement newOutput = doc->createElement("output");
138  newOutput.setAttribute("name", dataDynamic->outputs(i)->name());
139 
141  newOutput.setAttribute("size", QString::number(dataDynamic->outputs()->size()));
142 
144  QColor qcolor = dataDynamic->outputs()->color();
145  QString color ;
146  QTextStream(&color) << QString::number(qcolor.red()) << " "
147  << QString::number(qcolor.green()) << " "
148  << QString::number(qcolor.blue())<< " "
149  << QString::number(dataDynamic->outputs()->opacity());
150  newOutput.setAttribute("color", color);
151 
153  QString shader = dataDynamic->outputs()->shader();
154  QFileInfo shaderFileInfo(shader);
155  newOutput.setAttribute("shader", shaderFileInfo.fileName());
156 
157 
158  dataDynamicElement.appendChild(newOutput);
159 
160  }
161 
162 
163  //Write fields if exist.
164  if(!dataDynamic->fields().isEmpty()){
165  foreach(axlAbstractField *field, dataDynamic->fields()){
167  QDomElement fieldElement = field_writer->write(doc, field);
168  dataDynamicElement.appendChild(fieldElement);
169  }
170  }
171 
172  return dataDynamicElement;
173 }
174 
175 
176 
177 QDomElement axlDataDynamicWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
178 {
179  QDomElement element;
180 
181  if(!axl_writer)
182  return element;
183 
184  if(!axl_writer->accept(data))
185  return element;
186 
187  element = axl_writer->write(doc, data);
188 
189  return element;
190 }
191 
192 dtkAbstractDataWriter *createaxlDataDynamicWriter(void)
193 {
194  return new axlDataDynamicWriter;
195 }
196 
axlDataDynamic::Type getType(void)
Return the type : dynamic if it is a dynamic object or static if it is just a computation node...
virtual int numberOfChannels(void)
Return the number of output(s);.
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
QStringList handled(void) const
Class axlDouble defines a double.
Definition: axlDouble.h:29
virtual bool accept(dtkAbstractData *data)=0
dtkAbstractDataWriter * createaxlDataDynamicWriter(void)
QString identifier(void) const
static axlFieldWritersFactory * instance(void)
virtual QString identifier(void) const
axlAbstractData * outputs(void)
Return the first output of the list.
axlAbstractProcess * process(void)
Return the process.
static bool registered(void)
Class axlDataDynamic defines a dynamic object.
dtkAbstractDataWriter * create(const QString &interface_name)
bool reject(dtkAbstractData *data)
Class axlAbstractField defines an API for arrays of numeric data.
QList< axlAbstractData * > inputs(void)
Return input list;.
QString description(void) const
QList< axlAbstractField * > fields(void)
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
virtual QString identifier(void) const
Class axlAbstractData defines an API for all type of axel data.
bool accept(dtkAbstractData *data)