Developer documentation | Axl-2.5.1

axlTabulatedCylinderReader.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 <QColor>
14 
15 
18 
19  this->setObjectName(this->description());
20 }
21 
23 }
24 
26  return "axlTabulatedCylinderReader";
27 }
28 
30  return "axlTabulatedCylinderReader";
31 }
32 
33 QStringList axlTabulatedCylinderReader::handled(void) const {
34  return QStringList() << "axlTabulatedCylinder";
35 }
36 
38  return dtkAbstractDataFactory::instance()->registerDataReaderType("axlTabulatedCylinderReader", QStringList(), createaxlTabulatedCylinderReader);
39 }
40 
41 bool axlTabulatedCylinderReader::accept(const QDomNode& node) {
42  QDomElement element = node.toElement();
43 
44  if (element.tagName() != "tabulated_cylinder")
45  return false;
46 
47  return true;
48 }
49 
50 bool axlTabulatedCylinderReader::reject(const QDomNode& node) {
51  return !this->accept(node);
52 }
53 
55  // Create element from given node
56  QDomElement element = node.toElement();
57 
59 
60  // Handle name
61  QString name = element.attribute("name");
62  if (!name.isEmpty()) {
63  tabCyl->setObjectName(name);
64  }
65 
66  // Handle color
67  QString color = element.attribute("color");
68  if (!color.isEmpty()) {
69  QStringList colorList = color.split(" ");
70  if (colorList.size() > 2) // rgb components
71  tabCyl->setColor(QColor(colorList.at(0).toInt(), colorList.at(1).toInt(), colorList.at(2).toInt()));
72  if (colorList.size() == 4)
73  tabCyl->setOpacity(colorList.at(3).toFloat());
74  }
75 
76  // Handle shader
77  QString shader = element.attribute("shader");
78  QString dirShader;
79  if (!shader.isEmpty()) {
80  // Try to read from axelShader.qrc
81  dirShader = ":axlShader/shader/" + shader;
82  if (!QFile::exists(dirShader)) {
83  QSettings settings("inria", "dtk");
84  QString defaultPath;
85  settings.beginGroup("shader");
86  dirShader = settings.value("path", defaultPath).toString();
87  dirShader.append("/" + shader);
88  }
89  tabCyl->setShader(dirShader);
90  }
91 
92  // Handle size
93  QString size = element.attribute("size");
94  if (!size.isEmpty())
95  tabCyl->setSize(size.toFloat());
96 
97  // Handle curves
98  // axlPoint *gen = new axlPoint();
99  QDomNode genElement = element.elementsByTagName("generatrix").at(0);
100 
101  QDomElement ptElement = genElement.toElement();
102  QString ptReaderTag = "axlPointReader";
103  axlAbstractDataReader* ptReader = dynamic_cast<axlAbstractDataReader*>(dtkAbstractDataFactory::instance()->reader(ptReaderTag));
104  axlPoint *pt = dynamic_cast<axlPoint *>(ptReader->read(ptElement.firstChild()));
105 
106  tabCyl->set_generatrix(pt);
107 
108  QDomElement dirElement = element.elementsByTagName("directrix").at(0).toElement();
109  QString curveReaderTag = dirElement.attribute("type")+ "Reader";
110  axlAbstractDataReader* curveReader = dynamic_cast<axlAbstractDataReader*>(dtkAbstractDataFactory::instance()->reader(curveReaderTag));
111  axlAbstractCurve *curve = dynamic_cast<axlAbstractCurve *>(curveReader->read(dirElement.firstChild()));
112  tabCyl->set_directrix(curve);
113 
114  return tabCyl;
115 }
116 
117 
118 
119 dtkAbstractDataReader *createaxlTabulatedCylinderReader(void) {
120  return new axlTabulatedCylinderReader;
121 }
Class axlPoint defines 3D points.
Definition: axlPoint.h:34
axlAbstractData * read(const QDomNode &node)
bool reject(const QDomNode &node)
void setShader(const QString &shader)
dtkAbstractDataReader * createaxlTabulatedCylinderReader(void)
bool accept(const QDomNode &node)
virtual axlAbstractData * read(const QDomNode &node)=0
void set_generatrix(const axlPoint &vector)
void setOpacity(const double &opacity)
void setSize(const double &size)
void setColor(double r, double g, double b)
Class axlAbstractData defines an API for all type of axel data.
void set_directrix(axlAbstractCurve *curve)