From 122ec6fb0a38a73fe5a3eff411d915692c37fa67 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 18 Oct 2024 18:10:23 +0500 Subject: [PATCH] Use clever Blender length props for editing representation item extrusion depth Example - https://imgchest.com/p/ljyqzpmwoy2 --- src/bonsai/bonsai/bim/module/geometry/operator.py | 1 + src/bonsai/bonsai/bim/module/model/workspace.py | 2 +- src/bonsai/bonsai/bim/prop.py | 5 +++++ src/bonsai/bonsai/tool/geometry.py | 9 +++++++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/geometry/operator.py b/src/bonsai/bonsai/bim/module/geometry/operator.py index 1b58579a63..45135e7d3f 100644 --- a/src/bonsai/bonsai/bim/module/geometry/operator.py +++ b/src/bonsai/bonsai/bim/module/geometry/operator.py @@ -2528,6 +2528,7 @@ class ImportRepresentationItems(bpy.types.Operator, tool.Ifc.Operator): class UpdateItemAttributes(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.update_item_attributes" bl_label = "Update Item Attributes" + bl_description = "Update item attributes in IFC and reload mesh for representation item" bl_options = {"REGISTER", "UNDO"} def _execute(self, context): diff --git a/src/bonsai/bonsai/bim/module/model/workspace.py b/src/bonsai/bonsai/bim/module/model/workspace.py index 08c263494f..f6542b0165 100644 --- a/src/bonsai/bonsai/bim/module/model/workspace.py +++ b/src/bonsai/bonsai/bim/module/model/workspace.py @@ -274,7 +274,7 @@ class EditItemUI: return for item_attribute in obj.data.BIMMeshProperties.item_attributes: row = cls.layout.row() - row.prop(item_attribute, "float_value", text=item_attribute.name) + row.prop(item_attribute, item_attribute.get_value_name(display_only=True), text=item_attribute.name) if len(obj.data.BIMMeshProperties.item_attributes): row = cls.layout.row() row.operator("bim.update_item_attributes", icon="FILE_REFRESH", text="") diff --git a/src/bonsai/bonsai/bim/prop.py b/src/bonsai/bonsai/bim/prop.py index 853995ec64..cb44a85538 100644 --- a/src/bonsai/bonsai/bim/prop.py +++ b/src/bonsai/bonsai/bim/prop.py @@ -328,6 +328,11 @@ class Attribute(PropertyGroup): assert_never(data_type) def get_value_name(self, display_only: bool = False) -> str: + """Get name of the value attribute. + + :param display_only: Should be `True` if the value won't be accessed directly + by this name, only through UI (e.g. with `layout.prop`). + """ data_type = self.data_type if data_type == "string": return "string_value" diff --git a/src/bonsai/bonsai/tool/geometry.py b/src/bonsai/bonsai/tool/geometry.py index f5666a0a12..5463fa5982 100644 --- a/src/bonsai/bonsai/tool/geometry.py +++ b/src/bonsai/bonsai/tool/geometry.py @@ -48,9 +48,12 @@ from collections import defaultdict from math import radians, pi from mathutils import Vector, Matrix from bonsai.bim.ifc import IfcStore -from typing import Union, Iterable, Optional, Literal, Iterator, List +from typing import Union, Iterable, Optional, Literal, Iterator, List, TYPE_CHECKING from typing_extensions import TypeIs +if TYPE_CHECKING: + from bonsai.bim.prop import Attribute + class Geometry(bonsai.core.tool.Geometry): @classmethod @@ -1500,8 +1503,10 @@ class Geometry(bonsai.core.tool.Geometry): props.item_attributes.clear() item = tool.Ifc.get().by_id(props.ifc_definition_id) if item.is_a("IfcExtrudedAreaSolid"): - new = props.item_attributes.add() + new: Attribute = props.item_attributes.add() new.name = "Depth" + new.data_type = "float" + new.special_type = "LENGTH" new.float_value = item.Depth @classmethod