From e72f2758c66e33add85c184e27726fae25e2b5d9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 3 Jul 2024 12:27:04 +0500 Subject: [PATCH] bim.add_representation - OBJECT conversion method UX tweaks 1) Filter only objects with representations in the pointer property. 2) Add description to the pointer property. 3) More descriptive error if object is not selected. --- .../blenderbim/bim/module/geometry/operator.py | 8 +++++--- src/blenderbim/blenderbim/bim/module/geometry/prop.py | 10 +++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index e424ead39a..dab2557333 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -183,9 +183,11 @@ class AddRepresentation(bpy.types.Operator, Operator): else: data = tool.Geometry.generate_3d_box_mesh(obj) tool.Geometry.change_object_data(obj, data, is_global=True) - elif ( - conversion_method == "OBJECT" and props.representation_from_object and props.representation_from_object.data - ): + elif conversion_method == "OBJECT": + if not props.representation_from_object: + self.report({"ERROR"}, "No object is selected to copy a representation from.") + return {"FINISHED"} + data = tool.Geometry.duplicate_object_data(props.representation_from_object) tool.Geometry.change_object_data(obj, data, is_global=True) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/prop.py b/src/blenderbim/blenderbim/bim/module/geometry/prop.py index c7e0ab5362..860a46eb58 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/prop.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/prop.py @@ -136,4 +136,12 @@ class BIMGeometryProperties(PropertyGroup): should_force_triangulation: BoolProperty(name="Force Triangulation", default=False) is_changing_mode: BoolProperty(name="Is Changing Mode", default=False) mode: EnumProperty(items=get_mode, name="IFC Interaction Mode", update=update_mode) - representation_from_object: PointerProperty(type=bpy.types.Object) + + def is_object_valid_for_representation_copy(self, obj: bpy.types.Object) -> bool: + return bool(obj != bpy.context.active_object and obj.data) + + representation_from_object: PointerProperty( + name="Object to copy a representation from.\nIt doesn't have to be an IFC object.", + type=bpy.types.Object, + poll=is_object_valid_for_representation_copy, + )