From 7af5db7cd4859bff565090fbe5660a179a0c660b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 3 Aug 2024 22:04:38 +1000 Subject: [PATCH] Collector now unassigns from old ifc collections --- src/blenderbim/blenderbim/bim/import_ifc.py | 2 +- src/blenderbim/blenderbim/tool/collector.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 9018592086..4550d12ade 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1261,7 +1261,7 @@ class IfcImporter: def place_objects_in_collections(self) -> None: for ifc_definition_id, obj in self.added_data.items(): if isinstance(obj, bpy.types.Object): - tool.Collector.assign(obj) + tool.Collector.assign(obj, should_clean_users_collection=False) def is_curve_annotation(self, element: ifcopenshell.entity_instance) -> bool: object_type = element.ObjectType diff --git a/src/blenderbim/blenderbim/tool/collector.py b/src/blenderbim/blenderbim/tool/collector.py index d903d60a8c..1bc2e13c6a 100644 --- a/src/blenderbim/blenderbim/tool/collector.py +++ b/src/blenderbim/blenderbim/tool/collector.py @@ -25,8 +25,20 @@ from typing import Union class Collector(blenderbim.core.tool.Collector): @classmethod - def assign(cls, obj: bpy.types.Object) -> None: + def assign(cls, obj: bpy.types.Object, should_clean_users_collection=True) -> None: """Links an object to an appropriate Blender collection.""" + if should_clean_users_collection: + for users_collection in obj.users_collection: + if obj.BIMObjectProperties.collection == users_collection: + continue + # Users are free to user extra collections for their own + # purposes except for the reserved keyword "Ifc" and + # "Collection" (which is the default collection that comes with + # a Blender session) + if "Ifc" in users_collection.name or users_collection.name == "Collection": + print('removing', users_collection, 'from', obj) + users_collection.objects.unlink(obj) + element = tool.Ifc.get_entity(obj) if element.is_a("IfcGridAxis"):