From 32a4c7f188826d649b231b39baa1c1bcb7cbcbdc Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 20 Sep 2021 18:56:30 +0200 Subject: 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 --- source/blender/modifiers/intern/MOD_nodes_evaluator.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'source/blender/modifiers') 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( + std::make_shared("position", CPPType::get())); + return; + } + } const bNodeSocketType *typeinfo = socket.typeinfo(); typeinfo->get_geometry_nodes_cpp_value(*socket.bsocket(), r_value); } -- cgit v1.2.3