54 class OutputSocketRef;
58 class InternalLinkRef;
134 bool only_follow_first_input_link,
204 template<
typename T>
T *
storage()
const;
250 const NodeRef *group_output_node_ =
nullptr;
303 std::string
to_dot()
const;
314 void create_linked_socket_caches();
315 void create_socket_identifier_maps();
322 namespace node_tree_ref_types {
528 outputs_.as_span().cast<
const SocketRef *>();
533 return internal_links_;
538 return *inputs_[index];
543 return *outputs_[index];
548 const int index = input_index_by_identifier_->
lookup_as(identifier);
549 return this->
input(index);
554 const int index = output_index_by_identifier_->
lookup_as(identifier);
555 return this->
output(index);
565 return tree_->
btree();
580 return bnode_->
label;
601 return bnode_->
runtime->declaration;
720 return nodes_by_type_.lookup(nodetype);
725 return sockets_by_id_;
730 return input_sockets_;
735 return output_sockets_;
745 return group_output_node_;
755 return btree_->
id.
name + 2;
#define NODE_CUSTOM_GROUP
struct bNodeType NodeTypeUndefined
struct bNodeType * nodeTypeFind(const char *idname)
struct bNodeSocketType NodeSocketTypeUndefined
bool nodeDeclarationEnsure(struct bNodeTree *ntree, struct bNode *node)
const Value & lookup_as(const ForwardKey &key) const
constexpr bool is_empty() const
constexpr const char * c_str() const
const InputSocketRef & from() const
bNodeLink * blink() const
const OutputSocketRef & to() const
bNodeLink * blink() const
const OutputSocketRef & from() const
const InputSocketRef & to() const
const OutputSocketRef & output_by_identifier(StringRef identifier) const
bool any_output_is_directly_linked() const
const OutputSocketRef & output(int index) const
Span< const InternalLinkRef * > internal_links() const
bNodeType * typeinfo() const
Span< const InputSocketRef * > inputs() const
const InputSocketRef & input(int index) const
bNodeTree * btree() const
Span< const OutputSocketRef * > outputs() const
bool is_reroute_node() const
StringRefNull label_or_name() const
bool is_group_node() const
const NodeDeclaration * declaration() const
bool is_undefined() const
const InputSocketRef & input_by_identifier(StringRef identifier) const
Span< const SocketRef * > sockets(eNodeSocketInOut in_out) const
StringRefNull idname() const
bool is_group_input_node() const
bool is_group_output_node() const
StringRefNull name() const
const NodeTreeRef & tree() const
StringRefNull label() const
bool any_socket_is_directly_linked(eNodeSocketInOut in_out) const
bool any_input_is_directly_linked() const
bool has_link_cycles() const
Span< const OutputSocketRef * > output_sockets() const
Span< const SocketRef * > sockets() const
bNodeTree * btree() const
ToposortResult toposort(ToposortDirection direction) const
bool has_undefined_nodes_or_sockets() const
const NodeRef * group_output_node() const
const NodeRef * find_node(const bNode &bnode) const
NodeTreeRef(bNodeTree *btree)
std::string to_dot() const
Span< const LinkRef * > links() const
Span< const NodeRef * > nodes() const
StringRefNull name() const
Span< const InputSocketRef * > input_sockets() const
Span< const NodeRef * > nodes_by_type(StringRefNull idname) const
Span< const InputSocketRef * > directly_linked_sockets() const
Span< const InputSocketRef * > logically_linked_sockets() const
const NodeRef & node() const
void * default_value() const
Vector< LinkRef * > directly_linked_links_
Span< const SocketRef * > logically_linked_sockets() const
bool is_directly_linked() const
const OutputSocketRef & as_output() const
bNodeSocketType * typeinfo() const
Span< const SocketRef * > directly_linked_sockets() const
bNodeTree * btree() const
StringRefNull idname() const
MutableSpan< const SocketRef * > directly_linked_sockets_
bool is_logically_linked() const
bool is_undefined() const
Span< const SocketRef * > logically_linked_skipped_sockets() const
const NodeTreeRef & tree() const
MutableSpan< const SocketRef * > logically_linked_skipped_sockets_
bNodeSocket * bsocket() const
const SocketRef & as_base() const
bool is_available() const
StringRefNull identifier() const
const InputSocketRef & as_input() const
Span< const LinkRef * > directly_linked_links() const
MutableSpan< const SocketRef * > logically_linked_sockets_
StringRefNull name() const
Map< bNodeTree *, std::unique_ptr< const NodeTreeRef > > NodeTreeRefMap
const NodeTreeRef & get_tree_ref_from_map(NodeTreeRefMap &node_tree_refs, bNodeTree &btree)
struct bNodeSocketType * typeinfo
struct bNodeType * typeinfo
bNodeRuntimeHandle * runtime
Vector< const NodeRef * > sorted_nodes