Developer documentation | Axl-2.5.1

axlVolumeDiscreteWriter.cpp
Go to the documentation of this file.
1 /* axlVolumeDiscreteWriter.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 
16 
17 #include "axlVolumeDiscrete.h"
18 
19 #include <dtkCoreSupport/dtkAbstractData.h>
20 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
21 
22 #include "axlVtkViewPlugin.h"
23 
24 // /////////////////////////////////////////////////////////////////
25 // axlVolumeDiscreteWriter
26 // /////////////////////////////////////////////////////////////////
27 
29 {
30  this->setObjectName(this->description());
31 }
32 
34 {
35 
36 }
37 
39 {
40  return "axlVolumeDiscreteWriter";
41 }
42 
44 {
45  return "axlVolumeDiscreteWriter";
46 }
47 
48 QStringList axlVolumeDiscreteWriter::handled(void) const
49 {
50  return QStringList() << "axlVolumeDiscrete";
51 }
52 
54 {
55  return axlVtkViewPlugin::dataFactSingleton->registerDataWriterType("axlVolumeDiscreteWriter", QStringList(), createaxlVolumeDiscreteWriter);
56 }
57 
58 bool axlVolumeDiscreteWriter::accept(dtkAbstractData *data)
59 {
60  axlVolumeDiscrete *volume = dynamic_cast<axlVolumeDiscrete *>(data);
61  if(volume)
62  return true;
63 
64  return false;
65 }
66 
67 bool axlVolumeDiscreteWriter::reject(dtkAbstractData *data)
68 {
69  return !this->accept(data);
70 }
71 
72 QDomElement axlVolumeDiscreteWriter::write(QDomDocument *doc, dtkAbstractData *data)
73 {
74  axlVolumeDiscrete *volume = dynamic_cast<axlVolumeDiscrete *>(data);
75 
77  QDomElement volumeElement = doc->createElement("volume");
78 
79  volumeElement.setAttribute("type","discrete");
80  volumeElement.setAttribute("name",volume->name());
81 
82 
83  //Write grid dimensions
84  QDomElement dimension = doc->createElement("dimension");
85  QString dimensionValue;
86  QTextStream(&dimensionValue) << QString::number(volume->xDimension()) << " "<< QString::number(volume->yDimension()) << " "<< QString::number(volume->zDimension());
87 
88  QDomText dimensionDomText = doc->createTextNode(dimensionValue);
89 
90  dimension.appendChild(dimensionDomText);
91  volumeElement.appendChild(dimension);
92 
93 
94  //Write scalar values
95  QDomElement values = doc->createElement("values");
96  int nx = volume->xDimension();
97  int ny = volume->yDimension();
98  int nz = volume->zDimension();
99  QString scalarValues;
100  for(int i = 0;i < nx;i++){
101  for(int j = 0;j < ny;j++){
102  for(int k = 0;k < nz;k++){
103 
104  QTextStream(&scalarValues)<< "\n" << QString::number(volume->getValue(i,j,k)) ;
105  }
106  }
107  }
108 
109  QTextStream(&scalarValues) << "\n";
110  QDomText scalarDomText = doc->createTextNode(scalarValues);
111 
112  values.appendChild(scalarDomText);
113  volumeElement.appendChild(values);
114 
115 
116 
117  return volumeElement;
118 }
119 
120 
121 QDomElement axlVolumeDiscreteWriter::elementByWriter(axlAbstractDataWriter *axl_writer, QDomDocument *doc, dtkAbstractData *data)
122 {
123  QDomElement element;
124 
125  if(!axl_writer)
126  return element;
127 
128  if(!axl_writer->accept(data))
129  return element;
130 
131  element = axl_writer->write(doc, data);
132 
133  return element;
134 }
135 
136 dtkAbstractDataWriter *createaxlVolumeDiscreteWriter(void)
137 {
138  return new axlVolumeDiscreteWriter;
139 }
double getValue(int i, int j, int k) const
dtkAbstractDataWriter * createaxlVolumeDiscreteWriter(void)
virtual bool accept(dtkAbstractData *data)=0
int yDimension(void) const
bool accept(dtkAbstractData *data)
QDomElement write(QDomDocument *doc, dtkAbstractData *data)
int xDimension(void) const
int zDimension(void) const
bool reject(dtkAbstractData *data)
QString description(void) const
QStringList handled(void) const
virtual QDomElement write(QDomDocument *doc, dtkAbstractData *data)=0
static dtkAbstractDataFactory * dataFactSingleton