diff --git a/src/blenderbim/blenderbim/bim/module/csv/operator.py b/src/blenderbim/blenderbim/bim/module/csv/operator.py index 152c671f39..256193d9c8 100644 --- a/src/blenderbim/blenderbim/bim/module/csv/operator.py +++ b/src/blenderbim/blenderbim/bim/module/csv/operator.py @@ -16,14 +16,15 @@ # You should have received a copy of the GNU General Public License # along with BlenderBIM Add-on. If not, see . -import bpy -import ifccsv -import ifcopenshell import os -import logging +import bpy import json -import webbrowser +import ifccsv +import logging import tempfile +import webbrowser +import ifcopenshell +import blenderbim.tool as tool from blenderbim.bim.ifc import IfcStore from blenderbim.bim.handler import purge_module_data diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index cc3605b26d..8ac0e3c33a 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -239,6 +239,10 @@ class UpdateRepresentation(bpy.types.Operator, Operator): product = self.file.by_id(obj.BIMObjectProperties.ifc_definition_id) material = ifcopenshell.util.element.get_material(product, should_skip_usage=True) + if getattr(product, "HasOpenings", False) and obj.data.BIMMeshProperties.has_openings_applied: + # Meshlike things with openings can only be updated without openings applied. + return + if not product.is_a("IfcGridAxis"): tool.Geometry.clear_cache(product) @@ -1442,9 +1446,11 @@ class OverrideModeSetObject(bpy.types.Operator): self.reload_representation(obj) else: self.reload_representation(obj) + tool.Ifc.finish_edit(obj) for obj in self.unchanged_objs_with_openings: self.reload_representation(obj) + tool.Ifc.finish_edit(obj) return {"FINISHED"} def reload_representation(self, obj): diff --git a/src/blenderbim/blenderbim/bim/prop.py b/src/blenderbim/blenderbim/bim/prop.py index 34b587d58d..d1dbc3445c 100644 --- a/src/blenderbim/blenderbim/bim/prop.py +++ b/src/blenderbim/blenderbim/bim/prop.py @@ -435,6 +435,7 @@ class BIMMeshProperties(PropertyGroup): ifc_definition_id: IntProperty(name="IFC Definition ID") ifc_boolean_id: IntProperty(name="IFC Boolean ID") obj: bpy.props.PointerProperty(type=bpy.types.Object) + has_openings_applied: BoolProperty(name="Has Openings Applied", default=True) is_native: BoolProperty(name="Is Native", default=False) is_swept_solid: BoolProperty(name="Is Swept Solid") is_parametric: BoolProperty(name="Is Parametric", default=False) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 47854d0668..6795def93d 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -460,6 +460,7 @@ class Geometry(blenderbim.core.tool.Geometry): mesh = ifc_importer.create_mesh(element, shape) ifc_importer.material_creator.load_existing_materials() ifc_importer.material_creator.create(element, obj, mesh) + mesh.BIMMeshProperties.has_openings_applied = apply_openings return mesh diff --git a/src/blenderbim/blenderbim/tool/ifc.py b/src/blenderbim/blenderbim/tool/ifc.py index b52da78d3a..247e3a5c66 100644 --- a/src/blenderbim/blenderbim/tool/ifc.py +++ b/src/blenderbim/blenderbim/tool/ifc.py @@ -146,6 +146,13 @@ class Ifc(blenderbim.core.tool.Ifc): def edit(cls, obj): IfcStore.edited_objs.add(obj) + @classmethod + def finish_edit(cls, obj): + try: + IfcStore.edited_objs.remove(obj) + except: + pass + @classmethod def resolve_uri(cls, uri): if os.path.isabs(uri):