From b09fc1286826f40ff256e1ec405bfa9c69b51579 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 28 Sep 2020 15:46:19 +0200 Subject: [PATCH] Traverse collections for styles when processing boolean as arrangement --- src/ifcgeom/kernels/cgal/CgalKernel.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ifcgeom/kernels/cgal/CgalKernel.cpp b/src/ifcgeom/kernels/cgal/CgalKernel.cpp index 7df985f6a0..99e5cfdf20 100644 --- a/src/ifcgeom/kernels/cgal/CgalKernel.cpp +++ b/src/ifcgeom/kernels/cgal/CgalKernel.cpp @@ -1444,7 +1444,22 @@ bool CgalKernel::convert_impl(const taxonomy::boolean_result* br, ifcopenshell:: std::list> loops; if (process_as_2d_polygon(br, loops, z0, z1)) { - auto first_item_style = ((taxonomy::geom_item*)br->children[0])->surface_style; + taxonomy::style first_item_style; + { + auto gi = dynamic_cast(br->children[0]); + while (gi) { + if (gi->surface_style.diffuse) { + first_item_style = gi->surface_style; + break; + } + auto ci = dynamic_cast(gi); + if (ci && ci->children.size() == 1) { + gi = dynamic_cast(ci->children[0]); + } else { + break; + } + } + } std::list> pwhs;