/* * Triangle.h * * Copyright (C) 2008 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #ifndef ZOOMEDIT_DATA_TRIANGLE_H_ #define ZOOMEDIT_DATA_TRIANGLE_H_ #include "TexCoords.h" #include #include namespace ZoomEdit { namespace Data { class Triangle { private: xmlpp::Element *triangleNode; xmlpp::Element *vertexNodes[3]; xmlpp::Element *normalNodes[3]; xmlpp::Element *texCoordsNodes[3]; vmml::vec3f vertices[3]; vmml::vec3f normals[3]; TexCoords texCoords[3]; bool visible; Glib::ustring texture; vmml::vec3f loadVector(xmlpp::Element *node) const; TexCoords loadTexCoords(xmlpp::Element *node) const; public: Triangle(xmlpp::Element *node); const vmml::vec3f& getVertex(unsigned int i) const {return vertices[i%3];} void setVertex(unsigned int i, const vmml::vec3f &v); void setVertices(const vmml::vec3f *v) { for(int i = 0; i < 3; ++i) setVertex(i, v[i]); } const vmml::vec3f& getNormal(unsigned int i) const {return normals[i%3];} void setNormal(unsigned int i, const vmml::vec3f &n); void setNormals(const vmml::vec3f *n) { for(int i = 0; i < 3; ++i) setNormal(i, n[i]); } const TexCoords& getTexCoords(unsigned int i) const {return texCoords[i%3];} void setTexCoords(unsigned int i, const TexCoords &t); void setTexCoords(const TexCoords *t) { for(int i = 0; i < 3; ++i) setTexCoords(i, t[i]); } bool isVisible() const {return visible;} void setVisible(bool vis) { visible = vis; triangleNode->set_attribute("visible", vis ? "true" : "false"); } xmlpp::Element* getNode() const { return triangleNode; } }; } } #endif /*ZOOMEDIT_DATA_TRIANGLE_H_*/