Blender
V4.5
source
blender
nodes
NOD_multi_function.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
7
#include "
FN_multi_function.hh
"
8
9
#include "
DNA_node_types.h
"
10
11
namespace
blender::nodes
{
12
13
class
NodeMultiFunctions;
14
18
class
NodeMultiFunctionBuilder
:
NonCopyable
,
NonMovable
{
19
private
:
20
const
bNode
&node_;
21
const
bNodeTree
&tree_;
22
std::shared_ptr<mf::MultiFunction> owned_built_fn_;
23
const
mf::MultiFunction
*built_fn_ =
nullptr
;
24
25
friend
NodeMultiFunctions
;
26
27
public
:
28
NodeMultiFunctionBuilder
(
const
bNode
&
node
,
const
bNodeTree
&
tree
);
29
34
void
set_matching_fn
(
const
mf::MultiFunction
*fn);
35
void
set_matching_fn
(
const
mf::MultiFunction
&fn);
36
41
template
<
typename
T
,
typename
... Args>
void
construct_and_set_matching_fn
(Args &&...args);
42
49
template
<
typename
Fn>
void
construct_and_set_matching_fn_cb
(Fn &&create_multi_function);
50
51
const
bNode
&
node
();
52
const
bNodeTree
&
tree
();
53
const
mf::MultiFunction
&
function
();
54
};
55
59
class
NodeMultiFunctions
{
60
public
:
61
struct
Item
{
62
const
mf::MultiFunction
*
fn
=
nullptr
;
63
std::shared_ptr<mf::MultiFunction>
owned_fn
;
64
};
65
66
private
:
67
Map<const bNode *, Item>
map_;
68
69
public
:
70
NodeMultiFunctions
(
const
bNodeTree
&
tree
);
71
72
const
Item
&
try_get
(
const
bNode
&
node
)
const
;
73
};
74
75
/* -------------------------------------------------------------------- */
79
inline
NodeMultiFunctionBuilder::NodeMultiFunctionBuilder
(
const
bNode
&
node
,
const
bNodeTree
&
tree
)
80
: node_(
node
), tree_(
tree
)
81
{
82
}
83
84
inline
const
bNode
&
NodeMultiFunctionBuilder::node
()
85
{
86
return
node_;
87
}
88
89
inline
const
bNodeTree
&
NodeMultiFunctionBuilder::tree
()
90
{
91
return
tree_;
92
}
93
94
inline
const
mf::MultiFunction
&
NodeMultiFunctionBuilder::function
()
95
{
96
return
*built_fn_;
97
}
98
99
inline
void
NodeMultiFunctionBuilder::set_matching_fn
(
const
mf::MultiFunction
*fn)
100
{
101
built_fn_ = fn;
102
}
103
104
inline
void
NodeMultiFunctionBuilder::set_matching_fn
(
const
mf::MultiFunction
&fn)
105
{
106
built_fn_ = &fn;
107
}
108
109
template
<
typename
T
,
typename
... Args>
110
inline
void
NodeMultiFunctionBuilder::construct_and_set_matching_fn
(Args &&...args)
111
{
112
owned_built_fn_ = std::make_shared<T>(std::forward<Args>(args)...);
113
built_fn_ = &*owned_built_fn_;
114
}
115
116
template
<
typename
Fn>
117
inline
void
NodeMultiFunctionBuilder::construct_and_set_matching_fn_cb
(Fn &&create_multi_function)
118
{
119
using
T =
decltype
(create_multi_function());
120
T *allocated_function =
new
T
(create_multi_function());
121
owned_built_fn_ = std::shared_ptr<T>(allocated_function);
122
built_fn_ = &*owned_built_fn_;
123
}
124
127
/* -------------------------------------------------------------------- */
131
inline
const
NodeMultiFunctions::Item
&
NodeMultiFunctions::try_get
(
const
bNode
&
node
)
const
132
{
133
static
Item
empty_item;
134
const
Item
*item = map_.lookup_ptr(&
node
);
135
if
(item ==
nullptr
) {
136
return
empty_item;
137
}
138
return
*item;
139
}
140
143
}
// namespace blender::nodes
DNA_node_types.h
FN_multi_function.hh
blender::Map
Definition
BLI_map.hh:129
blender::NonCopyable
Definition
BLI_utility_mixins.hh:16
blender::NonMovable
Definition
BLI_utility_mixins.hh:31
blender::fn::multi_function::MultiFunction
Definition
FN_multi_function.hh:42
blender::nodes::NodeMultiFunctionBuilder
Definition
NOD_multi_function.hh:18
blender::nodes::NodeMultiFunctionBuilder::set_matching_fn
void set_matching_fn(const mf::MultiFunction *fn)
Definition
NOD_multi_function.hh:99
blender::nodes::NodeMultiFunctionBuilder::function
const mf::MultiFunction & function()
Definition
NOD_multi_function.hh:94
blender::nodes::NodeMultiFunctionBuilder::construct_and_set_matching_fn_cb
void construct_and_set_matching_fn_cb(Fn &&create_multi_function)
Definition
NOD_multi_function.hh:117
blender::nodes::NodeMultiFunctionBuilder::node
const bNode & node()
Definition
NOD_multi_function.hh:84
blender::nodes::NodeMultiFunctionBuilder::construct_and_set_matching_fn
void construct_and_set_matching_fn(Args &&...args)
Definition
NOD_multi_function.hh:110
blender::nodes::NodeMultiFunctionBuilder::tree
const bNodeTree & tree()
Definition
NOD_multi_function.hh:89
blender::nodes::NodeMultiFunctionBuilder::NodeMultiFunctionBuilder
NodeMultiFunctionBuilder(const bNode &node, const bNodeTree &tree)
Definition
NOD_multi_function.hh:79
blender::nodes::NodeMultiFunctions
Definition
NOD_multi_function.hh:59
blender::nodes::NodeMultiFunctions::try_get
const Item & try_get(const bNode &node) const
Definition
NOD_multi_function.hh:131
blender::nodes::NodeMultiFunctions::NodeMultiFunctions
NodeMultiFunctions(const bNodeTree &tree)
Definition
node_multi_function.cc:11
node
OperationNode * node
Definition
deg_builder_cycle.cc:38
tree
KDTree_3d * tree
Definition
editors/mesh/mesh_mirror.cc:30
T
#define T
Definition
mball_tessellate.cc:274
blender::nodes
Definition
BKE_compute_contexts.hh:29
bNodeTree
Definition
DNA_node_types.h:752
bNode
Definition
DNA_node_types.h:415
blender::nodes::NodeMultiFunctions::Item
Definition
NOD_multi_function.hh:61
blender::nodes::NodeMultiFunctions::Item::owned_fn
std::shared_ptr< mf::MultiFunction > owned_fn
Definition
NOD_multi_function.hh:63
blender::nodes::NodeMultiFunctions::Item::fn
const mf::MultiFunction * fn
Definition
NOD_multi_function.hh:62
Generated on Fri Apr 3 2026 06:33:18 for Blender by
doxygen
1.11.0