[Bf-blender-cvs] [a2acaeb779e] temp-node-error-messages: WIP: Provide more context to the node warning struct

Hans Goudey noreply at git.blender.org
Wed Feb 3 04:57:31 CET 2021


Commit: a2acaeb779e16d5d0c35965cc7d28438c39487a9
Author: Hans Goudey
Date:   Tue Feb 2 21:57:14 2021 -0600
Branches: temp-node-error-messages
https://developer.blender.org/rBa2acaeb779e16d5d0c35965cc7d28438c39487a9

WIP: Provide more context to the node warning struct

This will be used to display the warning in the node editor based on
the context, since the same node tree can be shared among multiple
modifiers and objects.

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.cc
M	source/blender/editors/space_node/node_draw.c
M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_geometry_exec.hh
M	source/blender/nodes/intern/node_geometry_exec.cc

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 34ee02fa7bb..3f638310936 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -946,9 +946,13 @@ typedef enum eNodeWarningType {
 typedef struct NodeWarning {
   eNodeWarningType type;
   char *message;
+  const Object *object;
+  const char *modifier_name;
 } NodeWarning;
 
 void BKE_nodetree_error_message_add(struct bNodeTree *ntree,
+                                    const struct Object *object,
+                                    const char *modifier_name,
                                     const struct bNode *node,
                                     const eNodeWarningType type,
                                     const char *message);
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 3adc97a53a1..f4537f1e1d3 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -116,6 +116,8 @@ static void nodetree_runtime_ensure(bNodeTree *ntree)
 }
 
 void BKE_nodetree_error_message_add(bNodeTree *ntree,
+                                    const Object *object,
+                                    const char *modifier_name,
                                     const bNode *node,
                                     const eNodeWarningType type,
                                     const char *message)
