From 5af7c9a32dfaeb5fb8e9feeb7a7ee54a8065bafc Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 5 Jun 2025 10:22:28 +0200 Subject: [PATCH] Clarify Compound of Solids behaviour in create_solid_from_faces() #6780 --- src/ifcgeom/kernels/opencascade/base_utils.h | 2 ++ src/ifcgeom/kernels/opencascade/boolean_utils.cpp | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/base_utils.h b/src/ifcgeom/kernels/opencascade/base_utils.h index 017262c179..7e342df27c 100644 --- a/src/ifcgeom/kernels/opencascade/base_utils.h +++ b/src/ifcgeom/kernels/opencascade/base_utils.h @@ -45,6 +45,8 @@ namespace IfcGeom { bool is_nested_compound_of_solid(const TopoDS_Shape& s, int depth = 0); + // Creates a solid from a compound of faces. When there are multiple connected components, + // a compound of solids is returned. bool create_solid_from_compound(const TopoDS_Shape& compound, TopoDS_Shape& solid, double tol); bool shape_to_face_list(const TopoDS_Shape& s, TopTools_ListOfShape& li); bool create_solid_from_faces(const TopTools_ListOfShape& face_list, TopoDS_Shape& solid, double tol, bool force_sewing = false); diff --git a/src/ifcgeom/kernels/opencascade/boolean_utils.cpp b/src/ifcgeom/kernels/opencascade/boolean_utils.cpp index 15e94bff05..6fa4f6ef54 100644 --- a/src/ifcgeom/kernels/opencascade/boolean_utils.cpp +++ b/src/ifcgeom/kernels/opencascade/boolean_utils.cpp @@ -1451,10 +1451,10 @@ TopoDS_Shape IfcGeom::util::ensure_fit_for_subtraction(const TopoDS_Shape& shape return shape; } - TopoDS_Solid solid; - if (!create_solid_from_compound(shape, solid, tol)) { + TopoDS_Shape solid_or_compound_of_solids; + if (!create_solid_from_compound(shape, solid_or_compound_of_solids, tol)) { return shape; } - return solid; + return solid_or_compound_of_solids; }