[Bf-blender-cvs] [417924d8409] geometry-nodes: Geometry Nodes: transform geometry in Object Info node

Jacques Lucke noreply at git.blender.org
Thu Nov 19 13:41:21 CET 2020


Commit: 417924d84091d8957baac672db1387e502a46c25
Author: Jacques Lucke
Date:   Thu Nov 19 13:40:38 2020 +0100
Branches: geometry-nodes
https://developer.blender.org/rB417924d84091d8957baac672db1387e502a46c25

Geometry Nodes: transform geometry in Object Info node

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_object_info.cc

===================================================================

diff --git a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
index bb5110b071f..38857fffcc0 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc
@@ -20,6 +20,8 @@
 #include "BKE_mesh_wrapper.h"
 #include "BKE_modifier.h"
 
+#include "BLI_math_matrix.h"
+
 static bNodeSocketTemplate geo_node_object_info_in[] = {
     {SOCK_OBJECT, N_("Object")},
     {-1, ""},
@@ -45,20 +47,31 @@ static void geo_object_info_exec(GeoNodeExecParams params)
   float3 scale = {0, 0, 0};
   GeometrySet geometry_set;
 
+  const Object *self_object = params.self_object();
+
   if (object != nullptr) {
     float quaternion[4];
     mat4_decompose(location, quaternion, scale, object->obmat);
     quat_to_eul(rotation, quaternion);
 
-    if (object->type == OB_MESH) {
-      Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object, false);
-      if (mesh != nullptr) {
-        BKE_mesh_wrapper_ensure_mdata(mesh);
-        /* Make a copy because the life time of the other mesh might be shorter. */
-        Mesh *copied_mesh = BKE_mesh_copy_for_eval(mesh, false);
-        geometry_set = GeometrySet::create_with_mesh(copied_mesh);
-        geometry_set.get_component_for_write<MeshComponent>().copy_vertex_group_names_from_object(
-            *object);
+    if (object != self_object) {
+      if (object->type == OB_MESH) {
+        Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object, false);
+        if (mesh != nullptr) {
+          BKE_mesh_wrapper_ensure_mdata(mesh);
+
+          /* Make a copy because the life time of the other mesh might be shorter. */
+          Mesh *copied_mesh = BKE_mesh_copy_for_eval(mesh, false);
+
+          /* Transform into the local space of the object that is being modified. */
+          float transform[4][4];
+          mul_m4_m4m4(transform, self_object->imat, object->obmat);
+          BKE_mesh_transform(copied_mesh, transform, true);
+
+          MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
+          mesh_component.replace(copied_mesh);
+          mesh_component.copy_vertex_group_names_from_object(*object);
+        }
       }
     }
   }



More information about the Bf-blender-cvs mailing list