mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
fixed issues with ports ui on undo
data.py doesn't update on every undo, so passed blender objects got invalidated on undo resulting in errors. changed blender objects to blender object names
This commit is contained in:
@@ -126,8 +126,8 @@ class PortData:
|
||||
"total_ports": cls.total_ports(),
|
||||
"located_ports_data": cls.located_ports_data(),
|
||||
"is_port": is_port,
|
||||
"port_connected_object": cls.port_connected_object() if is_port else None,
|
||||
"port_relating_object": cls.port_relating_object() if is_port else None,
|
||||
"port_connected_object_name": cls.port_connected_object_name() if is_port else None,
|
||||
"port_relating_object_name": cls.port_relating_object_name() if is_port else None,
|
||||
}
|
||||
# AFTER located_ports_data
|
||||
cls.data["selected_objects_flow_direction"] = cls.selected_objects_flow_direction() if not is_port else None
|
||||
@@ -142,16 +142,16 @@ class PortData:
|
||||
return cls.element and cls.element.is_a("IfcDistributionPort")
|
||||
|
||||
@classmethod
|
||||
def port_relating_object(cls):
|
||||
return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element))
|
||||
def port_relating_object_name(cls):
|
||||
return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element)).name
|
||||
|
||||
@classmethod
|
||||
def port_connected_object(cls):
|
||||
def port_connected_object_name(cls):
|
||||
connected_port = tool.System.get_connected_port(cls.element)
|
||||
if not connected_port:
|
||||
return
|
||||
connected_element = tool.System.get_port_relating_element(connected_port)
|
||||
return tool.Ifc.get_object(connected_element)
|
||||
return tool.Ifc.get_object(connected_element).name
|
||||
|
||||
@classmethod
|
||||
def located_ports_data(cls):
|
||||
@@ -159,19 +159,23 @@ class PortData:
|
||||
|
||||
data = []
|
||||
for port in ports:
|
||||
port_obj = tool.Ifc.get_object(port)
|
||||
# port may be not present as a scene object
|
||||
port_obj_name = getattr(tool.Ifc.get_object(port), "name", None)
|
||||
connected_port = tool.System.get_connected_port(port)
|
||||
if connected_port:
|
||||
connected_obj = tool.Ifc.get_object(tool.System.get_port_relating_element(connected_port))
|
||||
connected_obj_name = tool.Ifc.get_object(tool.System.get_port_relating_element(connected_port)).name
|
||||
else:
|
||||
connected_obj = None
|
||||
connected_obj_name = None
|
||||
|
||||
data.append((port, port_obj, connected_obj))
|
||||
data.append((port, port_obj_name, connected_obj_name))
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
def selected_objects_flow_direction(cls):
|
||||
for port, port_obj, connected_obj in cls.data["located_ports_data"]:
|
||||
for port, _, connected_obj_name in cls.data["located_ports_data"]:
|
||||
if connected_obj_name is None:
|
||||
continue
|
||||
connected_obj = bpy.data.objects[connected_obj_name]
|
||||
if connected_obj in bpy.context.selected_objects:
|
||||
return port.FlowDirection
|
||||
|
||||
|
||||
@@ -177,23 +177,24 @@ class BIM_PT_ports(Panel):
|
||||
cols = [row.column(align=True) for i in range(6)]
|
||||
|
||||
for i, port_data in enumerate(PortData.data["located_ports_data"]):
|
||||
port, port_obj, connected_obj = port_data
|
||||
port, port_obj_name, connected_obj_name = port_data
|
||||
flow_direction_icon = FLOW_DIRECTION_TO_ICON[port.FlowDirection or "NOTDEFINED"]
|
||||
if port_obj:
|
||||
if port_obj_name:
|
||||
cols[0].label(text="", icon=flow_direction_icon)
|
||||
cols[1].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = port.id()
|
||||
cols[2].label(text=port_obj.name)
|
||||
cols[2].label(text=port_obj_name)
|
||||
else:
|
||||
cols[0].label(text="", icon=flow_direction_icon)
|
||||
cols[1].label(text="", icon="HIDE_ON")
|
||||
cols[2].label(text="Port is hidden")
|
||||
|
||||
if connected_obj:
|
||||
if connected_obj_name:
|
||||
connected_obj = bpy.data.objects[connected_obj_name]
|
||||
cols[3].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port.id()
|
||||
cols[4].operator(
|
||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||
).ifc_id = connected_obj.BIMObjectProperties.ifc_definition_id
|
||||
cols[5].label(text=f"{connected_obj.name}")
|
||||
cols[5].label(text=connected_obj_name)
|
||||
else:
|
||||
cols[3].label(text="", icon="UNLINKED")
|
||||
cols[4].label(text="", icon="BLANK1")
|
||||
@@ -243,19 +244,21 @@ class BIM_PT_port(Panel):
|
||||
|
||||
# port located on
|
||||
row = layout.row(align=True)
|
||||
relating_object = PortData.data["port_relating_object"]
|
||||
relating_object_name = PortData.data["port_relating_object_name"]
|
||||
relating_object = bpy.data.objects[relating_object_name]
|
||||
row.label(text="Port located on:")
|
||||
row.label(text=relating_object.name)
|
||||
row.label(text=relating_object_name)
|
||||
row.operator(
|
||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||
).ifc_id = relating_object.BIMObjectProperties.ifc_definition_id
|
||||
|
||||
# object connected to the port
|
||||
row = layout.row(align=True)
|
||||
connected_object = PortData.data["port_connected_object"]
|
||||
if connected_object:
|
||||
connected_object_name = PortData.data["port_connected_object_name"]
|
||||
if connected_object_name:
|
||||
connected_object = bpy.data.objects[connected_object_name]
|
||||
row.label(text="Port connected to:")
|
||||
row.label(text=connected_object.name)
|
||||
row.label(text=connected_object_name)
|
||||
row.operator(
|
||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||
).ifc_id = connected_object.BIMObjectProperties.ifc_definition_id
|
||||
|
||||
Reference in New Issue
Block a user