[Bf-blender-cvs] [6a447a32feb] temp-test-point-cloud-simulation-depsgraph-integration: Add emitters, events, forces and control flow socket types

Jacques Lucke noreply at git.blender.org
Wed Apr 15 18:27:12 CEST 2020


Commit: 6a447a32feb82dc356894f6b5be267547b8bd955
Author: Jacques Lucke
Date:   Mon Apr 6 13:50:26 2020 +0200
Branches: temp-test-point-cloud-simulation-depsgraph-integration
https://developer.blender.org/rB6a447a32feb82dc356894f6b5be267547b8bd955

Add emitters, events, forces and control flow socket types

This is part of T73324.

The shapes and colors of the sockets will most likely change later on.

This script can be used to create a node with the new socket types:
```
import bpy

class MyCustomNode(bpy.types.Node):
    bl_idname = 'CustomNodeType'
    bl_label = "Custom Node"

    def init(self, context):
        self.inputs.new('NodeSocketEmitters', "Emitters")
        self.inputs.new('NodeSocketEvents', "Events")
        self.inputs.new('NodeSocketForces', "Forces")
        self.inputs.new('NodeSocketControlFlow', "Control Flow")

        self.outputs.new('NodeSocketEmitters', "Emitters")
        self.outputs.new('NodeSocketEvents', "Events")
        self.outputs.new('NodeSocketForces', "Forces")
        self.outputs.new('NodeSocketControlFlow', "Control Flow")

bpy.utils.register_class(MyCustomNode)

if len(bpy.data.simulations) == 0:
    bpy.data.simulations.new("Simulation")

sim = bpy.data.simulations[0]
sim.node_tree.nodes.new("CustomNodeType")
```

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

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

M	source/blender/blenkernel/intern/node.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/intern/node_socket.c

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

diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 25813fcd98d..298409f7bf7 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -768,6 +768,10 @@ static void socket_id_user_increment(bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -794,6 +798,10 @@ static void socket_id_user_decrement(bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -917,6 +925,14 @@ const char *nodeStaticSocketType(int type, int subtype)
       return "NodeSocketObject";
     case SOCK_IMAGE:
       return "NodeSocketImage";
+    case SOCK_EMITTERS:
+      return "NodeSocketEmitters";
+    case SOCK_EVENTS:
+      return "NodeSocketEvents";
+    case SOCK_FORCES:
+      return "NodeSocketForces";
+    case SOCK_CONTROL_FLOW:
+      return "NodeSocketControlFlow";
   }
   return NULL;
 }
@@ -982,6 +998,14 @@ const char *nodeStaticSocketInterfaceType(int type, int subtype)
       return "NodeSocketInterfaceObject";
     case SOCK_IMAGE:
       return "NodeSocketInterfaceImage";
