mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +00:00
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:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user