Added try/catch around 3D mesh generation

This commit is contained in:
2018-04-04 12:13:24 +02:00
parent 9030841910
commit 3a4deaf314

View File

@@ -87,26 +87,29 @@ public:
void rebuild(Floorplan::IndoorMap* im) {
// rebuild the mesh
Ray3D::ModelFactory fac(im);
mesh = fac.getMesh();
triaTransp.clear();
triaSolid.clear();
for (const Ray3D::Obstacle3D& obs : mesh.elements) {
const int matID = getMaterial(obs);
const Material& mat = mats[matID];
for (const Triangle3& tria : obs.triangles) {
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);
// rebuild the mesh
try {
Ray3D::ModelFactory fac(im);
mesh = fac.getMesh();
for (const Ray3D::Obstacle3D& obs : mesh.elements) {
const int matID = getMaterial(obs);
const Material& mat = mats[matID];
for (const Triangle3& tria : obs.triangles) {
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;
}
}
};