summaryrefslogtreecommitdiffstats
path: root/src/Data/Triangle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/Triangle.cpp')
-rw-r--r--src/Data/Triangle.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/Data/Triangle.cpp b/src/Data/Triangle.cpp
index 9adbaba..c7038c0 100644
--- a/src/Data/Triangle.cpp
+++ b/src/Data/Triangle.cpp
@@ -18,11 +18,81 @@
*/
#include "Triangle.h"
+#include <cstdlib>
+#include <iostream>
namespace ZoomEdit {
namespace Data {
+Vertex Triangle::loadVertex(xmlpp::Element *node) const {
+ Vertex v;
+
+ v.setX(std::atof(node->get_attribute_value("x").c_str()));
+ v.setY(std::atof(node->get_attribute_value("y").c_str()));
+ v.setZ(std::atof(node->get_attribute_value("z").c_str()));
+
+ return v;
+}
+
+Vector Triangle::loadVector(xmlpp::Element *node) const {
+ Vector v;
+
+ v.setX(std::atof(node->get_attribute_value("x").c_str()));
+ v.setY(std::atof(node->get_attribute_value("y").c_str()));
+ v.setZ(std::atof(node->get_attribute_value("z").c_str()));
+
+ return v;
+}
+TexCoords Triangle::loadTexCoords(xmlpp::Element *node) const {
+ TexCoords t;
+
+ t.setS(std::atof(node->get_attribute_value("s").c_str()));
+ t.setT(std::atof(node->get_attribute_value("t").c_str()));
+ t.setR(std::atof(node->get_attribute_value("r").c_str()));
+ t.setQ(std::atof(node->get_attribute_value("q").c_str()));
+
+ return t;
+}
+
+Triangle::Triangle(xmlpp::Element *node) : triangleNode(node) {
+ xmlpp::Node::NodeList nodeList = node->get_children();
+
+ int i = -1;
+
+ std::memset(vertexNodes, 0, sizeof(vertexNodes));
+
+ for(xmlpp::Node::NodeList::iterator n = nodeList.begin(); n != nodeList.end(); ++n) {
+ xmlpp::Element *e = dynamic_cast<xmlpp::Element*>(*n);
+ if(!e)
+ continue;
+
+ if(i >= 0) {
+ if(e->get_name() == "normal") {
+ normalNodes[i] = e;
+ normals[i] = loadVector(e);
+ continue;
+ }
+ else if(e->get_name() == "texcoords") {
+ texCoordsNodes[i] = e;
+ texCoords[i] = loadTexCoords(e);
+
+ std::cout << "TexCoords (" << texCoords[i].getS() << ", " << texCoords[i].getT() << ", " << texCoords[i].getR() << ", " << texCoords[i].getQ() << ")" << std::endl;
+
+ continue;
+ }
+ }
+
+ if(e->get_name() == "vertex") {
+ vertexNodes[++i] = e;
+ vertices[i] = loadVertex(e);
+
+ std::cout << "Vertex (" << vertices[i].getX() << ", " << vertices[i].getY() << ", " << vertices[i].getZ() << ")" << std::endl;
+ }
+ }
+
+ visibleNode = node->get_attribute("visible");
+}
}
}