diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index a022af28d0..fc3b9ecbf6 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -2093,5 +2093,6 @@ class DecorationsHandler: if not DecoratorData.is_loaded: DecoratorData.load(self) - for obj, decorator in DecoratorData.data["object_decorators"]: + object_decorators = DecoratorData.data.get("object_decorators", []) + for obj, decorator in object_decorators: decorator.decorate(context, obj) diff --git a/src/bonsai/bonsai/tool/drawing.py b/src/bonsai/bonsai/tool/drawing.py index 0f063b8473..f0455a4ba1 100644 --- a/src/bonsai/bonsai/tool/drawing.py +++ b/src/bonsai/bonsai/tool/drawing.py @@ -2123,7 +2123,15 @@ class Drawing(bonsai.core.tool.Drawing): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) value = '"' + str(value).replace('"', '\\"') + '"' command = command.replace(variable, value) - text = text.replace(original_command, ifcopenshell.util.selector.format(command[2:-2])) + # Defensive: skip if command[2:-2] is None or 'None' + command_content = command[2:-2] + if command_content is None or str(command_content).strip().lower() == 'none': + text = text.replace(original_command, "") + else: + try: + text = text.replace(original_command, ifcopenshell.util.selector.format(command_content)) + except Exception: + text = text.replace(original_command, "") for variable in re.findall("{{.*?}}", text): value = ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) if isinstance(value, (list, tuple)):