diff --git a/src/ifcopenshell-python/ifcopenshell/util/system.py b/src/ifcopenshell-python/ifcopenshell/util/system.py index 51ee9e001b..208979e584 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/system.py +++ b/src/ifcopenshell-python/ifcopenshell/util/system.py @@ -83,31 +83,34 @@ def get_connected_port(port): def get_connected_to(element): - from blenderbim.bim.ifc import IfcStore - ifcSchema = IfcStore.get_file().schema results = [] - if ifcSchema == "IFC4": - for port in ifcopenshell.util.system.get_ports(element): - for relConnectsPort in port.ConnectedTo: - for relNest in relConnectsPort.RelatedPort.Nests: - results.extend(relNest.RelatingObject) - elif ifcSchema == "IFC2X3": - for port in element.HasPorts: - for relConnectsPort in port.RelatingPort.ConnectedTo: - results.extend([r.RelatedElement for r in relConnectsPort.RelatedPort.ContainedIn if r.RelatedElement != element]) - return results + for port in ifcopenshell.util.system.get_ports(element): + for relConnectsPort in port.ConnectedTo: + for disPort in [relConnectsPort.RelatedPort,relConnectsPort.RelatingPort]: + if hasattr(disPort,"Nests"): + for relNest in disPort.Nests: + if relNest.RelatingObject != element: + results.append(relNest.RelatingObject) + # IFC2X3 only, deprecated in IFC4 + elif hasattr(disPort,"ContainedIn"): + for relConPortToElement in disPort.ContainedIn: + if relConPortToElement.RelatedElement != element: + results.append(relConPortToElement.RelatedElement) + return(results) + def get_connected_from(element): - from blenderbim.bim.ifc import IfcStore - ifcSchema = IfcStore.get_file().schema results = [] - if ifcSchema == "IFC4": - for port in ifcopenshell.util.system.get_ports(element): - for relConnectsPort in port.ConnectedFrom: - for relNest in relConnectsPort.RelatedPort.Nests: - results.extend(relNest.RelatingObject) - elif ifcSchema == "IFC2X3": - for port in element.HasPorts: - for relConnectsPort in port.RelatingPort.ConnectedFrom: - results.extend([r.RelatedElement for r in relConnectsPort.RelatingPort.ContainedIn if r.RelatedElement != element]) - return results \ No newline at end of file + for port in ifcopenshell.util.system.get_ports(element): + for relConnectsPort in port.ConnectedFrom: + for disPort in [relConnectsPort.RelatedPort,relConnectsPort.RelatingPort]: + if hasattr(disPort,"Nests"): + for relNest in disPort.Nests: + if relNest.RelatingObject != element: + results.append(relNest.RelatingObject) + # IFC2X3 only, deprecated in IFC4 + elif hasattr(disPort,"ContainedIn"): + for relConPortToElement in disPort.ContainedIn: + if relConPortToElement.RelatedElement != element: + results.append(relConPortToElement.RelatedElement) + return(results) \ No newline at end of file