diff --git a/source/blender/blenkernel/BKE_node_tree_zones.hh b/source/blender/blenkernel/BKE_node_tree_zones.hh index 550e3b1b7f8..57657dde24d 100644 --- a/source/blender/blenkernel/BKE_node_tree_zones.hh +++ b/source/blender/blenkernel/BKE_node_tree_zones.hh @@ -8,6 +8,8 @@ * \ingroup bke */ +#include + #include "DNA_node_types.h" #include "BLI_vector.hh" @@ -42,6 +44,8 @@ class bNodeTreeZone { bool contains_node_recursively(const bNode &node) const; bool contains_zone_recursively(const bNodeTreeZone &other_zone) const; + + friend std::ostream &operator<<(std::ostream &stream, const bNodeTreeZone &zone); }; class bNodeTreeZones { @@ -72,6 +76,8 @@ class bNodeTreeZones { * nested zone. For nodes that are at the root level, the returned list is empty. */ Vector get_zone_stack_for_node(const int32_t node_id) const; + + friend std::ostream &operator<<(std::ostream &stream, const bNodeTreeZones &zones); }; const bNodeTreeZones *get_tree_zones(const bNodeTree &tree); diff --git a/source/blender/blenkernel/intern/node_tree_zones.cc b/source/blender/blenkernel/intern/node_tree_zones.cc index de9c5117473..59ca26da09f 100644 --- a/source/blender/blenkernel/intern/node_tree_zones.cc +++ b/source/blender/blenkernel/intern/node_tree_zones.cc @@ -2,6 +2,8 @@ * * SPDX-License-Identifier: GPL-2.0-or-later */ +#include + #include "BKE_node.hh" #include "BKE_node_runtime.hh" #include "BKE_node_tree_zones.hh" @@ -351,6 +353,7 @@ static std::unique_ptr discover_tree_zones(const bNodeTree &tree update_zone_border_links(tree, *tree_zones); + // std::cout << *tree_zones << std::endl; return tree_zones; } @@ -522,4 +525,37 @@ const bNodeZoneType *zone_type_by_node_type(const int node_type) return nullptr; } +std::ostream &operator<<(std::ostream &stream, const bNodeTreeZones &zones) +{ + for (const std::unique_ptr &zone : zones.zones) { + stream << *zone; + if (zones.zones.last().get() != zone.get()) { + stream << "\n"; + } + } + return stream; +} + +std::ostream &operator<<(std::ostream &stream, const bNodeTreeZone &zone) +{ + stream << zone.index << ": Parent index: "; + if (zone.parent_zone != nullptr) { + stream << zone.parent_zone->index; + } + else { + stream << "*"; + } + + stream << "; Input: " << (zone.input_node ? zone.input_node->name : "null"); + stream << ", Output: " << (zone.output_node ? zone.output_node->name : "null"); + + stream << "; Border Links: {\n"; + for (const bNodeLink *border_link : zone.border_links) { + stream << " " << border_link->fromnode->name << ": " << border_link->fromsock->name << " -> "; + stream << border_link->tonode->name << ": " << border_link->tosock->name << ";\n"; + } + stream << "}."; + return stream; +} + } // namespace blender::bke