Blender V4.3
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
9#include "BLI_math_vector.h"
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", 0, "Value", ""},
24 {SOCK_INT, "INT", 0, "Integer", ""},
25 {SOCK_BOOLEAN, "BOOLEAN", 0, "Boolean", ""},
26 {SOCK_VECTOR, "VECTOR", 0, "Vector", ""},
27 {SOCK_ROTATION, "ROTATION", 0, "Rotation", ""},
28 {SOCK_MATRIX, "MATRIX", 0, "Matrix", ""},
29 {SOCK_STRING, "STRING", 0, "String", ""},
30 {SOCK_RGBA, "RGBA", 0, "RGBA", ""},
31 {SOCK_SHADER, "SHADER", 0, "Shader", ""},
32 {SOCK_OBJECT, "OBJECT", 0, "Object", ""},
33 {SOCK_IMAGE, "IMAGE", 0, "Image", ""},
34 {SOCK_GEOMETRY, "GEOMETRY", 0, "Geometry", ""},
35 {SOCK_COLLECTION, "COLLECTION", 0, "Collection", ""},
36 {SOCK_TEXTURE, "TEXTURE", 0, "Texture", ""},
37 {SOCK_MATERIAL, "MATERIAL", 0, "Material", ""},
38 {SOCK_MENU, "MENU", 0, "Menu", ""},
39 {0, nullptr, 0, nullptr, nullptr},
40};
41
42#ifdef RNA_RUNTIME
43
44# include <fmt/format.h>
45
46# include "DNA_material_types.h"
47
48# include "BKE_node.hh"
49# include "BKE_node_enum.hh"
50# include "BKE_node_runtime.hh"
52
53# include "DEG_depsgraph_build.hh"
54
56
57# include "ED_node.hh"
58
59extern FunctionRNA rna_NodeSocket_draw_func;
60extern FunctionRNA rna_NodeSocket_draw_color_func;
61extern FunctionRNA rna_NodeSocket_draw_color_simple_func;
62
63/* ******** Node Socket ******** */
64
65static void rna_NodeSocket_draw(
66 bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, const char *text)
67{
68 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
69 ParameterList list;
70 FunctionRNA *func;
71
72 func = &rna_NodeSocket_draw_func; /* RNA_struct_find_function(&ptr, "draw"); */
73
74 RNA_parameter_list_create(&list, ptr, func);
75 RNA_parameter_set_lookup(&list, "context", &C);
76 RNA_parameter_set_lookup(&list, "layout", &layout);
77 RNA_parameter_set_lookup(&list, "node", node_ptr);
78 RNA_parameter_set_lookup(&list, "text", &text);
79 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
80
82}
83
84static void rna_NodeSocket_draw_color(bContext *C,
86 PointerRNA *node_ptr,
87 float *r_color)
88{
89 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
90 ParameterList list;
91 FunctionRNA *func;
92 void *ret;
93
94 func = &rna_NodeSocket_draw_color_func; /* RNA_struct_find_function(&ptr, "draw_color"); */
95
96 RNA_parameter_list_create(&list, ptr, func);
97 RNA_parameter_set_lookup(&list, "context", &C);
98 RNA_parameter_set_lookup(&list, "node", node_ptr);
99 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
100
101 RNA_parameter_get_lookup(&list, "color", &ret);
102 copy_v4_v4(r_color, static_cast<float *>(ret));
103
105}
106
107static void rna_NodeSocket_draw_color_simple(const blender::bke::bNodeSocketType *socket_type,
108 float *r_color)
109{
110 ParameterList list;
111 FunctionRNA *func;
112 void *ret;
113
114 func = &rna_NodeSocket_draw_color_simple_func; /* RNA_struct_find_function(&ptr,
115 * "draw_color_simple"); */
116
117 PointerRNA ptr = RNA_pointer_create(nullptr, socket_type->ext_socket.srna, nullptr);
118 RNA_parameter_list_create(&list, &ptr, func);
119 RNA_parameter_set_lookup(&list, "type", socket_type);
120 socket_type->ext_socket.call(nullptr, &ptr, func, &list);
121
122 RNA_parameter_get_lookup(&list, "color", &ret);
123 copy_v4_v4(r_color, static_cast<float *>(ret));
124
126}
127
128static bool rna_NodeSocket_unregister(Main * /*bmain*/, StructRNA *type)
129{
132 if (!st) {
133 return false;
134 }
135
138
140
141 /* update while blender is running */
143 return true;
144}
145
146static StructRNA *rna_NodeSocket_register(Main * /*bmain*/,
147 ReportList *reports,
148 void *data,
149 const char *identifier,
150 StructValidateFunc validate,
153{
154 blender::bke::bNodeSocketType *st, dummy_st;
155 bNodeSocket dummy_sock;
156 bool have_function[3];
157
158 /* setup dummy socket & socket type to store static properties in */
159 memset(&dummy_st, 0, sizeof(blender::bke::bNodeSocketType));
160 dummy_st.type = SOCK_CUSTOM;
161
162 memset(&dummy_sock, 0, sizeof(bNodeSocket));
163 dummy_sock.typeinfo = &dummy_st;
164 PointerRNA dummy_sock_ptr = RNA_pointer_create(nullptr, &RNA_NodeSocket, &dummy_sock);
165
166 /* validate the python class */
167 if (validate(&dummy_sock_ptr, data, have_function) != 0) {
168 return nullptr;
169 }
170
171 if (strlen(identifier) >= sizeof(dummy_st.idname)) {
172 BKE_reportf(reports,
173 RPT_ERROR,
174 "Registering node socket class: '%s' is too long, maximum length is %d",
175 identifier,
176 int(sizeof(dummy_st.idname)));
177 return nullptr;
178 }
179
180 /* check if we have registered this socket type before */
182 if (!st) {
183 /* create a new node socket type */
184 st = static_cast<blender::bke::bNodeSocketType *>(
185 MEM_mallocN(sizeof(blender::bke::bNodeSocketType), "node socket type"));
186 memcpy(st, &dummy_st, sizeof(dummy_st));
187
189 }
190
191 st->free_self = (void (*)(blender::bke::bNodeSocketType *stype))MEM_freeN;
192
193 /* if RNA type is already registered, unregister first */
194 if (st->ext_socket.srna) {
195 StructRNA *srna = st->ext_socket.srna;
198 }
199 st->ext_socket.srna = RNA_def_struct_ptr(&BLENDER_RNA, st->idname, &RNA_NodeSocket);
200 st->ext_socket.data = data;
201 st->ext_socket.call = call;
202 st->ext_socket.free = free;
204
205 /* XXX bad level call! needed to initialize the basic draw functions ... */
207
208 st->draw = (have_function[0]) ? rna_NodeSocket_draw : nullptr;
209 st->draw_color = (have_function[1]) ? rna_NodeSocket_draw_color : nullptr;
210 st->draw_color_simple = (have_function[2]) ? rna_NodeSocket_draw_color_simple : nullptr;
211
212 /* update while blender is running */
214
215 return st->ext_socket.srna;
216}
217
218static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr)
219{
220 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
221
222 if (sock->typeinfo->ext_socket.srna) {
223 return sock->typeinfo->ext_socket.srna;
224 }
225 else {
226 return &RNA_NodeSocket;
227 }
228}
229
230static std::optional<std::string> rna_NodeSocket_path(const PointerRNA *ptr)
231{
232 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
233 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
234 bNode *node;
235 int socketindex;
236 char name_esc[sizeof(node->name) * 2];
237
238 blender::bke::node_find_node(ntree, sock, &node, &socketindex);
239
240 BLI_str_escape(name_esc, node->name, sizeof(name_esc));
241
242 if (sock->in_out == SOCK_IN) {
243 return fmt::format("nodes[\"{}\"].inputs[{}]", name_esc, socketindex);
244 }
245 return fmt::format("nodes[\"{}\"].outputs[{}]", name_esc, socketindex);
246}
247
248static IDProperty **rna_NodeSocket_idprops(PointerRNA *ptr)
249{
250 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
251 return &sock->prop;
252}
253
254static PointerRNA rna_NodeSocket_node_get(PointerRNA *ptr)
255{
256 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
257 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
258 bNode *node;
259
260 blender::bke::node_find_node(ntree, sock, &node, nullptr);
261
262 PointerRNA r_ptr = RNA_pointer_create(&ntree->id, &RNA_Node, node);
263 return r_ptr;
264}
265
266static void rna_NodeSocket_type_set(PointerRNA *ptr, int value)
267{
268 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
269 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
270 bNode *node;
271 blender::bke::node_find_node(ntree, sock, &node, nullptr);
272 if (node->type != NODE_CUSTOM) {
273 /* Can't change the socket type on built-in nodes like this. */
274 return;
275 }
276 blender::bke::node_modify_socket_type_static(ntree, node, sock, value, 0);
277}
278
279static void rna_NodeSocket_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
280{
281 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
282 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
283
285 ED_node_tree_propagate_change(nullptr, bmain, ntree);
286}
287
288static bool rna_NodeSocket_is_output_get(PointerRNA *ptr)
289{
290 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
291 return sock->in_out == SOCK_OUT;
292}
293
294static void rna_NodeSocket_link_limit_set(PointerRNA *ptr, int value)
295{
296 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
297 sock->limit = (value == 0 ? 0xFFF : value);
298}
299
300static void rna_NodeSocket_hide_set(PointerRNA *ptr, bool value)
301{
302 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
303
304 /* don't hide linked sockets */
305 if (sock->flag & SOCK_IS_LINKED) {
306 return;
307 }
308
309 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
310 bNode *node;
311 blender::bke::node_find_node(ntree, sock, &node, nullptr);
312
313 /* The Reroute node is the socket itself, do not hide this. */
314 if (node->is_reroute()) {
315 return;
316 }
317
318 if (value) {
319 sock->flag |= SOCK_HIDDEN;
320 }
321 else {
322 sock->flag &= ~SOCK_HIDDEN;
323 }
324}
325
326/* ******** Standard Node Socket Base Types ******** */
327
328static void rna_NodeSocketStandard_draw(ID *id,
329 bNodeSocket *sock,
330 bContext *C,
331 uiLayout *layout,
332 PointerRNA *nodeptr,
333 const char *text)
334{
335 PointerRNA ptr = RNA_pointer_create(id, &RNA_NodeSocket, sock);
336 sock->typeinfo->draw(C, layout, &ptr, nodeptr, text);
337}
338
339static void rna_NodeSocketStandard_draw_color(
340 ID *id, bNodeSocket *sock, bContext *C, PointerRNA *nodeptr, float r_color[4])
341{
342 PointerRNA ptr = RNA_pointer_create(id, &RNA_NodeSocket, sock);
343 sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
344}
345
346static void rna_NodeSocketStandard_draw_color_simple(StructRNA *type, float r_color[4])
347{
348 const blender::bke::bNodeSocketType *typeinfo =
350 typeinfo->draw_color_simple(typeinfo, r_color);
351}
352
353/* ******** Node Socket Subtypes ******** */
354
355void rna_NodeSocketStandard_float_range(
356 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
357{
358 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
359 bNodeSocketValueFloat *dval = static_cast<bNodeSocketValueFloat *>(sock->default_value);
360 int subtype = sock->typeinfo->subtype;
361
362 if (dval->max < dval->min) {
363 dval->max = dval->min;
364 }
365
366 *min = (subtype == PROP_UNSIGNED ? 0.0f : -FLT_MAX);
367 *max = FLT_MAX;
368 *softmin = dval->min;
369 *softmax = dval->max;
370}
371
372void rna_NodeSocketStandard_int_range(
373 PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
374{
375 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
376 bNodeSocketValueInt *dval = static_cast<bNodeSocketValueInt *>(sock->default_value);
377 int subtype = sock->typeinfo->subtype;
378
379 if (dval->max < dval->min) {
380 dval->max = dval->min;
381 }
382
383 *min = (subtype == PROP_UNSIGNED ? 0 : INT_MIN);
384 *max = INT_MAX;
385 *softmin = dval->min;
386 *softmax = dval->max;
387}
388
389void rna_NodeSocketStandard_vector_range(
390 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
391{
392 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
393 bNodeSocketValueVector *dval = static_cast<bNodeSocketValueVector *>(sock->default_value);
394
395 if (dval->max < dval->min) {
396 dval->max = dval->min;
397 }
398
399 *min = -FLT_MAX;
400 *max = FLT_MAX;
401 *softmin = dval->min;
402 *softmax = dval->max;
403}
404
405float rna_NodeSocketStandard_float_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
406{
407 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
408 if (!sock->runtime->declaration) {
409 return 0.0f;
410 }
411 auto *decl = static_cast<const blender::nodes::decl::Float *>(sock->runtime->declaration);
412 return decl->default_value;
413}
414
415int rna_NodeSocketStandard_int_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
416{
417 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
418 if (!sock->runtime->declaration) {
419 return 0;
420 }
421 auto *decl = static_cast<const blender::nodes::decl::Int *>(sock->runtime->declaration);
422 return decl->default_value;
423}
424
425bool rna_NodeSocketStandard_boolean_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
426{
427 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
428 if (!sock->runtime->declaration) {
429 return false;
430 }
431 auto *decl = static_cast<const blender::nodes::decl::Bool *>(sock->runtime->declaration);
432 return decl->default_value;
433}
434
435void rna_NodeSocketStandard_vector_default(PointerRNA *ptr,
436 PropertyRNA * /*prop*/,
437 float *r_values)
438{
439 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
440 if (!sock->runtime->declaration) {
441 std::fill_n(r_values, 3, 0.0f);
442 return;
443 }
444 auto *decl = static_cast<const blender::nodes::decl::Vector *>(sock->runtime->declaration);
445 std::copy_n(&decl->default_value.x, 3, r_values);
446}
447
448void rna_NodeSocketStandard_color_default(PointerRNA *ptr, PropertyRNA * /*prop*/, float *r_values)
449{
450 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
451 if (!sock->runtime->declaration) {
452 std::fill_n(r_values, 4, 0.0f);
453 return;
454 }
455 auto *decl = static_cast<const blender::nodes::decl::Color *>(sock->runtime->declaration);
456 std::copy_n(&decl->default_value.r, 4, r_values);
457}
458
459/* using a context update function here, to avoid searching the node if possible */
460static void rna_NodeSocketStandard_value_update(bContext *C, PointerRNA *ptr)
461{
462 /* default update */
463 rna_NodeSocket_update(CTX_data_main(C), CTX_data_scene(C), ptr);
464}
465
466static void rna_NodeSocketStandard_value_and_relation_update(bContext *C, PointerRNA *ptr)
467{
468 rna_NodeSocketStandard_value_update(C, ptr);
469 Main *bmain = CTX_data_main(C);
471}
472
474 const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
475{
476 EnumPropertyItem tmp = {0};
477 EnumPropertyItem *result = nullptr;
478 int totitem = 0;
479
480 for (const blender::bke::RuntimeNodeEnumItem &item : enum_items.items) {
481 tmp.value = item.identifier;
482 /* Item name is unique and used as the RNA identifier as well.
483 * The integer value is persistent and unique and should be used
484 * when storing the enum value. */
485 tmp.identifier = item.name.c_str();
486 /* TODO support icons in enum definition. */
487 tmp.icon = ICON_NONE;
488 tmp.name = item.name.c_str();
489 tmp.description = item.description.c_str();
490
491 RNA_enum_item_add(&result, &totitem, &tmp);
492 }
493
494 if (totitem == 0) {
495 *r_free = false;
497 }
498
499 RNA_enum_item_end(&result, &totitem);
500 *r_free = true;
501
502 return result;
503}
504
505const EnumPropertyItem *RNA_node_socket_menu_itemf(bContext * /*C*/,
507 PropertyRNA * /*prop*/,
508 bool *r_free)
509{
510 const bNodeSocket *socket = static_cast<bNodeSocket *>(ptr->data);
511 if (!socket) {
512 *r_free = false;
514 }
515 const bNodeSocketValueMenu *data = static_cast<bNodeSocketValueMenu *>(socket->default_value);
516 if (!data->enum_items) {
517 *r_free = false;
519 }
520 return RNA_node_enum_definition_itemf(*data->enum_items, r_free);
521}
522
523#else
524
526{
527 StructRNA *srna;
528 PropertyRNA *prop;
529 PropertyRNA *parm;
530 FunctionRNA *func;
531
532 static const EnumPropertyItem rna_enum_node_socket_display_shape_items[] = {
533 {SOCK_DISPLAY_SHAPE_CIRCLE, "CIRCLE", 0, "Circle", ""},
534 {SOCK_DISPLAY_SHAPE_SQUARE, "SQUARE", 0, "Square", ""},
535 {SOCK_DISPLAY_SHAPE_DIAMOND, "DIAMOND", 0, "Diamond", ""},
536 {SOCK_DISPLAY_SHAPE_CIRCLE_DOT, "CIRCLE_DOT", 0, "Circle with inner dot", ""},
537 {SOCK_DISPLAY_SHAPE_SQUARE_DOT, "SQUARE_DOT", 0, "Square with inner dot", ""},
538 {SOCK_DISPLAY_SHAPE_DIAMOND_DOT, "DIAMOND_DOT", 0, "Diamond with inner dot", ""},
539 {0, nullptr, 0, nullptr, nullptr}};
540
541 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
542
543 srna = RNA_def_struct(brna, "NodeSocket", nullptr);
544 RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of a node");
545 RNA_def_struct_sdna(srna, "bNodeSocket");
546 RNA_def_struct_refine_func(srna, "rna_NodeSocket_refine");
547 RNA_def_struct_ui_icon(srna, ICON_NONE);
548 RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
550 srna, "rna_NodeSocket_register", "rna_NodeSocket_unregister", nullptr);
551 RNA_def_struct_idprops_func(srna, "rna_NodeSocket_idprops");
552
553 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
554 RNA_def_property_ui_text(prop, "Name", "Socket name");
556 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
557
558 prop = RNA_def_property(srna, "label", PROP_STRING, PROP_NONE);
559 RNA_def_property_string_sdna(prop, nullptr, "label");
561 RNA_def_property_ui_text(prop, "Label", "Custom dynamic defined socket label");
562
563 prop = RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE);
564 RNA_def_property_string_sdna(prop, nullptr, "identifier");
566 RNA_def_property_ui_text(prop, "Identifier", "Unique identifier for mapping sockets");
567
568 prop = RNA_def_property(srna, "description", PROP_STRING, PROP_NONE);
569 RNA_def_property_string_sdna(prop, nullptr, "description");
570 RNA_def_property_ui_text(prop, "Tooltip", "Socket tooltip");
571 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
572
573 prop = RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
574 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_output_get", nullptr);
576 RNA_def_property_ui_text(prop, "Is Output", "True if the socket is an output, otherwise input");
577
578 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
579 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDDEN);
580 RNA_def_property_boolean_funcs(prop, nullptr, "rna_NodeSocket_hide_set");
581 RNA_def_property_ui_text(prop, "Hide", "Hide the socket");
583
584 prop = RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
586 RNA_def_property_ui_text(prop, "Enabled", "Enable the socket");
588
589 prop = RNA_def_property(srna, "link_limit", PROP_INT, PROP_NONE);
590 RNA_def_property_int_sdna(prop, nullptr, "limit");
591 RNA_def_property_int_funcs(prop, nullptr, "rna_NodeSocket_link_limit_set", nullptr);
592 RNA_def_property_range(prop, 1, 0xFFF);
593 RNA_def_property_ui_text(prop, "Link Limit", "Max number of links allowed for this socket");
594 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
595
596 prop = RNA_def_property(srna, "is_linked", PROP_BOOLEAN, PROP_NONE);
597 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_IS_LINKED);
599 RNA_def_property_ui_text(prop, "Linked", "True if the socket is connected");
600
601 prop = RNA_def_property(srna, "is_unavailable", PROP_BOOLEAN, PROP_NONE);
602 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_UNAVAIL);
604 RNA_def_property_ui_text(prop, "Unavailable", "True if the socket is unavailable");
605
606 prop = RNA_def_property(srna, "is_multi_input", PROP_BOOLEAN, PROP_NONE);
607 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_MULTI_INPUT);
610 prop, "Multi Input", "True if the socket can accept multiple ordered input links");
611
612 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
615 RNA_def_property_ui_text(prop, "Expanded", "Socket links are expanded in the user interface");
616 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
617
618 prop = RNA_def_property(srna, "hide_value", PROP_BOOLEAN, PROP_NONE);
619 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDE_VALUE);
620 RNA_def_property_ui_text(prop, "Hide Value", "Hide the socket input value");
622
623 prop = RNA_def_property(srna, "pin_gizmo", PROP_BOOLEAN, PROP_NONE);
624 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_GIZMO_PIN);
627 prop, "Pin Gizmo", "Keep gizmo visible even when the node is not selected");
629
630 prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
631 RNA_def_property_pointer_funcs(prop, "rna_NodeSocket_node_get", nullptr, nullptr, nullptr);
632 RNA_def_property_struct_type(prop, "Node");
636 RNA_def_property_ui_text(prop, "Node", "Node owning this socket");
637
638 /* NOTE: The type property is used by standard sockets.
639 * Ideally should be defined only for the registered subclass,
640 * but to use the existing DNA is added in the base type here.
641 * Future socket types can ignore or override this if needed. */
642
643 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
644 RNA_def_property_enum_sdna(prop, nullptr, "type");
647 RNA_def_property_enum_funcs(prop, nullptr, "rna_NodeSocket_type_set", nullptr);
648 RNA_def_property_ui_text(prop, "Type", "Data type");
649 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
650
651 prop = RNA_def_property(srna, "display_shape", PROP_ENUM, PROP_NONE);
652 RNA_def_property_enum_sdna(prop, nullptr, "display_shape");
653 RNA_def_property_enum_items(prop, rna_enum_node_socket_display_shape_items);
655 RNA_def_property_ui_text(prop, "Shape", "Socket shape");
656 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
657
658 /* registration */
659 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
660 RNA_def_property_string_sdna(prop, nullptr, "typeinfo->idname");
662 RNA_def_property_ui_text(prop, "ID Name", "");
663
664 prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
665 RNA_def_property_string_sdna(prop, nullptr, "typeinfo->label");
667 RNA_def_property_ui_text(prop, "Type Label", "Label to display for the socket type in the UI");
668
669 prop = RNA_def_property(srna, "bl_subtype_label", PROP_STRING, PROP_NONE);
670 RNA_def_property_string_sdna(prop, nullptr, "typeinfo->subtype_label");
673 prop, "Subtype Label", "Label to display for the socket subtype in the UI");
674
675 /* draw socket */
676 func = RNA_def_function(srna, "draw", nullptr);
677 RNA_def_function_ui_description(func, "Draw socket");
679 parm = RNA_def_pointer(func, "context", "Context", "", "");
681 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
682 RNA_def_property_struct_type(parm, "UILayout");
683 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
685 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
686 RNA_def_property_struct_type(parm, "Node");
687 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
689 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
690 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
691 // RNA_def_property_string_default(parm, "");
693
694 func = RNA_def_function(srna, "draw_color", nullptr);
695 RNA_def_function_ui_description(func, "Color of the socket icon");
697 parm = RNA_def_pointer(func, "context", "Context", "", "");
699 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
700 RNA_def_property_struct_type(parm, "Node");
701 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
703 parm = RNA_def_float_array(
704 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
705 RNA_def_function_output(func, parm);
706
707 func = RNA_def_function(srna, "draw_color_simple", nullptr);
709 func,
710 "Color of the socket icon. Used to draw sockets in places where the socket does not belong "
711 "to a node, like the node interface panel. Also used to draw node sockets if draw_color is "
712 "not defined.");
714 parm = RNA_def_float_array(
715 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
716 RNA_def_function_output(func, parm);
717}
718
720{
721 /* XXX Workaround: Registered functions are not exposed in python by bpy,
722 * it expects them to be registered from python and use the native implementation.
723 * However, the standard socket types below are not registering these functions from python,
724 * so in order to call them in py scripts we need to overload and
725 * replace them with plain C callbacks.
726 * These types provide a usable basis for socket types defined in C.
727 */
728
729 StructRNA *srna;
730 PropertyRNA *parm;
731 FunctionRNA *func;
732
733 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
734
735 srna = RNA_def_struct(brna, "NodeSocketStandard", "NodeSocket");
736 RNA_def_struct_sdna(srna, "bNodeSocket");
737
738 /* draw socket */
739 func = RNA_def_function(srna, "draw", "rna_NodeSocketStandard_draw");
741 RNA_def_function_ui_description(func, "Draw socket");
742 parm = RNA_def_pointer(func, "context", "Context", "", "");
744 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
745 RNA_def_property_struct_type(parm, "UILayout");
746 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
748 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
749 RNA_def_property_struct_type(parm, "Node");
750 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
752 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
753 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
754 // RNA_def_property_string_default(parm, "");
756
757 func = RNA_def_function(srna, "draw_color", "rna_NodeSocketStandard_draw_color");
759 RNA_def_function_ui_description(func, "Color of the socket icon");
760 parm = RNA_def_pointer(func, "context", "Context", "", "");
762 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
763 RNA_def_property_struct_type(parm, "Node");
764 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
766 parm = RNA_def_float_array(
767 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
768 RNA_def_function_output(func, parm);
769
770 func = RNA_def_function(srna, "draw_color_simple", "rna_NodeSocketStandard_draw_color_simple");
771 RNA_def_function_ui_description(func, "Color of the socket icon");
773 parm = RNA_def_float_array(
774 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
775 RNA_def_function_output(func, parm);
776}
777
778/* Common functions for all builtin socket interface types. */
780{
781 FunctionRNA *func;
782 PropertyRNA *parm;
783
784 /* Override for functions, invoking the typeinfo callback directly
785 * instead of expecting an existing RNA registered function implementation.
786 */
787
788 func = RNA_def_function(srna, "draw", "rna_NodeTreeInterfaceSocket_draw_builtin");
790 RNA_def_function_ui_description(func, "Draw interface socket settings");
791 parm = RNA_def_pointer(func, "context", "Context", "", "");
793 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
794 RNA_def_property_struct_type(parm, "UILayout");
795 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
797
798 func = RNA_def_function(srna, "init_socket", "rna_NodeTreeInterfaceSocket_init_socket_builtin");
799 RNA_def_function_ui_description(func, "Initialize a node socket instance");
801 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the socket to initialize");
803 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Socket to initialize");
805 parm = RNA_def_string(
806 func, "data_path", nullptr, 0, "Data Path", "Path to specialized socket data");
808
809 func = RNA_def_function(srna, "from_socket", "rna_NodeTreeInterfaceSocket_from_socket_builtin");
810 RNA_def_function_ui_description(func, "Setup template parameters from an existing socket");
812 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the original socket");
814 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Original socket");
816}
817
819 const char *identifier,
820 PropertySubType subtype)
821{
822 StructRNA *srna;
823 PropertyRNA *prop;
824
825 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
826 RNA_def_struct_ui_text(srna, "Float Node Socket", "Floating-point number socket of a node");
827 RNA_def_struct_sdna(srna, "bNodeSocket");
828
829 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "default_value");
830
831 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
832 RNA_def_property_float_sdna(prop, nullptr, "value");
833 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_float_range");
834 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_float_default");
835 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
836 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
838
839 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
840}
841
843 const char *identifier,
844 PropertySubType subtype)
845{
846 StructRNA *srna;
847 PropertyRNA *prop;
848 float value_default;
849
850 /* choose sensible common default based on subtype */
851 switch (subtype) {
852 case PROP_FACTOR:
853 value_default = 1.0f;
854 break;
855 case PROP_PERCENTAGE:
856 value_default = 100.0f;
857 break;
858 default:
859 value_default = 0.0f;
860 break;
861 }
862
863 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
865 srna, "Float Node Socket Interface", "Floating-point number socket of a node");
866 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
867
868 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "socket_data");
869
870 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
872 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
874 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_subtype_itemf");
876 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
877 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
878
879 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
880 RNA_def_property_float_sdna(prop, nullptr, "value");
881 RNA_def_property_float_default(prop, value_default);
884 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_default_value_range");
885 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
886 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
887
888 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
889 RNA_def_property_float_sdna(prop, nullptr, "min");
891 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
892 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
893
894 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
895 RNA_def_property_float_sdna(prop, nullptr, "max");
897 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
898 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
899
900 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
901
903}
904
906 const char *identifier,
907 PropertySubType subtype)
908{
909 StructRNA *srna;
910 PropertyRNA *prop;
911 int value_default;
912
913 /* choose sensible common default based on subtype */
914 switch (subtype) {
915 case PROP_FACTOR:
916 value_default = 1;
917 break;
918 case PROP_PERCENTAGE:
919 value_default = 100;
920 break;
921 default:
922 value_default = 0;
923 break;
924 }
925
926 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
927 RNA_def_struct_ui_text(srna, "Integer Node Socket", "Integer number socket of a node");
928 RNA_def_struct_sdna(srna, "bNodeSocket");
929
930 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "default_value");
931
932 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
933 RNA_def_property_int_sdna(prop, nullptr, "value");
934 RNA_def_property_int_default(prop, value_default);
935 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_int_range");
936 RNA_def_property_int_default_func(prop, "rna_NodeSocketStandard_int_default");
937 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
938 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
940
941 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
942}
943
945 const char *identifier,
946 PropertySubType subtype)
947{
948 StructRNA *srna;
949 PropertyRNA *prop;
950
951 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
952 RNA_def_struct_ui_text(srna, "Integer Node Socket Interface", "Integer number socket of a node");
953 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
954
955 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "socket_data");
956
957 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
959 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
961 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_subtype_itemf");
963 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
964 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
965
966 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
967 RNA_def_property_int_sdna(prop, nullptr, "value");
970 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_default_value_range");
971 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
972 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
973
974 prop = RNA_def_property(srna, "min_value", PROP_INT, PROP_NONE);
975 RNA_def_property_int_sdna(prop, nullptr, "min");
977 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
978 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
979
980 prop = RNA_def_property(srna, "max_value", PROP_INT, PROP_NONE);
981 RNA_def_property_int_sdna(prop, nullptr, "max");
983 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
984 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
985
986 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
987
989}
990
991static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier)
992{
993 StructRNA *srna;
994 PropertyRNA *prop;
995
996 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
997 RNA_def_struct_ui_text(srna, "Boolean Node Socket", "Boolean value socket of a node");
998 RNA_def_struct_sdna(srna, "bNodeSocket");
999
1000 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "default_value");
1001
1002 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1003 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1004 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1005 RNA_def_property_boolean_default_func(prop, "rna_NodeSocketStandard_boolean_default");
1006 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1008
1009 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1010}
1011
1012static void rna_def_node_socket_interface_bool(BlenderRNA *brna, const char *identifier)
1013{
1014 StructRNA *srna;
1015 PropertyRNA *prop;
1016
1017 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1018 RNA_def_struct_ui_text(srna, "Boolean Node Socket Interface", "Boolean value socket of a node");
1019 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1020
1021 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "socket_data");
1022
1023 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1024 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1026 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1027 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1028
1029 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1030
1032}
1033
1034static void rna_def_node_socket_rotation(BlenderRNA *brna, const char *identifier)
1035{
1036 StructRNA *srna;
1037 PropertyRNA *prop;
1038
1039 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1040 RNA_def_struct_ui_text(srna, "Rotation Node Socket", "Rotation value socket of a node");
1041 RNA_def_struct_sdna(srna, "bNodeSocket");
1042
1043 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "default_value");
1044
1045 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1046 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1047 // RNA_def_property_array(prop, 3);
1048 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1049 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1051
1052 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1053}
1054
1055static void rna_def_node_socket_interface_rotation(BlenderRNA *brna, const char *identifier)
1056{
1057 StructRNA *srna;
1058 PropertyRNA *prop;
1059
1060 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1062 srna, "Rotation Node Socket Interface", "Rotation value socket of a node");
1063 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1064
1065 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "socket_data");
1066
1067 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1068 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1070 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1071 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1072
1073 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1074
1076}
1077
1078static void rna_def_node_socket_matrix(BlenderRNA *brna, const char *identifier)
1079{
1080 StructRNA *srna;
1081
1082 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1083 RNA_def_struct_ui_text(srna, "Matrix Node Socket", "Matrix value socket of a node");
1084 RNA_def_struct_sdna(srna, "bNodeSocket");
1085
1086 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1087}
1088
1089static void rna_def_node_socket_interface_matrix(BlenderRNA *brna, const char *identifier)
1090{
1091 StructRNA *srna;
1092
1093 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1094 RNA_def_struct_ui_text(srna, "Matrix Node Socket Interface", "Matrix value socket of a node");
1095 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1096
1097 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1098
1100}
1101
1103 const char *identifier,
1104 PropertySubType subtype)
1105{
1106 StructRNA *srna;
1107 PropertyRNA *prop;
1108
1109 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1110 RNA_def_struct_ui_text(srna, "Vector Node Socket", "3D vector socket of a node");
1111 RNA_def_struct_sdna(srna, "bNodeSocket");
1112
1113 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "default_value");
1114
1115 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1116 RNA_def_property_float_sdna(prop, nullptr, "value");
1117 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_vector_default");
1118 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_vector_range");
1119 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1120 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1122
1123 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1124}
1125
1127 const char *identifier,
1128 PropertySubType subtype)
1129{
1130 StructRNA *srna;
1131 PropertyRNA *prop;
1132
1133 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1134 RNA_def_struct_ui_text(srna, "Vector Node Socket Interface", "3D vector socket of a node");
1135 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1136
1137 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "socket_data");
1138
1139 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1141 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1143 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_subtype_itemf");
1145 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1146 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1147
1148 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1149 RNA_def_property_float_sdna(prop, nullptr, "value");
1152 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_default_value_range");
1153 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1154 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1155
1156 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
1157 RNA_def_property_float_sdna(prop, nullptr, "min");
1159 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1160 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1161
1162 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
1163 RNA_def_property_float_sdna(prop, nullptr, "max");
1165 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1166 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1167
1168 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1169
1171}
1172
1173static void rna_def_node_socket_color(BlenderRNA *brna, const char *identifier)
1174{
1175 StructRNA *srna;
1176 PropertyRNA *prop;
1177
1178 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1179 RNA_def_struct_ui_text(srna, "Color Node Socket", "RGBA color socket of a node");
1180 RNA_def_struct_sdna(srna, "bNodeSocket");
1181
1182 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "default_value");
1183
1184 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1185 RNA_def_property_float_sdna(prop, nullptr, "value");
1186 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1187 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_color_default");
1188 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1190
1191 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1192}
1193
1194static void rna_def_node_socket_interface_color(BlenderRNA *brna, const char *identifier)
1195{
1196 StructRNA *srna;
1197 PropertyRNA *prop;
1198
1199 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1200 RNA_def_struct_ui_text(srna, "Color Node Socket Interface", "RGBA color socket of a node");
1201 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1202
1203 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "socket_data");
1204
1205 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1206 RNA_def_property_float_sdna(prop, nullptr, "value");
1208 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1209 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1210
1211 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1212
1214}
1215
1217 const char *identifier,
1218 PropertySubType subtype)
1219{
1220 StructRNA *srna;
1221 PropertyRNA *prop;
1222
1223 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1224 RNA_def_struct_ui_text(srna, "String Node Socket", "String socket of a node");
1225 RNA_def_struct_sdna(srna, "bNodeSocket");
1226
1227 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "default_value");
1228
1229 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1230 RNA_def_property_string_sdna(prop, nullptr, "value");
1231 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1232 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1234
1235 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1236}
1237
1239 const char *identifier,
1240 PropertySubType subtype)
1241{
1242 StructRNA *srna;
1243 PropertyRNA *prop;
1244
1245 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1246 RNA_def_struct_ui_text(srna, "String Node Socket Interface", "String socket of a node");
1247 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1248
1249 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "socket_data");
1250
1251 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1253 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1255 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketString_subtype_itemf");
1257 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1258 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1259
1260 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1261 RNA_def_property_string_sdna(prop, nullptr, "value");
1263 // TODO: Do I need to call RNA_def_property_string_funcs() ?
1264 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1265 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1266
1267 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1268
1270}
1271
1272static void rna_def_node_socket_menu(BlenderRNA *brna, const char *identifier)
1273{
1274 StructRNA *srna;
1275 PropertyRNA *prop;
1276
1277 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1278 RNA_def_struct_ui_text(srna, "Menu Node Socket", "Menu socket of a node");
1279 RNA_def_struct_sdna(srna, "bNodeSocket");
1280
1281 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "default_value");
1282
1283 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1284 RNA_def_property_enum_sdna(prop, nullptr, "value");
1286 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_socket_menu_itemf");
1287 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1288 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1290
1291 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1292}
1293
1294static void rna_def_node_socket_interface_menu(BlenderRNA *brna, const char *identifier)
1295{
1296 StructRNA *srna;
1297 PropertyRNA *prop;
1298
1299 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1300 RNA_def_struct_ui_text(srna, "Menu Node Socket Interface", "Menu socket of a node");
1301 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1302
1303 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "socket_data");
1304
1305 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1306 RNA_def_property_enum_sdna(prop, nullptr, "value");
1308 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_tree_interface_socket_menu_itemf");
1310 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1311 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1312
1313 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1314
1316}
1317
1318static void rna_def_node_socket_shader(BlenderRNA *brna, const char *identifier)
1319{
1320 StructRNA *srna;
1321
1322 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1323 RNA_def_struct_ui_text(srna, "Shader Node Socket", "Shader socket of a node");
1324 RNA_def_struct_sdna(srna, "bNodeSocket");
1325}
1326
1327static void rna_def_node_socket_interface_shader(BlenderRNA *brna, const char *identifier)
1328{
1329 StructRNA *srna;
1330
1331 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1332 RNA_def_struct_ui_text(srna, "Shader Node Socket Interface", "Shader socket of a node");
1333 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1334
1336}
1337
1338static void rna_def_node_socket_object(BlenderRNA *brna, const char *identifier)
1339{
1340 StructRNA *srna;
1341 PropertyRNA *prop;
1342
1343 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1344 RNA_def_struct_ui_text(srna, "Object Node Socket", "Object socket of a node");
1345 RNA_def_struct_sdna(srna, "bNodeSocket");
1346
1347 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "default_value");
1348
1349 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1350 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1351 RNA_def_property_struct_type(prop, "Object");
1352 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1354 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1357}
1358
1359static void rna_def_node_socket_interface_object(BlenderRNA *brna, const char *identifier)
1360{
1361 StructRNA *srna;
1362 PropertyRNA *prop;
1363
1364 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1365 RNA_def_struct_ui_text(srna, "Object Node Socket Interface", "Object socket of a node");
1366 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1367
1368 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "socket_data");
1369
1370 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1371 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1372 RNA_def_property_struct_type(prop, "Object");
1373 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1374 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1377
1379}
1380
1381static void rna_def_node_socket_image(BlenderRNA *brna, const char *identifier)
1382{
1383 StructRNA *srna;
1384 PropertyRNA *prop;
1385
1386 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1387 RNA_def_struct_ui_text(srna, "Image Node Socket", "Image socket of a node");
1388 RNA_def_struct_sdna(srna, "bNodeSocket");
1389
1390 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "default_value");
1391
1392 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1393 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1394 RNA_def_property_struct_type(prop, "Image");
1395 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1397 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1400}
1401
1402static void rna_def_node_socket_interface_image(BlenderRNA *brna, const char *identifier)
1403{
1404 StructRNA *srna;
1405 PropertyRNA *prop;
1406
1407 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1408 RNA_def_struct_ui_text(srna, "Image Node Socket Interface", "Image socket of a node");
1409 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1410
1411 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "socket_data");
1412
1413 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1414 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1415 RNA_def_property_struct_type(prop, "Image");
1416 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1417 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1420
1422}
1423
1424static void rna_def_node_socket_geometry(BlenderRNA *brna, const char *identifier)
1425{
1426 StructRNA *srna;
1427
1428 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1429 RNA_def_struct_ui_text(srna, "Geometry Node Socket", "Geometry socket of a node");
1430 RNA_def_struct_sdna(srna, "bNodeSocket");
1431}
1432
1433static void rna_def_node_socket_interface_geometry(BlenderRNA *brna, const char *identifier)
1434{
1435 StructRNA *srna;
1436
1437 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1438 RNA_def_struct_ui_text(srna, "Geometry Node Socket Interface", "Geometry socket of a node");
1439 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1440
1442}
1443
1444static void rna_def_node_socket_collection(BlenderRNA *brna, const char *identifier)
1445{
1446 StructRNA *srna;
1447 PropertyRNA *prop;
1448
1449 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1450 RNA_def_struct_ui_text(srna, "Collection Node Socket", "Collection socket of a node");
1451 RNA_def_struct_sdna(srna, "bNodeSocket");
1452
1453 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "default_value");
1454
1455 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1456 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1457 RNA_def_property_struct_type(prop, "Collection");
1458 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1460 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1463}
1464
1465static void rna_def_node_socket_interface_collection(BlenderRNA *brna, const char *identifier)
1466{
1467 StructRNA *srna;
1468 PropertyRNA *prop;
1469
1470 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1471 RNA_def_struct_ui_text(srna, "Collection Node Socket Interface", "Collection socket of a node");
1472 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1473
1474 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "socket_data");
1475
1476 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1477 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1478 RNA_def_property_struct_type(prop, "Collection");
1479 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1480 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1483
1485}
1486
1487static void rna_def_node_socket_texture(BlenderRNA *brna, const char *identifier)
1488{
1489 StructRNA *srna;
1490 PropertyRNA *prop;
1491
1492 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1493 RNA_def_struct_ui_text(srna, "Texture Node Socket", "Texture socket of a node");
1494 RNA_def_struct_sdna(srna, "bNodeSocket");
1495
1496 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "default_value");
1497
1498 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1499 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1500 RNA_def_property_struct_type(prop, "Texture");
1501 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1503 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1506}
1507
1508static void rna_def_node_socket_interface_texture(BlenderRNA *brna, const char *identifier)
1509{
1510 StructRNA *srna;
1511 PropertyRNA *prop;
1512
1513 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1514 RNA_def_struct_ui_text(srna, "Texture Node Socket Interface", "Texture socket of a node");
1515 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1516
1517 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "socket_data");
1518
1519 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1520 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1521 RNA_def_property_struct_type(prop, "Texture");
1522 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1523 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1526
1528}
1529
1530static void rna_def_node_socket_material(BlenderRNA *brna, const char *identifier)
1531{
1532 StructRNA *srna;
1533 PropertyRNA *prop;
1534
1535 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1536 RNA_def_struct_ui_text(srna, "Material Node Socket", "Material socket of a node");
1537 RNA_def_struct_sdna(srna, "bNodeSocket");
1538
1539 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "default_value");
1540
1541 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1542 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1543 RNA_def_property_struct_type(prop, "Material");
1544 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1546 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1549}
1550
1551static void rna_def_node_socket_interface_material(BlenderRNA *brna, const char *identifier)
1552{
1553 StructRNA *srna;
1554 PropertyRNA *prop;
1555
1556 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1557 RNA_def_struct_ui_text(srna, "Material Node Socket Interface", "Material socket of a node");
1558 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1559
1560 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "socket_data");
1561
1562 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1563 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1564 RNA_def_property_struct_type(prop, "Material");
1566 prop, nullptr, nullptr, nullptr, "rna_NodeTreeInterfaceSocketMaterial_default_value_poll");
1567 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1568 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocket_value_update");
1571
1573}
1574
1575static void rna_def_node_socket_virtual(BlenderRNA *brna, const char *identifier)
1576{
1577 StructRNA *srna;
1578
1579 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1580 RNA_def_struct_ui_text(srna, "Virtual Node Socket", "Virtual socket of a node");
1581 RNA_def_struct_sdna(srna, "bNodeSocket");
1582}
1583
1584/* Info for generating static subtypes. */
1592
1593/* NOTE: Socket and interface subtypes could be defined from a single central list,
1594 * but makesrna cannot have a dependency on BKE, so this list would have to live in RNA itself,
1595 * with BKE etc. accessing the RNA API to get the subtypes info. */
1597 {"NodeSocketFloat", "NodeTreeInterfaceSocketFloat", SOCK_FLOAT, PROP_NONE},
1598 {"NodeSocketFloatUnsigned", "NodeTreeInterfaceSocketFloatUnsigned", SOCK_FLOAT, PROP_UNSIGNED},
1599 {"NodeSocketFloatPercentage",
1600 "NodeTreeInterfaceSocketFloatPercentage",
1601 SOCK_FLOAT,
1603 {"NodeSocketFloatFactor", "NodeTreeInterfaceSocketFloatFactor", SOCK_FLOAT, PROP_FACTOR},
1604 {"NodeSocketFloatAngle", "NodeTreeInterfaceSocketFloatAngle", SOCK_FLOAT, PROP_ANGLE},
1605 {"NodeSocketFloatTime", "NodeTreeInterfaceSocketFloatTime", SOCK_FLOAT, PROP_TIME},
1606 {"NodeSocketFloatTimeAbsolute",
1607 "NodeTreeInterfaceSocketFloatTimeAbsolute",
1608 SOCK_FLOAT,
1610 {"NodeSocketFloatDistance", "NodeTreeInterfaceSocketFloatDistance", SOCK_FLOAT, PROP_DISTANCE},
1611 {"NodeSocketFloatWavelength",
1612 "NodeTreeInterfaceSocketFloatWavelength",
1613 SOCK_FLOAT,
1615 {"NodeSocketFloatColorTemperature",
1616 "NodeTreeInterfaceSocketFloatColorTemperature",
1617 SOCK_FLOAT,
1619 {"NodeSocketFloatFrequency",
1620 "NodeTreeInterfaceSocketFloatFrequency",
1621 SOCK_FLOAT,
1623 {"NodeSocketInt", "NodeTreeInterfaceSocketInt", SOCK_INT, PROP_NONE},
1624 {"NodeSocketIntUnsigned", "NodeTreeInterfaceSocketIntUnsigned", SOCK_INT, PROP_UNSIGNED},
1625 {"NodeSocketIntPercentage", "NodeTreeInterfaceSocketIntPercentage", SOCK_INT, PROP_PERCENTAGE},
1626 {"NodeSocketIntFactor", "NodeTreeInterfaceSocketIntFactor", SOCK_INT, PROP_FACTOR},
1627 {"NodeSocketBool", "NodeTreeInterfaceSocketBool", SOCK_BOOLEAN, PROP_NONE},
1628 {"NodeSocketRotation", "NodeTreeInterfaceSocketRotation", SOCK_ROTATION, PROP_NONE},
1629 {"NodeSocketMatrix", "NodeTreeInterfaceSocketMatrix", SOCK_MATRIX, PROP_NONE},
1630 {"NodeSocketVector", "NodeTreeInterfaceSocketVector", SOCK_VECTOR, PROP_NONE},
1631 {"NodeSocketVectorTranslation",
1632 "NodeTreeInterfaceSocketVectorTranslation",
1635 {"NodeSocketVectorDirection",
1636 "NodeTreeInterfaceSocketVectorDirection",
1639 {"NodeSocketVectorVelocity",
1640 "NodeTreeInterfaceSocketVectorVelocity",
1643 {"NodeSocketVectorAcceleration",
1644 "NodeTreeInterfaceSocketVectorAcceleration",
1647 {"NodeSocketVectorEuler", "NodeTreeInterfaceSocketVectorEuler", SOCK_VECTOR, PROP_EULER},
1648 {"NodeSocketVectorXYZ", "NodeTreeInterfaceSocketVectorXYZ", SOCK_VECTOR, PROP_XYZ},
1649 {"NodeSocketColor", "NodeTreeInterfaceSocketColor", SOCK_RGBA, PROP_NONE},
1650 {"NodeSocketString", "NodeTreeInterfaceSocketString", SOCK_STRING, PROP_NONE},
1651 {"NodeSocketStringFilePath",
1652 "NodeTreeInterfaceSocketStringFilePath",
1655 {"NodeSocketShader", "NodeTreeInterfaceSocketShader", SOCK_SHADER, PROP_NONE},
1656 {"NodeSocketObject", "NodeTreeInterfaceSocketObject", SOCK_OBJECT, PROP_NONE},
1657 {"NodeSocketImage", "NodeTreeInterfaceSocketImage", SOCK_IMAGE, PROP_NONE},
1658 {"NodeSocketGeometry", "NodeTreeInterfaceSocketGeometry", SOCK_GEOMETRY, PROP_NONE},
1659 {"NodeSocketCollection", "NodeTreeInterfaceSocketCollection", SOCK_COLLECTION, PROP_NONE},
1660 {"NodeSocketTexture", "NodeTreeInterfaceSocketTexture", SOCK_TEXTURE, PROP_NONE},
1661 {"NodeSocketMaterial", "NodeTreeInterfaceSocketMaterial", SOCK_MATERIAL, PROP_NONE},
1662 {"NodeSocketMenu", "NodeTreeInterfaceSocketMenu", SOCK_MENU, PROP_NONE},
1663};
1664
1666{
1668 const char *identifier = info.socket_identifier;
1669
1670 switch (info.type) {
1671 case SOCK_FLOAT:
1672 rna_def_node_socket_float(brna, identifier, info.subtype);
1673 break;
1674 case SOCK_INT:
1675 rna_def_node_socket_int(brna, identifier, info.subtype);
1676 break;
1677 case SOCK_BOOLEAN:
1678 rna_def_node_socket_bool(brna, identifier);
1679 break;
1680 case SOCK_ROTATION:
1681 rna_def_node_socket_rotation(brna, identifier);
1682 break;
1683 case SOCK_MATRIX:
1684 rna_def_node_socket_matrix(brna, identifier);
1685 break;
1686 case SOCK_VECTOR:
1687 rna_def_node_socket_vector(brna, identifier, info.subtype);
1688 break;
1689 case SOCK_RGBA:
1690 rna_def_node_socket_color(brna, identifier);
1691 break;
1692 case SOCK_STRING:
1693 rna_def_node_socket_string(brna, identifier, info.subtype);
1694 break;
1695 case SOCK_SHADER:
1696 rna_def_node_socket_shader(brna, identifier);
1697 break;
1698 case SOCK_OBJECT:
1699 rna_def_node_socket_object(brna, identifier);
1700 break;
1701 case SOCK_IMAGE:
1702 rna_def_node_socket_image(brna, identifier);
1703 break;
1704 case SOCK_GEOMETRY:
1705 rna_def_node_socket_geometry(brna, identifier);
1706 break;
1707 case SOCK_COLLECTION:
1708 rna_def_node_socket_collection(brna, identifier);
1709 break;
1710 case SOCK_TEXTURE:
1711 rna_def_node_socket_texture(brna, identifier);
1712 break;
1713 case SOCK_MATERIAL:
1714 rna_def_node_socket_material(brna, identifier);
1715 break;
1716 case SOCK_MENU:
1717 rna_def_node_socket_menu(brna, identifier);
1718 break;
1719
1720 case SOCK_CUSTOM:
1721 break;
1722 }
1723 }
1724
1725 rna_def_node_socket_virtual(brna, "NodeSocketVirtual");
1726}
1727
1728/* NOTE: interface items are defined outside this file.
1729 * The subtypes must be defined after the base type, so this function
1730 * is called from the interface rna file to ensure correct order. */
1732{
1734 const char *identifier = info.interface_identifier;
1735
1736 switch (info.type) {
1737 case SOCK_FLOAT:
1738 rna_def_node_socket_interface_float(brna, identifier, info.subtype);
1739 break;
1740 case SOCK_INT:
1741 rna_def_node_socket_interface_int(brna, identifier, info.subtype);
1742 break;
1743 case SOCK_BOOLEAN:
1744 rna_def_node_socket_interface_bool(brna, identifier);
1745 break;
1746 case SOCK_ROTATION:
1748 break;
1749 case SOCK_MATRIX:
1750 rna_def_node_socket_interface_matrix(brna, identifier);
1751 break;
1752 case SOCK_VECTOR:
1753 rna_def_node_socket_interface_vector(brna, identifier, info.subtype);
1754 break;
1755 case SOCK_RGBA:
1756 rna_def_node_socket_interface_color(brna, identifier);
1757 break;
1758 case SOCK_STRING:
1759 rna_def_node_socket_interface_string(brna, identifier, info.subtype);
1760 break;
1761 case SOCK_MENU:
1762 rna_def_node_socket_interface_menu(brna, identifier);
1763 break;
1764 case SOCK_SHADER:
1765 rna_def_node_socket_interface_shader(brna, identifier);
1766 break;
1767 case SOCK_OBJECT:
1768 rna_def_node_socket_interface_object(brna, identifier);
1769 break;
1770 case SOCK_IMAGE:
1771 rna_def_node_socket_interface_image(brna, identifier);
1772 break;
1773 case SOCK_GEOMETRY:
1775 break;
1776 case SOCK_COLLECTION:
1778 break;
1779 case SOCK_TEXTURE:
1780 rna_def_node_socket_interface_texture(brna, identifier);
1781 break;
1782 case SOCK_MATERIAL:
1784 break;
1785
1786 case SOCK_CUSTOM:
1787 break;
1788 }
1789 }
1790}
1791
1799
1800#endif
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
#define NODE_CUSTOM
Definition BKE_node.hh:799
void BKE_ntree_update_tag_socket_property(bNodeTree *ntree, bNodeSocket *socket)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BLI_kdtree_nd_ free(KDTree *tree)
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
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_BOOLEAN
@ SOCK_MATERIAL
@ SOCK_SHADER
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_IMAGE
@ SOCK_COLLECTION
@ SOCK_CUSTOM
@ SOCK_GEOMETRY
@ SOCK_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
void ED_node_tree_propagate_change(const bContext *C, Main *bmain, bNodeTree *ntree)
Definition node_edit.cc:492
void ED_init_custom_node_socket_type(blender::bke::bNodeSocketType *stype)
Definition drawnode.cc:1102
const EnumPropertyItem * RNA_node_enum_definition_itemf(const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
@ PARM_RNAPTR
Definition RNA_types.hh:399
@ PARM_REQUIRED
Definition RNA_types.hh:397
@ FUNC_USE_SELF_TYPE
Definition RNA_types.hh:675
@ FUNC_NO_SELF
Definition RNA_types.hh:673
@ FUNC_REGISTER
Definition RNA_types.hh:687
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:667
@ FUNC_REGISTER_OPTIONAL
Definition RNA_types.hh:689
@ FUNC_ALLOW_WRITE
Definition RNA_types.hh:695
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
Definition RNA_types.hh:746
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
void(*)(void *data) StructFreeFunc
Definition RNA_types.hh:751
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
Definition RNA_types.hh:747
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:355
@ PROPOVERRIDE_NO_COMPARISON
Definition RNA_types.hh:363
PropertyFlag
Definition RNA_types.hh:201
@ PROP_CONTEXT_UPDATE
Definition RNA_types.hh:296
@ PROP_ANIMATABLE
Definition RNA_types.hh:220
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_REGISTER_OPTIONAL
Definition RNA_types.hh:301
@ PROP_NEVER_NULL
Definition RNA_types.hh:266
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:328
@ PROP_REGISTER
Definition RNA_types.hh:300
@ PROP_PTR_NO_OWNERSHIP
Definition RNA_types.hh:284
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:253
PropertySubType
Definition RNA_types.hh:135
@ PROP_TIME
Definition RNA_types.hh:156
@ PROP_DIRECTION
Definition RNA_types.hh:165
@ PROP_XYZ
Definition RNA_types.hh:172
@ PROP_DISTANCE
Definition RNA_types.hh:159
@ PROP_ACCELERATION
Definition RNA_types.hh:167
@ PROP_COLOR
Definition RNA_types.hh:163
@ PROP_ANGLE
Definition RNA_types.hh:155
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:157
@ PROP_EULER
Definition RNA_types.hh:169
@ PROP_COLOR_TEMPERATURE
Definition RNA_types.hh:193
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_PERCENTAGE
Definition RNA_types.hh:153
@ PROP_FREQUENCY
Definition RNA_types.hh:195
@ PROP_FACTOR
Definition RNA_types.hh:154
@ PROP_TRANSLATION
Definition RNA_types.hh:164
@ PROP_UNSIGNED
Definition RNA_types.hh:152
@ PROP_FILEPATH
Definition RNA_types.hh:139
@ PROP_VELOCITY
Definition RNA_types.hh:166
@ PROP_WAVELENGTH
Definition RNA_types.hh:190
#define NC_NODE
Definition WM_types.hh:361
#define ND_DISPLAY
Definition WM_types.hh:458
#define NA_EDITED
Definition WM_types.hh:550
#define ND_NODE_GIZMO
Definition WM_types.hh:482
OperationNode * node
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
Definition node.cc:2082
void node_unregister_socket_type(bNodeSocketType *stype)
Definition node.cc:1796
bNodeSocketType * node_socket_type_find(const char *idname)
Definition node.cc:1763
void node_find_node(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_sockindex)
Definition node.cc:2442
void node_register_socket_type(bNodeSocketType *stype)
Definition node.cc:1787
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(ID *id, StructRNA *type, void *data)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
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_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
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_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_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_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_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_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_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_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)
static void rna_def_node_socket_interface_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
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_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_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
Definition rna_rna.cc:29
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
Definition rna_rna.cc:35
#define min(a, b)
Definition sort.c:32
#define FLT_MAX
Definition stdcycles.h:14
const char * identifier
Definition RNA_types.hh:506
const char * name
Definition RNA_types.hh:510
const char * description
Definition RNA_types.hh:512
StructRNA * srna
Definition RNA_types.hh:780
StructCallbackFunc call
Definition RNA_types.hh:781
StructFreeFunc free
Definition RNA_types.hh:782
Definition DNA_ID.h:413
ID * owner_id
Definition RNA_types.hh:40
void * data
Definition RNA_types.hh:42
IDProperty * prop
bNodeSocketRuntimeHandle * runtime
bNodeSocketTypeHandle * typeinfo
void * default_value
Defines a socket type.
Definition BKE_node.hh:151
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
Definition BKE_node.hh:161
void(* free_self)(bNodeSocketType *stype)
Definition BKE_node.hh:188
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
Definition BKE_node.hh:162
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, const char *text)
Definition BKE_node.hh:159
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4126