mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
Support IDS tests for nest relationships in IFC2X3
This commit is contained in:
@@ -547,7 +547,7 @@ class PartOf(Facet):
|
|||||||
is_pass = False
|
is_pass = False
|
||||||
reason = {"type": "PREDEFINEDTYPE", "actual": predefined_type}
|
reason = {"type": "PREDEFINEDTYPE", "actual": predefined_type}
|
||||||
elif self.relation == "IFCRELNESTS":
|
elif self.relation == "IFCRELNESTS":
|
||||||
nest = self.get_nested_whole(inst)
|
nest = ifcopenshell.util.element.get_nest(inst)
|
||||||
is_pass = nest is not None
|
is_pass = nest is not None
|
||||||
if not is_pass:
|
if not is_pass:
|
||||||
reason = {"type": "NOVALUE"}
|
reason = {"type": "NOVALUE"}
|
||||||
@@ -565,17 +565,17 @@ class PartOf(Facet):
|
|||||||
else:
|
else:
|
||||||
is_pass = True
|
is_pass = True
|
||||||
break
|
break
|
||||||
nest = self.get_nested_whole(nest)
|
nest = ifcopenshell.util.element.get_nest(nest)
|
||||||
if not is_pass:
|
if not is_pass:
|
||||||
reason = {"type": "ENTITY", "actual": ancestors}
|
reason = {"type": "ENTITY", "actual": ancestors}
|
||||||
elif self.relation == "IFCRELVOIDSELEMENT IFCRELFILLSELEMENT":
|
elif self.relation == "IFCRELVOIDSELEMENT IFCRELFILLSELEMENT":
|
||||||
if inst.is_a("IfcOpeningElement"):
|
if inst.is_a("IfcOpeningElement"):
|
||||||
building_element = self.get_voided_element(inst)
|
building_element = ifcopenshell.util.element.get_voided_element(inst)
|
||||||
else:
|
else:
|
||||||
building_element = None
|
building_element = None
|
||||||
opening = self.get_filled_opening(inst)
|
opening = ifcopenshell.util.element.get_filled_void(inst)
|
||||||
if opening:
|
if opening:
|
||||||
building_element = self.get_voided_element(opening)
|
building_element = ifcopenshell.util.element.get_voided_element(opening)
|
||||||
is_pass = building_element is not None
|
is_pass = building_element is not None
|
||||||
if not is_pass:
|
if not is_pass:
|
||||||
reason = {"type": "NOVALUE"}
|
reason = {"type": "NOVALUE"}
|
||||||
@@ -593,33 +593,13 @@ class PartOf(Facet):
|
|||||||
return PartOfResult(not is_pass, {"type": "PROHIBITED"})
|
return PartOfResult(not is_pass, {"type": "PROHIBITED"})
|
||||||
return PartOfResult(is_pass, reason)
|
return PartOfResult(is_pass, reason)
|
||||||
|
|
||||||
def get_nested_whole(self, element):
|
|
||||||
for rel in getattr(element, "Nests", []) or []:
|
|
||||||
return rel.RelatingObject
|
|
||||||
|
|
||||||
def get_voided_element(self, element):
|
|
||||||
for rel in getattr(element, "VoidsElements", []) or []:
|
|
||||||
return rel.RelatingBuildingElement
|
|
||||||
|
|
||||||
def get_filled_opening(self, element):
|
|
||||||
for rel in getattr(element, "FillsVoids", []) or []:
|
|
||||||
return rel.RelatingOpeningElement
|
|
||||||
|
|
||||||
def get_parent(self, element):
|
def get_parent(self, element):
|
||||||
parent = ifcopenshell.util.element.get_aggregate(element)
|
parent = ifcopenshell.util.element.get_parent(element)
|
||||||
if not parent:
|
|
||||||
parent = ifcopenshell.util.element.get_container(element, should_get_direct=True)
|
|
||||||
if not parent:
|
if not parent:
|
||||||
for rel in getattr(element, "HasAssignments", []) or []:
|
for rel in getattr(element, "HasAssignments", []) or []:
|
||||||
if rel.is_a("IfcRelAssignsToGroup"):
|
if rel.is_a("IfcRelAssignsToGroup"):
|
||||||
parent = rel.RelatingGroup
|
parent = rel.RelatingGroup
|
||||||
break
|
break
|
||||||
if not parent:
|
|
||||||
self.get_nested_whole(element)
|
|
||||||
if not parent:
|
|
||||||
self.get_voided_element(element)
|
|
||||||
if not parent:
|
|
||||||
self.get_filled_opening(element)
|
|
||||||
return parent
|
return parent
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import os
|
|||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import math
|
import math
|
||||||
import logging
|
|
||||||
import datetime
|
import datetime
|
||||||
import ifcopenshell
|
import ifcopenshell
|
||||||
import ifcopenshell.util.unit
|
import ifcopenshell.util.unit
|
||||||
|
|||||||
Reference in New Issue
Block a user