From 55026ca996156c2f2d0b91a19744283af5eb9f54 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 11 May 2024 22:29:39 +1000 Subject: [PATCH] Fix #4616. You can now create a new representation based off any other object. This makes it easy to custom model whatever you want as a starting point. --- .../blenderbim/bim/module/geometry/operator.py | 18 +++++++++++++++--- .../blenderbim/bim/module/geometry/prop.py | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 7458de0c87..6a3909539a 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -136,15 +136,17 @@ class AddRepresentation(bpy.types.Operator, Operator): "for Profile - 2D bounding box by local XZ axes.\n" "For other contexts - bounding box is 3d.", ), - ("PROJECT", "Full Representation", ""), + ("OBJECT", "From Object", "Copies geometry from another object"), + ("PROJECT", "Full Representation", "Reuses the current representation"), ], name="Representation Conversion Method", ) def _execute(self, context): obj = context.active_object - props = obj.BIMGeometryProperties - ifc_context = int(props.contexts or "0") or None + props = context.scene.BIMGeometryProperties + oprops = obj.BIMGeometryProperties + ifc_context = int(oprops.contexts or "0") or None if not ifc_context: return ifc_context = tool.Ifc.get().by_id(ifc_context) @@ -167,6 +169,13 @@ 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 ( + self.representation_conversion_method == "OBJECT" + and props.representation_from_object + and props.representation_from_object.data + ): + data = tool.Geometry.duplicate_object_data(props.representation_from_object) + tool.Geometry.change_object_data(obj, data, is_global=True) try: core.add_representation( @@ -192,6 +201,9 @@ class AddRepresentation(bpy.types.Operator, Operator): def draw(self, context): row = self.layout.row() row.prop(self, "representation_conversion_method", text="") + if self.representation_conversion_method == "OBJECT": + row = self.layout.row() + row.prop(context.scene.BIMGeometryProperties, "representation_from_object", text="") class SelectConnection(bpy.types.Operator, Operator): diff --git a/src/blenderbim/blenderbim/bim/module/geometry/prop.py b/src/blenderbim/blenderbim/bim/module/geometry/prop.py index 4960c9f74c..83e1069b7e 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/prop.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/prop.py @@ -138,3 +138,4 @@ class BIMGeometryProperties(PropertyGroup): name="IFC Interaction Mode", update=update_mode, ) + representation_from_object: PointerProperty(type=bpy.types.Object)