nodebpy 0.3.0__py3-none-any.whl → 0.3.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nodebpy/builder.py +37 -25
- nodebpy/nodes/__init__.py +6 -0
- nodebpy/nodes/attribute.py +98 -4
- nodebpy/nodes/color.py +6 -2
- nodebpy/nodes/converter.py +357 -54
- nodebpy/nodes/experimental.py +9 -3
- nodebpy/nodes/geometry.py +390 -94
- nodebpy/nodes/grid.py +90 -30
- nodebpy/nodes/group.py +3 -1
- nodebpy/nodes/input.py +239 -78
- nodebpy/nodes/interface.py +21 -7
- nodebpy/nodes/manual.py +6 -6
- nodebpy/nodes/output.py +8 -1
- nodebpy/nodes/texture.py +30 -10
- nodebpy/nodes/vector.py +41 -4
- nodebpy/nodes/zone.py +125 -99
- {nodebpy-0.3.0.dist-info → nodebpy-0.3.1.dist-info}/METADATA +11 -1
- nodebpy-0.3.1.dist-info/RECORD +26 -0
- nodebpy-0.3.0.dist-info/RECORD +0 -26
- {nodebpy-0.3.0.dist-info → nodebpy-0.3.1.dist-info}/WHEEL +0 -0
- {nodebpy-0.3.0.dist-info → nodebpy-0.3.1.dist-info}/entry_points.txt +0 -0
nodebpy/nodes/converter.py
CHANGED
|
@@ -24,7 +24,9 @@ from ..types import (
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class AlignRotationToVector(NodeBuilder):
|
|
27
|
-
"""
|
|
27
|
+
"""
|
|
28
|
+
Orient a rotation along the given direction
|
|
29
|
+
"""
|
|
28
30
|
|
|
29
31
|
_bl_idname = "FunctionNodeAlignRotationToVector"
|
|
30
32
|
node: bpy.types.FunctionNodeAlignRotationToVector
|
|
@@ -82,7 +84,9 @@ class AlignRotationToVector(NodeBuilder):
|
|
|
82
84
|
|
|
83
85
|
|
|
84
86
|
class AxesToRotation(NodeBuilder):
|
|
85
|
-
"""
|
|
87
|
+
"""
|
|
88
|
+
Create a rotation from a primary and (ideally orthogonal) secondary axis
|
|
89
|
+
"""
|
|
86
90
|
|
|
87
91
|
_bl_idname = "FunctionNodeAxesToRotation"
|
|
88
92
|
node: bpy.types.FunctionNodeAxesToRotation
|
|
@@ -134,7 +138,9 @@ class AxesToRotation(NodeBuilder):
|
|
|
134
138
|
|
|
135
139
|
|
|
136
140
|
class AxisAngleToRotation(NodeBuilder):
|
|
137
|
-
"""
|
|
141
|
+
"""
|
|
142
|
+
Build a rotation from an axis and a rotation around that axis
|
|
143
|
+
"""
|
|
138
144
|
|
|
139
145
|
_bl_idname = "FunctionNodeAxisAngleToRotation"
|
|
140
146
|
node: bpy.types.FunctionNodeAxisAngleToRotation
|
|
@@ -166,7 +172,9 @@ class AxisAngleToRotation(NodeBuilder):
|
|
|
166
172
|
|
|
167
173
|
|
|
168
174
|
class BitMath(NodeBuilder):
|
|
169
|
-
"""
|
|
175
|
+
"""
|
|
176
|
+
Perform bitwise operations on 32-bit integers
|
|
177
|
+
"""
|
|
170
178
|
|
|
171
179
|
_bl_idname = "FunctionNodeBitMath"
|
|
172
180
|
node: bpy.types.FunctionNodeBitMath
|
|
@@ -194,6 +202,11 @@ class BitMath(NodeBuilder):
|
|
|
194
202
|
"""Create Bit Math with operation 'Or'."""
|
|
195
203
|
return cls(operation="OR", a=a, b=b)
|
|
196
204
|
|
|
205
|
+
@classmethod
|
|
206
|
+
def exclusive_or(cls, a: TYPE_INPUT_INT = 0, b: TYPE_INPUT_INT = 0) -> "BitMath":
|
|
207
|
+
"""Create Bit Math with operation 'Exclusive Or'."""
|
|
208
|
+
return cls(operation="XOR", a=a, b=b)
|
|
209
|
+
|
|
197
210
|
@classmethod
|
|
198
211
|
def l_not(cls, a: TYPE_INPUT_INT = 0) -> "BitMath":
|
|
199
212
|
"""Create Bit Math with operation 'Not'."""
|
|
@@ -239,7 +252,9 @@ class BitMath(NodeBuilder):
|
|
|
239
252
|
|
|
240
253
|
|
|
241
254
|
class Blackbody(NodeBuilder):
|
|
242
|
-
"""
|
|
255
|
+
"""
|
|
256
|
+
Convert a blackbody temperature to an RGB value
|
|
257
|
+
"""
|
|
243
258
|
|
|
244
259
|
_bl_idname = "ShaderNodeBlackbody"
|
|
245
260
|
node: bpy.types.ShaderNodeBlackbody
|
|
@@ -262,7 +277,9 @@ class Blackbody(NodeBuilder):
|
|
|
262
277
|
|
|
263
278
|
|
|
264
279
|
class BooleanMath(NodeBuilder):
|
|
265
|
-
"""
|
|
280
|
+
"""
|
|
281
|
+
Perform a logical operation on the given boolean inputs
|
|
282
|
+
"""
|
|
266
283
|
|
|
267
284
|
_bl_idname = "FunctionNodeBooleanMath"
|
|
268
285
|
node: bpy.types.FunctionNodeBooleanMath
|
|
@@ -304,6 +321,15 @@ class BooleanMath(NodeBuilder):
|
|
|
304
321
|
"""Create Boolean Math with operation 'Not'."""
|
|
305
322
|
return cls(operation="NOT", boolean=boolean)
|
|
306
323
|
|
|
324
|
+
@classmethod
|
|
325
|
+
def not_and(
|
|
326
|
+
cls,
|
|
327
|
+
boolean: TYPE_INPUT_BOOLEAN = False,
|
|
328
|
+
boolean_001: TYPE_INPUT_BOOLEAN = False,
|
|
329
|
+
) -> "BooleanMath":
|
|
330
|
+
"""Create Boolean Math with operation 'Not And'."""
|
|
331
|
+
return cls(operation="NAND", boolean=boolean, boolean_001=boolean_001)
|
|
332
|
+
|
|
307
333
|
@classmethod
|
|
308
334
|
def nor(
|
|
309
335
|
cls,
|
|
@@ -322,6 +348,15 @@ class BooleanMath(NodeBuilder):
|
|
|
322
348
|
"""Create Boolean Math with operation 'Equal'."""
|
|
323
349
|
return cls(operation="XNOR", boolean=boolean, boolean_001=boolean_001)
|
|
324
350
|
|
|
351
|
+
@classmethod
|
|
352
|
+
def not_equal(
|
|
353
|
+
cls,
|
|
354
|
+
boolean: TYPE_INPUT_BOOLEAN = False,
|
|
355
|
+
boolean_001: TYPE_INPUT_BOOLEAN = False,
|
|
356
|
+
) -> "BooleanMath":
|
|
357
|
+
"""Create Boolean Math with operation 'Not Equal'."""
|
|
358
|
+
return cls(operation="XOR", boolean=boolean, boolean_001=boolean_001)
|
|
359
|
+
|
|
325
360
|
@classmethod
|
|
326
361
|
def imply(
|
|
327
362
|
cls,
|
|
@@ -372,7 +407,9 @@ class BooleanMath(NodeBuilder):
|
|
|
372
407
|
|
|
373
408
|
|
|
374
409
|
class Clamp(NodeBuilder):
|
|
375
|
-
"""
|
|
410
|
+
"""
|
|
411
|
+
Clamp a value between a minimum and a maximum
|
|
412
|
+
"""
|
|
376
413
|
|
|
377
414
|
_bl_idname = "ShaderNodeClamp"
|
|
378
415
|
node: bpy.types.ShaderNodeClamp
|
|
@@ -420,7 +457,9 @@ class Clamp(NodeBuilder):
|
|
|
420
457
|
|
|
421
458
|
|
|
422
459
|
class ColorRamp(NodeBuilder):
|
|
423
|
-
"""
|
|
460
|
+
"""
|
|
461
|
+
Map values to colors with the use of a gradient
|
|
462
|
+
"""
|
|
424
463
|
|
|
425
464
|
_bl_idname = "ShaderNodeValToRGB"
|
|
426
465
|
node: bpy.types.ShaderNodeValToRGB
|
|
@@ -448,7 +487,9 @@ class ColorRamp(NodeBuilder):
|
|
|
448
487
|
|
|
449
488
|
|
|
450
489
|
class CombineBundle(NodeBuilder):
|
|
451
|
-
"""
|
|
490
|
+
"""
|
|
491
|
+
Combine multiple socket values into one.
|
|
492
|
+
"""
|
|
452
493
|
|
|
453
494
|
_bl_idname = "NodeCombineBundle"
|
|
454
495
|
node: bpy.types.Node
|
|
@@ -474,7 +515,9 @@ class CombineBundle(NodeBuilder):
|
|
|
474
515
|
|
|
475
516
|
|
|
476
517
|
class CombineColor(NodeBuilder):
|
|
477
|
-
"""
|
|
518
|
+
"""
|
|
519
|
+
Combine four channels into a single color, based on a particular color model
|
|
520
|
+
"""
|
|
478
521
|
|
|
479
522
|
_bl_idname = "FunctionNodeCombineColor"
|
|
480
523
|
node: bpy.types.FunctionNodeCombineColor
|
|
@@ -528,7 +571,9 @@ class CombineColor(NodeBuilder):
|
|
|
528
571
|
|
|
529
572
|
|
|
530
573
|
class CombineMatrix(NodeBuilder):
|
|
531
|
-
"""
|
|
574
|
+
"""
|
|
575
|
+
Construct a 4x4 matrix from its individual values
|
|
576
|
+
"""
|
|
532
577
|
|
|
533
578
|
_bl_idname = "FunctionNodeCombineMatrix"
|
|
534
579
|
node: bpy.types.FunctionNodeCombineMatrix
|
|
@@ -661,7 +706,9 @@ class CombineMatrix(NodeBuilder):
|
|
|
661
706
|
|
|
662
707
|
|
|
663
708
|
class CombineTransform(NodeBuilder):
|
|
664
|
-
"""
|
|
709
|
+
"""
|
|
710
|
+
Combine a translation vector, a rotation, and a scale vector into a transformation matrix
|
|
711
|
+
"""
|
|
665
712
|
|
|
666
713
|
_bl_idname = "FunctionNodeCombineTransform"
|
|
667
714
|
node: bpy.types.FunctionNodeCombineTransform
|
|
@@ -699,7 +746,9 @@ class CombineTransform(NodeBuilder):
|
|
|
699
746
|
|
|
700
747
|
|
|
701
748
|
class CombineXYZ(NodeBuilder):
|
|
702
|
-
"""
|
|
749
|
+
"""
|
|
750
|
+
Create a vector from X, Y, and Z components
|
|
751
|
+
"""
|
|
703
752
|
|
|
704
753
|
_bl_idname = "ShaderNodeCombineXYZ"
|
|
705
754
|
node: bpy.types.ShaderNodeCombineXYZ
|
|
@@ -737,7 +786,9 @@ class CombineXYZ(NodeBuilder):
|
|
|
737
786
|
|
|
738
787
|
|
|
739
788
|
class EulerToRotation(NodeBuilder):
|
|
740
|
-
"""
|
|
789
|
+
"""
|
|
790
|
+
Build a rotation from separate angles around each axis
|
|
791
|
+
"""
|
|
741
792
|
|
|
742
793
|
_bl_idname = "FunctionNodeEulerToRotation"
|
|
743
794
|
node: bpy.types.FunctionNodeEulerToRotation
|
|
@@ -760,7 +811,9 @@ class EulerToRotation(NodeBuilder):
|
|
|
760
811
|
|
|
761
812
|
|
|
762
813
|
class FindInString(NodeBuilder):
|
|
763
|
-
"""
|
|
814
|
+
"""
|
|
815
|
+
Find the number of times a given string occurs in another string and the position of the first match
|
|
816
|
+
"""
|
|
764
817
|
|
|
765
818
|
_bl_idname = "FunctionNodeFindInString"
|
|
766
819
|
node: bpy.types.FunctionNodeFindInString
|
|
@@ -797,7 +850,9 @@ class FindInString(NodeBuilder):
|
|
|
797
850
|
|
|
798
851
|
|
|
799
852
|
class FloatCurve(NodeBuilder):
|
|
800
|
-
"""
|
|
853
|
+
"""
|
|
854
|
+
Map an input float to a curve and outputs a float value
|
|
855
|
+
"""
|
|
801
856
|
|
|
802
857
|
_bl_idname = "ShaderNodeFloatCurve"
|
|
803
858
|
node: bpy.types.ShaderNodeFloatCurve
|
|
@@ -829,7 +884,9 @@ class FloatCurve(NodeBuilder):
|
|
|
829
884
|
|
|
830
885
|
|
|
831
886
|
class FloatToInteger(NodeBuilder):
|
|
832
|
-
"""
|
|
887
|
+
"""
|
|
888
|
+
Convert the given floating-point number to an integer, with a choice of methods
|
|
889
|
+
"""
|
|
833
890
|
|
|
834
891
|
_bl_idname = "FunctionNodeFloatToInt"
|
|
835
892
|
node: bpy.types.FunctionNodeFloatToInt
|
|
@@ -865,7 +922,9 @@ class FloatToInteger(NodeBuilder):
|
|
|
865
922
|
|
|
866
923
|
|
|
867
924
|
class HashValue(NodeBuilder):
|
|
868
|
-
"""
|
|
925
|
+
"""
|
|
926
|
+
Generate a randomized integer using the given input value as a seed
|
|
927
|
+
"""
|
|
869
928
|
|
|
870
929
|
_bl_idname = "FunctionNodeHashValue"
|
|
871
930
|
node: bpy.types.FunctionNodeHashValue
|
|
@@ -965,7 +1024,9 @@ class HashValue(NodeBuilder):
|
|
|
965
1024
|
|
|
966
1025
|
|
|
967
1026
|
class IndexOfNearest(NodeBuilder):
|
|
968
|
-
"""
|
|
1027
|
+
"""
|
|
1028
|
+
Find the nearest element in a group. Similar to the "Sample Nearest" node
|
|
1029
|
+
"""
|
|
969
1030
|
|
|
970
1031
|
_bl_idname = "GeometryNodeIndexOfNearest"
|
|
971
1032
|
node: bpy.types.GeometryNodeIndexOfNearest
|
|
@@ -1002,7 +1063,9 @@ class IndexOfNearest(NodeBuilder):
|
|
|
1002
1063
|
|
|
1003
1064
|
|
|
1004
1065
|
class IntegerMath(NodeBuilder):
|
|
1005
|
-
"""
|
|
1066
|
+
"""
|
|
1067
|
+
Perform various math operations on the given integer inputs
|
|
1068
|
+
"""
|
|
1006
1069
|
|
|
1007
1070
|
_bl_idname = "FunctionNodeIntegerMath"
|
|
1008
1071
|
node: bpy.types.FunctionNodeIntegerMath
|
|
@@ -1067,6 +1130,21 @@ class IntegerMath(NodeBuilder):
|
|
|
1067
1130
|
"""Create Integer Math with operation 'Divide'."""
|
|
1068
1131
|
return cls(operation="DIVIDE", value=value, value_001=value_001)
|
|
1069
1132
|
|
|
1133
|
+
@classmethod
|
|
1134
|
+
def multiply_add(
|
|
1135
|
+
cls,
|
|
1136
|
+
value: TYPE_INPUT_INT = 0,
|
|
1137
|
+
value_001: TYPE_INPUT_INT = 0,
|
|
1138
|
+
value_002: TYPE_INPUT_INT = 0,
|
|
1139
|
+
) -> "IntegerMath":
|
|
1140
|
+
"""Create Integer Math with operation 'Multiply Add'."""
|
|
1141
|
+
return cls(
|
|
1142
|
+
operation="MULTIPLY_ADD",
|
|
1143
|
+
value=value,
|
|
1144
|
+
value_001=value_001,
|
|
1145
|
+
value_002=value_002,
|
|
1146
|
+
)
|
|
1147
|
+
|
|
1070
1148
|
@classmethod
|
|
1071
1149
|
def absolute(cls, value: TYPE_INPUT_INT = 0) -> "IntegerMath":
|
|
1072
1150
|
"""Create Integer Math with operation 'Absolute'."""
|
|
@@ -1103,6 +1181,34 @@ class IntegerMath(NodeBuilder):
|
|
|
1103
1181
|
"""Create Integer Math with operation 'Sign'."""
|
|
1104
1182
|
return cls(operation="SIGN", value=value)
|
|
1105
1183
|
|
|
1184
|
+
@classmethod
|
|
1185
|
+
def divide_round(
|
|
1186
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1187
|
+
) -> "IntegerMath":
|
|
1188
|
+
"""Create Integer Math with operation 'Divide Round'."""
|
|
1189
|
+
return cls(operation="DIVIDE_ROUND", value=value, value_001=value_001)
|
|
1190
|
+
|
|
1191
|
+
@classmethod
|
|
1192
|
+
def divide_floor(
|
|
1193
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1194
|
+
) -> "IntegerMath":
|
|
1195
|
+
"""Create Integer Math with operation 'Divide Floor'."""
|
|
1196
|
+
return cls(operation="DIVIDE_FLOOR", value=value, value_001=value_001)
|
|
1197
|
+
|
|
1198
|
+
@classmethod
|
|
1199
|
+
def divide_ceiling(
|
|
1200
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1201
|
+
) -> "IntegerMath":
|
|
1202
|
+
"""Create Integer Math with operation 'Divide Ceiling'."""
|
|
1203
|
+
return cls(operation="DIVIDE_CEIL", value=value, value_001=value_001)
|
|
1204
|
+
|
|
1205
|
+
@classmethod
|
|
1206
|
+
def floored_modulo(
|
|
1207
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1208
|
+
) -> "IntegerMath":
|
|
1209
|
+
"""Create Integer Math with operation 'Floored Modulo'."""
|
|
1210
|
+
return cls(operation="FLOORED_MODULO", value=value, value_001=value_001)
|
|
1211
|
+
|
|
1106
1212
|
@classmethod
|
|
1107
1213
|
def modulo(
|
|
1108
1214
|
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
@@ -1110,6 +1216,20 @@ class IntegerMath(NodeBuilder):
|
|
|
1110
1216
|
"""Create Integer Math with operation 'Modulo'."""
|
|
1111
1217
|
return cls(operation="MODULO", value=value, value_001=value_001)
|
|
1112
1218
|
|
|
1219
|
+
@classmethod
|
|
1220
|
+
def greatest_common_divisor(
|
|
1221
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1222
|
+
) -> "IntegerMath":
|
|
1223
|
+
"""Create Integer Math with operation 'Greatest Common Divisor'."""
|
|
1224
|
+
return cls(operation="GCD", value=value, value_001=value_001)
|
|
1225
|
+
|
|
1226
|
+
@classmethod
|
|
1227
|
+
def least_common_multiple(
|
|
1228
|
+
cls, value: TYPE_INPUT_INT = 0, value_001: TYPE_INPUT_INT = 0
|
|
1229
|
+
) -> "IntegerMath":
|
|
1230
|
+
"""Create Integer Math with operation 'Least Common Multiple'."""
|
|
1231
|
+
return cls(operation="LCM", value=value, value_001=value_001)
|
|
1232
|
+
|
|
1113
1233
|
@property
|
|
1114
1234
|
def i_value(self) -> SocketLinker:
|
|
1115
1235
|
"""Input socket: Value"""
|
|
@@ -1183,7 +1303,9 @@ class IntegerMath(NodeBuilder):
|
|
|
1183
1303
|
|
|
1184
1304
|
|
|
1185
1305
|
class InvertMatrix(NodeBuilder):
|
|
1186
|
-
"""
|
|
1306
|
+
"""
|
|
1307
|
+
Compute the inverse of the given matrix, if one exists
|
|
1308
|
+
"""
|
|
1187
1309
|
|
|
1188
1310
|
_bl_idname = "FunctionNodeInvertMatrix"
|
|
1189
1311
|
node: bpy.types.FunctionNodeInvertMatrix
|
|
@@ -1211,7 +1333,9 @@ class InvertMatrix(NodeBuilder):
|
|
|
1211
1333
|
|
|
1212
1334
|
|
|
1213
1335
|
class InvertRotation(NodeBuilder):
|
|
1214
|
-
"""
|
|
1336
|
+
"""
|
|
1337
|
+
Compute the inverse of the given rotation
|
|
1338
|
+
"""
|
|
1215
1339
|
|
|
1216
1340
|
_bl_idname = "FunctionNodeInvertRotation"
|
|
1217
1341
|
node: bpy.types.FunctionNodeInvertRotation
|
|
@@ -1234,7 +1358,9 @@ class InvertRotation(NodeBuilder):
|
|
|
1234
1358
|
|
|
1235
1359
|
|
|
1236
1360
|
class JoinBundle(NodeBuilder):
|
|
1237
|
-
"""
|
|
1361
|
+
"""
|
|
1362
|
+
Join multiple bundles together
|
|
1363
|
+
"""
|
|
1238
1364
|
|
|
1239
1365
|
_bl_idname = "NodeJoinBundle"
|
|
1240
1366
|
node: bpy.types.Node
|
|
@@ -1257,7 +1383,9 @@ class JoinBundle(NodeBuilder):
|
|
|
1257
1383
|
|
|
1258
1384
|
|
|
1259
1385
|
class MapRange(NodeBuilder):
|
|
1260
|
-
"""
|
|
1386
|
+
"""
|
|
1387
|
+
Remap a value from a range to a target range
|
|
1388
|
+
"""
|
|
1261
1389
|
|
|
1262
1390
|
_bl_idname = "ShaderNodeMapRange"
|
|
1263
1391
|
node: bpy.types.ShaderNodeMapRange
|
|
@@ -1441,7 +1569,9 @@ class MapRange(NodeBuilder):
|
|
|
1441
1569
|
|
|
1442
1570
|
|
|
1443
1571
|
class MatchString(NodeBuilder):
|
|
1444
|
-
"""
|
|
1572
|
+
"""
|
|
1573
|
+
Check if a given string exists within another string
|
|
1574
|
+
"""
|
|
1445
1575
|
|
|
1446
1576
|
_bl_idname = "FunctionNodeMatchString"
|
|
1447
1577
|
node: bpy.types.FunctionNodeMatchString
|
|
@@ -1479,7 +1609,9 @@ class MatchString(NodeBuilder):
|
|
|
1479
1609
|
|
|
1480
1610
|
|
|
1481
1611
|
class Math(NodeBuilder):
|
|
1482
|
-
"""
|
|
1612
|
+
"""
|
|
1613
|
+
Perform math operations
|
|
1614
|
+
"""
|
|
1483
1615
|
|
|
1484
1616
|
_bl_idname = "ShaderNodeMath"
|
|
1485
1617
|
node: bpy.types.ShaderNodeMath
|
|
@@ -1569,6 +1701,21 @@ class Math(NodeBuilder):
|
|
|
1569
1701
|
"""Create Math with operation 'Divide'."""
|
|
1570
1702
|
return cls(operation="DIVIDE", value=value, value_001=value_001)
|
|
1571
1703
|
|
|
1704
|
+
@classmethod
|
|
1705
|
+
def multiply_add(
|
|
1706
|
+
cls,
|
|
1707
|
+
value: TYPE_INPUT_VALUE = 0.5,
|
|
1708
|
+
value_001: TYPE_INPUT_VALUE = 0.5,
|
|
1709
|
+
value_002: TYPE_INPUT_VALUE = 0.5,
|
|
1710
|
+
) -> "Math":
|
|
1711
|
+
"""Create Math with operation 'Multiply Add'."""
|
|
1712
|
+
return cls(
|
|
1713
|
+
operation="MULTIPLY_ADD",
|
|
1714
|
+
value=value,
|
|
1715
|
+
value_001=value_001,
|
|
1716
|
+
value_002=value_002,
|
|
1717
|
+
)
|
|
1718
|
+
|
|
1572
1719
|
@classmethod
|
|
1573
1720
|
def power(
|
|
1574
1721
|
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
@@ -1583,6 +1730,16 @@ class Math(NodeBuilder):
|
|
|
1583
1730
|
"""Create Math with operation 'Logarithm'."""
|
|
1584
1731
|
return cls(operation="LOGARITHM", value=value, value_001=value_001)
|
|
1585
1732
|
|
|
1733
|
+
@classmethod
|
|
1734
|
+
def square_root(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1735
|
+
"""Create Math with operation 'Square Root'."""
|
|
1736
|
+
return cls(operation="SQRT", value=value)
|
|
1737
|
+
|
|
1738
|
+
@classmethod
|
|
1739
|
+
def inverse_square_root(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1740
|
+
"""Create Math with operation 'Inverse Square Root'."""
|
|
1741
|
+
return cls(operation="INVERSE_SQRT", value=value)
|
|
1742
|
+
|
|
1586
1743
|
@classmethod
|
|
1587
1744
|
def absolute(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1588
1745
|
"""Create Math with operation 'Absolute'."""
|
|
@@ -1607,6 +1764,20 @@ class Math(NodeBuilder):
|
|
|
1607
1764
|
"""Create Math with operation 'Maximum'."""
|
|
1608
1765
|
return cls(operation="MAXIMUM", value=value, value_001=value_001)
|
|
1609
1766
|
|
|
1767
|
+
@classmethod
|
|
1768
|
+
def less_than(
|
|
1769
|
+
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
1770
|
+
) -> "Math":
|
|
1771
|
+
"""Create Math with operation 'Less Than'."""
|
|
1772
|
+
return cls(operation="LESS_THAN", value=value, value_001=value_001)
|
|
1773
|
+
|
|
1774
|
+
@classmethod
|
|
1775
|
+
def greater_than(
|
|
1776
|
+
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
1777
|
+
) -> "Math":
|
|
1778
|
+
"""Create Math with operation 'Greater Than'."""
|
|
1779
|
+
return cls(operation="GREATER_THAN", value=value, value_001=value_001)
|
|
1780
|
+
|
|
1610
1781
|
@classmethod
|
|
1611
1782
|
def sign(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1612
1783
|
"""Create Math with operation 'Sign'."""
|
|
@@ -1624,6 +1795,36 @@ class Math(NodeBuilder):
|
|
|
1624
1795
|
operation="COMPARE", value=value, value_001=value_001, value_002=value_002
|
|
1625
1796
|
)
|
|
1626
1797
|
|
|
1798
|
+
@classmethod
|
|
1799
|
+
def smooth_minimum(
|
|
1800
|
+
cls,
|
|
1801
|
+
value: TYPE_INPUT_VALUE = 0.5,
|
|
1802
|
+
value_001: TYPE_INPUT_VALUE = 0.5,
|
|
1803
|
+
value_002: TYPE_INPUT_VALUE = 0.5,
|
|
1804
|
+
) -> "Math":
|
|
1805
|
+
"""Create Math with operation 'Smooth Minimum'."""
|
|
1806
|
+
return cls(
|
|
1807
|
+
operation="SMOOTH_MIN",
|
|
1808
|
+
value=value,
|
|
1809
|
+
value_001=value_001,
|
|
1810
|
+
value_002=value_002,
|
|
1811
|
+
)
|
|
1812
|
+
|
|
1813
|
+
@classmethod
|
|
1814
|
+
def smooth_maximum(
|
|
1815
|
+
cls,
|
|
1816
|
+
value: TYPE_INPUT_VALUE = 0.5,
|
|
1817
|
+
value_001: TYPE_INPUT_VALUE = 0.5,
|
|
1818
|
+
value_002: TYPE_INPUT_VALUE = 0.5,
|
|
1819
|
+
) -> "Math":
|
|
1820
|
+
"""Create Math with operation 'Smooth Maximum'."""
|
|
1821
|
+
return cls(
|
|
1822
|
+
operation="SMOOTH_MAX",
|
|
1823
|
+
value=value,
|
|
1824
|
+
value_001=value_001,
|
|
1825
|
+
value_002=value_002,
|
|
1826
|
+
)
|
|
1827
|
+
|
|
1627
1828
|
@classmethod
|
|
1628
1829
|
def round(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1629
1830
|
"""Create Math with operation 'Round'."""
|
|
@@ -1649,6 +1850,20 @@ class Math(NodeBuilder):
|
|
|
1649
1850
|
"""Create Math with operation 'Fraction'."""
|
|
1650
1851
|
return cls(operation="FRACT", value=value)
|
|
1651
1852
|
|
|
1853
|
+
@classmethod
|
|
1854
|
+
def truncated_modulo(
|
|
1855
|
+
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
1856
|
+
) -> "Math":
|
|
1857
|
+
"""Create Math with operation 'Truncated Modulo'."""
|
|
1858
|
+
return cls(operation="MODULO", value=value, value_001=value_001)
|
|
1859
|
+
|
|
1860
|
+
@classmethod
|
|
1861
|
+
def floored_modulo(
|
|
1862
|
+
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
1863
|
+
) -> "Math":
|
|
1864
|
+
"""Create Math with operation 'Floored Modulo'."""
|
|
1865
|
+
return cls(operation="FLOORED_MODULO", value=value, value_001=value_001)
|
|
1866
|
+
|
|
1652
1867
|
@classmethod
|
|
1653
1868
|
def wrap(
|
|
1654
1869
|
cls,
|
|
@@ -1668,6 +1883,13 @@ class Math(NodeBuilder):
|
|
|
1668
1883
|
"""Create Math with operation 'Snap'."""
|
|
1669
1884
|
return cls(operation="SNAP", value=value, value_001=value_001)
|
|
1670
1885
|
|
|
1886
|
+
@classmethod
|
|
1887
|
+
def ping_pong(
|
|
1888
|
+
cls, value: TYPE_INPUT_VALUE = 0.5, value_001: TYPE_INPUT_VALUE = 0.5
|
|
1889
|
+
) -> "Math":
|
|
1890
|
+
"""Create Math with operation 'Ping-Pong'."""
|
|
1891
|
+
return cls(operation="PINGPONG", value=value, value_001=value_001)
|
|
1892
|
+
|
|
1671
1893
|
@classmethod
|
|
1672
1894
|
def sine(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1673
1895
|
"""Create Math with operation 'Sine'."""
|
|
@@ -1705,6 +1927,31 @@ class Math(NodeBuilder):
|
|
|
1705
1927
|
"""Create Math with operation 'Arctan2'."""
|
|
1706
1928
|
return cls(operation="ARCTAN2", value=value, value_001=value_001)
|
|
1707
1929
|
|
|
1930
|
+
@classmethod
|
|
1931
|
+
def hyperbolic_sine(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1932
|
+
"""Create Math with operation 'Hyperbolic Sine'."""
|
|
1933
|
+
return cls(operation="SINH", value=value)
|
|
1934
|
+
|
|
1935
|
+
@classmethod
|
|
1936
|
+
def hyperbolic_cosine(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1937
|
+
"""Create Math with operation 'Hyperbolic Cosine'."""
|
|
1938
|
+
return cls(operation="COSH", value=value)
|
|
1939
|
+
|
|
1940
|
+
@classmethod
|
|
1941
|
+
def hyperbolic_tangent(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1942
|
+
"""Create Math with operation 'Hyperbolic Tangent'."""
|
|
1943
|
+
return cls(operation="TANH", value=value)
|
|
1944
|
+
|
|
1945
|
+
@classmethod
|
|
1946
|
+
def to_radians(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1947
|
+
"""Create Math with operation 'To Radians'."""
|
|
1948
|
+
return cls(operation="RADIANS", value=value)
|
|
1949
|
+
|
|
1950
|
+
@classmethod
|
|
1951
|
+
def to_degrees(cls, value: TYPE_INPUT_VALUE = 0.5) -> "Math":
|
|
1952
|
+
"""Create Math with operation 'To Degrees'."""
|
|
1953
|
+
return cls(operation="DEGREES", value=value)
|
|
1954
|
+
|
|
1708
1955
|
@property
|
|
1709
1956
|
def i_value(self) -> SocketLinker:
|
|
1710
1957
|
"""Input socket: Value"""
|
|
@@ -1832,7 +2079,9 @@ class Math(NodeBuilder):
|
|
|
1832
2079
|
|
|
1833
2080
|
|
|
1834
2081
|
class MatrixDeterminant(NodeBuilder):
|
|
1835
|
-
"""
|
|
2082
|
+
"""
|
|
2083
|
+
Compute the determinant of the given matrix
|
|
2084
|
+
"""
|
|
1836
2085
|
|
|
1837
2086
|
_bl_idname = "FunctionNodeMatrixDeterminant"
|
|
1838
2087
|
node: bpy.types.FunctionNodeMatrixDeterminant
|
|
@@ -1855,7 +2104,9 @@ class MatrixDeterminant(NodeBuilder):
|
|
|
1855
2104
|
|
|
1856
2105
|
|
|
1857
2106
|
class Mix(NodeBuilder):
|
|
1858
|
-
"""
|
|
2107
|
+
"""
|
|
2108
|
+
Mix values by a factor
|
|
2109
|
+
"""
|
|
1859
2110
|
|
|
1860
2111
|
_bl_idname = "ShaderNodeMix"
|
|
1861
2112
|
node: bpy.types.ShaderNodeMix
|
|
@@ -2123,7 +2374,9 @@ class Mix(NodeBuilder):
|
|
|
2123
2374
|
|
|
2124
2375
|
|
|
2125
2376
|
class MultiplyMatrices(NodeBuilder):
|
|
2126
|
-
"""
|
|
2377
|
+
"""
|
|
2378
|
+
Perform a matrix multiplication on two input matrices
|
|
2379
|
+
"""
|
|
2127
2380
|
|
|
2128
2381
|
_bl_idname = "FunctionNodeMatrixMultiply"
|
|
2129
2382
|
node: bpy.types.FunctionNodeMatrixMultiply
|
|
@@ -2155,7 +2408,9 @@ class MultiplyMatrices(NodeBuilder):
|
|
|
2155
2408
|
|
|
2156
2409
|
|
|
2157
2410
|
class PackUVIslands(NodeBuilder):
|
|
2158
|
-
"""
|
|
2411
|
+
"""
|
|
2412
|
+
Scale islands of a UV map and move them so they fill the UV space as much as possible
|
|
2413
|
+
"""
|
|
2159
2414
|
|
|
2160
2415
|
_bl_idname = "GeometryNodeUVPackIslands"
|
|
2161
2416
|
node: bpy.types.GeometryNodeUVPackIslands
|
|
@@ -2211,7 +2466,9 @@ class PackUVIslands(NodeBuilder):
|
|
|
2211
2466
|
|
|
2212
2467
|
|
|
2213
2468
|
class ProjectPoint(NodeBuilder):
|
|
2214
|
-
"""
|
|
2469
|
+
"""
|
|
2470
|
+
Project a point using a matrix, using location, rotation, scale, and perspective divide
|
|
2471
|
+
"""
|
|
2215
2472
|
|
|
2216
2473
|
_bl_idname = "FunctionNodeProjectPoint"
|
|
2217
2474
|
node: bpy.types.FunctionNodeProjectPoint
|
|
@@ -2243,7 +2500,9 @@ class ProjectPoint(NodeBuilder):
|
|
|
2243
2500
|
|
|
2244
2501
|
|
|
2245
2502
|
class QuaternionToRotation(NodeBuilder):
|
|
2246
|
-
"""
|
|
2503
|
+
"""
|
|
2504
|
+
Build a rotation from quaternion components
|
|
2505
|
+
"""
|
|
2247
2506
|
|
|
2248
2507
|
_bl_idname = "FunctionNodeQuaternionToRotation"
|
|
2249
2508
|
node: bpy.types.FunctionNodeQuaternionToRotation
|
|
@@ -2287,7 +2546,9 @@ class QuaternionToRotation(NodeBuilder):
|
|
|
2287
2546
|
|
|
2288
2547
|
|
|
2289
2548
|
class RandomValue(NodeBuilder):
|
|
2290
|
-
"""
|
|
2549
|
+
"""
|
|
2550
|
+
Output a randomized value
|
|
2551
|
+
"""
|
|
2291
2552
|
|
|
2292
2553
|
_bl_idname = "FunctionNodeRandomValue"
|
|
2293
2554
|
node: bpy.types.FunctionNodeRandomValue
|
|
@@ -2439,7 +2700,9 @@ class RandomValue(NodeBuilder):
|
|
|
2439
2700
|
|
|
2440
2701
|
|
|
2441
2702
|
class ReplaceString(NodeBuilder):
|
|
2442
|
-
"""
|
|
2703
|
+
"""
|
|
2704
|
+
Replace a given string segment with another
|
|
2705
|
+
"""
|
|
2443
2706
|
|
|
2444
2707
|
_bl_idname = "FunctionNodeReplaceString"
|
|
2445
2708
|
node: bpy.types.FunctionNodeReplaceString
|
|
@@ -2477,7 +2740,9 @@ class ReplaceString(NodeBuilder):
|
|
|
2477
2740
|
|
|
2478
2741
|
|
|
2479
2742
|
class RotateEuler(NodeBuilder):
|
|
2480
|
-
"""
|
|
2743
|
+
"""
|
|
2744
|
+
Apply a secondary Euler rotation to a given Euler rotation
|
|
2745
|
+
"""
|
|
2481
2746
|
|
|
2482
2747
|
_bl_idname = "FunctionNodeRotateEuler"
|
|
2483
2748
|
node: bpy.types.FunctionNodeRotateEuler
|
|
@@ -2546,7 +2811,9 @@ class RotateEuler(NodeBuilder):
|
|
|
2546
2811
|
|
|
2547
2812
|
|
|
2548
2813
|
class RotateRotation(NodeBuilder):
|
|
2549
|
-
"""
|
|
2814
|
+
"""
|
|
2815
|
+
Apply a secondary rotation to a given rotation value
|
|
2816
|
+
"""
|
|
2550
2817
|
|
|
2551
2818
|
_bl_idname = "FunctionNodeRotateRotation"
|
|
2552
2819
|
node: bpy.types.FunctionNodeRotateRotation
|
|
@@ -2588,7 +2855,9 @@ class RotateRotation(NodeBuilder):
|
|
|
2588
2855
|
|
|
2589
2856
|
|
|
2590
2857
|
class RotateVector(NodeBuilder):
|
|
2591
|
-
"""
|
|
2858
|
+
"""
|
|
2859
|
+
Apply a rotation to a given vector
|
|
2860
|
+
"""
|
|
2592
2861
|
|
|
2593
2862
|
_bl_idname = "FunctionNodeRotateVector"
|
|
2594
2863
|
node: bpy.types.FunctionNodeRotateVector
|
|
@@ -2620,7 +2889,9 @@ class RotateVector(NodeBuilder):
|
|
|
2620
2889
|
|
|
2621
2890
|
|
|
2622
2891
|
class RotationToAxisAngle(NodeBuilder):
|
|
2623
|
-
"""
|
|
2892
|
+
"""
|
|
2893
|
+
Convert a rotation to axis angle components
|
|
2894
|
+
"""
|
|
2624
2895
|
|
|
2625
2896
|
_bl_idname = "FunctionNodeRotationToAxisAngle"
|
|
2626
2897
|
node: bpy.types.FunctionNodeRotationToAxisAngle
|
|
@@ -2648,7 +2919,9 @@ class RotationToAxisAngle(NodeBuilder):
|
|
|
2648
2919
|
|
|
2649
2920
|
|
|
2650
2921
|
class RotationToEuler(NodeBuilder):
|
|
2651
|
-
"""
|
|
2922
|
+
"""
|
|
2923
|
+
Convert a standard rotation value to an Euler rotation
|
|
2924
|
+
"""
|
|
2652
2925
|
|
|
2653
2926
|
_bl_idname = "FunctionNodeRotationToEuler"
|
|
2654
2927
|
node: bpy.types.FunctionNodeRotationToEuler
|
|
@@ -2671,7 +2944,9 @@ class RotationToEuler(NodeBuilder):
|
|
|
2671
2944
|
|
|
2672
2945
|
|
|
2673
2946
|
class RotationToQuaternion(NodeBuilder):
|
|
2674
|
-
"""
|
|
2947
|
+
"""
|
|
2948
|
+
Retrieve the quaternion components representing a rotation
|
|
2949
|
+
"""
|
|
2675
2950
|
|
|
2676
2951
|
_bl_idname = "FunctionNodeRotationToQuaternion"
|
|
2677
2952
|
node: bpy.types.FunctionNodeRotationToQuaternion
|
|
@@ -2709,7 +2984,9 @@ class RotationToQuaternion(NodeBuilder):
|
|
|
2709
2984
|
|
|
2710
2985
|
|
|
2711
2986
|
class SeparateBundle(NodeBuilder):
|
|
2712
|
-
"""
|
|
2987
|
+
"""
|
|
2988
|
+
Split a bundle into multiple sockets.
|
|
2989
|
+
"""
|
|
2713
2990
|
|
|
2714
2991
|
_bl_idname = "NodeSeparateBundle"
|
|
2715
2992
|
node: bpy.types.Node
|
|
@@ -2740,7 +3017,9 @@ class SeparateBundle(NodeBuilder):
|
|
|
2740
3017
|
|
|
2741
3018
|
|
|
2742
3019
|
class SeparateColor(NodeBuilder):
|
|
2743
|
-
"""
|
|
3020
|
+
"""
|
|
3021
|
+
Split a color into separate channels, based on a particular color model
|
|
3022
|
+
"""
|
|
2744
3023
|
|
|
2745
3024
|
_bl_idname = "FunctionNodeSeparateColor"
|
|
2746
3025
|
node: bpy.types.FunctionNodeSeparateColor
|
|
@@ -2791,7 +3070,9 @@ class SeparateColor(NodeBuilder):
|
|
|
2791
3070
|
|
|
2792
3071
|
|
|
2793
3072
|
class SeparateMatrix(NodeBuilder):
|
|
2794
|
-
"""
|
|
3073
|
+
"""
|
|
3074
|
+
Split a 4x4 matrix into its individual values
|
|
3075
|
+
"""
|
|
2795
3076
|
|
|
2796
3077
|
_bl_idname = "FunctionNodeSeparateMatrix"
|
|
2797
3078
|
node: bpy.types.FunctionNodeSeparateMatrix
|
|
@@ -2889,7 +3170,9 @@ class SeparateMatrix(NodeBuilder):
|
|
|
2889
3170
|
|
|
2890
3171
|
|
|
2891
3172
|
class SeparateTransform(NodeBuilder):
|
|
2892
|
-
"""
|
|
3173
|
+
"""
|
|
3174
|
+
Split a transformation matrix into a translation vector, a rotation, and a scale vector
|
|
3175
|
+
"""
|
|
2893
3176
|
|
|
2894
3177
|
_bl_idname = "FunctionNodeSeparateTransform"
|
|
2895
3178
|
node: bpy.types.FunctionNodeSeparateTransform
|
|
@@ -2922,7 +3205,9 @@ class SeparateTransform(NodeBuilder):
|
|
|
2922
3205
|
|
|
2923
3206
|
|
|
2924
3207
|
class SeparateXYZ(NodeBuilder):
|
|
2925
|
-
"""
|
|
3208
|
+
"""
|
|
3209
|
+
Split a vector into its X, Y, and Z components
|
|
3210
|
+
"""
|
|
2926
3211
|
|
|
2927
3212
|
_bl_idname = "ShaderNodeSeparateXYZ"
|
|
2928
3213
|
node: bpy.types.ShaderNodeSeparateXYZ
|
|
@@ -2955,7 +3240,9 @@ class SeparateXYZ(NodeBuilder):
|
|
|
2955
3240
|
|
|
2956
3241
|
|
|
2957
3242
|
class SliceString(NodeBuilder):
|
|
2958
|
-
"""
|
|
3243
|
+
"""
|
|
3244
|
+
Extract a string segment from a larger string
|
|
3245
|
+
"""
|
|
2959
3246
|
|
|
2960
3247
|
_bl_idname = "FunctionNodeSliceString"
|
|
2961
3248
|
node: bpy.types.FunctionNodeSliceString
|
|
@@ -2993,7 +3280,9 @@ class SliceString(NodeBuilder):
|
|
|
2993
3280
|
|
|
2994
3281
|
|
|
2995
3282
|
class StringLength(NodeBuilder):
|
|
2996
|
-
"""
|
|
3283
|
+
"""
|
|
3284
|
+
Output the number of characters in the given string
|
|
3285
|
+
"""
|
|
2997
3286
|
|
|
2998
3287
|
_bl_idname = "FunctionNodeStringLength"
|
|
2999
3288
|
node: bpy.types.FunctionNodeStringLength
|
|
@@ -3016,7 +3305,9 @@ class StringLength(NodeBuilder):
|
|
|
3016
3305
|
|
|
3017
3306
|
|
|
3018
3307
|
class StringToValue(NodeBuilder):
|
|
3019
|
-
"""
|
|
3308
|
+
"""
|
|
3309
|
+
Derive a numeric value from a given string representation
|
|
3310
|
+
"""
|
|
3020
3311
|
|
|
3021
3312
|
_bl_idname = "FunctionNodeStringToValue"
|
|
3022
3313
|
node: bpy.types.FunctionNodeStringToValue
|
|
@@ -3067,7 +3358,9 @@ class StringToValue(NodeBuilder):
|
|
|
3067
3358
|
|
|
3068
3359
|
|
|
3069
3360
|
class Switch(NodeBuilder):
|
|
3070
|
-
"""
|
|
3361
|
+
"""
|
|
3362
|
+
Switch between two inputs
|
|
3363
|
+
"""
|
|
3071
3364
|
|
|
3072
3365
|
_bl_idname = "GeometryNodeSwitch"
|
|
3073
3366
|
node: bpy.types.GeometryNodeSwitch
|
|
@@ -3331,7 +3624,9 @@ class Switch(NodeBuilder):
|
|
|
3331
3624
|
|
|
3332
3625
|
|
|
3333
3626
|
class TransformDirection(NodeBuilder):
|
|
3334
|
-
"""
|
|
3627
|
+
"""
|
|
3628
|
+
Apply a transformation matrix (excluding translation) to the given vector
|
|
3629
|
+
"""
|
|
3335
3630
|
|
|
3336
3631
|
_bl_idname = "FunctionNodeTransformDirection"
|
|
3337
3632
|
node: bpy.types.FunctionNodeTransformDirection
|
|
@@ -3363,7 +3658,9 @@ class TransformDirection(NodeBuilder):
|
|
|
3363
3658
|
|
|
3364
3659
|
|
|
3365
3660
|
class TransformPoint(NodeBuilder):
|
|
3366
|
-
"""
|
|
3661
|
+
"""
|
|
3662
|
+
Apply a transformation matrix to the given vector
|
|
3663
|
+
"""
|
|
3367
3664
|
|
|
3368
3665
|
_bl_idname = "FunctionNodeTransformPoint"
|
|
3369
3666
|
node: bpy.types.FunctionNodeTransformPoint
|
|
@@ -3395,7 +3692,9 @@ class TransformPoint(NodeBuilder):
|
|
|
3395
3692
|
|
|
3396
3693
|
|
|
3397
3694
|
class TransposeMatrix(NodeBuilder):
|
|
3398
|
-
"""
|
|
3695
|
+
"""
|
|
3696
|
+
Flip a matrix over its diagonal, turning columns into rows and vice-versa
|
|
3697
|
+
"""
|
|
3399
3698
|
|
|
3400
3699
|
_bl_idname = "FunctionNodeTransposeMatrix"
|
|
3401
3700
|
node: bpy.types.FunctionNodeTransposeMatrix
|
|
@@ -3418,7 +3717,9 @@ class TransposeMatrix(NodeBuilder):
|
|
|
3418
3717
|
|
|
3419
3718
|
|
|
3420
3719
|
class UVUnwrap(NodeBuilder):
|
|
3421
|
-
"""
|
|
3720
|
+
"""
|
|
3721
|
+
Generate a UV map based on seam edges
|
|
3722
|
+
"""
|
|
3422
3723
|
|
|
3423
3724
|
_bl_idname = "GeometryNodeUVUnwrap"
|
|
3424
3725
|
node: bpy.types.GeometryNodeUVUnwrap
|
|
@@ -3474,7 +3775,9 @@ class UVUnwrap(NodeBuilder):
|
|
|
3474
3775
|
|
|
3475
3776
|
|
|
3476
3777
|
class ValueToString(NodeBuilder):
|
|
3477
|
-
"""
|
|
3778
|
+
"""
|
|
3779
|
+
Generate a string representation of the given input value
|
|
3780
|
+
"""
|
|
3478
3781
|
|
|
3479
3782
|
_bl_idname = "FunctionNodeValueToString"
|
|
3480
3783
|
node: bpy.types.FunctionNodeValueToString
|