From 3b9c1d88c87838013f91550233f0179be4bb66cb Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 3 Oct 2024 10:27:45 +0200 Subject: [PATCH] Handle missing placement location gracefully #5528 --- src/ifcgeom/mapping/IfcAxis1Placement.cpp | 6 ++++-- src/ifcgeom/mapping/IfcAxis2Placement2D.cpp | 6 ++++-- src/ifcgeom/mapping/IfcAxis2Placement3D.cpp | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ifcgeom/mapping/IfcAxis1Placement.cpp b/src/ifcgeom/mapping/IfcAxis1Placement.cpp index db4e76b4b0..3bd96f2950 100644 --- a/src/ifcgeom/mapping/IfcAxis1Placement.cpp +++ b/src/ifcgeom/mapping/IfcAxis1Placement.cpp @@ -23,10 +23,12 @@ using namespace ifcopenshell::geometry; taxonomy::ptr mapping::map_impl(const IfcSchema::IfcAxis1Placement* inst) { - Eigen::Vector3d P, axis(0, 0, 1), ref; - { + Eigen::Vector3d P(0, 0, 0), axis(0, 0, 1), ref; + try { taxonomy::point3::ptr v = taxonomy::cast(map(inst->Location())); P = *v->components_; + } catch (const std::runtime_error&) { + Logger::Warning("Placement with invalid Location:", inst); } const bool hasAxis = inst->Axis(); if (hasAxis) { diff --git a/src/ifcgeom/mapping/IfcAxis2Placement2D.cpp b/src/ifcgeom/mapping/IfcAxis2Placement2D.cpp index 19dbbd2da2..b44c0913b2 100644 --- a/src/ifcgeom/mapping/IfcAxis2Placement2D.cpp +++ b/src/ifcgeom/mapping/IfcAxis2Placement2D.cpp @@ -24,10 +24,12 @@ using namespace ifcopenshell::geometry; taxonomy::ptr mapping::map_impl(const IfcSchema::IfcAxis2Placement2D* inst) { - Eigen::Vector3d P, axis(0, 0, 1), V(1, 0, 0); - { + Eigen::Vector3d P(0, 0, 0), axis(0, 0, 1), V(1, 0, 0); + try { taxonomy::point3::ptr v = taxonomy::cast(map(inst->Location())); P = *v->components_; + } catch (const std::runtime_error&) { + Logger::Warning("Placement with invalid Location:", inst); } const bool hasRef = !!inst->RefDirection(); if (hasRef) { diff --git a/src/ifcgeom/mapping/IfcAxis2Placement3D.cpp b/src/ifcgeom/mapping/IfcAxis2Placement3D.cpp index b3f40dc989..7be9421788 100644 --- a/src/ifcgeom/mapping/IfcAxis2Placement3D.cpp +++ b/src/ifcgeom/mapping/IfcAxis2Placement3D.cpp @@ -24,10 +24,12 @@ using namespace ifcopenshell::geometry; taxonomy::ptr mapping::map_impl(const IfcSchema::IfcAxis2Placement3D* inst) { - Eigen::Vector3d o, axis(0, 0, 1), refDirection, X(1, 0, 0); - { + Eigen::Vector3d o(0, 0, 0), axis(0, 0, 1), refDirection, X(1, 0, 0); + try { taxonomy::point3::ptr v = taxonomy::cast(map(inst->Location())); o = *v->components_; + } catch (const std::runtime_error&) { + Logger::Warning("Placement with invalid Location:", inst); } const bool hasAxis = !!inst->Axis(); const bool hasRef = !!inst->RefDirection();