Developer documentation | Axl-2.5.1

axlFieldSpatialPointDistanceReader.cpp
Go to the documentation of this file.
1 /* axlFieldSpatialPointDistanceReader.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 #include "axlReader.h"
17 
20 #include <axlCore/axlInteger.h>
21 #include <axlCore/axlDouble.h>
22 #include <axlCore/axlPoint.h>
23 
24 #include <dtkCoreSupport/dtkAbstractData.h>
25 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
26 #include <dtkCoreSupport/dtkAbstractProcessFactory.h>
27 
28 
29 // /////////////////////////////////////////////////////////////////
30 // axlFieldSpatialPointDistanceReader
31 // /////////////////////////////////////////////////////////////////
32 
34 {
35  this->setObjectName(this->description());
36 }
37 
39 {
40 
41 }
42 
44 {
45  return "axlFieldSpatialPointDistanceReader";
46 }
47 
49 {
50  return "axlFieldSpatialPointDistanceReader";
51 }
52 
54 {
55  return QStringList() << "axlAbstractField" << "axlFieldSpatialPointDistance";
56 }
57 
59 {
60  return dtkAbstractDataFactory::instance()->registerDataReaderType("axlFieldSpatialPointDistanceReader", QStringList(), createaxlFieldSpatialPointDistanceReader);
61 }
62 
64 {
65  QDomElement element = node.toElement();
66 
67  if(element.tagName() != "field")
68  return false;
69 
70  return true;
71 }
72 
74 {
75  return !this->accept(node);
76 }
77 
78 
79 //read only one special field :axlFieldSpatialPointDistance.
81 {
82 
83  QDomElement element = node.toElement();
84  axlFieldSpatialPointDistance *field = NULL;
85 
86  // field type : the type corresponds to the identifier, use factory to initialize field.
87  QString type = element.attribute("type");
88  if(!type.isEmpty())
89  {
90  field = dynamic_cast<axlFieldSpatialPointDistance *>(dtkAbstractDataFactory::instance()->create(type));
91  }
92 
94  QString name = element.attribute("name");
95  if(!name.isEmpty())
96  {
97  field->setObjectName(name);
98  }
99 
100 
101  //Parameters
102  QDomNode child = element.elementsByTagName("input").at(0);
103  if(child.isElement() ){
104  double x = 0;
105  double y = 0;
106  double z = 0;
107 
108  QString xcoordinate = child.toElement().attribute("xcoordinate");
109  if(!xcoordinate.isEmpty()){
110  x = xcoordinate.toDouble();
111  }
112 
113  QString ycoordinate = child.toElement().attribute("ycoordinate");
114  if(!ycoordinate.isEmpty()){
115  y = ycoordinate.toDouble();
116  }
117 
118  QString zcoordinate = child.toElement().attribute("zcoordinate");
119  if(!zcoordinate.isEmpty()){
120  z = zcoordinate.toDouble();
121  }
122 
123  field->setParameter(x,0);
124  field->setParameter(y,1);
125  field->setParameter(z,2);
126  }
127 
128  field->update();
129  return field;
130 
131 
132 }
133 
134 dtkAbstractData *axlFieldSpatialPointDistanceReader::dataByReader(axlAbstractDataReader *axl_reader, const QDomNode& node)
135 {
136  if(!axl_reader)
137  return NULL;
138 
139  if(!axl_reader->accept(node))
140  return NULL;
141 
142  axl_reader->dtkAbstractDataReader::read(this->file());
143 
144  if(dtkAbstractData *data = axl_reader->read(node))
145  return data;
146 
147 
148  return NULL;
149 }
150 
151 
152 
153 dtkAbstractDataReader *createaxlFieldSpatialPointDistanceReader(void)
154 {
156 }
157 
158 
axlAbstractData * read(const QDomNode &node)
dtkAbstractDataReader * createaxlFieldSpatialPointDistanceReader(void)
virtual axlAbstractData * read(const QDomNode &node)=0
Class axlFieldSpatialPointDistance defines an API for spatial field.
virtual bool accept(const QDomNode &node)=0
dtkAbstractData * dataByReader(axlAbstractDataReader *axl_reader, const QDomNode &node)
void setParameter(double data, int channel)
Sets the reference point.
Class axlAbstractData defines an API for all type of axel data.