adjusted 3D modeling for walls

refactoring
new helper classes / methods
This commit is contained in:
2018-07-22 13:47:07 +02:00
parent da06bacb6b
commit 8ea7b7f3b6
13 changed files with 693 additions and 104 deletions

View File

@@ -38,6 +38,27 @@ namespace Ray3D {
/** ctor */
Obstacle3D(Type type, Floorplan::Material mat) : type(type), mat(mat) {;}
/** append a new triangle. REFERENCE ONLY VALID UNTIL NEXT ADD */
Triangle3& addTriangle(const Point3 p1, const Point3 p2, const Point3 p3) {
triangles.push_back(Triangle3(p1, p2, p3));
return triangles.back();
}
/** append a new quad by splitting into two triangles */
void addQuad(const Point3 p1, const Point3 p2, const Point3 p3, const Point3 p4) {
addTriangle(p1, p2, p3);
addTriangle(p1, p3, p4);
}
/** reverse all faces (CW<->CCW) */
void reverseFaces() {
for (Triangle3& t : triangles) {
t.reverse();
}
}
/** scaled copy */
Obstacle3D scaled(const Point3 scale) const {
Obstacle3D copy = *this;
@@ -60,9 +81,10 @@ namespace Ray3D {
Obstacle3D rotated_deg(const Point3 rot) const {
Obstacle3D copy = *this;
for (Triangle3& tria : copy.triangles) {
tria.p1 = tria.p1.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
tria.p2 = tria.p2.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
tria.p3 = tria.p3.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
// tria.p1 = tria.p1.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
// tria.p2 = tria.p2.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
// tria.p3 = tria.p3.rot(rot.x/180.0f*M_PI, rot.y/180.0f*M_PI, rot.z/180.0f*M_PI);
tria.rotate_deg(rot);
}
return copy;
}