Add operator to copy railing modifier parameters (#3413)

* You can now copy railing properties from active to selected

Hitting ESCAPE cancels editing railing path
This commit is contained in:
Gorgious56
2025-01-06 10:10:54 +01:00
committed by GitHub
parent 2e35b07fa6
commit 570e29cfe4
4 changed files with 39 additions and 0 deletions
@@ -1858,6 +1858,8 @@ class OverrideEscape(bpy.types.Operator):
bpy.ops.bim.hide_all_openings()
elif context.scene.BIMAggregateProperties.in_aggregate_mode:
bpy.ops.bim.disable_aggregate_mode()
elif context.active_object and context.active_object.BIMRailingProperties.is_editing_path:
bpy.ops.bim.cancel_editing_railing_path()
return {"FINISHED"}
@@ -173,6 +173,7 @@ classes = (
door.EnableEditingDoor,
door.RemoveDoor,
railing.BIM_OT_add_railing,
railing.CopyRailingParameters,
railing.AddRailing,
railing.CancelEditingRailing,
railing.FinishEditingRailing,
@@ -354,6 +354,41 @@ class AddRailing(bpy.types.Operator, tool.Ifc.Operator):
tool.Model.add_body_representation(obj)
class CopyRailingParameters(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.copy_railing_parameters"
bl_label = "Copy Railing Parameters from Active to Selected"
bl_options = {"REGISTER", "UNDO"}
@classmethod
def poll(cls, context):
return context.active_object and len(context.selected_objects) > 1
def _execute(self, context):
source_obj = context.active_object
source_props = source_obj.BIMRailingProperties
railing_data = source_props.get_general_kwargs(convert_to_project_units=True)
for target_obj in context.selected_objects:
if target_obj == source_obj:
continue
context.view_layer.objects.active = target_obj
RailingData.load()
if not "path_data" in RailingData.data:
continue
railing_data["path_data"] = RailingData.data["path_data"]
target_element = tool.Ifc.get_entity(target_obj)
target_props = target_obj.BIMRailingProperties
target_props.set_props_kwargs_from_ifc_data(railing_data)
update_bbim_railing_pset(target_element, railing_data)
refresh()
update_railing_modifier_bmesh(context)
update_railing_modifier_ifc_data(context)
context.view_layer.objects.active = source_obj
return {"FINISHED"}
class EnableEditingRailing(bpy.types.Operator, tool.Ifc.Operator):
bl_idname = "bim.enable_editing_railing"
bl_label = "Enable Editing Railing"
+1
View File
@@ -596,6 +596,7 @@ class BIM_PT_railing(bpy.types.Panel):
else:
row.operator("bim.enable_editing_railing", icon="GREASEPENCIL", text="")
row.operator("bim.copy_railing_parameters", icon="COPYDOWN", text="")
row.operator("bim.enable_editing_railing_path", icon="ANIM", text="")
# TODO: good for preview but probably should move to .is_editing == True
# since it's writing to ifc