From 2510e4e6c4b3d625c9d1128e350c75f4852c302d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 5 Jul 2024 12:49:22 +0500 Subject: [PATCH] bim.add_representation - OBJECT method to use the final geometry E.g. with all modifiers and shape keys applied. Example - https://imgur.com/a/rbf5RtI --- .../blenderbim/bim/module/geometry/operator.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 8ab359af23..4390cdf99a 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -142,7 +142,14 @@ class AddRepresentation(bpy.types.Operator, Operator): "for Profile - 2D bounding box by local XZ axes.\n" "For other contexts - bounding box is 3d.", ), - ("OBJECT", "From Object", "Copies geometry from another object"), + ( + "OBJECT", + "From Object", + ( + "Copies geometry from another object.\n" + "Final version of the geometry will be used (e.g. with all modifiers, shape keys applied)" + ), + ), ("PROJECT", "Full Representation", "Reuses the current representation"), ( "CUBE", @@ -195,13 +202,13 @@ class AddRepresentation(bpy.types.Operator, Operator): tool.Geometry.change_object_data(obj, data, is_global=True) elif conversion_method in ("OBJECT", "CUBE"): if conversion_method == "OBJECT": - if not props.representation_from_object: + if not (source_obj := 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) - assert isinstance(data_, bpy.types.Mesh) # Type checker. - data = data_ + depsgraph = context.evaluated_depsgraph_get() + eval_obj = source_obj.evaluated_get(depsgraph) + data = bpy.data.meshes.new_from_object(eval_obj) else: # CUBE data = bpy.data.meshes.new("Cube") bm = tool.Blender.get_bmesh_for_mesh(data)