From ec8210fb67474e34390b7a4e053903b79b285e57 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 21 Oct 2023 19:50:43 -0500 Subject: [PATCH] When adding a context, check to see if it already exists first. --- .../blenderbim/bim/module/context/operator.py | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/context/operator.py b/src/blenderbim/blenderbim/bim/module/context/operator.py index fa545168aa..d20e3e494f 100644 --- a/src/blenderbim/blenderbim/bim/module/context/operator.py +++ b/src/blenderbim/blenderbim/bim/module/context/operator.py @@ -40,7 +40,23 @@ class AddContext(bpy.types.Operator, Operator): target_view: bpy.props.StringProperty() parent: bpy.props.IntProperty() - def _execute(self, context): + + + def _execute(self, context): + + ifc_file = tool.Ifc.get() + + # Check if a IfcGeometricRepresentationSubContext already exists in the file + for subcontext in ifc_file.by_type("IfcGeometricRepresentationSubContext", include_subtypes=False): + if ( + subcontext.ContextType == self.context_type + and subcontext.ContextIdentifier == self.context_identifier + and subcontext.TargetView == self.target_view + ): + self.report({'INFO'}, "Context already exists. Did not add.") + return {'CANCELLED'} + + # If the context doesn't exist, add it core.add_context( tool.Ifc, context_type=self.context_type, @@ -48,6 +64,21 @@ class AddContext(bpy.types.Operator, Operator): target_view=self.target_view, parent=tool.Ifc.get().by_id(self.parent) if self.parent else None, ) + self.report({'INFO'}, "Context added.") + return {'FINISHED'} + + def context_already_exists(ifc_data, context_type, context_identifier, target_view): + # Check if the context already exists in the loaded IFC data + for context in ifc_data.by_type("IfcContext"): + if ( + context.is_a() == context_type + and context.Name == context_identifier + and context.Phase == target_view + ): + return True + + return False + class RemoveContext(bpy.types.Operator, Operator):