[Bf-blender-cvs] [80865399a89] spreadsheet-active-node: cleanup

Jacques Lucke noreply at git.blender.org
Thu Apr 1 13:55:19 CEST 2021


Commit: 80865399a89ac011ca5274dd649e08cd2d658589
Author: Jacques Lucke
Date:   Thu Apr 1 11:32:58 2021 +0200
Branches: spreadsheet-active-node
https://developer.blender.org/rB80865399a89ac011ca5274dd649e08cd2d658589

cleanup

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

M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_derived_node_tree.hh

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

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index 4954ec400a0..ed3c3cfe4b1 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -456,33 +456,6 @@ class GeometryNodesEvaluator {
         node, node_inputs_map, node_outputs_map, handle_map_, self_object_, modifier_, depsgraph_};
     this->execute_node(node, params);
 
-    if (node->bnode()->flag & NODE_ACTIVE) {
-      Main *bmain = DEG_get_bmain(depsgraph_);
-      wmWindowManager *wm = (wmWindowManager *)bmain->wm.first;
-      LISTBASE_FOREACH (wmWindow *, window, &wm->windows) {
-        bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
-        LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
-          SpaceLink *sl = (SpaceLink *)area->spacedata.first;
-          if (sl->spacetype == SPACE_NODE) {
-            SpaceNode *snode = (SpaceNode *)sl;
-            DNode active_dnode = find_active_node_instance(*snode, node.context()->derived_tree());
-            if (active_dnode == node) {
-              for (const OutputSocketRef *output_socket : node->outputs()) {
-                if (output_socket->is_available() &&
-                    output_socket->bsocket()->type == SOCK_GEOMETRY) {
-                  GeometrySet value = node_outputs_map.lookup<GeometrySet>(
-                      output_socket->identifier());
-                  value.ensure_own_non_instances();
-                  BKE_object_preview_geometry_set(const_cast<Object *>(self_object_),
-                                                  new GeometrySet(std::move(value)));
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-
     /* Forward computed outputs to linked input sockets. */
     for (const OutputSocketRef *output_socket : node->outputs()) {
       if (output_socket->is_available()) {
@@ -1214,12 +1187,38 @@ static GeometrySet compute_geometry(const DerivedNodeTree &tree,
   Vector<DInputSocket> group_outputs;
   group_outputs.append({root_context, &socket_to_compute});
 
+  Main *bmain = DEG_get_bmain(ctx->depsgraph);
+  wmWindowManager *wm = (wmWindowManager *)bmain->wm.first;
+  DNode active_dnode;
+  LISTBASE_FOREACH (wmWindow *, window, &wm->windows) {
+    bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook);
+    LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+      SpaceLink *sl = (SpaceLink *)area->spacedata.first;
+      if (sl->spacetype == SPACE_NODE) {
+        SpaceNode *snode = (SpaceNode *)sl;
+        active_dnode = find_active_node_instance(*snode, tree);
+      }
+    }
+  }
+
   auto handle_socket_value = [&](const DSocket socket, const Span<GPointer> values) {
-    for (GPointer value : values) {
-      std::stringstream ss;
-      value.type()->debug_print(value.get(), ss);
-      std::cout << socket->name() << ": " << ss.str() << "\n";
+    const DNode node = socket.node();
+    if (node != active_dnode) {
+      return;
+    }
+    if (socket->is_input()) {
+      return;
+    }
+    if (values.size() != 1) {
+      return;
+    }
+    const GPointer value = values[0];
+    if (*value.type() != CPPType::get<GeometrySet>()) {
+      return;
     }
+    GeometrySet geometry_set = *(const GeometrySet *)value.get();
+    geometry_set.ensure_own_non_instances();
+    BKE_object_preview_geometry_set(ctx->object, new GeometrySet(std::move(geometry_set)));
   };
 
   GeometryNodesEvaluator evaluator{group_inputs,
diff --git a/source/blender/nodes/NOD_derived_node_tree.hh b/source/blender/nodes/NOD_derived_node_tree.hh
index 9999a4543c0..0a45118cf2b 100644
--- a/source/blender/nodes/NOD_derived_node_tree.hh
+++ b/source/blender/nodes/NOD_derived_node_tree.hh
@@ -119,6 +119,8 @@ class DSocket {
   operator bool() const;
 
   uint64_t hash() const;
+
+  DNode node() const;
 };
 
 /* A (nullable) reference to an input socket and the context it is in. */
@@ -327,6 +329,12 @@ inline uint64_t DSocket::hash() const
   return get_default_hash_2(context_, socket_ref_);
 }
 
+inline DNode DSocket::node() const
+{
+  BLI_assert(socket_ref_ != nullptr);
+  return {context_, &socket_ref_->node()};
+}
+
 /* --------------------------------------------------------------------
  * DInputSocket inline methods.
  */



More information about the Bf-blender-cvs mailing list