Developer documentation | Axl-2.5.1

axlFieldSpatialCoordinatesReader.cpp
Go to the documentation of this file.
1 /* axlFieldSpatialCoordinatesReader.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 
23 #include <dtkCoreSupport/dtkAbstractData.h>
24 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
25 #include <dtkCoreSupport/dtkAbstractProcessFactory.h>
26 
27 //#include <axlGui/axlInspectorToolFactory.h>
28 
29 // /////////////////////////////////////////////////////////////////
30 // axlFieldSpatialCoordinatesReader
31 // /////////////////////////////////////////////////////////////////
32 
34 {
35  this->setObjectName(this->description());
36 }
37 
39 {
40 
41 }
42 
44 {
45  return "axlFieldSpatialCoordinatesReader";
46 }
47 
49 {
50  return "axlFieldSpatialCoordinatesReader";
51 }
52 
54 {
55  return QStringList() << "axlAbstractField" << "axlFieldSpatialCoordinates";
56 }
57 
59 {
60  return dtkAbstractDataFactory::instance()->registerDataReaderType("axlFieldSpatialCoordinatesReader", QStringList(), createaxlFieldSpatialCoordinatesReader);
61 }
62 
63 bool axlFieldSpatialCoordinatesReader::accept(const QDomNode& node)
64 {
65  QDomElement element = node.toElement();
66 
67  if(element.tagName() != "field")
68  return false;
69 
70  return true;
71 }
72 
73 bool axlFieldSpatialCoordinatesReader::reject(const QDomNode& node)
74 {
75  return !this->accept(node);
76 }
77 
78 
79 //read only one special field :axlFieldSpatialPointDistance.
81 {
82 
83  QDomElement element = node.toElement();
84  axlAbstractField *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<axlAbstractField *>(dtkAbstractDataFactory::instance()->create(type));
91  }
92 
94  QString name = element.attribute("name");
95  if(!name.isEmpty())
96  {
97  field->setObjectName(name);
98  }
99 
100  //Parameters
101  int number = node.childNodes().size();
102  for(int i = 0;i < number; i++){
103  QDomNode child = node.childNodes().at(i);
104  if(child.isElement() ){
105  double channel =0;
106  double value = 0;
107 
108  if(!child.toElement().attribute("channel").isEmpty())
109  channel = child.toElement().attribute("channel").toInt();
110 
111  if(!child.toElement().attribute("value").isEmpty())
112  value = child.toElement().attribute("value").toDouble();
113 
114  field->setParameter(value, channel);
115  }
116 
117  }
118 
119  field->update();
120  return field;
121 
122 
123 }
124 
125 dtkAbstractData *axlFieldSpatialCoordinatesReader::dataByReader(axlAbstractDataReader *axl_reader, const QDomNode& node)
126 {
127  if(!axl_reader)
128  return NULL;
129 
130  if(!axl_reader->accept(node))
131  return NULL;
132 
133  axl_reader->dtkAbstractDataReader::read(this->file());
134 
135  if(dtkAbstractData *data = axl_reader->read(node))
136  return data;
137 
138 
139  return NULL;
140 }
141 
142 
143 
144 dtkAbstractDataReader *createaxlFieldSpatialCoordinatesReader(void)
145 {
147 }
148 
149 
axlAbstractData * read(const QDomNode &node)
virtual void update(void)
dtkAbstractData * dataByReader(axlAbstractDataReader *axl_reader, const QDomNode &node)
virtual axlAbstractData * read(const QDomNode &node)=0
Class axlAbstractField defines an API for arrays of numeric data.
dtkAbstractDataReader * createaxlFieldSpatialCoordinatesReader(void)
virtual bool accept(const QDomNode &node)=0
Class axlAbstractData defines an API for all type of axel data.