[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