From ff2cda7d184ef731273935d742b009d6f1418bc1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 16 Mar 2023 15:19:58 +0500 Subject: [PATCH] Small refactor + allowing to preview text in viewport while editing --- src/blenderbim/blenderbim/bim/module/drawing/decoration.py | 5 ++++- src/blenderbim/blenderbim/bim/module/drawing/prop.py | 7 +++++++ src/blenderbim/blenderbim/bim/module/drawing/ui.py | 5 +++++ src/blenderbim/blenderbim/bim/module/model/workspace.py | 1 - src/blenderbim/blenderbim/tool/drawing.py | 1 - 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py index c977203025..059beb22fe 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py @@ -2073,7 +2073,10 @@ class TextDecorator(BaseDecorator): dir = Vector((1, 0)) pos = location_3d_to_region_2d(region, region3d, obj.matrix_world.translation) font_size = DecoratorData.get_ifc_text_font_size(obj) - for line_i, line in enumerate(obj.BIMTextProperties.value.split("\\n")): + props = obj.BIMTextProperties + text = props.get_text() if props.is_editing else props.value + + for line_i, line in enumerate(text.split("\\n")): self.draw_label( context, line, pos, dir, gap=0, center=False, vcenter=False, font_size=font_size, line_no=line_i ) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/prop.py b/src/blenderbim/blenderbim/bim/module/drawing/prop.py index 69591127a5..26663e1dbe 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/prop.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/prop.py @@ -423,6 +423,9 @@ class BIMTextProperties(PropertyGroup): is_editing: BoolProperty(name="Is Editing", default=False) attributes: CollectionProperty(name="Attributes", type=Attribute) test_prop: StringProperty(name="test_prop", default="TEXT") + # Current text value with evaluated experessions stored in `value`. + # The original (Literal) value stored in `attributes['Literal']` + # and can be accessed with `get_text()` value: StringProperty(name="Value", default="TEXT") font_size: EnumProperty( items=[ @@ -440,6 +443,10 @@ class BIMTextProperties(PropertyGroup): name="Box alignment", size=9, set=set_box_alignment, get=get_box_alignment, default=DEFAULT_BOX_ALIGNMENT ) + def get_text(self): + text_attribute = self.attributes.get('Literal', None) + return text_attribute.string_value if text_attribute else self.text + class BIMAssignedProductProperties(PropertyGroup): is_editing_product: BoolProperty(name="Is Editing Product", default=False) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index 6e3d65b699..de4d23da86 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -380,6 +380,11 @@ class BIM_PT_text(Panel): row.label(text=attribute["name"]) row.label(text=attribute["value"]) + row = self.layout.row(align=True) + row.label(text="Current value:") + row.label(text=props.value) + + class BIM_PT_annotation_utilities(Panel): bl_idname = "BIM_PT_annotation_utilities" diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index a926a638c3..5bfa56681f 100644 --- a/src/blenderbim/blenderbim/bim/module/model/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py @@ -481,7 +481,6 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): return self.execute(context) def draw(self, context): - props = context.scene.BIMModelProperties if self.hotkey == "S_O": row = self.layout.row() row.prop(self, "x") diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index db8e3122ca..04cf2a0327 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -538,7 +538,6 @@ class Drawing(blenderbim.core.tool.Drawing): value = ifc_literal.Literal product = cls.get_assigned_product(tool.Ifc.get_entity(obj)) if product: - variables = {} for variable in re.findall("{{.*?}}", value): value = value.replace( variable, str(ifcopenshell.util.selector.get_element_value(product, variable[2:-2]) or "")