From de17736002fab48007323c189ae9b301afff48de Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 15 Nov 2024 16:26:01 +0500 Subject: [PATCH] Bonsai to detect Blender types for added qset props Example - https://imgchest.com/p/bp452xxbx45 cc @steverugi @DimitriosThe maybe you'll find useful too if you use custom quantity sets for products in 4d/5d --- src/bonsai/bonsai/tool/pset.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/bonsai/bonsai/tool/pset.py b/src/bonsai/bonsai/tool/pset.py index a227f89c49..9d37115aa4 100644 --- a/src/bonsai/bonsai/tool/pset.py +++ b/src/bonsai/bonsai/tool/pset.py @@ -18,6 +18,7 @@ import bpy import ifcopenshell +import ifcopenshell.api.pset import ifcopenshell.util.attribute import ifcopenshell.util.element import bonsai.core.tool @@ -353,11 +354,17 @@ class Pset(bonsai.core.tool.Pset): @classmethod def add_proposed_property(cls, name: str, value: Any, props: bpy.types.PropertyGroup) -> Union[None, str]: + from ifcopenshell.api.pset.edit_qto import infer_property_type + if props.properties.get(name): return f"Property '{name}' already exists." + special_type = "" if props.active_pset_type == "QTO": if not isinstance(value, (float, int)): return f"Quantity sets support only numeric values. Provided value: '{value}' ({type(value).__name__})." + property_type = infer_property_type(name, value) + if property_type in ("Area", "Length", "Volume"): + special_type = property_type.upper() prop = props.properties.add() prop.name = name metadata = prop.metadata @@ -365,6 +372,7 @@ class Pset(bonsai.core.tool.Pset): metadata.name = name metadata.is_null = value is None metadata.is_optional = True + metadata.special_type = special_type metadata.set_value(metadata.get_value_default() if metadata.is_null else value) @classmethod