[Bf-blender-cvs] [32a4c7f1888] master: Geometry Nodes: implicit position input in Set Position node

Jacques Lucke noreply at git.blender.org
Mon Sep 20 19:01:28 CEST 2021


Commit: 32a4c7f188826d649b231b39baa1c1bcb7cbcbdc
Author: Jacques Lucke
Date:   Mon Sep 20 18:56:30 2021 +0200
Branches: master
https://developer.blender.org/rB32a4c7f188826d649b231b39baa1c1bcb7cbcbdc

Geometry Nodes: implicit position input in Set Position node

This change makes the Set Position node do nothing by default.
Before, the geometry would always disappear, because it all points
would be moved to (0, 0, 0).

Differential Revision: https://developer.blender.org/D12553

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

M	source/blender/modifiers/intern/MOD_nodes_evaluator.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_position.cc

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

diff --git a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
index f67f7f967c9..a215ad4d21a 100644
--- a/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
+++ b/source/blender/modifiers/intern/MOD_nodes_evaluator.cc
@@ -321,6 +321,17 @@ static const CPPType *get_socket_cpp_type(const DSocket socket)
 
 static void get_socket_value(const SocketRef &socket, void *r_value)
 {
+  const bNodeSocket &bsocket = *socket.bsocket();
+  /* This is not supposed to be a long term solution. Eventually we want that nodes can specify
+   * more complex defaults (other than just single values) in their socket declarations. */
+  if (bsocket.flag & SOCK_HIDE_VALUE) {
+    const bNode &bnode = *socket.bnode();
+    if (bsocket.type == SOCK_VECTOR && bnode.type == GEO_NODE_SET_POSITION) {
+      new (r_value) Field<float3>(
+          std::make_shared<bke::AttributeFieldInput>("position", CPPType::get<float3>()));
+      return;
+    }
+  }
   const bNodeSocketType *typeinfo = socket.typeinfo();
   typeinfo->get_geometry_nodes_cpp_value(*socket.bsocket(), r_value);
 }
diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_position.cc b/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
index 832db76e731..c5e10b788ac 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
@@ -23,7 +23,7 @@ namespace blender::nodes {
 static void geo_node_set_position_declare(NodeDeclarationBuilder &b)
 {
   b.add_input<decl::Geometry>("Geometry");
-  b.add_input<decl::Vector>("Position");
+  b.add_input<decl::Vector>("Position").hide_value();
   b.add_input<decl::Bool>("Selection").default_value(true).hide_value();
   b.add_output<decl::Geometry>("Geometry");
 }



More information about the Bf-blender-cvs mailing list