From ffdaa8c4174165bec0ed41dfc741ac17b2539726 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 10 Apr 2023 18:05:13 +0500 Subject: [PATCH] Fixed error on disabling BlenderBIM addon Error was occuring because macros doesn't have `is_registered` attribute. Error: Traceback (most recent call last): File "C:\Software\Steam\steamapps\common\Blender\3.5\scripts\modules\addon_utils.py", line 421, in disable mod.unregister() File "\scripts\addons\blenderbim\__init__.py", line 45, in unregister blenderbim.bim.unregister() File "\scripts\addons\blenderbim\bim\__init__.py", line 192, in unregister if cls.is_registered is not False: AttributeError: type object 'OverrideDuplicateMoveMacro' has no attribute 'is_registered' Still getting some other error on disabling the addon, seems to happen due ongoing drawing system restructure. Error: Traceback (most recent call last): File "C:\Software\Steam\steamapps\common\Blender\3.5\scripts\modules\addon_utils.py", line 421, in disable mod.unregister() File "\addons\blenderbim\__init__.py", line 45, in unregister blenderbim.bim.unregister() File "\addons\blenderbim\bim\__init__.py", line 177, in unregister if bpy.data.scenes['Scene'].BIMProperties.module_visibility['drawing'].is_visible: KeyError: 'bpy_prop_collection[key]: key "drawing" not found' --- src/blenderbim/blenderbim/bim/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 62c56e72d2..1c4c03fbff 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -172,6 +172,16 @@ def register(): def unregister(): for cls in reversed(classes): + # GizmoGroup, Gizmo and Macro doesn't have cls.is_registered attribute + if set((bpy.types.GizmoGroup, bpy.types.Gizmo)) & set(cls.__bases__): + if bpy.data.scenes["Scene"].BIMProperties.module_visibility["drawing"].is_visible: + bpy.utils.unregister_class(cls) + continue + + if bpy.types.Macro in cls.__bases__: + bpy.utils.unregister_class(cls) + continue + if getattr(cls, "is_registered", None) is None: bpy.utils.unregister_class(cls) else: