Blender V4.5
NOD_socket_declarations.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
8
9#include "RNA_types.hh"
10
11#include "BLI_color.hh"
14
15namespace blender::nodes::decl {
16
17class FloatBuilder;
18
19class Float : public SocketDeclaration {
20 public:
22
23 float default_value = 0.0f;
27
29
31
32 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
33 bool matches(const bNodeSocket &socket) const override;
34 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
35 bool can_connect(const bNodeSocket &socket) const override;
36};
37
39 public:
40 FloatBuilder &min(float value);
41 FloatBuilder &max(float value);
42 FloatBuilder &default_value(float value);
44};
45
46class IntBuilder;
47
48class Int : public SocketDeclaration {
49 public:
51
56
57 friend IntBuilder;
58
60
61 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
62 bool matches(const bNodeSocket &socket) const override;
63 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
64 bool can_connect(const bNodeSocket &socket) const override;
65};
66
68 public:
69 IntBuilder &min(int value);
70 IntBuilder &max(int value);
71 IntBuilder &default_value(int value);
73};
74
75class VectorBuilder;
76
77class Vector : public SocketDeclaration {
78 public:
80
81 float4 default_value = {0, 0, 0, 0};
84 int dimensions = 3;
86
88
90
91 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
92 bool matches(const bNodeSocket &socket) const override;
93 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
94 bool can_connect(const bNodeSocket &socket) const override;
95};
96
108
109class BoolBuilder;
110
111class Bool : public SocketDeclaration {
112 public:
114
115 bool default_value = false;
117
119
120 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
121 bool matches(const bNodeSocket &socket) const override;
122 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
123 bool can_connect(const bNodeSocket &socket) const override;
124};
125
127 public:
128 BoolBuilder &default_value(bool value);
129};
130
131class ColorBuilder;
132
133class Color : public SocketDeclaration {
134 public:
136
137 ColorGeometry4f default_value{0.8f, 0.8f, 0.8f, 1.0f};
138
140
142
143 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
144 bool matches(const bNodeSocket &socket) const override;
145 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
146 bool can_connect(const bNodeSocket &socket) const override;
147};
148
150 public:
152};
153
154class RotationBuilder;
155
157 public:
159
161
163
165
166 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
167 bool matches(const bNodeSocket &socket) const override;
168 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
169 bool can_connect(const bNodeSocket &socket) const override;
170};
171
173 public:
175};
176
177class MatrixBuilder;
178
179class Matrix : public SocketDeclaration {
180 public:
182
184
186
187 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
188 bool matches(const bNodeSocket &socket) const override;
189 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
190 bool can_connect(const bNodeSocket &socket) const override;
191};
192
193class MatrixBuilder : public SocketDeclarationBuilder<Matrix> {};
194
195class StringBuilder;
196
197class String : public SocketDeclaration {
198 public:
200
201 std::string default_value;
203 std::optional<std::string> path_filter;
204
206
208
209 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
210 bool matches(const bNodeSocket &socket) const override;
211 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
212 bool can_connect(const bNodeSocket &socket) const override;
213};
214
216 public:
217 StringBuilder &default_value(const std::string value);
219 StringBuilder &path_filter(std::optional<std::string> filter);
220};
221
222class MenuBuilder;
223
224class Menu : public SocketDeclaration {
225 public:
227
229 bool is_expanded = false;
230
232
234
235 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
236 bool matches(const bNodeSocket &socket) const override;
237 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
238 bool can_connect(const bNodeSocket &socket) const override;
239};
240
242 public:
244
246 MenuBuilder &expanded(bool value = true);
247};
248
249class BundleBuilder;
250
251class Bundle : public SocketDeclaration {
252 public:
254
256
258
259 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
260 bool matches(const bNodeSocket &socket) const override;
261 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
262 bool can_connect(const bNodeSocket &socket) const override;
263};
264
265class BundleBuilder : public SocketDeclarationBuilder<Bundle> {};
266
267class ClosureBuilder;
268
270 public:
272
274
276
277 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
278 bool matches(const bNodeSocket &socket) const override;
279 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
280 bool can_connect(const bNodeSocket &socket) const override;
281};
282
283class ClosureBuilder : public SocketDeclarationBuilder<Closure> {};
284
286 public:
287 const char *idname;
293 std::function<ID *(const bNode &node)> default_value_fn;
294
295 IDSocketDeclaration(const char *idname);
296
297 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
298 bool matches(const bNodeSocket &socket) const override;
299 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
300 bool can_connect(const bNodeSocket &socket) const override;
301};
302
303template<typename T> class IDSocketDeclarationBuilder : public SocketDeclarationBuilder<T> {
304 public:
305 IDSocketDeclarationBuilder &default_value_fn(std::function<ID *(const bNode &node)> fn)
306 {
307 this->decl_->default_value_fn = std::move(fn);
308 return *this;
309 }
310};
311
320
329
338
347
349 public:
351
353
354 Image();
355};
356
357class ShaderBuilder;
358
359class Shader : public SocketDeclaration {
360 public:
362
364
366
367 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
368 bool matches(const bNodeSocket &socket) const override;
369 bool can_connect(const bNodeSocket &socket) const override;
370};
371
372class ShaderBuilder : public SocketDeclarationBuilder<Shader> {};
373
374class ExtendBuilder;
375
376class Extend : public SocketDeclaration {
377 private:
378 friend ExtendBuilder;
379
380 public:
382
383 using Builder = ExtendBuilder;
384
385 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
386 bool matches(const bNodeSocket &socket) const override;
387 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
388 bool can_connect(const bNodeSocket &socket) const override;
389};
390
391class ExtendBuilder : public SocketDeclarationBuilder<Extend> {};
392
394
395class Custom : public SocketDeclaration {
396 public:
398
400
402
403 const char *idname_;
404 std::function<void(bNode &node, bNodeSocket &socket, const char *data_path)> init_socket_fn;
405
406 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
407 bool matches(const bNodeSocket &socket) const override;
408 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
409 bool can_connect(const bNodeSocket &socket) const override;
410};
411
413 public:
414 CustomTypeBuilder &idname(const char *idname);
415
417 std::function<void(bNode &node, bNodeSocket &socket, const char *data_path)> fn)
418 {
419 decl_->init_socket_fn = std::move(fn);
420 return *this;
421 }
422};
423
424/* -------------------------------------------------------------------- */
427
428inline FloatBuilder &FloatBuilder::min(const float value)
429{
430 decl_->soft_min_value = value;
431 return *this;
432}
433
434inline FloatBuilder &FloatBuilder::max(const float value)
435{
436 decl_->soft_max_value = value;
437 return *this;
438}
439
441{
442 decl_->default_value = value;
443 return *this;
444}
445
447{
448 decl_->subtype = subtype;
449 return *this;
450}
451
453
454/* -------------------------------------------------------------------- */
457
458inline IntBuilder &IntBuilder::min(const int value)
459{
460 decl_->soft_min_value = value;
461 return *this;
462}
463
464inline IntBuilder &IntBuilder::max(const int value)
465{
466 decl_->soft_max_value = value;
467 return *this;
468}
469
470inline IntBuilder &IntBuilder::default_value(const int value)
471{
472 decl_->default_value = value;
473 return *this;
474}
475
477{
478 decl_->subtype = subtype;
479 return *this;
480}
481
483
484/* -------------------------------------------------------------------- */
487
489{
490 decl_->default_value = float4(value, 0.0f, 0.0f);
491 return *this;
492}
493
495{
496 decl_->default_value = float4(value, 0.0f);
497 return *this;
498}
499
501{
502 decl_->default_value = value;
503 return *this;
504}
505
507{
508 decl_->subtype = subtype;
509 return *this;
510}
511
513{
514 BLI_assert(dimensions >= 2 && dimensions <= 4);
515 decl_->dimensions = dimensions;
516 return *this;
517}
518
520{
521 decl_->soft_min_value = min;
522 return *this;
523}
524
526{
527 decl_->soft_max_value = max;
528 return *this;
529}
530
532{
533 decl_->compact = true;
534 return *this;
535}
536
538
539/* -------------------------------------------------------------------- */
542
544{
545 decl_->default_value = value;
546 return *this;
547}
548
550
551/* -------------------------------------------------------------------- */
554
556{
557 decl_->default_value = value;
558 return *this;
559}
560
562
563/* -------------------------------------------------------------------- */
566
568{
569 decl_->default_value = std::move(value);
570 return *this;
571}
572
574{
575 decl_->subtype = subtype;
576 return *this;
577}
578
580
581/* -------------------------------------------------------------------- */
584
586{
587 decl_->default_value = value;
588 return *this;
589}
590
591inline MenuBuilder &MenuBuilder::expanded(const bool value)
592{
593 decl_->is_expanded = value;
594 return *this;
595}
596
598
599/* -------------------------------------------------------------------- */
602
604{
605 decl_->default_value = value;
606 return *this;
607}
608
610
611/* -------------------------------------------------------------------- */
614
616
617inline Object::Object() : IDSocketDeclaration("NodeSocketObject") {}
618
619inline Material::Material() : IDSocketDeclaration("NodeSocketMaterial") {}
620
621inline Collection::Collection() : IDSocketDeclaration("NodeSocketCollection") {}
622
623inline Texture::Texture() : IDSocketDeclaration("NodeSocketTexture") {}
624
625inline Image::Image() : IDSocketDeclaration("NodeSocketImage") {}
626
628
629/* -------------------------------------------------------------------- */
632
634{
635 decl_->idname_ = idname;
636 return *this;
637}
638
640
641} // namespace blender::nodes::decl
#define BLI_assert(a)
Definition BLI_assert.h:46
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_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
PropertySubType
Definition RNA_types.hh:220
@ PROP_NONE
Definition RNA_types.hh:221
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool can_connect(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bool matches(const bNodeSocket &socket) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
bool can_connect(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
IDSocketDeclarationBuilder< Collection > Builder
static constexpr eNodeSocketDatatype static_socket_type
ColorBuilder & default_value(const ColorGeometry4f value)
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
static constexpr eNodeSocketDatatype static_socket_type
bool matches(const bNodeSocket &socket) const override
CustomTypeBuilder & idname(const char *idname)
CustomTypeBuilder & init_socket_fn(std::function< void(bNode &node, bNodeSocket &socket, const char *data_path)> fn)
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
std::function< void(bNode &node, bNodeSocket &socket, const char *data_path)> init_socket_fn
bool can_connect(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bool can_connect(const bNodeSocket &socket) const override
bool matches(const bNodeSocket &socket) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
FloatBuilder & subtype(PropertySubType subtype)
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
static constexpr eNodeSocketDatatype static_socket_type
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool matches(const bNodeSocket &socket) const override
IDSocketDeclarationBuilder & default_value_fn(std::function< ID *(const bNode &node)> fn)
std::function< ID *(const bNode &node)> default_value_fn
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool matches(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
IDSocketDeclarationBuilder< Image > Builder
IntBuilder & subtype(PropertySubType subtype)
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
static constexpr eNodeSocketDatatype static_socket_type
IDSocketDeclarationBuilder< Material > Builder
static constexpr eNodeSocketDatatype static_socket_type
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool matches(const bNodeSocket &socket) const override
MenuBuilder & expanded(bool value=true)
MenuBuilder & default_value(int32_t value)
bool can_connect(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bool matches(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
IDSocketDeclarationBuilder< Object > Builder
static constexpr eNodeSocketDatatype static_socket_type
RotationBuilder & default_value(const math::EulerXYZ &value)
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
bool can_connect(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
bool can_connect(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bool matches(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
StringBuilder & subtype(PropertySubType subtype)
StringBuilder & path_filter(std::optional< std::string > filter)
StringBuilder & default_value(const std::string value)
bool can_connect(const bNodeSocket &socket) const override
std::optional< std::string > path_filter
bool matches(const bNodeSocket &socket) const override
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
static constexpr eNodeSocketDatatype static_socket_type
IDSocketDeclarationBuilder< Texture > Builder
VectorBuilder & subtype(PropertySubType subtype)
VectorBuilder & default_value(const float2 value)
VectorBuilder & dimensions(int dimensions)
bool can_connect(const bNodeSocket &socket) const override
bool matches(const bNodeSocket &socket) const override
static constexpr eNodeSocketDatatype static_socket_type
bNodeSocket & build(bNodeTree &ntree, bNode &node) const override
bNodeSocket & update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override
#define INT32_MAX
#define INT32_MIN
#define filter
EulerXYZBase< float > EulerXYZ
VecBase< float, 4 > float4
VecBase< float, 2 > float2
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
Definition BLI_color.hh:342
VecBase< float, 3 > float3
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
Definition DNA_ID.h:404
max
Definition text_draw.cc:251