[Bf-blender-cvs] [84959e1e6a9] builtin-simulation-nodes: define input and output link limit on socket type

Jacques Lucke noreply at git.blender.org
Mon Mar 2 17:24:09 CET 2020


Commit: 84959e1e6a967c46380790790b7f9ebe2af034ad
Author: Jacques Lucke
Date:   Mon Mar 2 17:05:47 2020 +0100
Branches: builtin-simulation-nodes
https://developer.blender.org/rB84959e1e6a967c46380790790b7f9ebe2af034ad

define input and output link limit on socket type

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/intern/node_socket.c

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 9385da7eacb..a2143113d07 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -89,7 +89,8 @@ struct uiLayout;
  * in RNA types automatically.
  */
 typedef struct bNodeSocketTemplate {
-  int type, limit;
+  int type;
+  int limit;                    /* unused */
   char name[64];                /* MAX_NAME */
   float val1, val2, val3, val4; /* default alloc value for inputs */
   float min, max;
@@ -147,6 +148,9 @@ typedef struct bNodeSocketType {
   int type, subtype;
   int display_shape_default;
 
+  int input_link_limit;
+  int output_link_limit;
+
   /* Callback to free the socket type. */
   void (*free_self)(struct bNodeSocketType *stype);
 } bNodeSocketType;
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 03e734a84bb..70fdc689a45 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -218,6 +218,8 @@ static void node_socket_set_typeinfo(bNodeTree *ntree,
     /* deprecated integer type */
     sock->type = typeinfo->type;
     sock->display_shape = typeinfo->display_shape_default;
+    sock->limit = (sock->in_out == SOCK_IN) ? typeinfo->input_link_limit :
+                                              typeinfo->output_link_limit;
 
     if (sock->default_value == NULL) {
       /* initialize the default_value pointer used by standard socket types */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index d6ff3833f56..274cf639de3 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -2225,6 +2225,8 @@ static StructRNA *rna_NodeSocket_register(Main *UNUSED(bmain),
   }
 
   st->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
+  st->input_link_limit = 1;
+  st->output_link_limit = 0xFFF;
 
   /* if RNA type is already registered, unregister first */
   if (st->ext_socket.srna) {
@@ -2541,6 +2543,8 @@ static StructRNA *rna_NodeSocketInterface_register(Main *UNUSED(bmain),
   }
 
   st->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
+  st->input_link_limit = 1;
+  st->output_link_limit = 0xFFF;
 
   /* if RNA type is already registered, unregister first */
   if (st->ext_interface.srna) {
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index fdabbeb1091..8b4e38e9d85 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -48,7 +48,6 @@ struct bNodeSocket *node_add_socket_from_template(struct bNodeTree *ntree,
       ntree, node, in_out, stemp->type, stemp->subtype, stemp->identifier, stemp->name);
 
   sock->flag |= stemp->flag;
-  sock->limit = stemp->limit;
 
   /* initialize default_value */
   switch (stemp->type) {
@@ -431,6 +430,9 @@ static bNodeSocketType *make_standard_socket_type(int type, int subtype)
   stype->interface_from_socket = standard_node_socket_interface_from_socket;
   stype->interface_verify_socket = standard_node_socket_interface_verify_socket;
 
+  stype->input_link_limit = 1;
+  stype->output_link_limit = 0xFFF;
+
   return stype;
 }
 
@@ -438,6 +440,7 @@ static bNodeSocketType *make_socket_type_effector(int type)
 {
   bNodeSocketType *stype = make_standard_socket_type(type, PROP_NONE);
   stype->display_shape_default = SOCK_DISPLAY_SHAPE_DIAMOND;
+  stype->input_link_limit = 0xFFF;
   return stype;
 }
 
@@ -472,6 +475,9 @@ static bNodeSocketType *make_socket_type_virtual(void)
 
   ED_init_node_socket_type_virtual(stype);
 
+  stype->input_link_limit = 1;
+  stype->output_link_limit = 1;
+
   return stype;
 }



More information about the Bf-blender-cvs mailing list