Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWannes Malfait <Wannes>2021-05-12 00:46:02 +0300
committerHans Goudey <h.goudey@me.com>2021-05-12 00:46:02 +0300
commit65244ac1c3f13802852d5ca2e340b85cc3e94c7a (patch)
treea3fde360352bec9dd8fe3a3778850a678bb43e5d /source/blender/nodes/geometry/node_geometry_tree.cc
parent2770d43da66fafe047205969e48040eee2933764 (diff)
Geometry Nodes: Link error when implicit conversion isn't possible
This turns links red if no implicit conversion can be made between the from socket and the to socket. For geometry nodes this happens with object, geometry, collection, and string sockets that are connected to a different type. The change is simply implementing a callback that is already implemented for other node tree types. Differential Revision: https://developer.blender.org/D11229
Diffstat (limited to 'source/blender/nodes/geometry/node_geometry_tree.cc')
-rw-r--r--source/blender/nodes/geometry/node_geometry_tree.cc11
1 files changed, 11 insertions, 0 deletions
diff --git a/source/blender/nodes/geometry/node_geometry_tree.cc b/source/blender/nodes/geometry/node_geometry_tree.cc
index afb86ff57b8..f13ddabbf2c 100644
--- a/source/blender/nodes/geometry/node_geometry_tree.cc
+++ b/source/blender/nodes/geometry/node_geometry_tree.cc
@@ -84,6 +84,16 @@ static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCa
func(calldata, NODE_CLASS_LAYOUT, N_("Layout"));
}
+static bool geometry_node_tree_validate_link(bNodeTree *UNUSED(ntree), bNodeLink *link)
+{
+ /* Geometry, string, object and collection sockets can only be connected to themselves. */
+ if (ELEM(link->fromsock->type, SOCK_GEOMETRY, SOCK_STRING, SOCK_OBJECT, SOCK_COLLECTION) ||
+ ELEM(link->tosock->type, SOCK_GEOMETRY, SOCK_STRING, SOCK_OBJECT, SOCK_COLLECTION)) {
+ return (link->tosock->type == link->fromsock->type);
+ }
+ return true;
+}
+
static bool geometry_node_tree_socket_type_valid(eNodeSocketDatatype socket_type,
bNodeTreeType *UNUSED(ntreetype))
{
@@ -113,6 +123,7 @@ void register_node_tree_type_geo(void)
tt->get_from_context = geometry_node_tree_get_from_context;
tt->foreach_nodeclass = foreach_nodeclass;
tt->valid_socket_type = geometry_node_tree_socket_type_valid;
+ tt->validate_link = geometry_node_tree_validate_link;
ntreeTypeAdd(tt);
}