[Bf-blender-cvs] [b09189500dd] master: Refactor: libquery: Add NodeTree foreach_id support.

Bastien Montagne noreply at git.blender.org
Thu May 7 17:32:39 CEST 2020


Commit: b09189500dd6c7c7769c38ac55f264dc663b643a
Author: Bastien Montagne
Date:   Thu May 7 16:54:32 2020 +0200
Branches: master
https://developer.blender.org/rBb09189500dd6c7c7769c38ac55f264dc663b643a

Refactor: libquery: Add NodeTree foreach_id support.

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

M	source/blender/blenkernel/intern/lib_query.c
M	source/blender/blenkernel/intern/node.c

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

diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index 27667b1e110..46e18bba05d 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -214,41 +214,6 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void
   BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, IDWALK_CB_USER);
 }
 
-static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
-{
-  IDP_foreach_property(
-      sock->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
-
-  switch ((eNodeSocketDatatype)sock->type) {
-    case SOCK_OBJECT: {
-      bNodeSocketValueObject *default_value = sock->default_value;
-      FOREACH_CALLBACK_INVOKE_ID_PP(data, (ID **)&default_value->value, IDWALK_CB_USER);
-      break;
-    }
-    case SOCK_IMAGE: {
-      bNodeSocketValueImage *default_value = sock->default_value;
-      FOREACH_CALLBACK_INVOKE_ID_PP(data, (ID **)&default_value->value, IDWALK_CB_USER);
-      break;
-    }
-    case SOCK_FLOAT:
-    case SOCK_VECTOR:
-    case SOCK_RGBA:
-    case SOCK_BOOLEAN:
-    case SOCK_INT:
-    case SOCK_STRING:
-    case __SOCK_MESH:
-    case SOCK_CUSTOM:
-    case SOCK_SHADER:
-    case SOCK_EMITTERS:
-    case SOCK_EVENTS:
-    case SOCK_FORCES:
-    case SOCK_CONTROL_FLOW:
-      break;
-  }
-
-  FOREACH_FINALIZE_VOID;
-}
-
 static void library_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSED(rbw),
                                                       ID **id_pointer,
                                                       void *user_data,
@@ -1055,31 +1020,7 @@ static void library_foreach_ID_link(Main *bmain,
       }
 
       case ID_NT: {
-        bNodeTree *ntree = (bNodeTree *)id;
-
-        CALLBACK_INVOKE(ntree->gpd, IDWALK_CB_USER);
-
-        LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
-          CALLBACK_INVOKE_ID(node->id, IDWALK_CB_USER);
-
-          IDP_foreach_property(node->prop,
-                               IDP_TYPE_FILTER_ID,
-                               BKE_lib_query_idpropertiesForeachIDLink_callback,
-                               &data);
-          LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
-            library_foreach_node_socket(&data, sock);
-          }
-          LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
-            library_foreach_node_socket(&data, sock);
-          }
-        }
-
-        LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs) {
-          library_foreach_node_socket(&data, sock);
-        }
-        LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs) {
-          library_foreach_node_socket(&data, sock);
-        }
+        BLI_assert(0);
         break;
       }
 
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index e6547012b88..2b4ec740c96 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -32,6 +32,7 @@
 
 #include "DNA_action_types.h"
 #include "DNA_anim_types.h"
+#include "DNA_gpencil_types.h"
 #include "DNA_light_types.h"
 #include "DNA_linestyle_types.h"
 #include "DNA_material_types.h"
@@ -57,6 +58,7 @@
 #include "BKE_idprop.h"
 #include "BKE_idtype.h"
 #include "BKE_lib_id.h"
+#include "BKE_lib_query.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
 
@@ -253,6 +255,66 @@ static void ntree_free_data(ID *id)
   }
 }
 
+static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket *sock)
+{
+  IDP_foreach_property(
+      sock->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
+
+  switch ((eNodeSocketDatatype)sock->type) {
+    case SOCK_OBJECT: {
+      bNodeSocketValueObject *default_value = sock->default_value;
+      BKE_LIB_FOREACHID_PROCESS(data, default_value->value, IDWALK_CB_USER);
+      break;
+    }
+    case SOCK_IMAGE: {
+      bNodeSocketValueImage *default_value = sock->default_value;
+      BKE_LIB_FOREACHID_PROCESS(data, default_value->value, IDWALK_CB_USER);
+      break;
+    }
+    case SOCK_FLOAT:
+    case SOCK_VECTOR:
+    case SOCK_RGBA:
+    case SOCK_BOOLEAN:
+    case SOCK_INT:
+    case SOCK_STRING:
+    case __SOCK_MESH:
+    case SOCK_CUSTOM:
+    case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
+      break;
+  }
+}
+
+static void node_foreach_id(ID *id, LibraryForeachIDData *data)
+{
+  bNodeTree *ntree = (bNodeTree *)id;
+
+  BKE_LIB_FOREACHID_PROCESS(data, ntree->gpd, IDWALK_CB_USER);
+
+  LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+    BKE_LIB_FOREACHID_PROCESS_ID(data, node->id, IDWALK_CB_USER);
+
+    IDP_foreach_property(
+        node->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data);
+    LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
+      library_foreach_node_socket(data, sock);
+    }
+    LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
+      library_foreach_node_socket(data, sock);
+    }
+  }
+
+  LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->inputs) {
+    library_foreach_node_socket(data, sock);
+  }
+  LISTBASE_FOREACH (bNodeSocket *, sock, &ntree->outputs) {
+    library_foreach_node_socket(data, sock);
+  }
+}
+
 IDTypeInfo IDType_ID_NT = {
     .id_code = ID_NT,
     .id_filter = FILTER_ID_NT,
@@ -267,6 +329,7 @@ IDTypeInfo IDType_ID_NT = {
     .copy_data = ntree_copy_data,
     .free_data = ntree_free_data,
     .make_local = NULL,
+    .foreach_id = node_foreach_id,
 };
 
 static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType *ntype)



More information about the Bf-blender-cvs mailing list