diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index 4aed1073d7..0d33266561 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -1903,16 +1903,18 @@ class CutDecorator: # in object local space is on the wrong side of the starting plane, flip no. bb = [Vector(v) for v in obj.bound_box] mesh_centroid = sum(bb, Vector((0.0, 0.0, 0.0))) / 8 + layers = list(layer_set.MaterialLayers) if (mesh_centroid - co).dot(no) < 0: no = -no - last_i = len(layer_set.MaterialLayers) - 1 + layers = list(reversed(layers)) + last_i = len(layers) - 1 vert_map = {} verts = [] edges = [] j = 0 - for i, layer in enumerate(layer_set.MaterialLayers): + for i, layer in enumerate(layers): prev_co = co.copy() co += no * layer.LayerThickness * self.unit_scale if i != last_i: diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 35a933c406..7e1ac4391e 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -734,10 +734,12 @@ class CreateDrawing(bpy.types.Operator): # in object local space is on the wrong side of the starting plane, flip no. bb = [Vector(v) for v in obj.bound_box] mesh_centroid = sum(bb, Vector((0.0, 0.0, 0.0))) / 8 + layers = list(layer_set.MaterialLayers) if (mesh_centroid - co).dot(no) < 0: no = -no - last_i = len(layer_set.MaterialLayers) - 1 - for i, layer in enumerate(layer_set.MaterialLayers): + layers = list(reversed(layers)) + last_i = len(layers) - 1 + for i, layer in enumerate(layers): prev_co = co.copy() co += no * layer.LayerThickness * self.unit_scale diff --git a/src/bonsai/bonsai/tool/loader.py b/src/bonsai/bonsai/tool/loader.py index b6167cf993..14c4a2a87f 100644 --- a/src/bonsai/bonsai/tool/loader.py +++ b/src/bonsai/bonsai/tool/loader.py @@ -1093,10 +1093,12 @@ class Loader(bonsai.core.tool.Loader): # Detect non-conformant exports (e.g. Revit) where DirectionSense=POSITIVE # but the geometry extrudes in the negative direction. If the mesh centroid # in object local space is on the wrong side of the starting plane, flip no. + layers = list(layer_set.MaterialLayers) if bm.verts: mesh_centroid = sum((v.co for v in bm.verts), Vector((0.0, 0.0, 0.0))) / len(bm.verts) if (mesh_centroid - co).dot(no) < 0: no = -no + layers = list(reversed(layers)) # Cache this body = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW") styles = {} @@ -1104,8 +1106,8 @@ class Loader(bonsai.core.tool.Loader): for i, material in enumerate(mesh.materials): if style := tool.Ifc.get_entity(material): styles[style] = i - last_i = len(layer_set.MaterialLayers) - 1 - for i, layer in enumerate(layer_set.MaterialLayers): + last_i = len(layers) - 1 + for i, layer in enumerate(layers): if i != last_i: prev_co = co.copy() co += no * layer.LayerThickness * cls.unit_scale