From b7a8c9b3309caad78f5b6029a20422669bfa17ed Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Wed, 11 Feb 2026 11:43:58 +0100 Subject: [PATCH] Fix for 4.2 schema after a46cdbb907974c03be91bad002ce4f88aae682dd --- src/ifcgeom/mapping/IfcObjectPlacement.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ifcgeom/mapping/IfcObjectPlacement.cpp b/src/ifcgeom/mapping/IfcObjectPlacement.cpp index a0a37dd30f..c4f2f44b1f 100644 --- a/src/ifcgeom/mapping/IfcObjectPlacement.cpp +++ b/src/ifcgeom/mapping/IfcObjectPlacement.cpp @@ -37,7 +37,6 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcObjectPlacement* inst) { } auto self_places = placement->PlacesObject(); - inst->ReferencedByPlacements(); for (auto iter = self_places->begin(); iter != self_places->end(); ++iter) { if ((placement_rel_to_type_ && (*iter)->declaration().is(*placement_rel_to_type_)) || (placement_rel_to_instance_ && (*iter)->as() == placement_rel_to_instance_)) { @@ -47,12 +46,16 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcObjectPlacement* inst) { // Look for two levels deep, we want to know if we're at or *above* the // element we're ignoring, but we don't want to traverse the entire model. +#ifdef SCHEMA_IfcObjectPlacement_HAS_ReferencedByPlacements if (depth < 2) { auto refs = placement->ReferencedByPlacements(); for (auto& ref : *refs) { q.emplace_back(ref, depth + 1); } } +#else + Logger::Warning("Using --site-local-placement or --building-local-placement on IFC4.2 might have issues") +#endif } }