Blender V4.3
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 float3 default_value = {0, 0, 0};
85
87
89
90 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
91 bool matches(const bNodeSocket &socket) const override;
92 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
93 bool can_connect(const bNodeSocket &socket) const override;
94};
95
97 public:
100 VectorBuilder &min(float min);
101 VectorBuilder &max(float max);
103};
104
105class BoolBuilder;
106
107class Bool : public SocketDeclaration {
108 public:
110
111 bool default_value = false;
113
115
116 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
117 bool matches(const bNodeSocket &socket) const override;
118 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
119 bool can_connect(const bNodeSocket &socket) const override;
120};
121
123 public:
124 BoolBuilder &default_value(bool value);
125};
126
127class ColorBuilder;
128
129class Color : public SocketDeclaration {
130 public:
132
133 ColorGeometry4f default_value{0.8f, 0.8f, 0.8f, 1.0f};
134
136
138
139 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
140 bool matches(const bNodeSocket &socket) const override;
141 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
142 bool can_connect(const bNodeSocket &socket) const override;
143};
144
146 public:
148};
149
150class RotationBuilder;
151
153 public:
155
157
159
161
162 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
163 bool matches(const bNodeSocket &socket) const override;
164 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
165 bool can_connect(const bNodeSocket &socket) const override;
166};
167
169 public:
171};
172
173class MatrixBuilder;
174
175class Matrix : public SocketDeclaration {
176 public:
178
180
182
183 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
184 bool matches(const bNodeSocket &socket) const override;
185 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
186 bool can_connect(const bNodeSocket &socket) const override;
187};
188
189class MatrixBuilder : public SocketDeclarationBuilder<Matrix> {};
190
191class StringBuilder;
192
193class String : public SocketDeclaration {
194 public:
196
197 std::string default_value;
199
201
203
204 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
205 bool matches(const bNodeSocket &socket) const override;
206 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
207 bool can_connect(const bNodeSocket &socket) const override;
208};
209
211 public:
212 StringBuilder &default_value(const std::string value);
214};
215
216class MenuBuilder;
217
218class Menu : public SocketDeclaration {
219 public:
221
223
225
227
228 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
229 bool matches(const bNodeSocket &socket) const override;
230 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
231 bool can_connect(const bNodeSocket &socket) const override;
232};
233
235 public:
237};
238
240 public:
241 const char *idname;
247 std::function<ID *(const bNode &node)> default_value_fn;
248
249 public:
250 IDSocketDeclaration(const char *idname);
251
252 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
253 bool matches(const bNodeSocket &socket) const override;
254 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
255 bool can_connect(const bNodeSocket &socket) const override;
256};
257
259 public:
261
263
264 Object();
265};
266
275
284
293
295 public:
297
299
300 Image();
301};
302
303class ShaderBuilder;
304
305class Shader : public SocketDeclaration {
306 public:
308
310
312
313 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
314 bool matches(const bNodeSocket &socket) const override;
315 bool can_connect(const bNodeSocket &socket) const override;
316};
317
318class ShaderBuilder : public SocketDeclarationBuilder<Shader> {};
319
320class ExtendBuilder;
321
322class Extend : public SocketDeclaration {
323 private:
324 friend ExtendBuilder;
325
326 public:
328
330
331 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
332 bool matches(const bNodeSocket &socket) const override;
333 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
334 bool can_connect(const bNodeSocket &socket) const override;
335};
336
337class ExtendBuilder : public SocketDeclarationBuilder<Extend> {};
338
340
341class Custom : public SocketDeclaration {
342 public:
344
346
348
349 const char *idname_;
350 std::function<void(bNode &node, bNodeSocket &socket, const char *data_path)> init_socket_fn;
351
352 bNodeSocket &build(bNodeTree &ntree, bNode &node) const override;
353 bool matches(const bNodeSocket &socket) const override;
354 bNodeSocket &update_or_build(bNodeTree &ntree, bNode &node, bNodeSocket &socket) const override;
355 bool can_connect(const bNodeSocket &socket) const override;
356};
357
359 public:
360 CustomTypeBuilder &idname(const char *idname);
361};
362
363/* -------------------------------------------------------------------- */
367inline FloatBuilder &FloatBuilder::min(const float value)
368{
369 decl_->soft_min_value = value;
370 return *this;
371}
372
373inline FloatBuilder &FloatBuilder::max(const float value)
374{
375 decl_->soft_max_value = value;
376 return *this;
377}
378
380{
381 decl_->default_value = value;
382 return *this;
383}
384
386{
387 decl_->subtype = subtype;
388 return *this;
389}
390
393/* -------------------------------------------------------------------- */
397inline IntBuilder &IntBuilder::min(const int value)
398{
399 decl_->soft_min_value = value;
400 return *this;
401}
402
403inline IntBuilder &IntBuilder::max(const int value)
404{
405 decl_->soft_max_value = value;
406 return *this;
407}
408
409inline IntBuilder &IntBuilder::default_value(const int value)
410{
411 decl_->default_value = value;
412 return *this;
413}
414
416{
418 return *this;
419}
420
423/* -------------------------------------------------------------------- */
428{
429 decl_->default_value = value;
430 return *this;
431}
432
434{
435 decl_->subtype = subtype;
436 return *this;
437}
438
440{
441 decl_->soft_min_value = min;
442 return *this;
443}
444
445inline VectorBuilder &VectorBuilder::max(const float max)
446{
447 decl_->soft_max_value = max;
448 return *this;
449}
450
452{
453 decl_->compact = true;
454 return *this;
455}
456
459/* -------------------------------------------------------------------- */
464{
465 decl_->default_value = value;
466 return *this;
467}
468
471/* -------------------------------------------------------------------- */
476{
477 decl_->default_value = value;
478 return *this;
479}
480
483/* -------------------------------------------------------------------- */
488{
489 decl_->default_value = std::move(value);
490 return *this;
491}
492
494{
495 decl_->subtype = subtype;
496 return *this;
497}
498
501/* -------------------------------------------------------------------- */
506{
507 decl_->default_value = value;
508 return *this;
509}
510
513/* -------------------------------------------------------------------- */
518{
519 decl_->default_value = value;
520 return *this;
521}
522
525/* -------------------------------------------------------------------- */
529inline IDSocketDeclaration::IDSocketDeclaration(const char *idname) : idname(idname) {}
530
531inline Object::Object() : IDSocketDeclaration("NodeSocketObject") {}
532
533inline Material::Material() : IDSocketDeclaration("NodeSocketMaterial") {}
534
535inline Collection::Collection() : IDSocketDeclaration("NodeSocketCollection") {}
536
537inline Texture::Texture() : IDSocketDeclaration("NodeSocketTexture") {}
538
539inline Image::Image() : IDSocketDeclaration("NodeSocketImage") {}
540
543/* -------------------------------------------------------------------- */
548{
549 decl_->idname_ = idname;
550 return *this;
551}
552
556
557} // namespace blender::nodes::decl
eNodeSocketInOut
eNodeSocketDatatype
@ SOCK_INT
@ SOCK_TEXTURE
@ SOCK_VECTOR
@ SOCK_BOOLEAN
@ SOCK_MATERIAL
@ SOCK_SHADER
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_IMAGE
@ SOCK_COLLECTION
@ SOCK_CUSTOM
@ SOCK_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
PropertySubType
Definition RNA_types.hh:135
@ PROP_NONE
Definition RNA_types.hh:136
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
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)
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
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
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
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 & 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
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 & default_value(const std::string value)
bool can_connect(const bNodeSocket &socket) const override
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
VectorBuilder & subtype(PropertySubType subtype)
VectorBuilder & default_value(const float3 value)
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
OperationNode * node
SocketDeclarationPtr create_extend_declaration(const eNodeSocketInOut in_out)
std::unique_ptr< SocketDeclaration > SocketDeclarationPtr
#define min(a, b)
Definition sort.c:32
#define FLT_MAX
Definition stdcycles.h:14
#define INT32_MAX
Definition stdint.h:137
#define INT32_MIN
Definition stdint.h:136
signed int int32_t
Definition stdint.h:77
Definition DNA_ID.h:413
float max