mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
Shift-A now triggers the wall polyline tool for all LAYER2 elements
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user