@@ -123,7 +125,7 @@ void BKE_nodetree_error_message_add(bNodeTree *ntree,
   nodetree_runtime_ensure(ntree);
   bNodeTreeRuntime *runtime = ntree->runtime;
 
-  NodeWarning warning = {type, BLI_strdup(message)};
+  NodeWarning warning = {type, BLI_strdup(message), object, modifier_name};
 
   switch (type) {
     case NODE_WARNING_ERROR:
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 0d00f35b1b0..473583c8beb 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -27,6 +27,7 @@
 #include "DNA_light_types.h"
 #include "DNA_linestyle_types.h"
 #include "DNA_material_types.h"
+#include "DNA_modifier_types.h"
 #include "DNA_node_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
@@ -42,6 +43,7 @@
 #include "BKE_lib_id.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
+#include "BKE_object.h"
 
 #include "DEG_depsgraph.h"
 
@@ -1141,16 +1143,28 @@ static char *node_errros_tooltip_fn(bContext *UNUSED(C), void *argN, const char
 
 #define NODE_HEADER_ICON_SIZE 0.8f * U.widget_unit
 
-static int node_add_error_message_button(bNodeTree *ntree,
-                                         bNode *node,
-                                         const rctf *rect,
-                                         int icon_offset)
+static int node_add_error_message_button(
+    const bContext *C, bNodeTree *ntree, bNode *node, const rctf *rect, int icon_offset)
 {
   const NodeWarning *message = BKE_nodetree_error_message_get(ntree, node);
   if (message == NULL) {
     return icon_offset;
   }
 
+  // /* The same node tree can be used for multiple objects, only display
+  //  * messages for the evaluations corresponding to the active object. */
+  // const Object *active_object = CTX_data_active_object(C);
+  // if (message->object != active_object) {
+  //   return icon_offset;
+  // }
+
+  // /* The same node tree can be used for multiple modifiers on the same object. Only display
+  //  * messages for the active modifier, which will also be displayed in the node tree. */
+  // ModifierData *active_modifier = BKE_object_active_modifier(message->object);
+  // if (!STREQ(message->modifier_name, active_modifier->name)) {
+  //   return icon_offset;
+  // }
+
   icon_offset -= NODE_HEADER_ICON_SIZE;
 
   UI_block_emboss_set(node->block, UI_EMBOSS_NONE);
@@ -1298,7 +1312,7 @@ static void node_draw_basis(const bContext *C,
     UI_block_emboss_set(node->block, UI_EMBOSS);
   }
 
-  iconofs = node_add_error_message_button(ntree, node, rct, iconofs);
+  iconofs = node_add_error_message_button(C, ntree, node, rct, iconofs);
 
   /* title */
   if (node->flag & SELECT) {
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 6968b55fc1b..16f7c22700c 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -222,6 +222,7 @@ class GeometryNodesEvaluator {
   const blender::nodes::DataTypeConversions &conversions_;
   const PersistentDataHandleMap &handle_map_;
   const Object *self_object_;
+  const ModifierData *modifier_;
   Depsgraph *depsgraph_;
 
  public:
@@ -231,6 +232,7 @@ class GeometryNodesEvaluator {
                          blender::nodes::MultiFunctionByNode &mf_by_node,
                          const PersistentDataHandleMap &handle_map,
                          const Object *self_object,
+                         const ModifierData *modifier,
                          Depsgraph *depsgraph)
       : btree_(btree),
         group_outputs_(std::move(group_outputs)),
@@ -238,6 +240,7 @@ class GeometryNodesEvaluator {
         conversions_(blender::nodes::get_implicit_type_conversions()),
         handle_map_(handle_map),
         self_object_(self_object),
+        modifier_(modifier),
         depsgraph_(depsgraph)
   {
     for (auto item : group_input_data.items()) {
@@ -315,8 +318,14 @@ class GeometryNodesEvaluator {
 
     /* Execute the node. */
     GValueMap<StringRef> node_outputs_map{allocator_};
-    GeoNodeExecParams params{
-        btree_, bnode, node_inputs_map, node_outputs_map, handle_map_, self_object_, depsgraph_};
+    GeoNodeExecParams params{btree_,
+                             bnode,
+                             node_inputs_map,
+                             node_outputs_map,
+                             handle_map_,
+                             self_object_,
+                             modifier_,
+                             depsgraph_};
     this->execute_node(node, params);
 
     /* Forward computed outputs to linked input sockets. */
@@ -936,8 +945,14 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
   group_outputs.append(&socket_to_compute);
 
   bNodeTree *ntree = tree.btree();
-  GeometryNodesEvaluator evaluator{
-      *ntree, group_inputs, group_outputs, mf_by_node, handle_map, ctx->object, ctx->depsgraph};
+  GeometryNodesEvaluator evaluator{*ntree,
+                                   group_inputs,
+                                   group_outputs,
+                                   mf_by_node,
+                                   handle_map,
+                                   ctx->object,
+                                   (ModifierData *)nmd,
+                                   ctx->depsgraph};
   Vector<GMutablePointer> results = evaluator.execute();
   BLI_assert(results.size() == 1);
   GMutablePointer result = results[0];
diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh
index da3d6c6545b..7bb766b82fd 100644
--- a/source/blender/nodes/NOD_geometry_exec.hh
+++ b/source/blender/nodes/NOD_geometry_exec.hh
@@ -26,6 +26,7 @@
 #include "DNA_node_types.h"
 
 struct Depsgraph;
+struct ModifierData;
 
 namespace blender::nodes {
 
@@ -60,6 +61,7 @@ class GeoNodeExecParams {
   GValueMap<StringRef> &output_values_;
   const PersistentDataHandleMap &handle_map_;
   const Object *self_object_;
+  const ModifierData *modifier_;
   Depsgraph *depsgraph_;
 
  public:
@@ -69,6 +71,7 @@ class GeoNodeExecParams {
                     GValueMap<StringRef> &output_values,
                     const PersistentDataHandleMap &handle_map,
                     const Object *self_object,
+                    const ModifierData *modifier,
                     Depsgraph *depsgraph)
       : ntree_(ntree),
         node_(node),
@@ -76,6 +79,7 @@ class GeoNodeExecParams {
         output_values_(output_values),
         handle_map_(handle_map),
         self_object_(self_object),
+        modifier_(modifier),
         depsgraph_(depsgraph)
   {
   }
diff --git a/source/blender/nodes/intern/node_geometry_exec.cc b/source/blender/nodes/intern/node_geometry_exec.cc
index 5def40ad153..85868350153 100644
--- a/source/blender/nodes/intern/node_geometry_exec.cc
+++ b/source/blender/nodes/intern/node_geometry_exec.cc
@@ -14,6 +14,8 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
+#include "DNA_modifier_types.h"
+
 #include "DEG_depsgraph_query.h"
 
 #include "NOD_geometry_exec.hh"
@@ -26,7 +28,8 @@ void GeoNodeExecParams::error_message_add(const eNodeWarningType type,
 {
   bNodeTree *original_ntree = (bNodeTree *)DEG_get_original_id(&(ID &)ntree_);
   if (original_ntree != nullptr) {
-    BKE_nodetree_error_message_add(original_ntree, &node_, type, message.data());
+    BKE_nodetree_error_message_add(
+        original_ntree, self_object_, modifier_->name, &node_, type, message.data());
   }
 }



More information about the Bf-blender-cvs mailing list