diff --git a/mapview/3D/floorplan/FloorplanRendererModel.h b/mapview/3D/floorplan/FloorplanRendererModel.h index 2e1d20e..9a98cd5 100644 --- a/mapview/3D/floorplan/FloorplanRendererModel.h +++ b/mapview/3D/floorplan/FloorplanRendererModel.h @@ -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; + } } };