Developer documentation | Axl-2.5.1

axlSurfaceRevolutionParametricReader.cpp
Go to the documentation of this file.
1 //Author: Hung NGUYEN - 9:17 AM 20/05/2014.
2 
3 
4 
6 
8 
9 #include <dtkCoreSupport/dtkAbstractData.h>
10 #include <dtkCoreSupport/dtkAbstractDataFactory.h>
12 
13 #include <axlCore/axlLine.h>
14 #include <axlCore/axlLineReader.h>
15 
16 #include <QColor>
17 
18 
21 
22  this->setObjectName(this->description());
23 }
24 
26 }
27 
29  return "axlSurfaceRevolutionParametricReader";
30 }
31 
33  return "axlSurfaceRevolutionParametricReader";
34 }
35 
37  return QStringList() << "axlSurfaceRevolutionParametric";
38 }
39 
41  return dtkAbstractDataFactory::instance()->registerDataReaderType("axlSurfaceRevolutionParametricReader", QStringList(), createaxlSurfaceRevolutionParametricReader);
42 }
43 
45  QDomElement element = node.toElement();
46 
47  if (element.tagName() != "surface_revolution_parametric")
48  return false;
49 
50  return true;
51 }
52 
54  return !this->accept(node);
55 }
56 
58  // Create element from given node
59  QDomElement element = node.toElement();
60 
62 
63  // Handle name
64  QString name = element.attribute("name");
65  if (!name.isEmpty()) {
66  surRev->setObjectName(name);
67  }
68 
69  // Handle color
70  QString color = element.attribute("color");
71  if (!color.isEmpty()) {
72  QStringList colorList = color.split(" ");
73  if (colorList.size() > 2) // rgb components
74  surRev->setColor(QColor(colorList.at(0).toInt(), colorList.at(1).toInt(), colorList.at(2).toInt()));
75  if (colorList.size() == 4)
76  surRev->setOpacity(colorList.at(3).toFloat());
77  }
78 
79  // Handle shader
80  QString shader = element.attribute("shader");
81  QString dirShader;
82  if (!shader.isEmpty()) {
83  // Try to read from axelShader.qrc
84  dirShader = ":axlShader/shader/" + shader;
85  if (!QFile::exists(dirShader)) {
86  QSettings settings("inria", "dtk");
87  QString defaultPath;
88  settings.beginGroup("shader");
89  dirShader = settings.value("path", defaultPath).toString();
90  dirShader.append("/" + shader);
91  }
92  surRev->setShader(dirShader);
93  }
94 
95  // Handle size
96  QString size = element.attribute("size");
97  if (!size.isEmpty())
98  surRev->setSize(size.toFloat());
99 
100 
101  // Handle axe
102  QDomElement axeElement = element.elementsByTagName("axe").at(0).toElement();
103  axlLineReader *lineReader = dynamic_cast<axlLineReader*>(dtkAbstractDataFactory::instance()->reader("axlLineReader"));
104  axlLine *axe = dynamic_cast<axlLine*>(lineReader->read(axeElement.firstChild()));
105  surRev->setAxe(axe);
106 
107  // Handle faces
108  QDomElement curveElement = element.elementsByTagName("curve").at(0).toElement();
109  QString curveReaderTag = curveElement.attribute("type")+ "Reader";
110  axlAbstractDataReader* curveReader = dynamic_cast<axlAbstractDataReader*>(dtkAbstractDataFactory::instance()->reader(curveReaderTag));
111  axlAbstractCurve *curve = dynamic_cast<axlAbstractCurve *>(curveReader->read(curveElement.firstChild()));
112  surRev->setCurve(curve);
113 
114  // Handle angle
115  QDomElement angleElement = element.elementsByTagName("angle").at(0).toElement();
116  double startAngle = angleElement.attribute("start_angle").toDouble();
117  double endAngle = angleElement.attribute("end_angle").toDouble();
118  surRev->setAngle(startAngle,endAngle);
119 
120  return surRev;
121 }
122 
123 
124 
125 dtkAbstractDataReader *createaxlSurfaceRevolutionParametricReader(void) {
127 }
Class axlLine defines 3D lines.
Definition: axlLine.h:35
axlAbstractData * read(const QDomNode &node)
void setShader(const QString &shader)
dtkAbstractDataReader * createaxlSurfaceRevolutionParametricReader(void)
virtual axlAbstractData * read(const QDomNode &node)=0
void setOpacity(const double &opacity)
void setAngle(double startAngle, double endAngle)
void setSize(const double &size)
void setColor(double r, double g, double b)
Class axlAbstractData defines an API for all type of axel data.