/* * © Copyright 2014 – Urheberrechtshinweis * Alle Rechte vorbehalten / All Rights Reserved * * Programmcode ist urheberrechtlich geschuetzt. * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. * Keine Verwendung ohne explizite Genehmigung. * (vgl. § 106 ff UrhG / § 97 UrhG) */ #ifndef FLOORPLAN_3D_MESH_H #define FLOORPLAN_3D_MESH_H #include #include "../../../geo/Triangle3.h" #include "../../../math/Matrix4.h" namespace Floorplan3D { class Mesh { protected: std::vector trias; public: /** get the mesh's triangles */ const std::vector& getTriangles() const { return trias; } void transform(const Point3 pos, Point3 size, Point3 rot_deg) { const Matrix4 mRot = Matrix4::getRotationDeg(rot_deg.x, rot_deg.y, rot_deg.z); const Matrix4 mSize = Matrix4::getScale(size.x, size.y, size.z); const Matrix4 mPos = Matrix4::getTranslation(pos.x, pos.y, pos.z); const Matrix4 mat = mPos * mRot * mSize; transform(mat); } void translate(const Point3 pos) { const Matrix4 mPos = Matrix4::getTranslation(pos.x, pos.y, pos.z); transform(mPos); } void transform(const Matrix4& mat) { for (Triangle3& tria : trias) { Vector4 v1(tria.p1.x, tria.p1.y, tria.p1.z, 1); Vector4 v2(tria.p2.x, tria.p2.y, tria.p2.z, 1); Vector4 v3(tria.p3.x, tria.p3.y, tria.p3.z, 1); v1 = mat*v1; v2 = mat*v2; v3 = mat*v3; tria.p1 = Point3(v1.x, v1.y, v1.z); tria.p2 = Point3(v2.x, v2.y, v2.z); tria.p3 = Point3(v3.x, v3.y, v3.z); } } void addQuad(Point3 p1, Point3 p2, Point3 p3, Point3 p4) { trias.push_back( Triangle3(p1,p2,p3) ); trias.push_back( Triangle3(p1,p3,p4) ); } void addTriangle(Point3 p1, Point3 p2, Point3 p3) { trias.push_back( Triangle3(p1,p2,p3) ); } }; } #endif // FLOORPLAN_3D_MESH_H