[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