Blender V4.5
rna_node_socket.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLT_translation.hh"
10
11#include "DNA_node_types.h"
12
13#include "RNA_define.hh"
14#include "RNA_enum_types.hh"
15#include "RNA_types.hh"
16
17#include "rna_internal.hh"
18
19#include "WM_api.hh"
20
22 {SOCK_CUSTOM, "CUSTOM", 0, "Custom", ""},
23 {SOCK_FLOAT, "VALUE", ICON_NODE_SOCKET_FLOAT, "Value", ""},
24 {SOCK_INT, "INT", ICON_NODE_SOCKET_INT, "Integer", ""},
25 {SOCK_BOOLEAN, "BOOLEAN", ICON_NODE_SOCKET_BOOLEAN, "Boolean", ""},
26 {SOCK_VECTOR, "VECTOR", ICON_NODE_SOCKET_VECTOR, "Vector", ""},
27 {SOCK_ROTATION, "ROTATION", ICON_NODE_SOCKET_ROTATION, "Rotation", ""},
28 {SOCK_MATRIX, "MATRIX", ICON_NODE_SOCKET_MATRIX, "Matrix", ""},
29 {SOCK_STRING, "STRING", ICON_NODE_SOCKET_STRING, "String", ""},
30 {SOCK_RGBA, "RGBA", ICON_NODE_SOCKET_RGBA, "RGBA", ""},
31 {SOCK_SHADER, "SHADER", ICON_NODE_SOCKET_SHADER, "Shader", ""},
32 {SOCK_OBJECT, "OBJECT", ICON_NODE_SOCKET_OBJECT, "Object", ""},
33 {SOCK_IMAGE, "IMAGE", ICON_NODE_SOCKET_IMAGE, "Image", ""},
34 {SOCK_GEOMETRY, "GEOMETRY", ICON_NODE_SOCKET_GEOMETRY, "Geometry", ""},
35 {SOCK_COLLECTION, "COLLECTION", ICON_NODE_SOCKET_COLLECTION, "Collection", ""},
36 {SOCK_TEXTURE, "TEXTURE", ICON_NODE_SOCKET_TEXTURE, "Texture", ""},
37 {SOCK_MATERIAL, "MATERIAL", ICON_NODE_SOCKET_MATERIAL, "Material", ""},
38 {SOCK_MENU, "MENU", ICON_NODE_SOCKET_MENU, "Menu", ""},
39 {SOCK_BUNDLE, "BUNDLE", ICON_NODE_SOCKET_BUNDLE, "Bundle", ""},
40 {SOCK_CLOSURE, "CLOSURE", ICON_NODE_SOCKET_CLOSURE, "Closure", ""},
41 {0, nullptr, 0, nullptr, nullptr},
42};
43
44#ifdef RNA_RUNTIME
45
46# include <fmt/format.h>
47
48# include "DNA_material_types.h"
49
50# include "BLI_math_vector.h"
51# include "BLI_string_ref.hh"
52
53# include "BKE_main_invariants.hh"
54# include "BKE_node.hh"
55# include "BKE_node_enum.hh"
56# include "BKE_node_runtime.hh"
58
59# include "DEG_depsgraph_build.hh"
60
62
63# include "ED_node.hh"
64
65extern FunctionRNA rna_NodeSocket_draw_func;
66extern FunctionRNA rna_NodeSocket_draw_color_func;
67extern FunctionRNA rna_NodeSocket_draw_color_simple_func;
68
69/* ******** Node Socket ******** */
70
71static void rna_NodeSocket_draw(bContext *C,
72 uiLayout *layout,
74 PointerRNA *node_ptr,
75 const blender::StringRefNull text)
76{
77 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
78 ParameterList list;
79 FunctionRNA *func;
80
81 func = &rna_NodeSocket_draw_func; /* RNA_struct_find_function(&ptr, "draw"); */
82
83 RNA_parameter_list_create(&list, ptr, func);
84 RNA_parameter_set_lookup(&list, "context", &C);
85 RNA_parameter_set_lookup(&list, "layout", &layout);
86 RNA_parameter_set_lookup(&list, "node", node_ptr);
87 RNA_parameter_set_lookup(&list, "text", &text);
88 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
89
91}
92
93static void rna_NodeSocket_draw_color(bContext *C,
95 PointerRNA *node_ptr,
96 float *r_color)
97{
98 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
99 ParameterList list;
100 FunctionRNA *func;
101 void *ret;
102
103 func = &rna_NodeSocket_draw_color_func; /* RNA_struct_find_function(&ptr, "draw_color"); */
104
105 RNA_parameter_list_create(&list, ptr, func);
106 RNA_parameter_set_lookup(&list, "context", &C);
107 RNA_parameter_set_lookup(&list, "node", node_ptr);
108 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
109
110 RNA_parameter_get_lookup(&list, "color", &ret);
111 copy_v4_v4(r_color, static_cast<float *>(ret));
112
114}
115
116static void rna_NodeSocket_draw_color_simple(const blender::bke::bNodeSocketType *socket_type,
117 float *r_color)
118{
119 ParameterList list;
120 FunctionRNA *func;
121 void *ret;
122
123 func = &rna_NodeSocket_draw_color_simple_func; /* RNA_struct_find_function(&ptr,
124 * "draw_color_simple"); */
125
126 PointerRNA ptr = RNA_pointer_create_discrete(nullptr, socket_type->ext_socket.srna, nullptr);
127 RNA_parameter_list_create(&list, &ptr, func);
128 RNA_parameter_set_lookup(&list, "type", socket_type);
129 socket_type->ext_socket.call(nullptr, &ptr, func, &list);
130
131 RNA_parameter_get_lookup(&list, "color", &ret);
132 copy_v4_v4(r_color, static_cast<float *>(ret));
133
135}
136
137static bool rna_NodeSocket_unregister(Main *bmain, StructRNA *type)
138{
141 if (!st) {
142 return false;
143 }
144
147
149
150 /* update while blender is running */
153 return true;
154}
155
156static StructRNA *rna_NodeSocket_register(Main *bmain,
158 void *data,
159 const char *identifier,
160 StructValidateFunc validate,
163{
165 bNodeSocket dummy_sock = {};
166 bool have_function[3];
167
168 /* setup dummy socket & socket type to store static properties in */
169 blender::bke::bNodeSocketType dummy_st = {};
170 dummy_st.type = SOCK_CUSTOM;
171
172 dummy_sock.typeinfo = &dummy_st;
173 PointerRNA dummy_sock_ptr = RNA_pointer_create_discrete(nullptr, &RNA_NodeSocket, &dummy_sock);
174
175 /* validate the python class */
176 if (validate(&dummy_sock_ptr, data, have_function) != 0) {
177 return nullptr;
178 }
179
180 if (strlen(identifier) >= sizeof(dummy_sock.idname)) {
182 RPT_ERROR,
183 "Registering node socket class: '%s' is too long, maximum length is %d",
184 identifier,
185 int(sizeof(dummy_sock.idname)));
186 return nullptr;
187 }
188
189 /* check if we have registered this socket type before */
191 if (!st) {
192 /* create a new node socket type */
193 st = MEM_new<blender::bke::bNodeSocketType>(__func__, dummy_st);
195 }
196
197 st->free_self = [](blender::bke::bNodeSocketType *stype) { MEM_delete(stype); };
198
199 /* if RNA type is already registered, unregister first */
200 if (st->ext_socket.srna) {
201 StructRNA *srna = st->ext_socket.srna;
204 }
205 st->ext_socket.srna = RNA_def_struct_ptr(&BLENDER_RNA, st->idname.c_str(), &RNA_NodeSocket);
206 st->ext_socket.data = data;
207 st->ext_socket.call = call;
208 st->ext_socket.free = free;
210
211 /* XXX bad level call! needed to initialize the basic draw functions ... */
213
214 st->draw = (have_function[0]) ? rna_NodeSocket_draw : nullptr;
215 st->draw_color = (have_function[1]) ? rna_NodeSocket_draw_color : nullptr;
216 st->draw_color_simple = (have_function[2]) ? rna_NodeSocket_draw_color_simple : nullptr;
217
218 /* update while blender is running */
221 return st->ext_socket.srna;
222}
223
224static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr)
225{
226 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
227
228 if (sock->typeinfo->ext_socket.srna) {
229 return sock->typeinfo->ext_socket.srna;
230 }
231 else {
232 return &RNA_NodeSocket;
233 }
234}
235
236static std::optional<std::string> rna_NodeSocket_path(const PointerRNA *ptr)
237{
238 const bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
239 const bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
240
241 const bNode &node = blender::bke::node_find_node(*ntree, *sock);
242 const ListBase *sockets = (sock->in_out == SOCK_IN) ? &node.inputs : &node.outputs;
243 const int socketindex = BLI_findindex(sockets, sock);
244
245 char name_esc[sizeof(node.name) * 2];
246 BLI_str_escape(name_esc, node.name, sizeof(name_esc));
247
248 if (sock->in_out == SOCK_IN) {
249 return fmt::format("nodes[\"{}\"].inputs[{}]", name_esc, socketindex);
250 }
251 return fmt::format("nodes[\"{}\"].outputs[{}]", name_esc, socketindex);
252}
253
254static IDProperty **rna_NodeSocket_idprops(PointerRNA *ptr)
255{
256 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
257 return &sock->prop;
258}
259
260static PointerRNA rna_NodeSocket_node_get(PointerRNA *ptr)
261{
262 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
263 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
264 bNode &node = blender::bke::node_find_node(*ntree, *sock);
265 return RNA_pointer_create_discrete(&ntree->id, &RNA_Node, &node);
266}
267
268static void rna_NodeSocket_type_set(PointerRNA *ptr, int value)
269{
270 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
271 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
272 bNode &node = blender::bke::node_find_node(*ntree, *sock);
273 if (node.type_legacy != NODE_CUSTOM) {
274 /* Can't change the socket type on built-in nodes like this. */
275 return;
276 }
277 blender::bke::node_modify_socket_type_static(ntree, &node, sock, value, 0);
278}
279
280static void rna_NodeSocket_bl_idname_get(PointerRNA *ptr, char *value)
281{
282 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
283 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
285}
286
287static int rna_NodeSocket_bl_idname_length(PointerRNA *ptr)
288{
289 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
290 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
291 return ntype->idname.size();
292}
293
294static void rna_NodeSocket_bl_idname_set(PointerRNA *ptr, const char *value)
295{
296 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
298 ntype->idname = value;
299}
300
301static void rna_NodeSocket_bl_label_get(PointerRNA *ptr, char *value)
302{
303 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
304 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
305 blender::StringRef(ntype->label).copy_unsafe(value);
306}
307
308static int rna_NodeSocket_bl_label_length(PointerRNA *ptr)
309{
310 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
311 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
312 return ntype->label.size();
313}
314
315static void rna_NodeSocket_bl_label_set(PointerRNA *ptr, const char *value)
316{
317 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
319 ntype->label = value;
320}
321
322static void rna_NodeSocket_bl_subtype_label_get(PointerRNA *ptr, char *value)
323{
324 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
325 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
327}
328
329static int rna_NodeSocket_bl_subtype_label_length(PointerRNA *ptr)
330{
331 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
332 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
333 return ntype->subtype_label.size();
334}
335
336static void rna_NodeSocket_bl_subtype_label_set(PointerRNA *ptr, const char *value)
337{
338 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
340 ntype->subtype_label = value;
341}
342
343static bool rna_NodeSocket_is_linked_get(PointerRNA *ptr)
344{
345 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
346 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
347 ntree->ensure_topology_cache();
348 return sock->is_directly_linked();
349}
350
351static bool rna_NodeSocket_is_inactive_get(PointerRNA *ptr)
352{
353 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
354 bNodeSocket *sock = ptr->data_as<bNodeSocket>();
355 ntree->ensure_topology_cache();
356 return sock->is_inactive();
357}
358
359static bool rna_NodeSocket_is_icon_visible_get(PointerRNA *ptr)
360{
361 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
362 bNodeSocket *sock = ptr->data_as<bNodeSocket>();
363 ntree->ensure_topology_cache();
364 return sock->is_icon_visible();
365}
366
367static void rna_NodeSocket_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
368{
369 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
370 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
371
373 BKE_main_ensure_invariants(*bmain, ntree->id);
374}
375
376static void rna_NodeSocket_enabled_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
377{
378 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
379 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
380
382 BKE_main_ensure_invariants(*bmain, ntree->id);
383}
384
385static bool rna_NodeSocket_is_output_get(PointerRNA *ptr)
386{
387 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
388 return sock->in_out == SOCK_OUT;
389}
390
391static bool rna_NodeSocket_select_get(PointerRNA *ptr)
392{
393 const bNodeSocket *socket = ptr->data_as<bNodeSocket>();
394
395 return (socket->flag & SELECT) != 0;
396}
397
398static int rna_NodeSocket_link_limit_get(PointerRNA *ptr)
399{
400 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
402}
403
404static void rna_NodeSocket_link_limit_set(PointerRNA *ptr, int value)
405{
406 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
407 sock->limit = (value == 0 ? 0xFFF : value);
408}
409
410static void rna_NodeSocket_hide_set(PointerRNA *ptr, bool value)
411{
412 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
413
414 /* don't hide linked sockets */
415 if (sock->flag & SOCK_IS_LINKED) {
416 return;
417 }
418
419 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
420 bNode &node = blender::bke::node_find_node(*ntree, *sock);
421
422 /* The Reroute node is the socket itself, do not hide this. */
423 if (node.is_reroute()) {
424 return;
425 }
426
427 if (value) {
428 sock->flag |= SOCK_HIDDEN;
429 }
430 else {
431 sock->flag &= ~SOCK_HIDDEN;
432 }
433}
434
435/* ******** Standard Node Socket Base Types ******** */
436
437static void rna_NodeSocketStandard_draw(ID *id,
438 bNodeSocket *sock,
439 bContext *C,
440 uiLayout *layout,
441 PointerRNA *nodeptr,
442 const char *text)
443{
444 PointerRNA ptr = RNA_pointer_create_discrete(id, &RNA_NodeSocket, sock);
445 sock->typeinfo->draw(C, layout, &ptr, nodeptr, text);
446}
447
448static void rna_NodeSocketStandard_draw_color(
449 ID *id, bNodeSocket *sock, bContext *C, PointerRNA *nodeptr, float r_color[4])
450{
451 PointerRNA ptr = RNA_pointer_create_discrete(id, &RNA_NodeSocket, sock);
452 sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
453}
454
455static void rna_NodeSocketStandard_draw_color_simple(StructRNA *type, float r_color[4])
456{
457 const blender::bke::bNodeSocketType *typeinfo =
459 typeinfo->draw_color_simple(typeinfo, r_color);
460}
461
462/* ******** Node Socket Subtypes ******** */
463
464void rna_NodeSocketStandard_float_range(
465 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
466{
467 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
468 bNodeSocketValueFloat *dval = static_cast<bNodeSocketValueFloat *>(sock->default_value);
469 int subtype = sock->typeinfo->subtype;
470
471 if (dval->max < dval->min) {
472 dval->max = dval->min;
473 }
474
475 *min = (subtype == PROP_UNSIGNED ? 0.0f : -FLT_MAX);
476 *max = FLT_MAX;
477 *softmin = dval->min;
478 *softmax = dval->max;
479}
480
481void rna_NodeSocketStandard_int_range(
482 PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
483{
484 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
485 bNodeSocketValueInt *dval = static_cast<bNodeSocketValueInt *>(sock->default_value);
486 int subtype = sock->typeinfo->subtype;
487
488 if (dval->max < dval->min) {
489 dval->max = dval->min;
490 }
491
492 *min = (subtype == PROP_UNSIGNED ? 0 : INT_MIN);
493 *max = INT_MAX;
494 *softmin = dval->min;
495 *softmax = dval->max;
496}
497
498void rna_NodeSocketStandard_vector_range(
499 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
500{
501 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
502 bNodeSocketValueVector *dval = static_cast<bNodeSocketValueVector *>(sock->default_value);
503
504 if (dval->max < dval->min) {
505 dval->max = dval->min;
506 }
507
508 *min = -FLT_MAX;
509 *max = FLT_MAX;
510 *softmin = dval->min;
511 *softmax = dval->max;
512}
513
514float rna_NodeSocketStandard_float_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
515{
516 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
517 if (!sock->runtime->declaration) {
518 return 0.0f;
519 }
520 auto *decl = static_cast<const blender::nodes::decl::Float *>(sock->runtime->declaration);
521 return decl->default_value;
522}
523
524int rna_NodeSocketStandard_int_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
525{
526 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
527 if (!sock->runtime->declaration) {
528 return 0;
529 }
530 auto *decl = static_cast<const blender::nodes::decl::Int *>(sock->runtime->declaration);
531 return decl->default_value;
532}
533
534bool rna_NodeSocketStandard_boolean_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
535{
536 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
537 if (!sock->runtime->declaration) {
538 return false;
539 }
540 auto *decl = static_cast<const blender::nodes::decl::Bool *>(sock->runtime->declaration);
541 return decl->default_value;
542}
543
544void rna_NodeSocketStandard_vector_default(PointerRNA *ptr,
545 PropertyRNA * /*prop*/,
546 float *r_values)
547{
548 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
549 if (!sock->runtime->declaration) {
550 const int dimensions = sock->default_value_typed<bNodeSocketValueVector>()->dimensions;
551 std::fill_n(r_values, dimensions, 0.0f);
552 return;
553 }
554 auto *decl = static_cast<const blender::nodes::decl::Vector *>(sock->runtime->declaration);
555 std::copy_n(&decl->default_value.x, decl->dimensions, r_values);
556}
557
558void rna_NodeSocketStandard_color_default(PointerRNA *ptr, PropertyRNA * /*prop*/, float *r_values)
559{
560 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
561 if (!sock->runtime->declaration) {
562 std::fill_n(r_values, 4, 0.0f);
563 return;
564 }
565 auto *decl = static_cast<const blender::nodes::decl::Color *>(sock->runtime->declaration);
566 std::copy_n(&decl->default_value.r, 4, r_values);
567}
568
569int rna_NodeSocketStandard_menu_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
570{
571 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
572 if (!sock->runtime->declaration) {
573 return 0;
574 }
575 auto *decl = static_cast<const blender::nodes::decl::Menu *>(sock->runtime->declaration);
576 return decl->default_value;
577}
578
579/* using a context update function here, to avoid searching the node if possible */
580static void rna_NodeSocketStandard_value_update(bContext *C, PointerRNA *ptr)
581{
582 /* default update */
583 rna_NodeSocket_update(CTX_data_main(C), CTX_data_scene(C), ptr);
584}
585
586static void rna_NodeSocketStandard_value_and_relation_update(bContext *C, PointerRNA *ptr)
587{
588 rna_NodeSocketStandard_value_update(C, ptr);
589 Main *bmain = CTX_data_main(C);
591}
592
594 const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
595{
596 EnumPropertyItem tmp = {0};
597 EnumPropertyItem *result = nullptr;
598 int totitem = 0;
599
600 for (const blender::bke::RuntimeNodeEnumItem &item : enum_items.items) {
601 tmp.value = item.identifier;
602 /* Item name is unique and used as the RNA identifier as well.
603 * The integer value is persistent and unique and should be used
604 * when storing the enum value. */
605 tmp.identifier = item.name.c_str();
606 /* TODO support icons in enum definition. */
607 tmp.icon = ICON_NONE;
608 tmp.name = item.name.c_str();
609 tmp.description = item.description.c_str();
610
611 RNA_enum_item_add(&result, &totitem, &tmp);
612 }
613
614 if (totitem == 0) {
615 *r_free = false;
617 }
618
619 RNA_enum_item_end(&result, &totitem);
620 *r_free = true;
621
622 return result;
623}
624
625const EnumPropertyItem *RNA_node_socket_menu_itemf(bContext * /*C*/,
627 PropertyRNA * /*prop*/,
628 bool *r_free)
629{
630 const bNodeSocket *socket = static_cast<bNodeSocket *>(ptr->data);
631 if (!socket) {
632 *r_free = false;
634 }
635 const bNodeSocketValueMenu *data = static_cast<bNodeSocketValueMenu *>(socket->default_value);
636 if (!data->enum_items) {
637 *r_free = false;
639 }
640 return RNA_node_enum_definition_itemf(*data->enum_items, r_free);
641}
642
643std::optional<std::string> rna_NodeSocketString_filepath_filter(const bContext * /*C*/,
645 PropertyRNA * /*prop*/)
646{
647 bNodeSocket *socket = static_cast<bNodeSocket *>(ptr->data);
648 BLI_assert(socket->type == SOCK_STRING);
649 if (const auto *decl = dynamic_cast<const blender::nodes::decl::String *>(
650 socket->runtime->declaration))
651 {
652 return decl->path_filter;
653 }
654 return std::nullopt;
655}
656
657#else
658
660{
661 StructRNA *srna;
662 PropertyRNA *prop;
663 PropertyRNA *parm;
664 FunctionRNA *func;
665
666 static const EnumPropertyItem rna_enum_node_socket_display_shape_items[] = {
667 {SOCK_DISPLAY_SHAPE_CIRCLE, "CIRCLE", 0, "Circle", ""},
668 {SOCK_DISPLAY_SHAPE_SQUARE, "SQUARE", 0, "Square", ""},
669 {SOCK_DISPLAY_SHAPE_DIAMOND, "DIAMOND", 0, "Diamond", ""},
670 {SOCK_DISPLAY_SHAPE_CIRCLE_DOT, "CIRCLE_DOT", 0, "Circle with inner dot", ""},
671 {SOCK_DISPLAY_SHAPE_SQUARE_DOT, "SQUARE_DOT", 0, "Square with inner dot", ""},
672 {SOCK_DISPLAY_SHAPE_DIAMOND_DOT, "DIAMOND_DOT", 0, "Diamond with inner dot", ""},
673 {0, nullptr, 0, nullptr, nullptr}};
674
675 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
676
677 srna = RNA_def_struct(brna, "NodeSocket", nullptr);
678 RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of a node");
679 RNA_def_struct_sdna(srna, "bNodeSocket");
680 RNA_def_struct_refine_func(srna, "rna_NodeSocket_refine");
681 RNA_def_struct_ui_icon(srna, ICON_NONE);
682 RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
684 srna, "rna_NodeSocket_register", "rna_NodeSocket_unregister", nullptr);
685 RNA_def_struct_idprops_func(srna, "rna_NodeSocket_idprops");
686
687 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
688 RNA_def_property_ui_text(prop, "Name", "Socket name");
690 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
691
692 prop = RNA_def_property(srna, "label", PROP_STRING, PROP_NONE);
693 RNA_def_property_string_sdna(prop, nullptr, "label");
695 RNA_def_property_ui_text(prop, "Label", "Custom dynamic defined socket label");
696
697 prop = RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE);
698 RNA_def_property_string_sdna(prop, nullptr, "identifier");
700 RNA_def_property_ui_text(prop, "Identifier", "Unique identifier for mapping sockets");
701
702 prop = RNA_def_property(srna, "description", PROP_STRING, PROP_NONE);
703 RNA_def_property_string_sdna(prop, nullptr, "description");
704 RNA_def_property_ui_text(prop, "Tooltip", "Socket tooltip");
705 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
706
707 prop = RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
708 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_output_get", nullptr);
710 RNA_def_property_ui_text(prop, "Is Output", "True if the socket is an output, otherwise input");
711
712 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
713 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_select_get", nullptr);
715 RNA_def_property_ui_text(prop, "Select", "True if the socket is selected");
716
717 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
718 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDDEN);
719 RNA_def_property_boolean_funcs(prop, nullptr, "rna_NodeSocket_hide_set");
720 RNA_def_property_ui_text(prop, "Hide", "Hide the socket");
722
723 prop = RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
725 RNA_def_property_ui_text(prop, "Enabled", "Enable the socket");
726 RNA_def_property_update(prop, NC_NODE | ND_DISPLAY, "rna_NodeSocket_enabled_update");
727
728 prop = RNA_def_property(srna, "link_limit", PROP_INT, PROP_NONE);
729 RNA_def_property_int_sdna(prop, nullptr, "limit");
731 prop, "rna_NodeSocket_link_limit_get", "rna_NodeSocket_link_limit_set", nullptr);
732 RNA_def_property_range(prop, 1, 0xFFF);
733 RNA_def_property_ui_text(prop, "Link Limit", "Max number of links allowed for this socket");
734 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
735
736 prop = RNA_def_property(srna, "is_linked", PROP_BOOLEAN, PROP_NONE);
737 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_linked_get", nullptr);
739 RNA_def_property_ui_text(prop, "Linked", "True if the socket is connected");
740
741 prop = RNA_def_property(srna, "is_unavailable", PROP_BOOLEAN, PROP_NONE);
742 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_UNAVAIL);
744 RNA_def_property_ui_text(prop, "Unavailable", "True if the socket is unavailable");
745
746 prop = RNA_def_property(srna, "is_multi_input", PROP_BOOLEAN, PROP_NONE);
747 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_MULTI_INPUT);
750 prop, "Multi Input", "True if the socket can accept multiple ordered input links");
751
752 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
755 RNA_def_property_ui_text(prop, "Expanded", "Socket links are expanded in the user interface");
756 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
757
758 prop = RNA_def_property(srna, "is_inactive", PROP_BOOLEAN, PROP_NONE);
760 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_inactive_get", nullptr);
762 prop,
763 "Inactive",
764 "Socket is grayed out because it has been detected to not have any effect on the output");
765
766 prop = RNA_def_property(srna, "is_icon_visible", PROP_BOOLEAN, PROP_NONE);
768 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_icon_visible_get", nullptr);
770 prop, "Icon Visible", "Socket is drawn as interactive icon in the node editor");
771
772 prop = RNA_def_property(srna, "hide_value", PROP_BOOLEAN, PROP_NONE);
773 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDE_VALUE);
774 RNA_def_property_ui_text(prop, "Hide Value", "Hide the socket input value");
776
777 prop = RNA_def_property(srna, "pin_gizmo", PROP_BOOLEAN, PROP_NONE);
778 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_GIZMO_PIN);
781 prop, "Pin Gizmo", "Keep gizmo visible even when the node is not selected");
783
784 prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
785 RNA_def_property_pointer_funcs(prop, "rna_NodeSocket_node_get", nullptr, nullptr, nullptr);
786 RNA_def_property_struct_type(prop, "Node");
790 RNA_def_property_ui_text(prop, "Node", "Node owning this socket");
791
792 /* NOTE: The type property is used by standard sockets.
793 * Ideally should be defined only for the registered subclass,
794 * but to use the existing DNA is added in the base type here.
795 * Future socket types can ignore or override this if needed. */
796
797 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
798 RNA_def_property_enum_sdna(prop, nullptr, "type");
801 RNA_def_property_enum_funcs(prop, nullptr, "rna_NodeSocket_type_set", nullptr);
802 RNA_def_property_ui_text(prop, "Type", "Data type");
803 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
804
805 prop = RNA_def_property(srna, "display_shape", PROP_ENUM, PROP_NONE);
806 RNA_def_property_enum_sdna(prop, nullptr, "display_shape");
807 RNA_def_property_enum_items(prop, rna_enum_node_socket_display_shape_items);
809 RNA_def_property_ui_text(prop, "Shape", "Socket shape");
810 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
811
812 /* registration */
813 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
815 "rna_NodeSocket_bl_idname_get",
816 "rna_NodeSocket_bl_idname_length",
817 "rna_NodeSocket_bl_idname_set");
819 RNA_def_property_ui_text(prop, "ID Name", "");
820
821 prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
823 "rna_NodeSocket_bl_label_get",
824 "rna_NodeSocket_bl_label_length",
825 "rna_NodeSocket_bl_label_set");
827 RNA_def_property_ui_text(prop, "Type Label", "Label to display for the socket type in the UI");
828
829 prop = RNA_def_property(srna, "bl_subtype_label", PROP_STRING, PROP_NONE);
831 "rna_NodeSocket_bl_subtype_label_get",
832 "rna_NodeSocket_bl_subtype_label_length",
833 "rna_NodeSocket_bl_subtype_label_set");
836 prop, "Subtype Label", "Label to display for the socket subtype in the UI");
837
838 /* draw socket */
839 func = RNA_def_function(srna, "draw", nullptr);
840 RNA_def_function_ui_description(func, "Draw socket");
842 parm = RNA_def_pointer(func, "context", "Context", "", "");
844 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
845 RNA_def_property_struct_type(parm, "UILayout");
846 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
848 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
849 RNA_def_property_struct_type(parm, "Node");
850 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
852 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
853 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
854 // RNA_def_property_string_default(parm, "");
856
857 func = RNA_def_function(srna, "draw_color", nullptr);
858 RNA_def_function_ui_description(func, "Color of the socket icon");
860 parm = RNA_def_pointer(func, "context", "Context", "", "");
862 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
863 RNA_def_property_struct_type(parm, "Node");
864 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
866 parm = RNA_def_float_array(
867 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
868 RNA_def_function_output(func, parm);
869
870 func = RNA_def_function(srna, "draw_color_simple", nullptr);
872 func,
873 "Color of the socket icon. Used to draw sockets in places where the socket does not belong "
874 "to a node, like the node interface panel. Also used to draw node sockets if draw_color is "
875 "not defined.");
877 parm = RNA_def_float_array(
878 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
879 RNA_def_function_output(func, parm);
880}
881
883{
884 /* XXX Workaround: Registered functions are not exposed in python by bpy,
885 * it expects them to be registered from python and use the native implementation.
886 * However, the standard socket types below are not registering these functions from python,
887 * so in order to call them in py scripts we need to overload and
888 * replace them with plain C callbacks.
889 * These types provide a usable basis for socket types defined in C.
890 */
891
892 StructRNA *srna;
893 PropertyRNA *parm;
894 FunctionRNA *func;
895
896 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
897
898 srna = RNA_def_struct(brna, "NodeSocketStandard", "NodeSocket");
899 RNA_def_struct_sdna(srna, "bNodeSocket");
900
901 /* draw socket */
902 func = RNA_def_function(srna, "draw", "rna_NodeSocketStandard_draw");
904 RNA_def_function_ui_description(func, "Draw socket");
905 parm = RNA_def_pointer(func, "context", "Context", "", "");
907 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
908 RNA_def_property_struct_type(parm, "UILayout");
909 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
911 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
912 RNA_def_property_struct_type(parm, "Node");
913 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
915 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
916 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
917 // RNA_def_property_string_default(parm, "");
919
920 func = RNA_def_function(srna, "draw_color", "rna_NodeSocketStandard_draw_color");
922 RNA_def_function_ui_description(func, "Color of the socket icon");
923 parm = RNA_def_pointer(func, "context", "Context", "", "");
925 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
926 RNA_def_property_struct_type(parm, "Node");
927 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
929 parm = RNA_def_float_array(
930 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
931 RNA_def_function_output(func, parm);
932
933 func = RNA_def_function(srna, "draw_color_simple", "rna_NodeSocketStandard_draw_color_simple");
934 RNA_def_function_ui_description(func, "Color of the socket icon");
936 parm = RNA_def_float_array(
937 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
938 RNA_def_function_output(func, parm);
939}
940
941/* Common functions for all builtin socket interface types. */
943{
944 FunctionRNA *func;
945 PropertyRNA *parm;
946
947 /* Override for functions, invoking the typeinfo callback directly
948 * instead of expecting an existing RNA registered function implementation.
949 */
950
951 func = RNA_def_function(srna, "draw", "rna_NodeTreeInterfaceSocket_draw_builtin");
953 RNA_def_function_ui_description(func, "Draw interface socket settings");
954 parm = RNA_def_pointer(func, "context", "Context", "", "");
956 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
957 RNA_def_property_struct_type(parm, "UILayout");
958 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
960
961 func = RNA_def_function(srna, "init_socket", "rna_NodeTreeInterfaceSocket_init_socket_builtin");
962 RNA_def_function_ui_description(func, "Initialize a node socket instance");
964 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the socket to initialize");
966 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Socket to initialize");
968 parm = RNA_def_string(
969 func, "data_path", nullptr, 0, "Data Path", "Path to specialized socket data");
971
972 func = RNA_def_function(srna, "from_socket", "rna_NodeTreeInterfaceSocket_from_socket_builtin");
973 RNA_def_function_ui_description(func, "Setup template parameters from an existing socket");
975 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the original socket");
977 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Original socket");
979}
980
982 const char *identifier,
983 PropertySubType subtype)
984{
985 StructRNA *srna;
986 PropertyRNA *prop;
987
988 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
989 RNA_def_struct_ui_text(srna, "Float Node Socket", "Floating-point number socket of a node");
990 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_FLOAT);
991 RNA_def_struct_sdna(srna, "bNodeSocket");
992
993 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "default_value");
994
995 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
996 RNA_def_property_float_sdna(prop, nullptr, "value");
997 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_float_range");
998 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_float_default");
999 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1000 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1002
1003 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1004}
1005
1007 const char *identifier,
1008 PropertySubType subtype)
1009{
1010 StructRNA *srna;
1011 PropertyRNA *prop;
1012 float value_default;
1013
1014 /* choose sensible common default based on subtype */
1015 switch (subtype) {
1016 case PROP_FACTOR:
1017 value_default = 1.0f;
1018 break;
1019 case PROP_PERCENTAGE:
1020 value_default = 100.0f;
1021 break;
1022 default:
1023 value_default = 0.0f;
1024 break;
1025 }
1026
1027 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1029 srna, "Float Node Socket Interface", "Floating-point number socket of a node");
1030 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1031
1032 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "socket_data");
1033
1034 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1036 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1038 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_subtype_itemf");
1040 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1042 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1043
1044 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1045 RNA_def_property_float_sdna(prop, nullptr, "value");
1046 RNA_def_property_float_default(prop, value_default);
1049 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_default_value_range");
1050 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1051 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1052
1053 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
1054 RNA_def_property_float_sdna(prop, nullptr, "min");
1056 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1057 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1058
1059 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
1060 RNA_def_property_float_sdna(prop, nullptr, "max");
1062 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1063 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1064
1065 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1066
1068}
1069
1071 const char *identifier,
1072 PropertySubType subtype)
1073{
1074 StructRNA *srna;
1075 PropertyRNA *prop;
1076 int value_default;
1077
1078 /* choose sensible common default based on subtype */
1079 switch (subtype) {
1080 case PROP_FACTOR:
1081 value_default = 1;
1082 break;
1083 case PROP_PERCENTAGE:
1084 value_default = 100;
1085 break;
1086 default:
1087 value_default = 0;
1088 break;
1089 }
1090
1091 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1092 RNA_def_struct_ui_text(srna, "Integer Node Socket", "Integer number socket of a node");
1093 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_INT);
1094 RNA_def_struct_sdna(srna, "bNodeSocket");
1095
1096 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "default_value");
1097
1098 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
1099 RNA_def_property_int_sdna(prop, nullptr, "value");
1100 RNA_def_property_int_default(prop, value_default);
1101 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_int_range");
1102 RNA_def_property_int_default_func(prop, "rna_NodeSocketStandard_int_default");
1103 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1104 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1106
1107 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1108}
1109
1111 const char *identifier,
1112 PropertySubType subtype)
1113{
1114 StructRNA *srna;
1115 PropertyRNA *prop;
1116
1117 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1118 RNA_def_struct_ui_text(srna, "Integer Node Socket Interface", "Integer number socket of a node");
1119 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1120
1121 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "socket_data");
1122
1123 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1125 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1127 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_subtype_itemf");
1129 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1131 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1132
1133 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
1134 RNA_def_property_int_sdna(prop, nullptr, "value");
1137 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_default_value_range");
1138 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1139 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1140
1141 prop = RNA_def_property(srna, "min_value", PROP_INT, PROP_NONE);
1142 RNA_def_property_int_sdna(prop, nullptr, "min");
1144 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1145 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1146
1147 prop = RNA_def_property(srna, "max_value", PROP_INT, PROP_NONE);
1148 RNA_def_property_int_sdna(prop, nullptr, "max");
1150 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1151 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1152
1153 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1154
1156}
1157
1158static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier)
1159{
1160 StructRNA *srna;
1161 PropertyRNA *prop;
1162
1163 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1164 RNA_def_struct_ui_text(srna, "Boolean Node Socket", "Boolean value socket of a node");
1165 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_BOOLEAN);
1166 RNA_def_struct_sdna(srna, "bNodeSocket");
1167
1168 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "default_value");
1169
1170 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1171 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1172 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1173 RNA_def_property_boolean_default_func(prop, "rna_NodeSocketStandard_boolean_default");
1174 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1176
1177 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1178}
1179
1180static void rna_def_node_socket_interface_bool(BlenderRNA *brna, const char *identifier)
1181{
1182 StructRNA *srna;
1183 PropertyRNA *prop;
1184
1185 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1186 RNA_def_struct_ui_text(srna, "Boolean Node Socket Interface", "Boolean value socket of a node");
1187 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1188
1189 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "socket_data");
1190
1191 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1192 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1194 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1195 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1196
1197 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1198
1200}
1201
1202static void rna_def_node_socket_rotation(BlenderRNA *brna, const char *identifier)
1203{
1204 StructRNA *srna;
1205 PropertyRNA *prop;
1206
1207 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1208 RNA_def_struct_ui_text(srna, "Rotation Node Socket", "Rotation value socket of a node");
1209 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_ROTATION);
1210 RNA_def_struct_sdna(srna, "bNodeSocket");
1211
1212 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "default_value");
1213
1214 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1215 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1216 // RNA_def_property_array(prop, 3);
1217 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1218 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1220
1221 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1222}
1223
1224static void rna_def_node_socket_interface_rotation(BlenderRNA *brna, const char *identifier)
1225{
1226 StructRNA *srna;
1227 PropertyRNA *prop;
1228
1229 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1231 srna, "Rotation Node Socket Interface", "Rotation value socket of a node");
1232 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1233
1234 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "socket_data");
1235
1236 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1237 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1239 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1240 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1241
1242 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1243
1245}
1246
1247static void rna_def_node_socket_matrix(BlenderRNA *brna, const char *identifier)
1248{
1249 StructRNA *srna;
1250
1251 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1252 RNA_def_struct_ui_text(srna, "Matrix Node Socket", "Matrix value socket of a node");
1253 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MATRIX);
1254 RNA_def_struct_sdna(srna, "bNodeSocket");
1255
1256 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1257}
1258
1259static void rna_def_node_socket_interface_matrix(BlenderRNA *brna, const char *identifier)
1260{
1261 StructRNA *srna;
1262
1263 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1264 RNA_def_struct_ui_text(srna, "Matrix Node Socket Interface", "Matrix value socket of a node");
1265 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1266
1267 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1268
1270}
1271
1273 const char *identifier,
1274 PropertySubType subtype,
1275 int dimensions)
1276{
1277 StructRNA *srna;
1278 PropertyRNA *prop;
1279
1280 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1281 RNA_def_struct_ui_text(srna, "Vector Node Socket", "3D vector socket of a node");
1282 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_VECTOR);
1283 RNA_def_struct_sdna(srna, "bNodeSocket");
1284
1285 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "default_value");
1286
1287 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1288 RNA_def_property_float_sdna(prop, nullptr, "value");
1289 RNA_def_property_array(prop, dimensions);
1290 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_vector_default");
1291 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_vector_range");
1292 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1293 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1295
1296 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1297}
1298
1300 const char *identifier,
1301 PropertySubType subtype,
1302 int dimensions)
1303{
1304 StructRNA *srna;
1305 PropertyRNA *prop;
1306
1307 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1308 RNA_def_struct_ui_text(srna, "Vector Node Socket Interface", "3D vector socket of a node");
1309 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1310
1311 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "socket_data");
1312
1313 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1315 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1317 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_subtype_itemf");
1319 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1321 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1322
1323 prop = RNA_def_property(srna, "dimensions", PROP_INT, PROP_NONE);
1324 RNA_def_property_int_sdna(prop, nullptr, "dimensions");
1325 RNA_def_property_range(prop, 2, 4);
1327 RNA_def_property_ui_text(prop, "Dimensions", "Dimensions of the vector socket");
1329 prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocketVector_dimensions_update");
1330
1331 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1332 RNA_def_property_float_sdna(prop, nullptr, "value");
1333 RNA_def_property_array(prop, dimensions);
1336 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_default_value_range");
1337 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1338 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1339
1340 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
1341 RNA_def_property_float_sdna(prop, nullptr, "min");
1343 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1344 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1345
1346 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
1347 RNA_def_property_float_sdna(prop, nullptr, "max");
1349 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1350 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1351
1352 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1353
1355}
1356
1357static void rna_def_node_socket_color(BlenderRNA *brna, const char *identifier)
1358{
1359 StructRNA *srna;
1360 PropertyRNA *prop;
1361
1362 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1363 RNA_def_struct_ui_text(srna, "Color Node Socket", "RGBA color socket of a node");
1364 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_RGBA);
1365 RNA_def_struct_sdna(srna, "bNodeSocket");
1366
1367 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "default_value");
1368
1369 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1370 RNA_def_property_float_sdna(prop, nullptr, "value");
1371 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1372 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_color_default");
1373 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1375
1376 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1377}
1378
1379static void rna_def_node_socket_interface_color(BlenderRNA *brna, const char *identifier)
1380{
1381 StructRNA *srna;
1382 PropertyRNA *prop;
1383
1384 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1385 RNA_def_struct_ui_text(srna, "Color Node Socket Interface", "RGBA color socket of a node");
1386 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1387
1388 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "socket_data");
1389
1390 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1391 RNA_def_property_float_sdna(prop, nullptr, "value");
1393 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1394 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1395
1396 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1397
1399}
1400
1402 const char *identifier,
1403 PropertySubType subtype)
1404{
1405 StructRNA *srna;
1406 PropertyRNA *prop;
1407
1408 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1409 RNA_def_struct_ui_text(srna, "String Node Socket", "String socket of a node");
1410 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_STRING);
1411 RNA_def_struct_sdna(srna, "bNodeSocket");
1412
1413 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "default_value");
1414
1415 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1416 RNA_def_property_string_sdna(prop, nullptr, "value");
1417 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1418 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1420
1421 if (subtype == PROP_FILEPATH) {
1423 RNA_def_property_string_filepath_filter_func(prop, "rna_NodeSocketString_filepath_filter");
1424 }
1425
1426 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1427}
1428
1430 const char *identifier,
1431 PropertySubType subtype)
1432{
1433 StructRNA *srna;
1434 PropertyRNA *prop;
1435
1436 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1437 RNA_def_struct_ui_text(srna, "String Node Socket Interface", "String socket of a node");
1438 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1439
1440 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "socket_data");
1441
1442 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1444 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1446 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketString_subtype_itemf");
1448 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1450 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1451
1452 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1453 RNA_def_property_string_sdna(prop, nullptr, "value");
1455 // TODO: Do I need to call RNA_def_property_string_funcs() ?
1456 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1457 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1458
1459 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1460
1462}
1463
1464static void rna_def_node_socket_menu(BlenderRNA *brna, const char *identifier)
1465{
1466 StructRNA *srna;
1467 PropertyRNA *prop;
1468
1469 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1470 RNA_def_struct_ui_text(srna, "Menu Node Socket", "Menu socket of a node");
1471 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MENU);
1472 RNA_def_struct_sdna(srna, "bNodeSocket");
1473
1474 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "default_value");
1475
1476 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1477 RNA_def_property_enum_sdna(prop, nullptr, "value");
1479 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_socket_menu_itemf");
1480 RNA_def_property_enum_default_func(prop, "rna_NodeSocketStandard_menu_default");
1481 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1482 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1484
1485 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1486}
1487
1488static void rna_def_node_socket_interface_menu(BlenderRNA *brna, const char *identifier)
1489{
1490 StructRNA *srna;
1491 PropertyRNA *prop;
1492
1493 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1494 RNA_def_struct_ui_text(srna, "Menu Node Socket Interface", "Menu socket of a node");
1495 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1496
1497 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "socket_data");
1498
1499 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1500 RNA_def_property_enum_sdna(prop, nullptr, "value");
1502 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_tree_interface_socket_menu_itemf");
1504 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1505 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1506
1507 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1508
1510}
1511
1512static void rna_def_node_socket_shader(BlenderRNA *brna, const char *identifier)
1513{
1514 StructRNA *srna;
1515
1516 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1517 RNA_def_struct_ui_text(srna, "Shader Node Socket", "Shader socket of a node");
1518 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_SHADER);
1519 RNA_def_struct_sdna(srna, "bNodeSocket");
1520}
1521
1522static void rna_def_node_socket_interface_shader(BlenderRNA *brna, const char *identifier)
1523{
1524 StructRNA *srna;
1525
1526 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1527 RNA_def_struct_ui_text(srna, "Shader Node Socket Interface", "Shader socket of a node");
1528 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1529
1531}
1532
1533static void rna_def_node_socket_object(BlenderRNA *brna, const char *identifier)
1534{
1535 StructRNA *srna;
1536 PropertyRNA *prop;
1537
1538 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1539 RNA_def_struct_ui_text(srna, "Object Node Socket", "Object socket of a node");
1540 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_OBJECT);
1541 RNA_def_struct_sdna(srna, "bNodeSocket");
1542
1543 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "default_value");
1544
1545 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1546 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1547 RNA_def_property_struct_type(prop, "Object");
1548 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1550 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1553}
1554
1555static void rna_def_node_socket_interface_object(BlenderRNA *brna, const char *identifier)
1556{
1557 StructRNA *srna;
1558 PropertyRNA *prop;
1559
1560 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1561 RNA_def_struct_ui_text(srna, "Object Node Socket Interface", "Object socket of a node");
1562 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1563
1564 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "socket_data");
1565
1566 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1567 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1568 RNA_def_property_struct_type(prop, "Object");
1569 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1570 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1573
1575}
1576
1577static void rna_def_node_socket_image(BlenderRNA *brna, const char *identifier)
1578{
1579 StructRNA *srna;
1580 PropertyRNA *prop;
1581
1582 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1583 RNA_def_struct_ui_text(srna, "Image Node Socket", "Image socket of a node");
1584 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_IMAGE);
1585 RNA_def_struct_sdna(srna, "bNodeSocket");
1586
1587 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "default_value");
1588
1589 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1590 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1591 RNA_def_property_struct_type(prop, "Image");
1592 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1594 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1597}
1598
1599static void rna_def_node_socket_interface_image(BlenderRNA *brna, const char *identifier)
1600{
1601 StructRNA *srna;
1602 PropertyRNA *prop;
1603
1604 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1605 RNA_def_struct_ui_text(srna, "Image Node Socket Interface", "Image socket of a node");
1606 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1607
1608 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "socket_data");
1609
1610 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1611 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1612 RNA_def_property_struct_type(prop, "Image");
1613 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1614 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1617
1619}
1620
1621static void rna_def_node_socket_geometry(BlenderRNA *brna, const char *identifier)
1622{
1623 StructRNA *srna;
1624
1625 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1626 RNA_def_struct_ui_text(srna, "Geometry Node Socket", "Geometry socket of a node");
1627 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_GEOMETRY);
1628 RNA_def_struct_sdna(srna, "bNodeSocket");
1629}
1630
1631static void rna_def_node_socket_interface_geometry(BlenderRNA *brna, const char *identifier)
1632{
1633 StructRNA *srna;
1634
1635 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1636 RNA_def_struct_ui_text(srna, "Geometry Node Socket Interface", "Geometry socket of a node");
1637 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1638
1640}
1641
1642static void rna_def_node_socket_bundle(BlenderRNA *brna, const char *identifier)
1643{
1644 StructRNA *srna;
1645
1646 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1647 RNA_def_struct_ui_text(srna, "Bundle Node Socket", "Bundle socket of a node");
1648 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_BUNDLE);
1649 RNA_def_struct_sdna(srna, "bNodeSocket");
1650}
1651
1652static void rna_def_node_socket_interface_bundle(BlenderRNA *brna, const char *identifier)
1653{
1654 StructRNA *srna;
1655
1656 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1657 RNA_def_struct_ui_text(srna, "Bundle Node Socket Interface", "Bundle socket of a node");
1658 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1659
1661}
1662
1663static void rna_def_node_socket_closure(BlenderRNA *brna, const char *identifier)
1664{
1665 StructRNA *srna;
1666
1667 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1668 RNA_def_struct_ui_text(srna, "Closure Node Socket", "Closure socket of a node");
1669 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_CLOSURE);
1670 RNA_def_struct_sdna(srna, "bNodeSocket");
1671}
1672
1673static void rna_def_node_socket_interface_closure(BlenderRNA *brna, const char *identifier)
1674{
1675 StructRNA *srna;
1676
1677 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1678 RNA_def_struct_ui_text(srna, "Closure Node Socket Interface", "Closure socket of a node");
1679 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1680
1682}
1683
1684static void rna_def_node_socket_collection(BlenderRNA *brna, const char *identifier)
1685{
1686 StructRNA *srna;
1687 PropertyRNA *prop;
1688
1689 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1690 RNA_def_struct_ui_text(srna, "Collection Node Socket", "Collection socket of a node");
1691 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_COLLECTION);
1692 RNA_def_struct_sdna(srna, "bNodeSocket");
1693
1694 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "default_value");
1695
1696 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1697 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1698 RNA_def_property_struct_type(prop, "Collection");
1699 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1701 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1704}
1705
1706static void rna_def_node_socket_interface_collection(BlenderRNA *brna, const char *identifier)
1707{
1708 StructRNA *srna;
1709 PropertyRNA *prop;
1710
1711 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1712 RNA_def_struct_ui_text(srna, "Collection Node Socket Interface", "Collection socket of a node");
1713 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1714
1715 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "socket_data");
1716
1717 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1718 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1719 RNA_def_property_struct_type(prop, "Collection");
1720 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1721 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1724
1726}
1727
1728static void rna_def_node_socket_texture(BlenderRNA *brna, const char *identifier)
1729{
1730 StructRNA *srna;
1731 PropertyRNA *prop;
1732
1733 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1734 RNA_def_struct_ui_text(srna, "Texture Node Socket", "Texture socket of a node");
1735 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_TEXTURE);
1736 RNA_def_struct_sdna(srna, "bNodeSocket");
1737
1738 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "default_value");
1739
1740 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1741 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1742 RNA_def_property_struct_type(prop, "Texture");
1743 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1745 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1748}
1749
1750static void rna_def_node_socket_interface_texture(BlenderRNA *brna, const char *identifier)
1751{
1752 StructRNA *srna;
1753 PropertyRNA *prop;
1754
1755 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1756 RNA_def_struct_ui_text(srna, "Texture Node Socket Interface", "Texture socket of a node");
1757 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1758
1759 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "socket_data");
1760
1761 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1762 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1763 RNA_def_property_struct_type(prop, "Texture");
1764 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1765 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1768
1770}
1771
1772static void rna_def_node_socket_material(BlenderRNA *brna, const char *identifier)
1773{
1774 StructRNA *srna;
1775 PropertyRNA *prop;
1776
1777 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1778 RNA_def_struct_ui_text(srna, "Material Node Socket", "Material socket of a node");
1779 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MATERIAL);
1780 RNA_def_struct_sdna(srna, "bNodeSocket");
1781
1782 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "default_value");
1783
1784 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1785 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1786 RNA_def_property_struct_type(prop, "Material");
1787 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1789 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1792}
1793
1794static void rna_def_node_socket_interface_material(BlenderRNA *brna, const char *identifier)
1795{
1796 StructRNA *srna;
1797 PropertyRNA *prop;
1798
1799 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1800 RNA_def_struct_ui_text(srna, "Material Node Socket Interface", "Material socket of a node");
1801 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1802
1803 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "socket_data");
1804
1805 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1806 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1807 RNA_def_property_struct_type(prop, "Material");
1809 prop, nullptr, nullptr, nullptr, "rna_NodeTreeInterfaceSocketMaterial_default_value_poll");
1810 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1811 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1814
1816}
1817
1818static void rna_def_node_socket_virtual(BlenderRNA *brna, const char *identifier)
1819{
1820 StructRNA *srna;
1821
1822 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1823 RNA_def_struct_ui_text(srna, "Virtual Node Socket", "Virtual socket of a node");
1824 RNA_def_struct_sdna(srna, "bNodeSocket");
1825}
1826
1827/* Info for generating static subtypes. */
1835
1836/* NOTE: Socket and interface subtypes could be defined from a single central list,
1837 * but makesrna cannot have a dependency on BKE, so this list would have to live in RNA itself,
1838 * with BKE etc. accessing the RNA API to get the subtypes info. */
1840 {"NodeSocketFloat", "NodeTreeInterfaceSocketFloat", SOCK_FLOAT, PROP_NONE},
1841 {"NodeSocketFloatUnsigned", "NodeTreeInterfaceSocketFloatUnsigned", SOCK_FLOAT, PROP_UNSIGNED},
1842 {"NodeSocketFloatPercentage",
1843 "NodeTreeInterfaceSocketFloatPercentage",
1844 SOCK_FLOAT,
1846 {"NodeSocketFloatFactor", "NodeTreeInterfaceSocketFloatFactor", SOCK_FLOAT, PROP_FACTOR},
1847 {"NodeSocketFloatAngle", "NodeTreeInterfaceSocketFloatAngle", SOCK_FLOAT, PROP_ANGLE},
1848 {"NodeSocketFloatTime", "NodeTreeInterfaceSocketFloatTime", SOCK_FLOAT, PROP_TIME},
1849 {"NodeSocketFloatTimeAbsolute",
1850 "NodeTreeInterfaceSocketFloatTimeAbsolute",
1851 SOCK_FLOAT,
1853 {"NodeSocketFloatDistance", "NodeTreeInterfaceSocketFloatDistance", SOCK_FLOAT, PROP_DISTANCE},
1854 {"NodeSocketFloatWavelength",
1855 "NodeTreeInterfaceSocketFloatWavelength",
1856 SOCK_FLOAT,
1858 {"NodeSocketFloatColorTemperature",
1859 "NodeTreeInterfaceSocketFloatColorTemperature",
1860 SOCK_FLOAT,
1862 {"NodeSocketFloatFrequency",
1863 "NodeTreeInterfaceSocketFloatFrequency",
1864 SOCK_FLOAT,
1866 {"NodeSocketInt", "NodeTreeInterfaceSocketInt", SOCK_INT, PROP_NONE},
1867 {"NodeSocketIntUnsigned", "NodeTreeInterfaceSocketIntUnsigned", SOCK_INT, PROP_UNSIGNED},
1868 {"NodeSocketIntPercentage", "NodeTreeInterfaceSocketIntPercentage", SOCK_INT, PROP_PERCENTAGE},
1869 {"NodeSocketIntFactor", "NodeTreeInterfaceSocketIntFactor", SOCK_INT, PROP_FACTOR},
1870 {"NodeSocketBool", "NodeTreeInterfaceSocketBool", SOCK_BOOLEAN, PROP_NONE},
1871 {"NodeSocketRotation", "NodeTreeInterfaceSocketRotation", SOCK_ROTATION, PROP_NONE},
1872 {"NodeSocketMatrix", "NodeTreeInterfaceSocketMatrix", SOCK_MATRIX, PROP_NONE},
1873
1874 {"NodeSocketVector", "NodeTreeInterfaceSocketVector", SOCK_VECTOR, PROP_NONE},
1875 {"NodeSocketVectorFactor", "NodeTreeInterfaceSocketVectorFactor", SOCK_VECTOR, PROP_FACTOR},
1876 {"NodeSocketVectorPercentage",
1877 "NodeTreeInterfaceSocketVectorPercentage",
1880 {"NodeSocketVectorTranslation",
1881 "NodeTreeInterfaceSocketVectorTranslation",
1884 {"NodeSocketVectorDirection",
1885 "NodeTreeInterfaceSocketVectorDirection",
1888 {"NodeSocketVectorVelocity",
1889 "NodeTreeInterfaceSocketVectorVelocity",
1892 {"NodeSocketVectorAcceleration",
1893 "NodeTreeInterfaceSocketVectorAcceleration",
1896 {"NodeSocketVectorEuler", "NodeTreeInterfaceSocketVectorEuler", SOCK_VECTOR, PROP_EULER},
1897 {"NodeSocketVectorXYZ", "NodeTreeInterfaceSocketVectorXYZ", SOCK_VECTOR, PROP_XYZ},
1898
1899 {"NodeSocketVector2D", "NodeTreeInterfaceSocketVector2D", SOCK_VECTOR, PROP_NONE},
1900 {"NodeSocketVectorFactor2D",
1901 "NodeTreeInterfaceSocketVectorFactor2D",
1903 PROP_FACTOR},
1904 {"NodeSocketVectorPercentage2D",
1905 "NodeTreeInterfaceSocketVectorPercentage2D",
1908 {"NodeSocketVectorTranslation2D",
1909 "NodeTreeInterfaceSocketVectorTranslation2D",
1912 {"NodeSocketVectorDirection2D",
1913 "NodeTreeInterfaceSocketVectorDirection2D",
1916 {"NodeSocketVectorVelocity2D",
1917 "NodeTreeInterfaceSocketVectorVelocity2D",
1920 {"NodeSocketVectorAcceleration2D",
1921 "NodeTreeInterfaceSocketVectorAcceleration2D",
1924 {"NodeSocketVectorEuler2D", "NodeTreeInterfaceSocketVectorEuler2D", SOCK_VECTOR, PROP_EULER},
1925 {"NodeSocketVectorXYZ2D", "NodeTreeInterfaceSocketVectorXYZ2D", SOCK_VECTOR, PROP_XYZ},
1926
1927 {"NodeSocketVector4D", "NodeTreeInterfaceSocketVector4D", SOCK_VECTOR, PROP_NONE},
1928 {"NodeSocketVectorFactor4D",
1929 "NodeTreeInterfaceSocketVectorFactor4D",
1931 PROP_FACTOR},
1932 {"NodeSocketVectorPercentage4D",
1933 "NodeTreeInterfaceSocketVectorPercentage4D",
1936 {"NodeSocketVectorTranslation4D",
1937 "NodeTreeInterfaceSocketVectorTranslation4D",
1940 {"NodeSocketVectorDirection4D",
1941 "NodeTreeInterfaceSocketVectorDirection4D",
1944 {"NodeSocketVectorVelocity4D",
1945 "NodeTreeInterfaceSocketVectorVelocity4D",
1948 {"NodeSocketVectorAcceleration4D",
1949 "NodeTreeInterfaceSocketVectorAcceleration4D",
1952 {"NodeSocketVectorEuler4D", "NodeTreeInterfaceSocketVectorEuler4D", SOCK_VECTOR, PROP_EULER},
1953 {"NodeSocketVectorXYZ4D", "NodeTreeInterfaceSocketVectorXYZ4D", SOCK_VECTOR, PROP_XYZ},
1954
1955 {"NodeSocketColor", "NodeTreeInterfaceSocketColor", SOCK_RGBA, PROP_NONE},
1956 {"NodeSocketString", "NodeTreeInterfaceSocketString", SOCK_STRING, PROP_NONE},
1957 {"NodeSocketStringFilePath",
1958 "NodeTreeInterfaceSocketStringFilePath",
1961 {"NodeSocketShader", "NodeTreeInterfaceSocketShader", SOCK_SHADER, PROP_NONE},
1962 {"NodeSocketObject", "NodeTreeInterfaceSocketObject", SOCK_OBJECT, PROP_NONE},
1963 {"NodeSocketImage", "NodeTreeInterfaceSocketImage", SOCK_IMAGE, PROP_NONE},
1964 {"NodeSocketGeometry", "NodeTreeInterfaceSocketGeometry", SOCK_GEOMETRY, PROP_NONE},
1965 {"NodeSocketCollection", "NodeTreeInterfaceSocketCollection", SOCK_COLLECTION, PROP_NONE},
1966 {"NodeSocketTexture", "NodeTreeInterfaceSocketTexture", SOCK_TEXTURE, PROP_NONE},
1967 {"NodeSocketMaterial", "NodeTreeInterfaceSocketMaterial", SOCK_MATERIAL, PROP_NONE},
1968 {"NodeSocketMenu", "NodeTreeInterfaceSocketMenu", SOCK_MENU, PROP_NONE},
1969 {"NodeSocketBundle", "NodeTreeInterfaceSocketBundle", SOCK_BUNDLE, PROP_NONE},
1970 {"NodeSocketClosure", "NodeTreeInterfaceSocketClosure", SOCK_CLOSURE, PROP_NONE},
1971};
1972
1974{
1976 const char *identifier = info.socket_identifier;
1977
1978 switch (info.type) {
1979 case SOCK_FLOAT:
1980 rna_def_node_socket_float(brna, identifier, info.subtype);
1981 break;
1982 case SOCK_INT:
1983 rna_def_node_socket_int(brna, identifier, info.subtype);
1984 break;
1985 case SOCK_BOOLEAN:
1986 rna_def_node_socket_bool(brna, identifier);
1987 break;
1988 case SOCK_ROTATION:
1989 rna_def_node_socket_rotation(brna, identifier);
1990 break;
1991 case SOCK_MATRIX:
1992 rna_def_node_socket_matrix(brna, identifier);
1993 break;
1994 case SOCK_VECTOR:
1995 if (blender::StringRef(identifier).endswith("2D")) {
1996 rna_def_node_socket_vector(brna, identifier, info.subtype, 2);
1997 }
1998 else if (blender::StringRef(identifier).endswith("4D")) {
1999 rna_def_node_socket_vector(brna, identifier, info.subtype, 4);
2000 }
2001 else {
2002 rna_def_node_socket_vector(brna, identifier, info.subtype, 3);
2003 }
2004 break;
2005 case SOCK_RGBA:
2006 rna_def_node_socket_color(brna, identifier);
2007 break;
2008 case SOCK_STRING:
2009 rna_def_node_socket_string(brna, identifier, info.subtype);
2010 break;
2011 case SOCK_SHADER:
2012 rna_def_node_socket_shader(brna, identifier);
2013 break;
2014 case SOCK_OBJECT:
2015 rna_def_node_socket_object(brna, identifier);
2016 break;
2017 case SOCK_IMAGE:
2018 rna_def_node_socket_image(brna, identifier);
2019 break;
2020 case SOCK_GEOMETRY:
2021 rna_def_node_socket_geometry(brna, identifier);
2022 break;
2023 case SOCK_COLLECTION:
2024 rna_def_node_socket_collection(brna, identifier);
2025 break;
2026 case SOCK_TEXTURE:
2027 rna_def_node_socket_texture(brna, identifier);
2028 break;
2029 case SOCK_MATERIAL:
2030 rna_def_node_socket_material(brna, identifier);
2031 break;
2032 case SOCK_MENU:
2033 rna_def_node_socket_menu(brna, identifier);
2034 break;
2035 case SOCK_BUNDLE:
2036 rna_def_node_socket_bundle(brna, identifier);
2037 break;
2038 case SOCK_CLOSURE:
2039 rna_def_node_socket_closure(brna, identifier);
2040 break;
2041
2042 case SOCK_CUSTOM:
2043 break;
2044 }
2045 }
2046
2047 rna_def_node_socket_virtual(brna, "NodeSocketVirtual");
2048}
2049
2051{
2052 /* NOTE: interface items are defined outside this file.
2053 * The subtypes must be defined after the base type, so this function
2054 * is called from the interface rna file to ensure correct order. */
2055
2057 const char *identifier = info.interface_identifier;
2058
2059 switch (info.type) {
2060 case SOCK_FLOAT:
2061 rna_def_node_socket_interface_float(brna, identifier, info.subtype);
2062 break;
2063 case SOCK_INT:
2064 rna_def_node_socket_interface_int(brna, identifier, info.subtype);
2065 break;
2066 case SOCK_BOOLEAN:
2067 rna_def_node_socket_interface_bool(brna, identifier);
2068 break;
2069 case SOCK_ROTATION:
2071 break;
2072 case SOCK_MATRIX:
2073 rna_def_node_socket_interface_matrix(brna, identifier);
2074 break;
2075 case SOCK_VECTOR:
2076 if (blender::StringRef(identifier).endswith("2D")) {
2077 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 2);
2078 }
2079 else if (blender::StringRef(identifier).endswith("4D")) {
2080 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 4);
2081 }
2082 else {
2083 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 3);
2084 }
2085 break;
2086 case SOCK_RGBA:
2087 rna_def_node_socket_interface_color(brna, identifier);
2088 break;
2089 case SOCK_STRING:
2090 rna_def_node_socket_interface_string(brna, identifier, info.subtype);
2091 break;
2092 case SOCK_MENU:
2093 rna_def_node_socket_interface_menu(brna, identifier);
2094 break;
2095 case SOCK_SHADER:
2096 rna_def_node_socket_interface_shader(brna, identifier);
2097 break;
2098 case SOCK_OBJECT:
2099 rna_def_node_socket_interface_object(brna, identifier);
2100 break;
2101 case SOCK_IMAGE:
2102 rna_def_node_socket_interface_image(brna, identifier);
2103 break;
2104 case SOCK_GEOMETRY:
2106 break;
2107 case SOCK_COLLECTION:
2109 break;
2110 case SOCK_TEXTURE:
2111 rna_def_node_socket_interface_texture(brna, identifier);
2112 break;
2113 case SOCK_MATERIAL:
2115 break;
2116 case SOCK_BUNDLE:
2117 rna_def_node_socket_interface_bundle(brna, identifier);
2118 break;
2119 case SOCK_CLOSURE:
2120 rna_def_node_socket_interface_closure(brna, identifier);
2121 break;
2122
2123 case SOCK_CUSTOM:
2124 break;
2125 }
2126 }
2127}
2128
2136
2137#endif
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
#define NODE_CUSTOM
Definition BKE_node.hh:795
void BKE_ntree_update_tag_socket_property(bNodeTree *ntree, bNodeSocket *socket)
void BKE_ntree_update_tag_socket_availability(bNodeTree *ntree, bNodeSocket *socket)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert(a)
Definition BLI_assert.h:46
void BLI_kdtree_nd_ free(KDTree *tree)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
MINLINE void copy_v4_v4(float r[4], const float a[4])
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define BLT_I18NCONTEXT_UNIT
void DEG_relations_tag_update(Main *bmain)
@ SOCK_OUT
@ SOCK_IN
@ SOCK_HIDE_VALUE
@ SOCK_IS_LINKED
@ SOCK_MULTI_INPUT
@ SOCK_COLLAPSED
@ SOCK_GIZMO_PIN
@ SOCK_HIDDEN
@ SOCK_UNAVAIL
@ SOCK_DISPLAY_SHAPE_CIRCLE_DOT
@ SOCK_DISPLAY_SHAPE_CIRCLE
@ SOCK_DISPLAY_SHAPE_SQUARE_DOT
@ SOCK_DISPLAY_SHAPE_SQUARE
@ SOCK_DISPLAY_SHAPE_DIAMOND
@ SOCK_DISPLAY_SHAPE_DIAMOND_DOT
eNodeSocketDatatype
@ SOCK_INT
@ SOCK_TEXTURE
@ SOCK_VECTOR
@ SOCK_CLOSURE
@ SOCK_BOOLEAN
@ SOCK_MATERIAL
@ SOCK_SHADER
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_IMAGE
@ SOCK_COLLECTION
@ SOCK_CUSTOM
@ SOCK_BUNDLE
@ SOCK_GEOMETRY
@ SOCK_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
void ED_init_custom_node_socket_type(blender::bke::bNodeSocketType *stype)
Definition drawnode.cc:964
const EnumPropertyItem * RNA_node_enum_definition_itemf(const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
@ PARM_RNAPTR
Definition RNA_types.hh:513
@ PARM_REQUIRED
Definition RNA_types.hh:511
@ FUNC_USE_SELF_TYPE
Definition RNA_types.hh:800
@ FUNC_NO_SELF
Definition RNA_types.hh:798
@ FUNC_REGISTER
Definition RNA_types.hh:812
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:792
@ FUNC_REGISTER_OPTIONAL
Definition RNA_types.hh:814
@ FUNC_ALLOW_WRITE
Definition RNA_types.hh:820
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
Definition RNA_types.hh:871
@ PROP_FLOAT
Definition RNA_types.hh:152
@ PROP_BOOLEAN
Definition RNA_types.hh:150
@ PROP_ENUM
Definition RNA_types.hh:154
@ PROP_INT
Definition RNA_types.hh:151
@ PROP_STRING
Definition RNA_types.hh:153
@ PROP_POINTER
Definition RNA_types.hh:155
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
Definition RNA_types.hh:872
void(*)(void *data) StructFreeFunc
Definition RNA_types.hh:876
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:469
@ PROPOVERRIDE_NO_COMPARISON
Definition RNA_types.hh:477
PropertyFlag
Definition RNA_types.hh:286
@ PROP_CONTEXT_UPDATE
Definition RNA_types.hh:381
@ PROP_ANIMATABLE
Definition RNA_types.hh:305
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
Definition RNA_types.hh:430
@ PROP_EDITABLE
Definition RNA_types.hh:292
@ PROP_REGISTER_OPTIONAL
Definition RNA_types.hh:386
@ PROP_NEVER_NULL
Definition RNA_types.hh:351
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:413
@ PROP_REGISTER
Definition RNA_types.hh:385
@ PROP_PTR_NO_OWNERSHIP
Definition RNA_types.hh:369
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:338
PropertySubType
Definition RNA_types.hh:220
@ PROP_TIME
Definition RNA_types.hh:241
@ PROP_DIRECTION
Definition RNA_types.hh:250
@ PROP_XYZ
Definition RNA_types.hh:257
@ PROP_DISTANCE
Definition RNA_types.hh:244
@ PROP_ACCELERATION
Definition RNA_types.hh:252
@ PROP_COLOR
Definition RNA_types.hh:248
@ PROP_ANGLE
Definition RNA_types.hh:240
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:242
@ PROP_EULER
Definition RNA_types.hh:254
@ PROP_COLOR_TEMPERATURE
Definition RNA_types.hh:278
@ PROP_NONE
Definition RNA_types.hh:221
@ PROP_PERCENTAGE
Definition RNA_types.hh:238
@ PROP_FREQUENCY
Definition RNA_types.hh:280
@ PROP_FACTOR
Definition RNA_types.hh:239
@ PROP_TRANSLATION
Definition RNA_types.hh:249
@ PROP_UNSIGNED
Definition RNA_types.hh:237
@ PROP_FILEPATH
Definition RNA_types.hh:224
@ PROP_VELOCITY
Definition RNA_types.hh:251
@ PROP_WAVELENGTH
Definition RNA_types.hh:275
#define C
Definition RandGen.cpp:29
#define NC_NODE
Definition WM_types.hh:391
#define ND_DISPLAY
Definition WM_types.hh:488
#define NA_EDITED
Definition WM_types.hh:581
ReportList * reports
Definition WM_types.hh:1025
#define ND_NODE_GIZMO
Definition WM_types.hh:513
BMesh const char void * data
void copy_unsafe(char *dst) const
#define SELECT
void node_unregister_socket_type(bNodeSocketType &stype)
Definition node.cc:2835
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
Definition node.cc:3123
void node_register_socket_type(bNodeSocketType &stype)
Definition node.cc:2826
bNode & node_find_node(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3613
bNodeSocketType * node_socket_type_find(StringRef idname)
Definition node.cc:2794
int node_socket_link_limit(const bNodeSocket &sock)
Definition node.cc:5025
static blender::bke::bNodeSocketTemplate outputs[]
return ret
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_parameter_list_free(ParameterList *parms)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_property_enum_default(PropertyRNA *prop, int value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
void RNA_def_property_int_default(PropertyRNA *prop, int value)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_float_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext)
void RNA_def_property_enum_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_string_filepath_filter_func(PropertyRNA *prop, const char *filter)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
BlenderRNA BLENDER_RNA
static void rna_def_node_socket_interface_bundle(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_bool(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_virtual(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_object(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_int(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_matrix(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_matrix(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_bundle(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_string(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_interface_object(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_texture(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_rotation(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype, int dimensions)
static void rna_def_node_socket_geometry(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_int(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_interface_material(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_texture(BlenderRNA *brna, const char *identifier)
void rna_def_node_socket_interface_subtypes(BlenderRNA *brna)
void RNA_def_node_socket_subtypes(BlenderRNA *brna)
static void rna_def_node_socket_standard(BlenderRNA *brna)
static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket(BlenderRNA *brna)
static void rna_def_node_socket_subtypes(BlenderRNA *brna)
static void rna_def_node_socket_interface_float(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_shader(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_color(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_geometry(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_color(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_string(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static const bNodeSocketStaticTypeInfo node_socket_subtypes[]
static void rna_def_node_socket_interface_menu(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype, int dimensions)
static void rna_def_node_socket_interface_closure(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_image(BlenderRNA *brna, const char *identifier)
static void rna_def_node_tree_interface_socket_builtin(StructRNA *srna)
static void rna_def_node_socket_rotation(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_menu(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_material(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_shader(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_float(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
const EnumPropertyItem rna_enum_node_socket_type_items[]
static void rna_def_node_socket_interface_image(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_collection(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_collection(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_closure(BlenderRNA *brna, const char *identifier)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
Definition rna_rna.cc:26
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
Definition rna_rna.cc:32
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
const char * identifier
Definition RNA_types.hh:623
const char * name
Definition RNA_types.hh:627
const char * description
Definition RNA_types.hh:629
StructRNA * srna
Definition RNA_types.hh:909
StructCallbackFunc call
Definition RNA_types.hh:910
StructFreeFunc free
Definition RNA_types.hh:911
Definition DNA_ID.h:404
IDProperty * prop
bNodeSocketRuntimeHandle * runtime
bNodeSocketTypeHandle * typeinfo
void * default_value
char idname[64]
ListBase inputs
char name[64]
int16_t type_legacy
Vector< RuntimeNodeEnumItem > items
Defines a socket type.
Definition BKE_node.hh:152
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
Definition BKE_node.hh:165
void(* free_self)(bNodeSocketType *stype)
Definition BKE_node.hh:196
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
Definition BKE_node.hh:166
eNodeSocketDatatype type
Definition BKE_node.hh:187
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, StringRefNull text)
Definition BKE_node.hh:160
max
Definition text_draw.cc:251
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4227