+    case SOCK_EMITTERS:
+      return "NodeSocketInterfaceEmitters";
+    case SOCK_EVENTS:
+      return "NodeSocketInterfaceEvents";
+    case SOCK_FORCES:
+      return "NodeSocketInterfaceForces";
+    case SOCK_CONTROL_FLOW:
+      return "NodeSocketInterfaceControlFlow";
   }
   return NULL;
 }
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 6772896b07a..33fd3266034 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3582,6 +3582,10 @@ static void lib_link_node_socket(FileData *fd, Library *lib, bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -10940,6 +10944,10 @@ static void expand_node_socket(FileData *fd, Main *mainvar, bNodeSocket *sock)
       case __SOCK_MESH:
       case SOCK_CUSTOM:
       case SOCK_SHADER:
+      case SOCK_EMITTERS:
+      case SOCK_EVENTS:
+      case SOCK_FORCES:
+      case SOCK_CONTROL_FLOW:
         break;
     }
   }
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 6b0e4db83d7..8170e97f93f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1000,6 +1000,10 @@ static void write_node_socket_default_value(WriteData *wd, bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       BLI_assert(false);
       break;
   }
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 202e2f2940f..24b0bfd831f 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -3279,6 +3279,10 @@ static const float std_node_socket_colors[][4] = {
     {0.39, 0.39, 0.39, 1.0}, /* SOCK_STRING */
     {0.40, 0.10, 0.10, 1.0}, /* SOCK_OBJECT */
     {0.10, 0.40, 0.10, 1.0}, /* SOCK_IMAGE */
+    {0.80, 0.80, 0.20, 1.0}, /* SOCK_EMITTERS */
+    {0.80, 0.20, 0.80, 1.0}, /* SOCK_EVENTS */
+    {0.20, 0.80, 0.80, 1.0}, /* SOCK_FORCES */
+    {0.30, 0.30, 0.30, 1.0}, /* SOCK_CONTROL_FLOW */
 };
 
 /* common color callbacks for standard types */
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index bf4d3d2e886..d8c8b5a8a29 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -156,6 +156,10 @@ typedef enum eNodeSocketDatatype {
   SOCK_STRING = 7,
   SOCK_OBJECT = 8,
   SOCK_IMAGE = 9,
+  SOCK_EMITTERS = 10,
+  SOCK_EVENTS = 11,
+  SOCK_FORCES = 12,
+  SOCK_CONTROL_FLOW = 13,
 } eNodeSocketDatatype;
 
 /* socket shape */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index abbd6df9693..cd775e4dc10 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -83,6 +83,10 @@ static const EnumPropertyItem node_socket_type_items[] = {
     {SOCK_SHADER, "SHADER", 0, "Shader", ""},
     {SOCK_OBJECT, "OBJECT", 0, "Object", ""},
     {SOCK_IMAGE, "IMAGE", 0, "Image", ""},
+    {SOCK_EMITTERS, "EMITTERS", 0, "Emitters", ""},
+    {SOCK_EVENTS, "EVENTS", 0, "Events", ""},
+    {SOCK_FORCES, "FORCES", 0, "Forces", ""},
+    {SOCK_CONTROL_FLOW, "CONTROL_FLOW", 0, "Control Flow", ""},
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -8608,6 +8612,36 @@ static void rna_def_node_socket_image(BlenderRNA *brna,
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
 }
 
+static void rna_def_node_socket_effector(BlenderRNA *brna,
+                                         const char *identifier,
+                                         const char *interface_idname)
+{
+  StructRNA *srna;
+
+  srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+
+  srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+}
+
+static void rna_def_node_socket_control_flow(BlenderRNA *brna,
+                                             const char *identifier,
+                                             const char *interface_idname)
+{
+  StructRNA *srna;
+
+  srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+
+  srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+}
+
 static void rna_def_node_socket_standard_types(BlenderRNA *brna)
 {
   /* XXX Workaround: Registered functions are not exposed in python by bpy,
@@ -8746,6 +8780,13 @@ static void rna_def_node_socket_standard_types(BlenderRNA *brna)
   rna_def_node_socket_object(brna, "NodeSocketObject", "NodeSocketInterfaceObject");
 
   rna_def_node_socket_image(brna, "NodeSocketImage", "NodeSocketInterfaceImage");
+
+  rna_def_node_socket_effector(brna, "NodeSocketEmitters", "NodeSocketInterfaceEmitters");
+  rna_def_node_socket_effector(brna, "NodeSocketEvents", "NodeSocketInterfaceEvents");
+  rna_def_node_socket_effector(brna, "NodeSocketForces", "NodeSocketInterfaceForces");
+
+  rna_def_node_socket_control_flow(
+      brna, "NodeSocketControlFlow", "NodeSocketInterfaceControlFlow");
 }
 
 static void rna_def_internal_node(BlenderRNA *brna)
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index af492c42d78..8cc4cb66fe8 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -495,6 +495,19 @@ static bNodeSocketType *make_socket_type_virtual(void)
   return stype;
 }
 
+static bNodeSocketType *make_socket_type_effector(int type)
+{
+  bNodeSocketType *stype = make_standard_socket_type(type, PROP_NONE);
+  stype->input_link_limit = 0xFFF;
+  return stype;
+}
+
+static bNodeSocketType *make_socket_type_control_flow(int type)
+{
+  bNodeSocketType *stype = make_standard_socket_type(type, PROP_NONE);
+  return stype;
+}
+
 void register_standard_node_socket_types(void)
 {
   /* draw callbacks are set in drawnode.c to avoid bad-level calls */
@@ -531,5 +544,11 @@ void register_standard_node_socket_types(void)
 
   nodeRegisterSocketType(make_standard_socket_type(SOCK_IMAGE, PROP_NONE));
 
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_EMITTERS));
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_EVENTS));
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_FORCES));
+
+  nodeRegisterSocketType(make_socket_type_control_flow(SOCK_CONTROL_FLOW));
+
   nodeRegisterSocketType(make_socket_type_virtual());
 }



More information about the Bf-blender-cvs mailing list