Added try/catch around 3D mesh generation
This commit is contained in:
@@ -87,26 +87,29 @@ public:
|
|||||||
|
|
||||||
void rebuild(Floorplan::IndoorMap* im) {
|
void rebuild(Floorplan::IndoorMap* im) {
|
||||||
|
|
||||||
// rebuild the mesh
|
|
||||||
Ray3D::ModelFactory fac(im);
|
|
||||||
mesh = fac.getMesh();
|
|
||||||
|
|
||||||
triaTransp.clear();
|
triaTransp.clear();
|
||||||
triaSolid.clear();
|
triaSolid.clear();
|
||||||
|
|
||||||
for (const Ray3D::Obstacle3D& obs : mesh.elements) {
|
// rebuild the mesh
|
||||||
const int matID = getMaterial(obs);
|
try {
|
||||||
const Material& mat = mats[matID];
|
Ray3D::ModelFactory fac(im);
|
||||||
for (const Triangle3& tria : obs.triangles) {
|
mesh = fac.getMesh();
|
||||||
const Point3 n = cross(tria.p2-tria.p1, tria.p3-tria.p1).normalized();
|
for (const Ray3D::Obstacle3D& obs : mesh.elements) {
|
||||||
if (mat.a != 255) {
|
const int matID = getMaterial(obs);
|
||||||
triaTransp.addTriangle(tria.p1, tria.p2, tria.p3, n, mat.r/255.0f, mat.g/255.0f, mat.b/255.0f, mat.a/255.0f);
|
const Material& mat = mats[matID];
|
||||||
} else {
|
for (const Triangle3& tria : obs.triangles) {
|
||||||
triaSolid.addTriangle(tria.p1, tria.p2, tria.p3, n, mat.r/255.0f, mat.g/255.0f, mat.b/255.0f, mat.a/255.0f);
|
const Point3 n = cross(tria.p2-tria.p1, tria.p3-tria.p1).normalized();
|
||||||
|
if (mat.a != 255) {
|
||||||
|
triaTransp.addTriangle(tria.p1, tria.p2, tria.p3, n, mat.r/255.0f, mat.g/255.0f, mat.b/255.0f, mat.a/255.0f);
|
||||||
|
} else {
|
||||||
|
triaSolid.addTriangle(tria.p1, tria.p2, tria.p3, n, mat.r/255.0f, mat.g/255.0f, mat.b/255.0f, mat.a/255.0f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch(const std::exception& e) {
|
||||||
|
std::cout << "Can't create 3D view. Failed to get mesh from model factory with error: '" << e.what() << "'" << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user