diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index a1c8665e7e..9a37c1f48d 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -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 diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index 063a28c4ee..d4a9bf9d5e 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -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