From 275d615d425ae082784f2d99620af3ce8a21a98a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 29 Sep 2024 18:11:08 +1000 Subject: [PATCH] Shift-A now triggers the wall polyline tool for all LAYER2 elements --- src/bonsai/bonsai/bim/module/model/polyline.py | 2 +- src/bonsai/bonsai/bim/module/model/product.py | 16 +++++----------- src/bonsai/bonsai/bim/module/model/workspace.py | 6 ++++++ src/bonsai/bonsai/tool/model.py | 10 ++++++++++ 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/model/polyline.py b/src/bonsai/bonsai/bim/module/model/polyline.py index 35f14fade2..5af2972f9e 100644 --- a/src/bonsai/bonsai/bim/module/model/polyline.py +++ b/src/bonsai/bonsai/bim/module/model/polyline.py @@ -210,7 +210,7 @@ class PolylineOperator: PolylineDecorator.update(event, self.tool_state, self.input_ui, self.snapping_points[0]) tool.Blender.update_viewport() - if event.value == "RELEASE" and event.type in {"D", "A"}: + if event.value == "RELEASE" and event.type == "D": self.recalculate_inputs(context) self.tool_state.mode = "Edit" self.tool_state.is_input_on = True diff --git a/src/bonsai/bonsai/bim/module/model/product.py b/src/bonsai/bonsai/bim/module/model/product.py index 61e0b157e0..84647e7816 100644 --- a/src/bonsai/bonsai/bim/module/model/product.py +++ b/src/bonsai/bonsai/bim/module/model/product.py @@ -456,26 +456,20 @@ class AddConstrTypeInstance(bpy.types.Operator, tool.Ifc.Operator): def generate_layered_element(ifc_class: str, relating_type: ifcopenshell.entity_instance) -> bool: layer_set_direction = None - parametric = ifcopenshell.util.element.get_psets(relating_type).get("EPset_Parametric") - if parametric: - layer_set_direction = parametric.get("LayerSetDirection", layer_set_direction) - if layer_set_direction is None: - if ifc_class in ["IfcSlabType", "IfcRoofType", "IfcRampType", "IfcPlateType"]: - layer_set_direction = "AXIS3" - else: - layer_set_direction = "AXIS2" + usage = tool.Model.get_usage_type(relating_type) + print('usage', usage) obj = None - if layer_set_direction == "AXIS3": + if usage == "LAYER3": obj = slab.DumbSlabGenerator(relating_type).generate() - elif layer_set_direction == "AXIS2": + elif usage == "LAYER2": obj = wall.DumbWallGenerator(relating_type).generate() else: pass # Dumb block generator? Eh? :) if obj: material = ifcopenshell.util.element.get_material(tool.Ifc.get_entity(obj)) - material.LayerSetDirection = layer_set_direction + material.LayerSetDirection = f"AXIS{usage[-1]}" return True return False diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 307b2e9641..f34c75bb3b 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -847,8 +847,14 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): row.prop(self, "z") def hotkey_S_A(self): + props = bpy.context.scene.BIMModelProperties if bpy.context.scene.BIMGeometryProperties.mode == "ITEM": bpy.ops.wm.call_menu(name="BIM_MT_add_representation_item") + elif ( + props.relating_type_id + and tool.Model.get_usage_type(tool.Ifc.get().by_id(int(props.relating_type_id))) == "LAYER2" + ): + bpy.ops.bim.draw_polyline_wall("INVOKE_DEFAULT") else: bpy.ops.bim.add_occurrence("INVOKE_DEFAULT") diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 8cc8b53633..a7875bdbea 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -556,6 +556,14 @@ class Model(bonsai.core.tool.Model): if material: if material.is_a("IfcMaterialLayerSetUsage"): return f"LAYER{material.LayerSetDirection[-1]}" + elif material.is_a("IfcMaterialLayerSet"): + axis = ifcopenshell.util.element.get_pset(element, "EPset_Parametric", "LayerSetDirection") + if axis is None: + if element.is_a() in ["IfcSlabType", "IfcRoofType", "IfcRampType", "IfcPlateType"]: + axis = "AXIS3" + else: + axis = "AXIS2" + return f"LAYER{axis[-1]}" elif material.is_a("IfcMaterialProfileSetUsage"): # TODO: remove after we support editing profile usages with IfcRevolvedAreaSolid. # Revolved area check should happen inside bim.enable_editing_extrusion_axis @@ -567,6 +575,8 @@ class Model(bonsai.core.tool.Model): ): return return "PROFILE" + elif material.is_a("IfcMaterialProfileSet"): + return "PROFILE" @classmethod def get_wall_axis(cls, obj, layers=None):