Aggregate data types

This commit is contained in:
Thomas Krijnen
2026-01-14 13:59:07 +01:00
parent ffcc02fb99
commit 9147938c36
3 changed files with 14 additions and 12 deletions
@@ -60,9 +60,9 @@ def remove_representation(
elif subelement.is_a("IfcProfileDef") and subelement.ProfileName:
named_profiles.add(subelement)
do_not_delete = file.by_type("IfcGeometricRepresentationContext")
do_not_delete = set(file.by_type("IfcGeometricRepresentationContext"))
if should_keep_named_profiles:
do_not_delete += named_profiles
do_not_delete |= named_profiles
# Order matters - layer assignments may reference representation directly.
also_consider = list(presentation_layer_assignments_reps)
@@ -73,7 +73,7 @@ def remove_representation(
file,
representation,
also_consider=also_consider,
do_not_delete=set(do_not_delete),
do_not_delete=do_not_delete,
)
for texture in textures:
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
from collections import deque
import ifcopenshell
import ifcopenshell.ifcopenshell_wrapper as W
import ifcopenshell.api.geometry
@@ -302,7 +303,7 @@ class Usecase:
self.whitelisted_inverse_attributes = {
"IfcMaterial": ["HasExternalReferences", "HasProperties", "HasRepresentation"]
}
self.existing_contexts = self.file.by_type("IfcGeometricRepresentationContext")
self.existing_contexts = list(self.file.by_type("IfcGeometricRepresentationContext"))
element = self.add_element(self.settings["element"])
if element.HasRepresentation:
self.reuse_existing_contexts()
@@ -329,7 +330,7 @@ class Usecase:
"IfcProductDefinitionShape": ["HasShapeAspects"],
"IfcRepresentationMap": ["HasShapeAspects"],
}
self.existing_contexts = self.file.by_type("IfcGeometricRepresentationContext")
self.existing_contexts = list(self.file.by_type("IfcGeometricRepresentationContext"))
element = self.add_element(self.settings["element"])
self.reuse_existing_contexts()
return element
@@ -348,7 +349,7 @@ class Usecase:
"IfcProductDefinitionShape": ["HasShapeAspects"],
"IfcRepresentationMap": ["HasShapeAspects"],
}
self.existing_contexts = self.file.by_type("IfcGeometricRepresentationContext")
self.existing_contexts = list(self.file.by_type("IfcGeometricRepresentationContext"))
element = self.add_element(self.settings["element"])
self.reuse_existing_contexts()
@@ -390,9 +391,9 @@ class Usecase:
new = self.file_add(element)
self.added_elements[element.id()] = new
self.check_inverses(element)
subelement_queue = self.settings["library"].traverse(element, max_levels=1)[1:]
subelement_queue = deque(self.settings["library"].traverse(element, max_levels=1)[1:])
while subelement_queue:
subelement = subelement_queue.pop(0)
subelement = subelement_queue.popleft()
existing_element = self.get_existing_element(subelement)
if existing_element:
self.added_elements[subelement.id()] = existing_element