mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-13 06:53:36 +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(),
|
"total_ports": cls.total_ports(),
|
||||||
"located_ports_data": cls.located_ports_data(),
|
"located_ports_data": cls.located_ports_data(),
|
||||||
"is_port": is_port,
|
"is_port": is_port,
|
||||||
"port_connected_object": cls.port_connected_object() if is_port else None,
|
"port_connected_object_name": cls.port_connected_object_name() if is_port else None,
|
||||||
"port_relating_object": cls.port_relating_object() if is_port else None,
|
"port_relating_object_name": cls.port_relating_object_name() if is_port else None,
|
||||||
}
|
}
|
||||||
# AFTER located_ports_data
|
# AFTER located_ports_data
|
||||||
cls.data["selected_objects_flow_direction"] = cls.selected_objects_flow_direction() if not is_port else None
|
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")
|
return cls.element and cls.element.is_a("IfcDistributionPort")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def port_relating_object(cls):
|
def port_relating_object_name(cls):
|
||||||
return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element))
|
return tool.Ifc.get_object(tool.System.get_port_relating_element(cls.element)).name
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def port_connected_object(cls):
|
def port_connected_object_name(cls):
|
||||||
connected_port = tool.System.get_connected_port(cls.element)
|
connected_port = tool.System.get_connected_port(cls.element)
|
||||||
if not connected_port:
|
if not connected_port:
|
||||||
return
|
return
|
||||||
connected_element = tool.System.get_port_relating_element(connected_port)
|
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
|
@classmethod
|
||||||
def located_ports_data(cls):
|
def located_ports_data(cls):
|
||||||
@@ -159,19 +159,23 @@ class PortData:
|
|||||||
|
|
||||||
data = []
|
data = []
|
||||||
for port in ports:
|
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)
|
connected_port = tool.System.get_connected_port(port)
|
||||||
if connected_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:
|
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
|
return data
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def selected_objects_flow_direction(cls):
|
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:
|
if connected_obj in bpy.context.selected_objects:
|
||||||
return port.FlowDirection
|
return port.FlowDirection
|
||||||
|
|
||||||
|
|||||||
@@ -177,23 +177,24 @@ class BIM_PT_ports(Panel):
|
|||||||
cols = [row.column(align=True) for i in range(6)]
|
cols = [row.column(align=True) for i in range(6)]
|
||||||
|
|
||||||
for i, port_data in enumerate(PortData.data["located_ports_data"]):
|
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"]
|
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[0].label(text="", icon=flow_direction_icon)
|
||||||
cols[1].operator("bim.select_entity", text="", icon="RESTRICT_SELECT_OFF").ifc_id = port.id()
|
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:
|
else:
|
||||||
cols[0].label(text="", icon=flow_direction_icon)
|
cols[0].label(text="", icon=flow_direction_icon)
|
||||||
cols[1].label(text="", icon="HIDE_ON")
|
cols[1].label(text="", icon="HIDE_ON")
|
||||||
cols[2].label(text="Port is hidden")
|
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[3].operator("bim.disconnect_port", text="", icon="UNLINKED").element_id = port.id()
|
||||||
cols[4].operator(
|
cols[4].operator(
|
||||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||||
).ifc_id = connected_obj.BIMObjectProperties.ifc_definition_id
|
).ifc_id = connected_obj.BIMObjectProperties.ifc_definition_id
|
||||||
cols[5].label(text=f"{connected_obj.name}")
|
cols[5].label(text=connected_obj_name)
|
||||||
else:
|
else:
|
||||||
cols[3].label(text="", icon="UNLINKED")
|
cols[3].label(text="", icon="UNLINKED")
|
||||||
cols[4].label(text="", icon="BLANK1")
|
cols[4].label(text="", icon="BLANK1")
|
||||||
@@ -243,19 +244,21 @@ class BIM_PT_port(Panel):
|
|||||||
|
|
||||||
# port located on
|
# port located on
|
||||||
row = layout.row(align=True)
|
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="Port located on:")
|
||||||
row.label(text=relating_object.name)
|
row.label(text=relating_object_name)
|
||||||
row.operator(
|
row.operator(
|
||||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||||
).ifc_id = relating_object.BIMObjectProperties.ifc_definition_id
|
).ifc_id = relating_object.BIMObjectProperties.ifc_definition_id
|
||||||
|
|
||||||
# object connected to the port
|
# object connected to the port
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
connected_object = PortData.data["port_connected_object"]
|
connected_object_name = PortData.data["port_connected_object_name"]
|
||||||
if connected_object:
|
if connected_object_name:
|
||||||
|
connected_object = bpy.data.objects[connected_object_name]
|
||||||
row.label(text="Port connected to:")
|
row.label(text="Port connected to:")
|
||||||
row.label(text=connected_object.name)
|
row.label(text=connected_object_name)
|
||||||
row.operator(
|
row.operator(
|
||||||
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
"bim.select_entity", text="", icon="RESTRICT_SELECT_OFF"
|
||||||
).ifc_id = connected_object.BIMObjectProperties.ifc_definition_id
|
).ifc_id = connected_object.BIMObjectProperties.ifc_definition_id
|
||||||
|
|||||||
Reference in New Issue
Block a user