Blender V5.0
BKE_node_tree_zones.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include <iosfwd>
12
13#include "DNA_node_types.h"
14
15#include "BLI_map.hh"
16#include "BLI_vector.hh"
17
18namespace blender::bke {
19
20class bNodeTreeZones;
21
23 public:
26 int index = -1;
28 int depth = -1;
30 std::optional<int> input_node_id;
32 std::optional<int> output_node_id;
45
46 const bNode *input_node() const;
47 const bNode *output_node() const;
49
50 bool contains_node_recursively(const bNode &node) const;
51 bool contains_zone_recursively(const bNodeTreeZone &other_zone) const;
52
53 friend std::ostream &operator<<(std::ostream &stream, const bNodeTreeZone &zone);
54};
55
57 public:
58 const bNodeTree *tree = nullptr;
69
71
76 const bNodeTreeZone *get_zone_by_socket(const bNodeSocket &socket) const;
77
82 const bNodeTreeZone *get_zone_by_node(const int32_t node_id) const;
83
89 bool link_between_zones_is_allowed(const bNodeTreeZone *from_zone,
90 const bNodeTreeZone *to_zone) const;
91
96 bool link_between_sockets_is_allowed(const bNodeSocket &from, const bNodeSocket &to) const;
97
102 const bNodeTreeZone *inner_zone) const;
103
108
109 friend std::ostream &operator<<(std::ostream &stream, const bNodeTreeZones &zones);
110};
111
113
114} // namespace blender::bke
115
116inline const blender::bke::bNodeTreeZones *bNodeTree::zones() const
117{
118 return blender::bke::get_tree_zones(*this);
119}
bool contains_zone_recursively(const bNodeTreeZone &other_zone) const
Vector< const bNode * > child_nodes() const
friend std::ostream & operator<<(std::ostream &stream, const bNodeTreeZone &zone)
std::optional< int > output_node_id
const bNode * output_node() const
Vector< const bNodeLink * > border_links
bool contains_node_recursively(const bNode &node) const
std::optional< int > input_node_id
Vector< bNodeTreeZone * > child_zones
const bNode * input_node() const
Vector< const bNodeTreeZone * > get_zones_to_enter_from_root(const bNodeTreeZone *zone) const
Vector< const bNodeTreeZone * > get_zones_to_enter(const bNodeTreeZone *outer_zone, const bNodeTreeZone *inner_zone) const
bool link_between_zones_is_allowed(const bNodeTreeZone *from_zone, const bNodeTreeZone *to_zone) const
Vector< std::unique_ptr< bNodeTreeZone > > zones_ptrs
Vector< const bNode * > nodes_outside_zones() const
Vector< bNodeTreeZone * > root_zones
Vector< bNodeTreeZone * > zones
const bNodeTreeZone * get_zone_by_node(const int32_t node_id) const
friend std::ostream & operator<<(std::ostream &stream, const bNodeTreeZones &zones)
const bNodeTreeZone * get_zone_by_socket(const bNodeSocket &socket) const
bool link_between_sockets_is_allowed(const bNodeSocket &from, const bNodeSocket &to) const
KDTree_3d * tree
const bNodeTreeZones * get_tree_zones(const bNodeTree &tree)