diff --git a/src/ifcblenderexport/blenderbim/bim/handler.py b/src/ifcblenderexport/blenderbim/bim/handler.py index a6e32857ad..a8960d04cc 100644 --- a/src/ifcblenderexport/blenderbim/bim/handler.py +++ b/src/ifcblenderexport/blenderbim/bim/handler.py @@ -15,6 +15,16 @@ def loadIfcStore(scene): {k: bpy.data.objects.get(v) for k, v in json.loads(props.guid_map).items()} if props.id_map else {} ) + # Purge data cache + from blenderbim.bim import modules + for module in modules.values(): + if not module: + continue + try: + getattr(getattr(module, 'data'), 'Data').purge() + except AttributeError: + pass + @persistent def storeIdMap(scene): diff --git a/src/ifcblenderexport/blenderbim/bim/module/aggregate/data.py b/src/ifcblenderexport/blenderbim/bim/module/aggregate/data.py index 883e6bd209..67ff085df2 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/aggregate/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/aggregate/data.py @@ -4,6 +4,10 @@ from blenderbim.bim.ifc import IfcStore class Data: products = {} + @classmethod + def purge(cls): + cls.products = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/attribute/data.py b/src/ifcblenderexport/blenderbim/bim/module/attribute/data.py index 4a90c6c5cc..be39c428ef 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/attribute/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/attribute/data.py @@ -5,6 +5,10 @@ from blenderbim.bim.ifc import IfcStore class Data: products = {} + @classmethod + def purge(cls): + cls.products = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/classification/data.py b/src/ifcblenderexport/blenderbim/bim/module/classification/data.py index 204fd23be3..0a5f8c367a 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/classification/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/classification/data.py @@ -12,6 +12,16 @@ class Data: library_classifications = {} library_references = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.products = {} + cls.classifications = {} + cls.references = {} + cls.library_file = None + cls.library_classifications = {} + cls.library_references = {} + @classmethod def load(cls, product_id=None): cls._file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/constraint/data.py b/src/ifcblenderexport/blenderbim/bim/module/constraint/data.py index e756d9f2c8..165a40902d 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/constraint/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/constraint/data.py @@ -9,6 +9,12 @@ class Data: products = {} objectives = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.products = {} + cls.objectives = {} + @classmethod def load(cls, product_id=None): cls._file = IfcStore.get_file() @@ -28,7 +34,7 @@ class Data: for association in product.HasAssociations: if association.is_a("IfcRelAssociatesConstraint"): if not association.RelatingConstraint.is_a("IfcObjective"): - continue # not yet implemented + continue # not yet implemented cls.products[product_id].append(association.RelatingConstraint.id()) @classmethod diff --git a/src/ifcblenderexport/blenderbim/bim/module/context/data.py b/src/ifcblenderexport/blenderbim/bim/module/context/data.py index 0832b264e5..200b777ff5 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/context/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/context/data.py @@ -5,6 +5,11 @@ class Data: is_loaded = False contexts = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.contexts = {} + @classmethod def load(cls): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/document/data.py b/src/ifcblenderexport/blenderbim/bim/module/document/data.py index e618413f4a..1e3eb3184c 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/document/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/document/data.py @@ -10,6 +10,13 @@ class Data: references = {} information = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.products = {} + cls.references = {} + cls.information = {} + @classmethod def load(cls, product_id=None): cls._file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/geometry/data.py b/src/ifcblenderexport/blenderbim/bim/module/geometry/data.py index bce0641540..2e99e3aed3 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/geometry/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/geometry/data.py @@ -5,6 +5,11 @@ class Data: products = {} representations = {} + @classmethod + def purge(cls): + cls.products = False + cls.representations = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/georeference/data.py b/src/ifcblenderexport/blenderbim/bim/module/georeference/data.py index b91a2fd212..b6efe005db 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/georeference/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/georeference/data.py @@ -6,6 +6,12 @@ class Data: map_conversion = {} projected_crs = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.map_conversion = {} + cls.projected_crs = {} + @classmethod def load(cls): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/layer/data.py b/src/ifcblenderexport/blenderbim/bim/module/layer/data.py index 97486b0db6..5c9a787564 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/layer/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/layer/data.py @@ -9,6 +9,12 @@ class Data: items = {} layers = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.items = {} + cls.layers = {} + @classmethod def load(cls, item_id=None): cls._file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/material/data.py b/src/ifcblenderexport/blenderbim/bim/module/material/data.py index 6ecc3153c8..630b7ae89d 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/material/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/material/data.py @@ -15,6 +15,20 @@ class Data: products = {} _file = None + @classmethod + def purge(cls): + cls.is_loaded = False + cls.materials = {} + cls.constituent_sets = {} + cls.constituents = {} + cls.layer_sets = {} + cls.layers = {} + cls.profile_sets = {} + cls.profiles = {} + cls.lists = {} + cls.products = {} + cls._file = None + @classmethod def load(cls, product_id=None): cls._file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/owner/data.py b/src/ifcblenderexport/blenderbim/bim/module/owner/data.py index 8b1eba8c92..290becd1dd 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/owner/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/owner/data.py @@ -8,6 +8,14 @@ class Data: addresses = {} roles = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.people = {} + cls.organisations = {} + cls.addresses = {} + cls.roles = {} + @classmethod def load(cls): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/pset/data.py b/src/ifcblenderexport/blenderbim/bim/module/pset/data.py index adedabcdb5..ffa74c0e3a 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/pset/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/pset/data.py @@ -8,6 +8,12 @@ class Data: psets = {} qtos = {} + @classmethod + def purge(cls): + cls.products = {} + cls.psets = {} + cls.qtos = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/root/data.py b/src/ifcblenderexport/blenderbim/bim/module/root/data.py index e0f186e1ac..445ece8e37 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/root/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/root/data.py @@ -4,6 +4,10 @@ from blenderbim.bim.ifc import IfcStore class Data: products = {} + @classmethod + def purge(cls): + cls.products = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/spatial/data.py b/src/ifcblenderexport/blenderbim/bim/module/spatial/data.py index cf74825e33..e442acd786 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/spatial/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/spatial/data.py @@ -4,6 +4,10 @@ from blenderbim.bim.ifc import IfcStore class Data: products = {} + @classmethod + def purge(cls): + cls.products = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/type/data.py b/src/ifcblenderexport/blenderbim/bim/module/type/data.py index 8201945cb7..696db35582 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/type/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/type/data.py @@ -4,6 +4,10 @@ from blenderbim.bim.ifc import IfcStore class Data: products = {} + @classmethod + def purge(cls): + cls.products = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/unit/data.py b/src/ifcblenderexport/blenderbim/bim/module/unit/data.py index f61a07c58b..08e1198d55 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/unit/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/unit/data.py @@ -5,6 +5,11 @@ class Data: is_loaded = False units = {} + @classmethod + def purge(cls): + cls.is_loaded = False + cls.units = {} + @classmethod def load(cls): file = IfcStore.get_file() diff --git a/src/ifcblenderexport/blenderbim/bim/module/void/data.py b/src/ifcblenderexport/blenderbim/bim/module/void/data.py index 363405b4ca..84c80f3fb0 100644 --- a/src/ifcblenderexport/blenderbim/bim/module/void/data.py +++ b/src/ifcblenderexport/blenderbim/bim/module/void/data.py @@ -6,6 +6,12 @@ class Data: openings = {} fillings = {} + @classmethod + def purge(cls): + cls.products = {} + cls.openings = {} + cls.fillings = {} + @classmethod def load(cls, product_id): file = IfcStore.get_file()