Blender
V4.3
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
43
const
bNode
&
node
();
44
const
bNodeTree
&
tree
();
45
};
46
50
class
NodeMultiFunctions
{
51
public
:
52
struct
Item
{
53
const
mf::MultiFunction
*
fn
=
nullptr
;
54
std::shared_ptr<mf::MultiFunction>
owned_fn
;
55
};
56
57
private
:
58
Map<const bNode *, Item>
map_;
59
60
public
:
61
NodeMultiFunctions
(
const
bNodeTree
&
tree
);
62
63
const
Item
&
try_get
(
const
bNode
&node)
const
;
64
};
65
66
/* -------------------------------------------------------------------- */
70
inline
NodeMultiFunctionBuilder::NodeMultiFunctionBuilder
(
const
bNode
&node,
const
bNodeTree
&
tree
)
71
: node_(node), tree_(
tree
)
72
{
73
}
74
75
inline
const
bNode
&
NodeMultiFunctionBuilder::node
()
76
{
77
return
node_;
78
}
79
80
inline
const
bNodeTree
&
NodeMultiFunctionBuilder::tree
()
81
{
82
return
tree_;
83
}
84
85
inline
void
NodeMultiFunctionBuilder::set_matching_fn
(
const
mf::MultiFunction
*fn)
86
{
87
built_fn_ = fn;
88
}
89
90
inline
void
NodeMultiFunctionBuilder::set_matching_fn
(
const
mf::MultiFunction
&fn)
91
{
92
built_fn_ = &fn;
93
}
94
95
template
<
typename
T
,
typename
... Args>
96
inline
void
NodeMultiFunctionBuilder::construct_and_set_matching_fn
(Args &&...args)
97
{
98
owned_built_fn_ = std::make_shared<T>(std::forward<Args>(args)...);
99
built_fn_ = &*owned_built_fn_;
100
}
101
104
/* -------------------------------------------------------------------- */
108
inline
const
NodeMultiFunctions::Item
&
NodeMultiFunctions::try_get
(
const
bNode
&node)
const
109
{
110
static
Item
empty_item;
111
const
Item
*item = map_.lookup_ptr(&node);
112
if
(item ==
nullptr
) {
113
return
empty_item;
114
}
115
return
*item;
116
}
117
120
}
// 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:85
blender::nodes::NodeMultiFunctionBuilder::node
const bNode & node()
Definition
NOD_multi_function.hh:75
blender::nodes::NodeMultiFunctionBuilder::construct_and_set_matching_fn
void construct_and_set_matching_fn(Args &&...args)
Definition
NOD_multi_function.hh:96
blender::nodes::NodeMultiFunctionBuilder::tree
const bNodeTree & tree()
Definition
NOD_multi_function.hh:80
blender::nodes::NodeMultiFunctionBuilder::NodeMultiFunctionBuilder
NodeMultiFunctionBuilder(const bNode &node, const bNodeTree &tree)
Definition
NOD_multi_function.hh:70
blender::nodes::NodeMultiFunctions
Definition
NOD_multi_function.hh:50
blender::nodes::NodeMultiFunctions::try_get
const Item & try_get(const bNode &node) const
Definition
NOD_multi_function.hh:108
blender::nodes::NodeMultiFunctions::NodeMultiFunctions
NodeMultiFunctions(const bNodeTree &tree)
Definition
node_multi_function.cc:11
tree
KDTree_3d * tree
Definition
editors/mesh/mesh_mirror.cc:30
T
#define T
Definition
mball_tessellate.cc:273
blender::nodes
Definition
BKE_node.hh:63
bNodeTree
Definition
DNA_node_types.h:675
bNode
Definition
DNA_node_types.h:357
blender::nodes::NodeMultiFunctions::Item
Definition
NOD_multi_function.hh:52
blender::nodes::NodeMultiFunctions::Item::owned_fn
std::shared_ptr< mf::MultiFunction > owned_fn
Definition
NOD_multi_function.hh:54
blender::nodes::NodeMultiFunctions::Item::fn
const mf::MultiFunction * fn
Definition
NOD_multi_function.hh:53
Generated on Thu Feb 6 2025 07:36:39 for Blender by
doxygen
1.11.0