From 2271ef709f6785b2e156ddca311c7628b7803af0 Mon Sep 17 00:00:00 2001 From: neoraider Date: Thu, 10 Apr 2008 12:00:05 +0000 Subject: zoomedit: * Level can load Room data from the XML tree now. --- src/Data/Triangle.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'src/Data/Triangle.cpp') 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 +#include 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(*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"); +} } } -- cgit v1.2.3