From 40cf322fb448c3fabb74e0a7444f9c292b6e11f8 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 15 Nov 2025 09:58:37 -0600 Subject: [PATCH] =?UTF-8?q?fall=20back=20to=20a=20Windows=20system=20font?= =?UTF-8?q?=20if=20the=20font=20isn=E2=80=99t=20found=20in=20addon=20folde?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonsai/bim/module/drawing/decoration.py | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/decoration.py b/src/bonsai/bonsai/bim/module/drawing/decoration.py index edc51eb231..f91b0085eb 100644 --- a/src/bonsai/bonsai/bim/module/drawing/decoration.py +++ b/src/bonsai/bonsai/bim/module/drawing/decoration.py @@ -19,6 +19,7 @@ import gpu import bpy import blf +import os import math import bmesh import shapely @@ -1980,13 +1981,38 @@ class DecorationsHandler: for object_type in ("SLOPE_ANGLE", "SLOPE_FRACTION", "SLOPE_PERCENT"): self.decorators[object_type] = self.decorators["FALL"] self.decorators["MULTI_SYMBOL"] = self.decorators["SYMBOL"] + prefs = tool.Blender.get_addon_preferences() + if drawing_font := prefs.doc.drawing_font: + # Try Blender addon font folder drawing_font_path = tool.Blender.get_data_dir_path(Path("fonts") / drawing_font) - if drawing_font_path.is_file(): - font_id = blf.load(drawing_font_path.__str__()) - for decorator in self.decorators.values(): - decorator.font_id = font_id + + if not drawing_font_path.is_file(): + # 2 — Fallback search: Windows font directories + # TODO - Linux + win_font_dirs = [ + Path(os.environ.get("WINDIR", "C:\\Windows")) / "Fonts", + # Add any custom enterprise paths here if needed + ] + + found_font = None + for font_dir in win_font_dirs: + candidate = font_dir / drawing_font + if candidate.is_file(): + found_font = candidate + break + + if found_font: + drawing_font_path = found_font + else: + print(f"[BIM] Font '{drawing_font}' not found in addon or Windows fonts.") + return # Bail out without assigning fonts + + font_id = blf.load(str(drawing_font_path)) + + for decorator in self.decorators.values(): + decorator.font_id = font_id def __call__(self, context): # Check if any viewport is in local view - skip decorations if so