Blender V5.0
node_util.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2007 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cctype>
10#include <cstring>
11
12#include "DNA_node_types.h"
13
14#include "BLI_listbase.h"
15#include "BLI_string.h"
16#include "BLI_string_utf8.h"
17#include "BLI_utildefines.h"
18
19#include "BLT_translation.hh"
20
21#include "BKE_colortools.hh"
22#include "BKE_node.hh"
24
25#include "RNA_access.hh"
26#include "RNA_enum_types.hh"
27#include "RNA_prototypes.hh"
28
29#include "MEM_guardedalloc.h"
30
31#include "node_util.hh"
32
33/* -------------------------------------------------------------------- */
36
38{
39 BKE_curvemapping_free(static_cast<CurveMapping *>(node->storage));
40}
41
43{
44 if (node->storage) {
45 MEM_freeN(node->storage);
46 }
47}
48
49void node_copy_curves(bNodeTree * /*dest_ntree*/, bNode *dest_node, const bNode *src_node)
50{
51 dest_node->storage = BKE_curvemapping_copy(static_cast<CurveMapping *>(src_node->storage));
52}
53
55 bNode *dest_node,
56 const bNode *src_node)
57{
58 dest_node->storage = MEM_dupallocN(src_node->storage);
59}
60
61void *node_initexec_curves(bNodeExecContext * /*context*/, bNode *node, bNodeInstanceKey /*key*/)
62{
63 BKE_curvemapping_init(static_cast<CurveMapping *>(node->storage));
64 return nullptr; /* unused return */
65}
66
68
69/* -------------------------------------------------------------------- */
72
73void node_sock_label(bNodeSocket *sock, const char *name)
74{
75 STRNCPY_UTF8(sock->label, name);
76}
77
79{
80 if (sock->label[0] != '\0') {
81 sock->label[0] = '\0';
82 }
83}
84
85void node_math_update(bNodeTree *ntree, bNode *node)
86{
87 bNodeSocket *sock1 = static_cast<bNodeSocket *>(BLI_findlink(&node->inputs, 0));
88 bNodeSocket *sock2 = static_cast<bNodeSocket *>(BLI_findlink(&node->inputs, 1));
89 bNodeSocket *sock3 = static_cast<bNodeSocket *>(BLI_findlink(&node->inputs, 2));
91 *sock2,
92 !ELEM(node->custom1,
108 !ELEM(node->custom1,
116 *sock3,
117 ELEM(node->custom1,
123
127
128 switch (node->custom1) {
129 case NODE_MATH_WRAP:
130 node_sock_label(sock2, "Max");
131 node_sock_label(sock3, "Min");
132 break;
134 node_sock_label(sock2, "Multiplier");
135 node_sock_label(sock3, "Addend");
136 break;
139 node_sock_label(sock2, "Threshold");
140 break;
142 node_sock_label(sock2, "Scale");
143 break;
144 case NODE_MATH_SNAP:
145 node_sock_label(sock2, "Increment");
146 break;
147 case NODE_MATH_POWER:
148 node_sock_label(sock1, "Base");
149 node_sock_label(sock2, "Exponent");
150 break;
152 node_sock_label(sock2, "Base");
153 break;
155 node_sock_label(sock1, "Radians");
156 break;
158 node_sock_label(sock1, "Degrees");
159 break;
161 node_sock_label(sock3, "Epsilon");
162 break;
165 node_sock_label(sock3, "Distance");
166 break;
167 }
168}
169
171
172/* -------------------------------------------------------------------- */
175
176void node_blend_label(const bNodeTree * /*ntree*/,
177 const bNode *node,
178 char *label,
179 int label_maxncpy)
180{
181 const char *name;
182 bool enum_label = RNA_enum_name(rna_enum_ramp_blend_items, node->custom1, &name);
183 if (!enum_label) {
184 name = N_("Unknown");
185 }
186 BLI_strncpy_utf8(label, IFACE_(name), label_maxncpy);
187}
188
189void node_image_label(const bNodeTree * /*ntree*/,
190 const bNode *node,
191 char *label,
192 int label_maxncpy)
193{
194 if (node->id == nullptr) {
195 BLI_strncpy(label, IFACE_(node->typeinfo->ui_name.c_str()), label_maxncpy);
196 return;
197 }
198 BLI_strncpy(label, node->id->name + 2, label_maxncpy);
199}
200
201void node_math_label(const bNodeTree * /*ntree*/,
202 const bNode *node,
203 char *label,
204 int label_maxncpy)
205{
206 const char *name;
207 bool enum_label = RNA_enum_name(rna_enum_node_math_items, node->custom1, &name);
208 if (!enum_label) {
210 }
212}
213
214void node_vector_math_label(const bNodeTree * /*ntree*/,
215 const bNode *node,
216 char *label,
217 int label_maxncpy)
218{
219 const char *name;
220 bool enum_label = RNA_enum_name(rna_enum_node_vec_math_items, node->custom1, &name);
221 if (!enum_label) {
223 }
225}
226
228{
229 bNodeSocket *sock1 = (bNodeSocket *)sockets->first;
230 bNodeSocket *sock2 = sock1->next;
231 bNodeSocket *sock3 = sock2->next;
232
236
237 switch (mode) {
239 node_sock_label(sock1, "Red");
240 node_sock_label(sock2, "Green");
241 node_sock_label(sock3, "Blue");
242 break;
244 node_sock_label(sock1, "Hue");
245 node_sock_label(sock2, "Saturation");
246 node_sock_label(sock3, "Lightness");
247 break;
249 node_sock_label(sock1, "Hue");
250 node_sock_label(sock2, "Saturation");
251 node_sock_label(sock3, "Value");
252 break;
253 default: {
255 break;
256 }
257 }
258}
259
261
262/* -------------------------------------------------------------------- */
265
267{
268 return true;
269}
270
272
273/* -------------------------------------------------------------------- */
276
277int node_socket_get_int(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock)
278{
279 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
280 return RNA_int_get(&ptr, "default_value");
281}
282
283void node_socket_set_int(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock, int value)
284{
285 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
286 RNA_int_set(&ptr, "default_value", value);
287}
288
289bool node_socket_get_bool(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock)
290{
291 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
292 return RNA_boolean_get(&ptr, "default_value");
293}
294
295void node_socket_set_bool(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock, bool value)
296{
297 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
298 RNA_boolean_set(&ptr, "default_value", value);
299}
300
301float node_socket_get_float(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock)
302{
303 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
304 return RNA_float_get(&ptr, "default_value");
305}
306
307void node_socket_set_float(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock, float value)
308{
309 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
310 RNA_float_set(&ptr, "default_value", value);
311}
312
313void node_socket_get_color(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock, float *value)
314{
315 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
316 RNA_float_get_array(&ptr, "default_value", value);
317}
318
320 bNode * /*node*/,
321 bNodeSocket *sock,
322 const float *value)
323{
324 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
325 RNA_float_set_array(&ptr, "default_value", value);
326}
327
328void node_socket_get_vector(bNodeTree *ntree, bNode * /*node*/, bNodeSocket *sock, float *value)
329{
330 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
331 RNA_float_get_array(&ptr, "default_value", value);
332}
333
335 bNode * /*node*/,
336 bNodeSocket *sock,
337 const float *value)
338{
339 PointerRNA ptr = RNA_pointer_create_discrete((ID *)ntree, &RNA_NodeSocket, sock);
340 RNA_float_set_array(&ptr, "default_value", value);
341}
342
CurveMapping * BKE_curvemapping_copy(const CurveMapping *cumap)
void BKE_curvemapping_init(CurveMapping *cumap)
void BKE_curvemapping_free(CurveMapping *cumap)
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:534
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define ELEM(...)
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_NODETREE
#define CTX_IFACE_(context, msgid)
#define IFACE_(msgid)
@ NODE_MATH_SINH
@ NODE_MATH_SMOOTH_MIN
@ NODE_MATH_TRUNC
@ NODE_MATH_COSH
@ NODE_MATH_SIGN
@ NODE_MATH_DEGREES
@ NODE_MATH_ABSOLUTE
@ NODE_MATH_SINE
@ NODE_MATH_ARCCOSINE
@ NODE_MATH_MULTIPLY_ADD
@ NODE_MATH_POWER
@ NODE_MATH_WRAP
@ NODE_MATH_ARCTANGENT
@ NODE_MATH_SQRT
@ NODE_MATH_CEIL
@ NODE_MATH_TANH
@ NODE_MATH_GREATER_THAN
@ NODE_MATH_FRACTION
@ NODE_MATH_EXPONENT
@ NODE_MATH_LESS_THAN
@ NODE_MATH_ARCSINE
@ NODE_MATH_LOGARITHM
@ NODE_MATH_COMPARE
@ NODE_MATH_INV_SQRT
@ NODE_MATH_PINGPONG
@ NODE_MATH_ROUND
@ NODE_MATH_FLOOR
@ NODE_MATH_COSINE
@ NODE_MATH_SNAP
@ NODE_MATH_TANGENT
@ NODE_MATH_SMOOTH_MAX
@ NODE_MATH_RADIANS
NodeCombSepColorMode
@ NODE_COMBSEP_COLOR_RGB
@ NODE_COMBSEP_COLOR_HSV
@ NODE_COMBSEP_COLOR_HSL
Read Guarded memory(de)allocation.
void * MEM_dupallocN(const void *vmemh)
Definition mallocn.cc:143
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
void node_set_socket_availability(bNodeTree &ntree, bNodeSocket &sock, bool is_available)
Definition node.cc:4739
void node_sock_label_clear(bNodeSocket *sock)
Definition node_util.cc:78
void node_sock_label(bNodeSocket *sock, const char *name)
Definition node_util.cc:73
bool node_socket_get_bool(bNodeTree *ntree, bNode *, bNodeSocket *sock)
Definition node_util.cc:289
void * node_initexec_curves(bNodeExecContext *, bNode *node, bNodeInstanceKey)
Definition node_util.cc:61
void node_vector_math_label(const bNodeTree *, const bNode *node, char *label, int label_maxncpy)
Definition node_util.cc:214
void node_free_standard_storage(bNode *node)
Definition node_util.cc:42
void node_copy_standard_storage(bNodeTree *, bNode *dest_node, const bNode *src_node)
Definition node_util.cc:54
void node_math_label(const bNodeTree *, const bNode *node, char *label, int label_maxncpy)
Definition node_util.cc:201
bool node_insert_link_default(blender::bke::NodeInsertLinkParams &)
Definition node_util.cc:266
void node_copy_curves(bNodeTree *, bNode *dest_node, const bNode *src_node)
Definition node_util.cc:49
void node_blend_label(const bNodeTree *, const bNode *node, char *label, int label_maxncpy)
Definition node_util.cc:176
void node_free_curves(bNode *node)
Definition node_util.cc:37
int node_socket_get_int(bNodeTree *ntree, bNode *, bNodeSocket *sock)
Definition node_util.cc:277
void node_math_update(bNodeTree *ntree, bNode *node)
Definition node_util.cc:85
void node_socket_set_bool(bNodeTree *ntree, bNode *, bNodeSocket *sock, bool value)
Definition node_util.cc:295
void node_socket_get_color(bNodeTree *ntree, bNode *, bNodeSocket *sock, float *value)
Definition node_util.cc:313
float node_socket_get_float(bNodeTree *ntree, bNode *, bNodeSocket *sock)
Definition node_util.cc:301
void node_image_label(const bNodeTree *, const bNode *node, char *label, int label_maxncpy)
Definition node_util.cc:189
void node_socket_set_vector(bNodeTree *ntree, bNode *, bNodeSocket *sock, const float *value)
Definition node_util.cc:334
void node_socket_set_float(bNodeTree *ntree, bNode *, bNodeSocket *sock, float value)
Definition node_util.cc:307
void node_combsep_color_label(const ListBase *sockets, NodeCombSepColorMode mode)
Definition node_util.cc:227
void node_socket_set_color(bNodeTree *ntree, bNode *, bNodeSocket *sock, const float *value)
Definition node_util.cc:319
void node_socket_get_vector(bNodeTree *ntree, bNode *, bNodeSocket *sock, float *value)
Definition node_util.cc:328
void node_socket_set_int(bNodeTree *ntree, bNode *, bNodeSocket *sock, int value)
Definition node_util.cc:283
const char * name
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
bool RNA_enum_name(const EnumPropertyItem *item, const int value, const char **r_name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
const EnumPropertyItem rna_enum_ramp_blend_items[]
const EnumPropertyItem rna_enum_node_math_items[]
const EnumPropertyItem rna_enum_node_vec_math_items[]
Definition DNA_ID.h:414
char name[258]
Definition DNA_ID.h:432
void * first
struct bNodeSocket * next
bNodeTypeHandle * typeinfo
int16_t custom1
ListBase inputs
struct ID * id
void * storage
#define N_(msgid)
PointerRNA * ptr
Definition wm_files.cc:4238