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:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-06-01 16:38:03 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-06-01 16:38:03 +0400
commit17935168c07937f9b1d1db1874a9f7ba5d3ae540 (patch)
treef3240b63a6eb251254435878727091fe923002e7 /source/blender/nodes/intern/node_common.c
parent5fbeda7efd62e251dac2af881de9fe042f30a7a7 (diff)
Reroute nodes, by Jeroen Bakker (patch #28443).
By holding shift and "cutting" a node link a new reroute helper node can be inserted. This consists of a single socket that can be used to insert additional connection points into a link. This can be used to keep a connection point in the tree when deleting a node, or to control the path of long connections for layout cleanup.
Diffstat (limited to 'source/blender/nodes/intern/node_common.c')
-rw-r--r--source/blender/nodes/intern/node_common.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c
index 48ffed80e41..9f458678ae0 100644
--- a/source/blender/nodes/intern/node_common.c
+++ b/source/blender/nodes/intern/node_common.c
@@ -835,3 +835,52 @@ void register_node_type_frame(bNodeTreeType *ttype)
ntype->needs_free = 1;
nodeRegisterType(ttype, ntype);
}
+
+
+/* **************** REROUTE ******************** */
+
+static bNodeSocketTemplate node_reroute_in[]= {
+ { SOCK_RGBA, 1, "Input", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketTemplate node_reroute_out[]= {
+ { SOCK_RGBA, 0, "Output", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+/* simple, only a single input and output here */
+ListBase node_reroute_internal_connect(bNodeTree *ntree, bNode *node)
+{
+ bNodeLink *link;
+ ListBase ret;
+
+ ret.first = ret.last = NULL;
+
+ /* Security check! */
+ if(!ntree)
+ return ret;
+
+ link = MEM_callocN(sizeof(bNodeLink), "internal node link");
+ link->fromnode = node;
+ link->fromsock = node->inputs.first;
+ link->tonode = node;
+ link->tosock = node->outputs.first;
+ /* internal link is always valid */
+ link->flag |= NODE_LINK_VALID;
+ BLI_addtail(&ret, link);
+
+ return ret;
+}
+
+void register_node_type_reroute(bNodeTreeType *ttype)
+{
+ /* frame type is used for all tree types, needs dynamic allocation */
+ bNodeType *ntype= MEM_callocN(sizeof(bNodeType), "frame node type");
+
+ node_type_base(ttype, ntype, NODE_REROUTE, "Reroute", NODE_CLASS_LAYOUT, 0);
+ node_type_socket_templates(ntype, node_reroute_in, node_reroute_out);
+ node_type_internal_connect(ntype, node_reroute_internal_connect);
+
+ ntype->needs_free = 1;
+ nodeRegisterType(ttype, ntype);
+}