mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 22:33:33 +00:00
Allow user to toggle duplicates when getting inverses. See #1747.
This commit is contained in:
@@ -378,7 +378,7 @@ class file(object):
|
|||||||
|
|
||||||
return [entity_instance(e, self) for e in fn(inst.wrapped_data, max_levels)]
|
return [entity_instance(e, self) for e in fn(inst.wrapped_data, max_levels)]
|
||||||
|
|
||||||
def get_inverse(self, inst):
|
def get_inverse(self, inst, allow_duplicate=False):
|
||||||
"""Return a list of entities that reference this entity
|
"""Return a list of entities that reference this entity
|
||||||
|
|
||||||
:param inst: The entity instance to get inverse relationships
|
:param inst: The entity instance to get inverse relationships
|
||||||
@@ -386,7 +386,10 @@ class file(object):
|
|||||||
:returns: A list of ifcopenshell.entity_instance.entity_instance objects
|
:returns: A list of ifcopenshell.entity_instance.entity_instance objects
|
||||||
:rtype: list
|
:rtype: list
|
||||||
"""
|
"""
|
||||||
return [entity_instance(e, self) for e in self.wrapped_data.get_inverse(inst.wrapped_data)]
|
inverses = [entity_instance(e, self) for e in self.wrapped_data.get_inverse(inst.wrapped_data)]
|
||||||
|
if allow_duplicate:
|
||||||
|
return inverses
|
||||||
|
return set(inverses)
|
||||||
|
|
||||||
def remove(self, inst):
|
def remove(self, inst):
|
||||||
"""Deletes an IFC object in the file.
|
"""Deletes an IFC object in the file.
|
||||||
|
|||||||
@@ -191,7 +191,12 @@ class TestFile(test.bootstrap.IFC4):
|
|||||||
def test_getting_inverse_references_of_an_element(self):
|
def test_getting_inverse_references_of_an_element(self):
|
||||||
owner = self.file.createIfcOwnerHistory()
|
owner = self.file.createIfcOwnerHistory()
|
||||||
element = self.file.createIfcWall(OwnerHistory=owner)
|
element = self.file.createIfcWall(OwnerHistory=owner)
|
||||||
assert self.file.get_inverse(owner) == [element]
|
assert self.file.get_inverse(owner) == {element}
|
||||||
|
|
||||||
|
def test_getting_multiple_inverses_if_an_element_is_referenced_twice_by_the_same_element(self):
|
||||||
|
user = self.file.createIfcPersonAndOrganization()
|
||||||
|
owner = self.file.createIfcOwnerHistory(OwningUser=user, LastModifyingUser=user)
|
||||||
|
assert self.file.get_inverse(user, allow_duplicate=True) == [owner, owner]
|
||||||
|
|
||||||
def test_removing_an_element(self):
|
def test_removing_an_element(self):
|
||||||
element = self.file.createIfcWall(GlobalId="global_id")
|
element = self.file.createIfcWall(GlobalId="global_id")
|
||||||
|
|||||||
Reference in New Issue
Block a user