mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 15:07:38 +00:00
Inherited and overridden classification references per system is now supported
This commit is contained in:
@@ -24,15 +24,25 @@ def get_references(element, should_inherit=True):
|
|||||||
if should_inherit:
|
if should_inherit:
|
||||||
element_type = ifcopenshell.util.element.get_type(element)
|
element_type = ifcopenshell.util.element.get_type(element)
|
||||||
if element_type and element_type != element:
|
if element_type and element_type != element:
|
||||||
results.update(get_references(element_type))
|
results = get_references(element_type)
|
||||||
results.update(
|
occurrence_results = {
|
||||||
{
|
r.RelatingClassification
|
||||||
r.RelatingClassification
|
for r in getattr(element, "HasAssociations", [])
|
||||||
for r in getattr(element, "HasAssociations", [])
|
if r.is_a("IfcRelAssociatesClassification")
|
||||||
if r.is_a("IfcRelAssociatesClassification")
|
}
|
||||||
}
|
if results:
|
||||||
)
|
type_references_per_system = {}
|
||||||
return results
|
occurrence_references_per_system = {}
|
||||||
|
for result in results:
|
||||||
|
type_references_per_system.setdefault(get_classification(result), []).append(result)
|
||||||
|
for result in occurrence_results:
|
||||||
|
occurrence_references_per_system.setdefault(get_classification(result), []).append(result)
|
||||||
|
type_references_per_system.update(occurrence_references_per_system)
|
||||||
|
results = set()
|
||||||
|
for values in type_references_per_system.values():
|
||||||
|
[results.add(v) for v in values]
|
||||||
|
return results
|
||||||
|
return occurrence_results
|
||||||
|
|
||||||
|
|
||||||
def get_classification(reference):
|
def get_classification(reference):
|
||||||
|
|||||||
@@ -71,7 +71,10 @@ class TestGetReferences(test.bootstrap.IFC4):
|
|||||||
reference=reference2,
|
reference=reference2,
|
||||||
classification=classification,
|
classification=classification,
|
||||||
)
|
)
|
||||||
assert subject.get_references(element) == set(self.file.by_type("IfcClassificationReference"))
|
reference1 = [r for r in self.file.by_type("IfcClassificationReference") if r.Identification == "1"][0]
|
||||||
|
reference2 = [r for r in self.file.by_type("IfcClassificationReference") if r.Identification == "2"][0]
|
||||||
|
assert subject.get_references(element_type) == set([reference2])
|
||||||
|
assert subject.get_references(element) == set([reference1])
|
||||||
|
|
||||||
def test_getting_direct_classifications(self):
|
def test_getting_direct_classifications(self):
|
||||||
library = ifcopenshell.file()
|
library = ifcopenshell.file()
|
||||||
|
|||||||
Reference in New Issue
Block a user