From 134a480b035802baebd4a3dddae033efc02a3b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Perdig=C3=A3o?= Date: Fri, 28 Feb 2025 13:01:33 -0300 Subject: [PATCH] Fix slab preview decorator when using obtuse x_angle. --- src/bonsai/bonsai/bim/module/model/polyline.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index 2af857f663..3ff5b349a5 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -201,12 +201,12 @@ def get_slab_preview_data(context, relating_type): layers = tool.Model.get_material_layer_parameters(relating_type) if not layers["thickness"]: return - thickness = layers["thickness"] + thickness = layers["thickness"] * abs(1 / cos(x_angle)) thickness *= direction offset_type = model_props.offset_type_horizontal unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) - offset = model_props.offset * unit_scale + offset = model_props.offset * abs(1 / cos(x_angle)) * unit_scale data = {} data["verts"] = [] @@ -238,7 +238,10 @@ def get_slab_preview_data(context, relating_type): bm = create_bmesh_from_vertices(polyline_vertices, is_closed) bm.verts.ensure_lookup_table() if x_angle: - bmesh.ops.rotate(bm, cent=Vector(bm.verts[0].co), verts=bm.verts, matrix=Matrix.Rotation(x_angle, 3, "X")) + rot_mat = Matrix.Rotation(x_angle, 3, "X") + if abs(x_angle) > (pi/2): + rot_mat = rot_mat @ Matrix.Scale(-1, 3, (0, 1, 0)) + bmesh.ops.rotate(bm, cent=Vector(bm.verts[0].co), verts=bm.verts, matrix=rot_mat) new_faces = bmesh.ops.contextual_create(bm, geom=bm.edges) new_faces = bmesh.ops.extrude_face_region(bm, geom=bm.edges[:] + bm.faces[:]) new_verts = [e for e in new_faces["geom"] if isinstance(e, bmesh.types.BMVert)]