From ab17c8ffd9deb2c0d6d82a56fcd8ad4870e391b2 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 10 Dec 2024 21:26:58 +0100 Subject: [PATCH] Re-enable force_close in profile curve handling --- src/ifcgeom/kernels/opencascade/loop.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index a03a044e82..840952acca 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -229,6 +229,8 @@ OpenCascadeKernel::curve_creation_visitor_result_type OpenCascadeKernel::convert } } +#include "../../../ifcparse/IfcFile.h" + bool OpenCascadeKernel::convert(const taxonomy::loop::ptr loop, TopoDS_Wire& wire) { TopTools_ListOfShape converted_segments; @@ -272,12 +274,13 @@ bool OpenCascadeKernel::convert(const taxonomy::loop::ptr loop, TopoDS_Wire& wir TopTools_ListIteratorOfListOfShape it(converted_segments); - /* - @todo - IfcEntityList::ptr profile = l->data().getInverse(&IfcSchema::IfcProfileDef::Class(), -1); - const bool force_close = profile && profile->size() > 0; - */ - const bool force_close = false; + bool force_close = false; + if (loop->instance && loop->instance->as() && loop->instance->as()->file_) { + auto* inst = loop->instance->as(); + auto* file = loop->instance->as()->file_; + auto profile = file->getInverse(inst->id(), file->schema()->declaration_by_name("IfcProfileDef"), -1); + force_close = profile && profile->size() > 0; + } wire_builder bld(precision_, loop->instance ? loop->instance->as() : nullptr); shape_pair_enumerate(it, bld, force_close);