From 919ac41a746517afcd9a8bef46f09df7da0cbef8 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 21 Oct 2025 13:32:51 +0200 Subject: [PATCH] Consider case of only RefDirection in sectioned shapes #7251 --- src/ifcgeom/mapping/IfcSectionedSolidHorizontal.cpp | 8 +++++++- src/ifcgeom/mapping/IfcSectionedSurface.cpp | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/mapping/IfcSectionedSolidHorizontal.cpp b/src/ifcgeom/mapping/IfcSectionedSolidHorizontal.cpp index 82eea17648..a2bc648f08 100644 --- a/src/ifcgeom/mapping/IfcSectionedSolidHorizontal.cpp +++ b/src/ifcgeom/mapping/IfcSectionedSolidHorizontal.cpp @@ -81,7 +81,13 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcSectionedSolidHorizontal* in rot = taxonomy::matrix4( Eigen::Vector3d(0, 0, 0), taxonomy::cast(map(csp->Axis()))->ccomponents()).ccomponents().block<3, 3>(0, 0); - } + } else if (csp->RefDirection()) { + rot = taxonomy::matrix4( + Eigen::Vector3d(0, 0, 0), + Eigen::Vector3d(0, 0, 1), + taxonomy::cast(map(csp->RefDirection()))->ccomponents() + ).ccomponents().block<3, 3>(0, 0); + } profile_rotations.push_back(rot); } if (faces.size() != profile_offsets.size()) { diff --git a/src/ifcgeom/mapping/IfcSectionedSurface.cpp b/src/ifcgeom/mapping/IfcSectionedSurface.cpp index 1111d4dac5..c6b700f5e5 100644 --- a/src/ifcgeom/mapping/IfcSectionedSurface.cpp +++ b/src/ifcgeom/mapping/IfcSectionedSurface.cpp @@ -82,7 +82,14 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcSectionedSurface* inst) { rot = taxonomy::matrix4( Eigen::Vector3d(0, 0, 0), taxonomy::cast(map(csp->Axis()))->ccomponents()).ccomponents().block<3, 3>(0, 0); - } + } else if (csp->RefDirection()) { + rot = taxonomy::matrix4( + Eigen::Vector3d(0, 0, 0), + Eigen::Vector3d(0, 0, 1), + taxonomy::cast(map(csp->RefDirection()))->ccomponents()) + .ccomponents() + .block<3, 3>(0, 0); + } profile_rotations.push_back(rot); } #else