nodebpy 0.1.1__py3-none-any.whl → 0.2.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 +786 -316
- nodebpy/nodes/__init__.py +641 -10
- nodebpy/nodes/attribute.py +345 -389
- nodebpy/nodes/color.py +72 -0
- nodebpy/nodes/converter.py +3527 -0
- nodebpy/nodes/experimental.py +312 -0
- nodebpy/nodes/geometry.py +3677 -4717
- nodebpy/nodes/grid.py +1713 -0
- nodebpy/nodes/group.py +17 -0
- nodebpy/nodes/input.py +1821 -316
- nodebpy/nodes/interface.py +519 -0
- nodebpy/nodes/manual.py +2022 -0
- nodebpy/nodes/output.py +85 -0
- nodebpy/nodes/texture.py +930 -0
- nodebpy/nodes/vector.py +528 -0
- nodebpy/nodes/zone.py +442 -0
- nodebpy/screenshot.py +2 -1
- nodebpy/sockets.py +12 -12
- nodebpy/types.py +445 -0
- {nodebpy-0.1.1.dist-info → nodebpy-0.2.1.dist-info}/METADATA +5 -5
- nodebpy-0.2.1.dist-info/RECORD +26 -0
- nodebpy/nodes/curve.py +0 -2006
- nodebpy/nodes/manually_specified.py +0 -1382
- nodebpy/nodes/mesh.py +0 -1408
- nodebpy/nodes/types.py +0 -119
- nodebpy/nodes/utilities.py +0 -2344
- nodebpy-0.1.1.dist-info/RECORD +0 -19
- {nodebpy-0.1.1.dist-info → nodebpy-0.2.1.dist-info}/WHEEL +0 -0
- {nodebpy-0.1.1.dist-info → nodebpy-0.2.1.dist-info}/entry_points.txt +0 -0
nodebpy/nodes/input.py
CHANGED
|
@@ -1,39 +1,127 @@
|
|
|
1
|
-
|
|
2
|
-
Auto-generated Blender Geometry Node classes.
|
|
1
|
+
from typing import Literal
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
This file is generated by molecularnodes/nodes/generator.py
|
|
3
|
+
import bpy
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
from ..builder import NodeBuilder, SocketLinker
|
|
6
|
+
from ..types import (
|
|
7
|
+
TYPE_INPUT_BOOLEAN,
|
|
8
|
+
TYPE_INPUT_INT,
|
|
9
|
+
TYPE_INPUT_MENU,
|
|
10
|
+
TYPE_INPUT_STRING,
|
|
11
|
+
TYPE_INPUT_OBJECT,
|
|
12
|
+
TYPE_INPUT_COLLECTION,
|
|
13
|
+
TYPE_INPUT_IMAGE,
|
|
14
|
+
TYPE_INPUT_VALUE,
|
|
15
|
+
TYPE_INPUT_VECTOR,
|
|
16
|
+
)
|
|
8
17
|
|
|
9
|
-
KNOWN LIMITATIONS:
|
|
10
|
-
- Dynamic multi-input/output sockets are not yet supported
|
|
11
|
-
(these are the unnamed sockets that appear in the UI for nodes like
|
|
12
|
-
"Evaluate Closure", "Join Geometry", etc. that allow dragging in
|
|
13
|
-
multiple connections)
|
|
14
|
-
- TODO: Add support for dynamic socket creation
|
|
15
|
-
"""
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
class Cursor3D(NodeBuilder):
|
|
20
|
+
"""The scene's 3D cursor location and rotation"""
|
|
21
|
+
|
|
22
|
+
_bl_idname = "GeometryNodeTool3DCursor"
|
|
23
|
+
node: bpy.types.GeometryNodeTool3DCursor
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
super().__init__()
|
|
27
|
+
key_args = {}
|
|
28
|
+
|
|
29
|
+
self._establish_links(**key_args)
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def o_location(self) -> SocketLinker:
|
|
33
|
+
"""Output socket: Location"""
|
|
34
|
+
return self._output("Location")
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def o_rotation(self) -> SocketLinker:
|
|
38
|
+
"""Output socket: Rotation"""
|
|
39
|
+
return self._output("Rotation")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ActiveCamera(NodeBuilder):
|
|
43
|
+
"""Retrieve the scene's active camera"""
|
|
44
|
+
|
|
45
|
+
_bl_idname = "GeometryNodeInputActiveCamera"
|
|
46
|
+
node: bpy.types.GeometryNodeInputActiveCamera
|
|
47
|
+
|
|
48
|
+
def __init__(self):
|
|
49
|
+
super().__init__()
|
|
50
|
+
key_args = {}
|
|
51
|
+
|
|
52
|
+
self._establish_links(**key_args)
|
|
53
|
+
|
|
54
|
+
@property
|
|
55
|
+
def o_active_camera(self) -> SocketLinker:
|
|
56
|
+
"""Output socket: Active Camera"""
|
|
57
|
+
return self._output("Active Camera")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class ActiveElement(NodeBuilder):
|
|
61
|
+
"""Active element indices of the edited geometry, for tool execution"""
|
|
62
|
+
|
|
63
|
+
_bl_idname = "GeometryNodeToolActiveElement"
|
|
64
|
+
node: bpy.types.GeometryNodeToolActiveElement
|
|
65
|
+
|
|
66
|
+
def __init__(self, domain: Literal["POINT", "EDGE", "FACE", "LAYER"] = "POINT"):
|
|
67
|
+
super().__init__()
|
|
68
|
+
key_args = {}
|
|
69
|
+
self.domain = domain
|
|
70
|
+
self._establish_links(**key_args)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def point(cls) -> "ActiveElement":
|
|
74
|
+
"""Create Active Element with operation 'Point'."""
|
|
75
|
+
return cls(domain="POINT")
|
|
76
|
+
|
|
77
|
+
@classmethod
|
|
78
|
+
def edge(cls) -> "ActiveElement":
|
|
79
|
+
"""Create Active Element with operation 'Edge'."""
|
|
80
|
+
return cls(domain="EDGE")
|
|
81
|
+
|
|
82
|
+
@classmethod
|
|
83
|
+
def face(cls) -> "ActiveElement":
|
|
84
|
+
"""Create Active Element with operation 'Face'."""
|
|
85
|
+
return cls(domain="FACE")
|
|
86
|
+
|
|
87
|
+
@classmethod
|
|
88
|
+
def layer(cls) -> "ActiveElement":
|
|
89
|
+
"""Create Active Element with operation 'Layer'."""
|
|
90
|
+
return cls(domain="LAYER")
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def o_index(self) -> SocketLinker:
|
|
94
|
+
"""Output socket: Index"""
|
|
95
|
+
return self._output("Index")
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def o_exists(self) -> SocketLinker:
|
|
99
|
+
"""Output socket: Exists"""
|
|
100
|
+
return self._output("Exists")
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def domain(self) -> Literal["POINT", "EDGE", "FACE", "LAYER"]:
|
|
104
|
+
return self.node.domain
|
|
105
|
+
|
|
106
|
+
@domain.setter
|
|
107
|
+
def domain(self, value: Literal["POINT", "EDGE", "FACE", "LAYER"]):
|
|
108
|
+
self.node.domain = value
|
|
21
109
|
|
|
22
110
|
|
|
23
111
|
class Boolean(NodeBuilder):
|
|
24
112
|
"""Provide a True/False value that can be connected to other nodes in the tree"""
|
|
25
113
|
|
|
26
|
-
|
|
114
|
+
_bl_idname = "FunctionNodeInputBool"
|
|
27
115
|
node: bpy.types.FunctionNodeInputBool
|
|
28
116
|
|
|
29
|
-
def __init__(self, boolean: bool = False
|
|
117
|
+
def __init__(self, boolean: bool = False):
|
|
30
118
|
super().__init__()
|
|
31
|
-
key_args =
|
|
119
|
+
key_args = {}
|
|
32
120
|
self.boolean = boolean
|
|
33
121
|
self._establish_links(**key_args)
|
|
34
122
|
|
|
35
123
|
@property
|
|
36
|
-
def o_boolean(self) ->
|
|
124
|
+
def o_boolean(self) -> SocketLinker:
|
|
37
125
|
"""Output socket: Boolean"""
|
|
38
126
|
return self._output("Boolean")
|
|
39
127
|
|
|
@@ -46,407 +134,1421 @@ class Boolean(NodeBuilder):
|
|
|
46
134
|
self.node.boolean = value
|
|
47
135
|
|
|
48
136
|
|
|
49
|
-
class
|
|
50
|
-
"""
|
|
137
|
+
class CameraInfo(NodeBuilder):
|
|
138
|
+
"""Retrieve information from a camera object"""
|
|
51
139
|
|
|
52
|
-
|
|
53
|
-
node: bpy.types.
|
|
140
|
+
_bl_idname = "GeometryNodeCameraInfo"
|
|
141
|
+
node: bpy.types.GeometryNodeCameraInfo
|
|
54
142
|
|
|
55
|
-
def __init__(self,
|
|
143
|
+
def __init__(self, camera: TYPE_INPUT_OBJECT = None):
|
|
56
144
|
super().__init__()
|
|
57
|
-
key_args =
|
|
58
|
-
|
|
145
|
+
key_args = {"Camera": camera}
|
|
146
|
+
|
|
59
147
|
self._establish_links(**key_args)
|
|
60
148
|
|
|
61
149
|
@property
|
|
62
|
-
def
|
|
63
|
-
"""
|
|
64
|
-
return self.
|
|
150
|
+
def i_camera(self) -> SocketLinker:
|
|
151
|
+
"""Input socket: Camera"""
|
|
152
|
+
return self._input("Camera")
|
|
65
153
|
|
|
66
154
|
@property
|
|
67
|
-
def
|
|
68
|
-
|
|
155
|
+
def o_projection_matrix(self) -> SocketLinker:
|
|
156
|
+
"""Output socket: Projection Matrix"""
|
|
157
|
+
return self._output("Projection Matrix")
|
|
69
158
|
|
|
70
|
-
@
|
|
71
|
-
def
|
|
72
|
-
|
|
159
|
+
@property
|
|
160
|
+
def o_focal_length(self) -> SocketLinker:
|
|
161
|
+
"""Output socket: Focal Length"""
|
|
162
|
+
return self._output("Focal Length")
|
|
73
163
|
|
|
164
|
+
@property
|
|
165
|
+
def o_sensor(self) -> SocketLinker:
|
|
166
|
+
"""Output socket: Sensor"""
|
|
167
|
+
return self._output("Sensor")
|
|
74
168
|
|
|
75
|
-
|
|
76
|
-
|
|
169
|
+
@property
|
|
170
|
+
def o_shift(self) -> SocketLinker:
|
|
171
|
+
"""Output socket: Shift"""
|
|
172
|
+
return self._output("Shift")
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def o_clip_start(self) -> SocketLinker:
|
|
176
|
+
"""Output socket: Clip Start"""
|
|
177
|
+
return self._output("Clip Start")
|
|
178
|
+
|
|
179
|
+
@property
|
|
180
|
+
def o_clip_end(self) -> SocketLinker:
|
|
181
|
+
"""Output socket: Clip End"""
|
|
182
|
+
return self._output("Clip End")
|
|
183
|
+
|
|
184
|
+
@property
|
|
185
|
+
def o_focus_distance(self) -> SocketLinker:
|
|
186
|
+
"""Output socket: Focus Distance"""
|
|
187
|
+
return self._output("Focus Distance")
|
|
188
|
+
|
|
189
|
+
@property
|
|
190
|
+
def o_is_orthographic(self) -> SocketLinker:
|
|
191
|
+
"""Output socket: Is Orthographic"""
|
|
192
|
+
return self._output("Is Orthographic")
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def o_orthographic_scale(self) -> SocketLinker:
|
|
196
|
+
"""Output socket: Orthographic Scale"""
|
|
197
|
+
return self._output("Orthographic Scale")
|
|
77
198
|
|
|
78
|
-
name = "FunctionNodeInputInt"
|
|
79
|
-
node: bpy.types.FunctionNodeInputInt
|
|
80
199
|
|
|
81
|
-
|
|
200
|
+
class Collection(NodeBuilder):
|
|
201
|
+
"""Output a single collection"""
|
|
202
|
+
|
|
203
|
+
_bl_idname = "GeometryNodeInputCollection"
|
|
204
|
+
node: bpy.types.GeometryNodeInputCollection
|
|
205
|
+
|
|
206
|
+
def __init__(self):
|
|
82
207
|
super().__init__()
|
|
83
|
-
key_args =
|
|
84
|
-
|
|
208
|
+
key_args = {}
|
|
209
|
+
|
|
85
210
|
self._establish_links(**key_args)
|
|
86
211
|
|
|
87
212
|
@property
|
|
88
|
-
def
|
|
89
|
-
"""Output socket:
|
|
90
|
-
return self._output("
|
|
213
|
+
def o_collection(self) -> SocketLinker:
|
|
214
|
+
"""Output socket: Collection"""
|
|
215
|
+
return self._output("Collection")
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class CollectionInfo(NodeBuilder):
|
|
219
|
+
"""Retrieve geometry instances from a collection"""
|
|
220
|
+
|
|
221
|
+
_bl_idname = "GeometryNodeCollectionInfo"
|
|
222
|
+
node: bpy.types.GeometryNodeCollectionInfo
|
|
223
|
+
|
|
224
|
+
def __init__(
|
|
225
|
+
self,
|
|
226
|
+
collection: TYPE_INPUT_COLLECTION = None,
|
|
227
|
+
separate_children: TYPE_INPUT_BOOLEAN = False,
|
|
228
|
+
reset_children: TYPE_INPUT_BOOLEAN = False,
|
|
229
|
+
*,
|
|
230
|
+
transform_space: Literal["ORIGINAL", "RELATIVE"] = "ORIGINAL",
|
|
231
|
+
):
|
|
232
|
+
super().__init__()
|
|
233
|
+
key_args = {
|
|
234
|
+
"Collection": collection,
|
|
235
|
+
"Separate Children": separate_children,
|
|
236
|
+
"Reset Children": reset_children,
|
|
237
|
+
}
|
|
238
|
+
self.transform_space = transform_space
|
|
239
|
+
self._establish_links(**key_args)
|
|
91
240
|
|
|
92
241
|
@property
|
|
93
|
-
def
|
|
94
|
-
|
|
242
|
+
def i_collection(self) -> SocketLinker:
|
|
243
|
+
"""Input socket: Collection"""
|
|
244
|
+
return self._input("Collection")
|
|
95
245
|
|
|
96
|
-
@
|
|
97
|
-
def
|
|
98
|
-
|
|
246
|
+
@property
|
|
247
|
+
def i_separate_children(self) -> SocketLinker:
|
|
248
|
+
"""Input socket: Separate Children"""
|
|
249
|
+
return self._input("Separate Children")
|
|
99
250
|
|
|
251
|
+
@property
|
|
252
|
+
def i_reset_children(self) -> SocketLinker:
|
|
253
|
+
"""Input socket: Reset Children"""
|
|
254
|
+
return self._input("Reset Children")
|
|
100
255
|
|
|
101
|
-
|
|
102
|
-
|
|
256
|
+
@property
|
|
257
|
+
def o_instances(self) -> SocketLinker:
|
|
258
|
+
"""Output socket: Instances"""
|
|
259
|
+
return self._output("Instances")
|
|
103
260
|
|
|
104
|
-
|
|
105
|
-
|
|
261
|
+
@property
|
|
262
|
+
def transform_space(self) -> Literal["ORIGINAL", "RELATIVE"]:
|
|
263
|
+
return self.node.transform_space
|
|
106
264
|
|
|
107
|
-
|
|
265
|
+
@transform_space.setter
|
|
266
|
+
def transform_space(self, value: Literal["ORIGINAL", "RELATIVE"]):
|
|
267
|
+
self.node.transform_space = value
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class Color(NodeBuilder):
|
|
271
|
+
"""Output a color value chosen with the color picker widget"""
|
|
272
|
+
|
|
273
|
+
_bl_idname = "FunctionNodeInputColor"
|
|
274
|
+
node: bpy.types.FunctionNodeInputColor
|
|
275
|
+
|
|
276
|
+
def __init__(
|
|
277
|
+
self, value: tuple[float, float, float, float] = (0.735, 0.735, 0.735, 1.0)
|
|
278
|
+
):
|
|
108
279
|
super().__init__()
|
|
109
|
-
key_args =
|
|
110
|
-
self.
|
|
280
|
+
key_args = {}
|
|
281
|
+
self.value = value
|
|
111
282
|
self._establish_links(**key_args)
|
|
112
283
|
|
|
113
284
|
@property
|
|
114
|
-
def
|
|
115
|
-
"""Output socket:
|
|
116
|
-
return self._output("
|
|
285
|
+
def o_color(self) -> SocketLinker:
|
|
286
|
+
"""Output socket: Color"""
|
|
287
|
+
return self._output("Color")
|
|
117
288
|
|
|
118
289
|
@property
|
|
119
|
-
def
|
|
120
|
-
return self.node.
|
|
290
|
+
def value(self) -> tuple[float, float, float, float]:
|
|
291
|
+
return self.node.value
|
|
121
292
|
|
|
122
|
-
@
|
|
123
|
-
def
|
|
124
|
-
self.node.
|
|
293
|
+
@value.setter
|
|
294
|
+
def value(self, value: tuple[float, float, float, float]):
|
|
295
|
+
self.node.value = value
|
|
125
296
|
|
|
126
297
|
|
|
127
|
-
class
|
|
128
|
-
"""
|
|
298
|
+
class CornersOfEdge(NodeBuilder):
|
|
299
|
+
"""Retrieve face corners connected to edges"""
|
|
129
300
|
|
|
130
|
-
|
|
131
|
-
node: bpy.types.
|
|
301
|
+
_bl_idname = "GeometryNodeCornersOfEdge"
|
|
302
|
+
node: bpy.types.GeometryNodeCornersOfEdge
|
|
132
303
|
|
|
133
|
-
def __init__(
|
|
304
|
+
def __init__(
|
|
305
|
+
self,
|
|
306
|
+
edge_index: TYPE_INPUT_INT = 0,
|
|
307
|
+
weights: TYPE_INPUT_VALUE = 0.0,
|
|
308
|
+
sort_index: TYPE_INPUT_INT = 0,
|
|
309
|
+
):
|
|
134
310
|
super().__init__()
|
|
135
|
-
key_args =
|
|
311
|
+
key_args = {
|
|
312
|
+
"Edge Index": edge_index,
|
|
313
|
+
"Weights": weights,
|
|
314
|
+
"Sort Index": sort_index,
|
|
315
|
+
}
|
|
136
316
|
|
|
137
317
|
self._establish_links(**key_args)
|
|
138
318
|
|
|
139
319
|
@property
|
|
140
|
-
def
|
|
141
|
-
"""
|
|
142
|
-
return self.
|
|
320
|
+
def i_edge_index(self) -> SocketLinker:
|
|
321
|
+
"""Input socket: Edge Index"""
|
|
322
|
+
return self._input("Edge Index")
|
|
143
323
|
|
|
144
324
|
@property
|
|
145
|
-
def
|
|
146
|
-
"""
|
|
147
|
-
return self.
|
|
325
|
+
def i_weights(self) -> SocketLinker:
|
|
326
|
+
"""Input socket: Weights"""
|
|
327
|
+
return self._input("Weights")
|
|
328
|
+
|
|
329
|
+
@property
|
|
330
|
+
def i_sort_index(self) -> SocketLinker:
|
|
331
|
+
"""Input socket: Sort Index"""
|
|
332
|
+
return self._input("Sort Index")
|
|
148
333
|
|
|
334
|
+
@property
|
|
335
|
+
def o_corner_index(self) -> SocketLinker:
|
|
336
|
+
"""Output socket: Corner Index"""
|
|
337
|
+
return self._output("Corner Index")
|
|
149
338
|
|
|
150
|
-
|
|
151
|
-
|
|
339
|
+
@property
|
|
340
|
+
def o_total(self) -> SocketLinker:
|
|
341
|
+
"""Output socket: Total"""
|
|
342
|
+
return self._output("Total")
|
|
152
343
|
|
|
153
|
-
name = "FunctionNodeInputString"
|
|
154
|
-
node: bpy.types.FunctionNodeInputString
|
|
155
344
|
|
|
156
|
-
|
|
345
|
+
class CornersOfFace(NodeBuilder):
|
|
346
|
+
"""Retrieve corners that make up a face"""
|
|
347
|
+
|
|
348
|
+
_bl_idname = "GeometryNodeCornersOfFace"
|
|
349
|
+
node: bpy.types.GeometryNodeCornersOfFace
|
|
350
|
+
|
|
351
|
+
def __init__(
|
|
352
|
+
self,
|
|
353
|
+
face_index: TYPE_INPUT_INT = 0,
|
|
354
|
+
weights: TYPE_INPUT_VALUE = 0.0,
|
|
355
|
+
sort_index: TYPE_INPUT_INT = 0,
|
|
356
|
+
):
|
|
157
357
|
super().__init__()
|
|
158
|
-
key_args =
|
|
159
|
-
|
|
358
|
+
key_args = {
|
|
359
|
+
"Face Index": face_index,
|
|
360
|
+
"Weights": weights,
|
|
361
|
+
"Sort Index": sort_index,
|
|
362
|
+
}
|
|
363
|
+
|
|
160
364
|
self._establish_links(**key_args)
|
|
161
365
|
|
|
162
366
|
@property
|
|
163
|
-
def
|
|
164
|
-
"""
|
|
165
|
-
return self.
|
|
367
|
+
def i_face_index(self) -> SocketLinker:
|
|
368
|
+
"""Input socket: Face Index"""
|
|
369
|
+
return self._input("Face Index")
|
|
166
370
|
|
|
167
371
|
@property
|
|
168
|
-
def
|
|
169
|
-
|
|
372
|
+
def i_weights(self) -> SocketLinker:
|
|
373
|
+
"""Input socket: Weights"""
|
|
374
|
+
return self._input("Weights")
|
|
170
375
|
|
|
171
|
-
@
|
|
172
|
-
def
|
|
173
|
-
|
|
376
|
+
@property
|
|
377
|
+
def i_sort_index(self) -> SocketLinker:
|
|
378
|
+
"""Input socket: Sort Index"""
|
|
379
|
+
return self._input("Sort Index")
|
|
380
|
+
|
|
381
|
+
@property
|
|
382
|
+
def o_corner_index(self) -> SocketLinker:
|
|
383
|
+
"""Output socket: Corner Index"""
|
|
384
|
+
return self._output("Corner Index")
|
|
385
|
+
|
|
386
|
+
@property
|
|
387
|
+
def o_total(self) -> SocketLinker:
|
|
388
|
+
"""Output socket: Total"""
|
|
389
|
+
return self._output("Total")
|
|
174
390
|
|
|
175
391
|
|
|
176
|
-
class
|
|
177
|
-
"""
|
|
392
|
+
class CornersOfVertex(NodeBuilder):
|
|
393
|
+
"""Retrieve face corners connected to vertices"""
|
|
178
394
|
|
|
179
|
-
|
|
180
|
-
node: bpy.types.
|
|
395
|
+
_bl_idname = "GeometryNodeCornersOfVertex"
|
|
396
|
+
node: bpy.types.GeometryNodeCornersOfVertex
|
|
181
397
|
|
|
182
398
|
def __init__(
|
|
183
399
|
self,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
**kwargs,
|
|
400
|
+
vertex_index: TYPE_INPUT_INT = 0,
|
|
401
|
+
weights: TYPE_INPUT_VALUE = 0.0,
|
|
402
|
+
sort_index: TYPE_INPUT_INT = 0,
|
|
188
403
|
):
|
|
189
404
|
super().__init__()
|
|
190
|
-
key_args = {
|
|
191
|
-
|
|
405
|
+
key_args = {
|
|
406
|
+
"Vertex Index": vertex_index,
|
|
407
|
+
"Weights": weights,
|
|
408
|
+
"Sort Index": sort_index,
|
|
409
|
+
}
|
|
192
410
|
|
|
193
411
|
self._establish_links(**key_args)
|
|
194
412
|
|
|
195
413
|
@property
|
|
196
|
-
def
|
|
197
|
-
"""Input socket:
|
|
198
|
-
return self._input("
|
|
414
|
+
def i_vertex_index(self) -> SocketLinker:
|
|
415
|
+
"""Input socket: Vertex Index"""
|
|
416
|
+
return self._input("Vertex Index")
|
|
199
417
|
|
|
200
418
|
@property
|
|
201
|
-
def
|
|
202
|
-
"""Input socket:
|
|
203
|
-
return self._input("
|
|
419
|
+
def i_weights(self) -> SocketLinker:
|
|
420
|
+
"""Input socket: Weights"""
|
|
421
|
+
return self._input("Weights")
|
|
204
422
|
|
|
205
423
|
@property
|
|
206
|
-
def
|
|
207
|
-
"""Input socket:"""
|
|
208
|
-
return self._input("
|
|
424
|
+
def i_sort_index(self) -> SocketLinker:
|
|
425
|
+
"""Input socket: Sort Index"""
|
|
426
|
+
return self._input("Sort Index")
|
|
209
427
|
|
|
210
428
|
@property
|
|
211
|
-
def
|
|
212
|
-
"""Output socket: Index"""
|
|
213
|
-
return self._output("Index")
|
|
429
|
+
def o_corner_index(self) -> SocketLinker:
|
|
430
|
+
"""Output socket: Corner Index"""
|
|
431
|
+
return self._output("Corner Index")
|
|
214
432
|
|
|
215
433
|
@property
|
|
216
|
-
def
|
|
217
|
-
"""Output socket:"""
|
|
218
|
-
return self._output("
|
|
434
|
+
def o_total(self) -> SocketLinker:
|
|
435
|
+
"""Output socket: Total"""
|
|
436
|
+
return self._output("Total")
|
|
219
437
|
|
|
220
438
|
|
|
221
|
-
class
|
|
222
|
-
"""Retrieve the
|
|
439
|
+
class CurveHandlePositions(NodeBuilder):
|
|
440
|
+
"""Retrieve the position of each Bézier control point's handles"""
|
|
223
441
|
|
|
224
|
-
|
|
225
|
-
node: bpy.types.
|
|
442
|
+
_bl_idname = "GeometryNodeInputCurveHandlePositions"
|
|
443
|
+
node: bpy.types.GeometryNodeInputCurveHandlePositions
|
|
226
444
|
|
|
227
|
-
def __init__(self,
|
|
445
|
+
def __init__(self, relative: TYPE_INPUT_BOOLEAN = False):
|
|
228
446
|
super().__init__()
|
|
229
|
-
key_args =
|
|
447
|
+
key_args = {"Relative": relative}
|
|
230
448
|
|
|
231
449
|
self._establish_links(**key_args)
|
|
232
450
|
|
|
233
451
|
@property
|
|
234
|
-
def
|
|
235
|
-
"""
|
|
236
|
-
return self.
|
|
452
|
+
def i_relative(self) -> SocketLinker:
|
|
453
|
+
"""Input socket: Relative"""
|
|
454
|
+
return self._input("Relative")
|
|
237
455
|
|
|
456
|
+
@property
|
|
457
|
+
def o_left(self) -> SocketLinker:
|
|
458
|
+
"""Output socket: Left"""
|
|
459
|
+
return self._output("Left")
|
|
238
460
|
|
|
239
|
-
|
|
240
|
-
|
|
461
|
+
@property
|
|
462
|
+
def o_right(self) -> SocketLinker:
|
|
463
|
+
"""Output socket: Right"""
|
|
464
|
+
return self._output("Right")
|
|
241
465
|
|
|
242
|
-
name = "GeometryNodeInputCollection"
|
|
243
|
-
node: bpy.types.GeometryNodeInputCollection
|
|
244
466
|
|
|
245
|
-
|
|
467
|
+
class CurveTangent(NodeBuilder):
|
|
468
|
+
"""Retrieve the direction of curves at each control point"""
|
|
469
|
+
|
|
470
|
+
_bl_idname = "GeometryNodeInputTangent"
|
|
471
|
+
node: bpy.types.GeometryNodeInputTangent
|
|
472
|
+
|
|
473
|
+
def __init__(self):
|
|
246
474
|
super().__init__()
|
|
247
|
-
key_args =
|
|
475
|
+
key_args = {}
|
|
248
476
|
|
|
249
477
|
self._establish_links(**key_args)
|
|
250
478
|
|
|
251
479
|
@property
|
|
252
|
-
def
|
|
253
|
-
"""Output socket:
|
|
254
|
-
return self._output("
|
|
480
|
+
def o_tangent(self) -> SocketLinker:
|
|
481
|
+
"""Output socket: Tangent"""
|
|
482
|
+
return self._output("Tangent")
|
|
255
483
|
|
|
256
484
|
|
|
257
|
-
class
|
|
258
|
-
"""Retrieve
|
|
485
|
+
class CurveTilt(NodeBuilder):
|
|
486
|
+
"""Retrieve the angle at each control point used to twist the curve's normal around its tangent"""
|
|
259
487
|
|
|
260
|
-
|
|
261
|
-
node: bpy.types.
|
|
488
|
+
_bl_idname = "GeometryNodeInputCurveTilt"
|
|
489
|
+
node: bpy.types.GeometryNodeInputCurveTilt
|
|
262
490
|
|
|
263
|
-
def __init__(self
|
|
491
|
+
def __init__(self):
|
|
264
492
|
super().__init__()
|
|
265
|
-
key_args =
|
|
493
|
+
key_args = {}
|
|
266
494
|
|
|
267
495
|
self._establish_links(**key_args)
|
|
268
496
|
|
|
269
497
|
@property
|
|
270
|
-
def
|
|
271
|
-
"""Output socket:
|
|
272
|
-
return self._output("
|
|
498
|
+
def o_tilt(self) -> SocketLinker:
|
|
499
|
+
"""Output socket: Tilt"""
|
|
500
|
+
return self._output("Tilt")
|
|
273
501
|
|
|
274
502
|
|
|
275
|
-
class
|
|
276
|
-
"""Retrieve
|
|
503
|
+
class CurveOfPoint(NodeBuilder):
|
|
504
|
+
"""Retrieve the curve a control point is part of"""
|
|
277
505
|
|
|
278
|
-
|
|
279
|
-
node: bpy.types.
|
|
506
|
+
_bl_idname = "GeometryNodeCurveOfPoint"
|
|
507
|
+
node: bpy.types.GeometryNodeCurveOfPoint
|
|
280
508
|
|
|
281
|
-
def __init__(self,
|
|
509
|
+
def __init__(self, point_index: TYPE_INPUT_INT = 0):
|
|
282
510
|
super().__init__()
|
|
283
|
-
key_args =
|
|
511
|
+
key_args = {"Point Index": point_index}
|
|
284
512
|
|
|
285
513
|
self._establish_links(**key_args)
|
|
286
514
|
|
|
287
515
|
@property
|
|
288
|
-
def
|
|
289
|
-
"""
|
|
290
|
-
return self.
|
|
516
|
+
def i_point_index(self) -> SocketLinker:
|
|
517
|
+
"""Input socket: Point Index"""
|
|
518
|
+
return self._input("Point Index")
|
|
519
|
+
|
|
520
|
+
@property
|
|
521
|
+
def o_curve_index(self) -> SocketLinker:
|
|
522
|
+
"""Output socket: Curve Index"""
|
|
523
|
+
return self._output("Curve Index")
|
|
291
524
|
|
|
525
|
+
@property
|
|
526
|
+
def o_index_in_curve(self) -> SocketLinker:
|
|
527
|
+
"""Output socket: Index in Curve"""
|
|
528
|
+
return self._output("Index in Curve")
|
|
292
529
|
|
|
293
|
-
class Image(NodeBuilder):
|
|
294
|
-
"""Input an image data-block"""
|
|
295
530
|
|
|
296
|
-
|
|
297
|
-
|
|
531
|
+
class EdgeAngle(NodeBuilder):
|
|
532
|
+
"""The angle between the normals of connected manifold faces"""
|
|
533
|
+
|
|
534
|
+
_bl_idname = "GeometryNodeInputMeshEdgeAngle"
|
|
535
|
+
node: bpy.types.GeometryNodeInputMeshEdgeAngle
|
|
298
536
|
|
|
299
|
-
def __init__(self
|
|
537
|
+
def __init__(self):
|
|
300
538
|
super().__init__()
|
|
301
|
-
key_args =
|
|
539
|
+
key_args = {}
|
|
302
540
|
|
|
303
541
|
self._establish_links(**key_args)
|
|
304
542
|
|
|
305
543
|
@property
|
|
306
|
-
def
|
|
307
|
-
"""Output socket:
|
|
308
|
-
return self._output("
|
|
544
|
+
def o_unsigned_angle(self) -> SocketLinker:
|
|
545
|
+
"""Output socket: Unsigned Angle"""
|
|
546
|
+
return self._output("Unsigned Angle")
|
|
309
547
|
|
|
548
|
+
@property
|
|
549
|
+
def o_signed_angle(self) -> SocketLinker:
|
|
550
|
+
"""Output socket: Signed Angle"""
|
|
551
|
+
return self._output("Signed Angle")
|
|
310
552
|
|
|
311
|
-
class Index(NodeBuilder):
|
|
312
|
-
"""Retrieve an integer value indicating the position of each element in the list, starting at zero"""
|
|
313
553
|
|
|
314
|
-
|
|
315
|
-
|
|
554
|
+
class EdgeNeighbors(NodeBuilder):
|
|
555
|
+
"""Retrieve the number of faces that use each edge as one of their sides"""
|
|
316
556
|
|
|
317
|
-
|
|
557
|
+
_bl_idname = "GeometryNodeInputMeshEdgeNeighbors"
|
|
558
|
+
node: bpy.types.GeometryNodeInputMeshEdgeNeighbors
|
|
559
|
+
|
|
560
|
+
def __init__(self):
|
|
318
561
|
super().__init__()
|
|
319
|
-
key_args =
|
|
562
|
+
key_args = {}
|
|
320
563
|
|
|
321
564
|
self._establish_links(**key_args)
|
|
322
565
|
|
|
323
566
|
@property
|
|
324
|
-
def
|
|
325
|
-
"""Output socket:
|
|
326
|
-
return self._output("
|
|
567
|
+
def o_face_count(self) -> SocketLinker:
|
|
568
|
+
"""Output socket: Face Count"""
|
|
569
|
+
return self._output("Face Count")
|
|
327
570
|
|
|
328
571
|
|
|
329
|
-
class
|
|
330
|
-
"""
|
|
572
|
+
class EdgePathsToSelection(NodeBuilder):
|
|
573
|
+
"""Output a selection of edges by following paths across mesh edges"""
|
|
331
574
|
|
|
332
|
-
|
|
333
|
-
node: bpy.types.
|
|
575
|
+
_bl_idname = "GeometryNodeEdgePathsToSelection"
|
|
576
|
+
node: bpy.types.GeometryNodeEdgePathsToSelection
|
|
334
577
|
|
|
335
|
-
def __init__(
|
|
578
|
+
def __init__(
|
|
579
|
+
self,
|
|
580
|
+
start_vertices: TYPE_INPUT_BOOLEAN = True,
|
|
581
|
+
next_vertex_index: TYPE_INPUT_INT = -1,
|
|
582
|
+
):
|
|
336
583
|
super().__init__()
|
|
337
|
-
key_args = {
|
|
338
|
-
|
|
584
|
+
key_args = {
|
|
585
|
+
"Start Vertices": start_vertices,
|
|
586
|
+
"Next Vertex Index": next_vertex_index,
|
|
587
|
+
}
|
|
339
588
|
|
|
340
589
|
self._establish_links(**key_args)
|
|
341
590
|
|
|
342
591
|
@property
|
|
343
|
-
def
|
|
344
|
-
"""Input socket:
|
|
345
|
-
return self._input("
|
|
592
|
+
def i_start_vertices(self) -> SocketLinker:
|
|
593
|
+
"""Input socket: Start Vertices"""
|
|
594
|
+
return self._input("Start Vertices")
|
|
346
595
|
|
|
347
596
|
@property
|
|
348
|
-
def
|
|
349
|
-
"""
|
|
350
|
-
return self.
|
|
597
|
+
def i_next_vertex_index(self) -> SocketLinker:
|
|
598
|
+
"""Input socket: Next Vertex Index"""
|
|
599
|
+
return self._input("Next Vertex Index")
|
|
351
600
|
|
|
352
601
|
@property
|
|
353
|
-
def
|
|
354
|
-
"""Output socket:
|
|
355
|
-
return self._output("
|
|
602
|
+
def o_selection(self) -> SocketLinker:
|
|
603
|
+
"""Output socket: Selection"""
|
|
604
|
+
return self._output("Selection")
|
|
356
605
|
|
|
357
606
|
|
|
358
|
-
class
|
|
359
|
-
"""Retrieve
|
|
607
|
+
class EdgeVertices(NodeBuilder):
|
|
608
|
+
"""Retrieve topology information relating to each edge of a mesh"""
|
|
360
609
|
|
|
361
|
-
|
|
362
|
-
node: bpy.types.
|
|
610
|
+
_bl_idname = "GeometryNodeInputMeshEdgeVertices"
|
|
611
|
+
node: bpy.types.GeometryNodeInputMeshEdgeVertices
|
|
363
612
|
|
|
364
|
-
def __init__(self
|
|
613
|
+
def __init__(self):
|
|
365
614
|
super().__init__()
|
|
366
|
-
key_args =
|
|
615
|
+
key_args = {}
|
|
367
616
|
|
|
368
617
|
self._establish_links(**key_args)
|
|
369
618
|
|
|
370
619
|
@property
|
|
371
|
-
def
|
|
372
|
-
"""Output socket:
|
|
373
|
-
return self._output("
|
|
620
|
+
def o_vertex_index_1(self) -> SocketLinker:
|
|
621
|
+
"""Output socket: Vertex Index 1"""
|
|
622
|
+
return self._output("Vertex Index 1")
|
|
374
623
|
|
|
624
|
+
@property
|
|
625
|
+
def o_vertex_index_2(self) -> SocketLinker:
|
|
626
|
+
"""Output socket: Vertex Index 2"""
|
|
627
|
+
return self._output("Vertex Index 2")
|
|
375
628
|
|
|
376
|
-
|
|
377
|
-
|
|
629
|
+
@property
|
|
630
|
+
def o_position_1(self) -> SocketLinker:
|
|
631
|
+
"""Output socket: Position 1"""
|
|
632
|
+
return self._output("Position 1")
|
|
378
633
|
|
|
379
|
-
|
|
380
|
-
|
|
634
|
+
@property
|
|
635
|
+
def o_position_2(self) -> SocketLinker:
|
|
636
|
+
"""Output socket: Position 2"""
|
|
637
|
+
return self._output("Position 2")
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
class EdgesOfCorner(NodeBuilder):
|
|
641
|
+
"""Retrieve the edges on both sides of a face corner"""
|
|
642
|
+
|
|
643
|
+
_bl_idname = "GeometryNodeEdgesOfCorner"
|
|
644
|
+
node: bpy.types.GeometryNodeEdgesOfCorner
|
|
381
645
|
|
|
382
|
-
def __init__(self,
|
|
646
|
+
def __init__(self, corner_index: TYPE_INPUT_INT = 0):
|
|
383
647
|
super().__init__()
|
|
384
|
-
key_args =
|
|
648
|
+
key_args = {"Corner Index": corner_index}
|
|
385
649
|
|
|
386
650
|
self._establish_links(**key_args)
|
|
387
651
|
|
|
388
652
|
@property
|
|
389
|
-
def
|
|
390
|
-
"""
|
|
391
|
-
return self.
|
|
653
|
+
def i_corner_index(self) -> SocketLinker:
|
|
654
|
+
"""Input socket: Corner Index"""
|
|
655
|
+
return self._input("Corner Index")
|
|
392
656
|
|
|
657
|
+
@property
|
|
658
|
+
def o_next_edge_index(self) -> SocketLinker:
|
|
659
|
+
"""Output socket: Next Edge Index"""
|
|
660
|
+
return self._output("Next Edge Index")
|
|
393
661
|
|
|
394
|
-
|
|
395
|
-
|
|
662
|
+
@property
|
|
663
|
+
def o_previous_edge_index(self) -> SocketLinker:
|
|
664
|
+
"""Output socket: Previous Edge Index"""
|
|
665
|
+
return self._output("Previous Edge Index")
|
|
396
666
|
|
|
397
|
-
name = "GeometryNodeInputMaterial"
|
|
398
|
-
node: bpy.types.GeometryNodeInputMaterial
|
|
399
667
|
|
|
400
|
-
|
|
668
|
+
class EdgesOfVertex(NodeBuilder):
|
|
669
|
+
"""Retrieve the edges connected to each vertex"""
|
|
670
|
+
|
|
671
|
+
_bl_idname = "GeometryNodeEdgesOfVertex"
|
|
672
|
+
node: bpy.types.GeometryNodeEdgesOfVertex
|
|
673
|
+
|
|
674
|
+
def __init__(
|
|
675
|
+
self,
|
|
676
|
+
vertex_index: TYPE_INPUT_INT = 0,
|
|
677
|
+
weights: TYPE_INPUT_VALUE = 0.0,
|
|
678
|
+
sort_index: TYPE_INPUT_INT = 0,
|
|
679
|
+
):
|
|
401
680
|
super().__init__()
|
|
402
|
-
key_args =
|
|
681
|
+
key_args = {
|
|
682
|
+
"Vertex Index": vertex_index,
|
|
683
|
+
"Weights": weights,
|
|
684
|
+
"Sort Index": sort_index,
|
|
685
|
+
}
|
|
403
686
|
|
|
404
687
|
self._establish_links(**key_args)
|
|
405
688
|
|
|
406
689
|
@property
|
|
407
|
-
def
|
|
408
|
-
"""
|
|
409
|
-
return self.
|
|
690
|
+
def i_vertex_index(self) -> SocketLinker:
|
|
691
|
+
"""Input socket: Vertex Index"""
|
|
692
|
+
return self._input("Vertex Index")
|
|
410
693
|
|
|
694
|
+
@property
|
|
695
|
+
def i_weights(self) -> SocketLinker:
|
|
696
|
+
"""Input socket: Weights"""
|
|
697
|
+
return self._input("Weights")
|
|
411
698
|
|
|
412
|
-
|
|
413
|
-
|
|
699
|
+
@property
|
|
700
|
+
def i_sort_index(self) -> SocketLinker:
|
|
701
|
+
"""Input socket: Sort Index"""
|
|
702
|
+
return self._input("Sort Index")
|
|
414
703
|
|
|
415
|
-
|
|
416
|
-
|
|
704
|
+
@property
|
|
705
|
+
def o_edge_index(self) -> SocketLinker:
|
|
706
|
+
"""Output socket: Edge Index"""
|
|
707
|
+
return self._output("Edge Index")
|
|
417
708
|
|
|
418
|
-
|
|
709
|
+
@property
|
|
710
|
+
def o_total(self) -> SocketLinker:
|
|
711
|
+
"""Output socket: Total"""
|
|
712
|
+
return self._output("Total")
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
class EdgesToFaceGroups(NodeBuilder):
|
|
716
|
+
"""Group faces into regions surrounded by the selected boundary edges"""
|
|
717
|
+
|
|
718
|
+
_bl_idname = "GeometryNodeEdgesToFaceGroups"
|
|
719
|
+
node: bpy.types.GeometryNodeEdgesToFaceGroups
|
|
720
|
+
|
|
721
|
+
def __init__(self, boundary_edges: TYPE_INPUT_BOOLEAN = True):
|
|
722
|
+
super().__init__()
|
|
723
|
+
key_args = {"Boundary Edges": boundary_edges}
|
|
724
|
+
|
|
725
|
+
self._establish_links(**key_args)
|
|
726
|
+
|
|
727
|
+
@property
|
|
728
|
+
def i_boundary_edges(self) -> SocketLinker:
|
|
729
|
+
"""Input socket: Boundary Edges"""
|
|
730
|
+
return self._input("Boundary Edges")
|
|
731
|
+
|
|
732
|
+
@property
|
|
733
|
+
def o_face_group_id(self) -> SocketLinker:
|
|
734
|
+
"""Output socket: Face Group ID"""
|
|
735
|
+
return self._output("Face Group ID")
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
class EndpointSelection(NodeBuilder):
|
|
739
|
+
"""Provide a selection for an arbitrary number of endpoints in each spline"""
|
|
740
|
+
|
|
741
|
+
_bl_idname = "GeometryNodeCurveEndpointSelection"
|
|
742
|
+
node: bpy.types.GeometryNodeCurveEndpointSelection
|
|
743
|
+
|
|
744
|
+
def __init__(
|
|
745
|
+
self,
|
|
746
|
+
start_size: TYPE_INPUT_INT = 1,
|
|
747
|
+
end_size: TYPE_INPUT_INT = 1,
|
|
748
|
+
):
|
|
749
|
+
super().__init__()
|
|
750
|
+
key_args = {"Start Size": start_size, "End Size": end_size}
|
|
751
|
+
|
|
752
|
+
self._establish_links(**key_args)
|
|
753
|
+
|
|
754
|
+
@property
|
|
755
|
+
def i_start_size(self) -> SocketLinker:
|
|
756
|
+
"""Input socket: Start Size"""
|
|
757
|
+
return self._input("Start Size")
|
|
758
|
+
|
|
759
|
+
@property
|
|
760
|
+
def i_end_size(self) -> SocketLinker:
|
|
761
|
+
"""Input socket: End Size"""
|
|
762
|
+
return self._input("End Size")
|
|
763
|
+
|
|
764
|
+
@property
|
|
765
|
+
def o_selection(self) -> SocketLinker:
|
|
766
|
+
"""Output socket: Selection"""
|
|
767
|
+
return self._output("Selection")
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
class FaceArea(NodeBuilder):
|
|
771
|
+
"""Calculate the surface area of a mesh's faces"""
|
|
772
|
+
|
|
773
|
+
_bl_idname = "GeometryNodeInputMeshFaceArea"
|
|
774
|
+
node: bpy.types.GeometryNodeInputMeshFaceArea
|
|
775
|
+
|
|
776
|
+
def __init__(self):
|
|
777
|
+
super().__init__()
|
|
778
|
+
key_args = {}
|
|
779
|
+
|
|
780
|
+
self._establish_links(**key_args)
|
|
781
|
+
|
|
782
|
+
@property
|
|
783
|
+
def o_area(self) -> SocketLinker:
|
|
784
|
+
"""Output socket: Area"""
|
|
785
|
+
return self._output("Area")
|
|
786
|
+
|
|
787
|
+
|
|
788
|
+
class FaceGroupBoundaries(NodeBuilder):
|
|
789
|
+
"""Find edges on the boundaries between groups of faces with the same ID value"""
|
|
790
|
+
|
|
791
|
+
_bl_idname = "GeometryNodeMeshFaceSetBoundaries"
|
|
792
|
+
node: bpy.types.GeometryNodeMeshFaceSetBoundaries
|
|
793
|
+
|
|
794
|
+
def __init__(self, face_set: TYPE_INPUT_INT = 0):
|
|
795
|
+
super().__init__()
|
|
796
|
+
key_args = {"Face Set": face_set}
|
|
797
|
+
|
|
798
|
+
self._establish_links(**key_args)
|
|
799
|
+
|
|
800
|
+
@property
|
|
801
|
+
def i_face_set(self) -> SocketLinker:
|
|
802
|
+
"""Input socket: Face Group ID"""
|
|
803
|
+
return self._input("Face Set")
|
|
804
|
+
|
|
805
|
+
@property
|
|
806
|
+
def o_boundary_edges(self) -> SocketLinker:
|
|
807
|
+
"""Output socket: Boundary Edges"""
|
|
808
|
+
return self._output("Boundary Edges")
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
class FaceNeighbors(NodeBuilder):
|
|
812
|
+
"""Retrieve topology information relating to each face of a mesh"""
|
|
813
|
+
|
|
814
|
+
_bl_idname = "GeometryNodeInputMeshFaceNeighbors"
|
|
815
|
+
node: bpy.types.GeometryNodeInputMeshFaceNeighbors
|
|
816
|
+
|
|
817
|
+
def __init__(self):
|
|
818
|
+
super().__init__()
|
|
819
|
+
key_args = {}
|
|
820
|
+
|
|
821
|
+
self._establish_links(**key_args)
|
|
822
|
+
|
|
823
|
+
@property
|
|
824
|
+
def o_vertex_count(self) -> SocketLinker:
|
|
825
|
+
"""Output socket: Vertex Count"""
|
|
826
|
+
return self._output("Vertex Count")
|
|
827
|
+
|
|
828
|
+
@property
|
|
829
|
+
def o_face_count(self) -> SocketLinker:
|
|
830
|
+
"""Output socket: Face Count"""
|
|
831
|
+
return self._output("Face Count")
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
class FaceSet(NodeBuilder):
|
|
835
|
+
"""Each face's sculpt face set value"""
|
|
836
|
+
|
|
837
|
+
_bl_idname = "GeometryNodeToolFaceSet"
|
|
838
|
+
node: bpy.types.GeometryNodeToolFaceSet
|
|
839
|
+
|
|
840
|
+
def __init__(self):
|
|
841
|
+
super().__init__()
|
|
842
|
+
key_args = {}
|
|
843
|
+
|
|
844
|
+
self._establish_links(**key_args)
|
|
845
|
+
|
|
846
|
+
@property
|
|
847
|
+
def o_face_set(self) -> SocketLinker:
|
|
848
|
+
"""Output socket: Face Set"""
|
|
849
|
+
return self._output("Face Set")
|
|
850
|
+
|
|
851
|
+
@property
|
|
852
|
+
def o_exists(self) -> SocketLinker:
|
|
853
|
+
"""Output socket: Exists"""
|
|
854
|
+
return self._output("Exists")
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
class FaceOfCorner(NodeBuilder):
|
|
858
|
+
"""Retrieve the face each face corner is part of"""
|
|
859
|
+
|
|
860
|
+
_bl_idname = "GeometryNodeFaceOfCorner"
|
|
861
|
+
node: bpy.types.GeometryNodeFaceOfCorner
|
|
862
|
+
|
|
863
|
+
def __init__(self, corner_index: TYPE_INPUT_INT = 0):
|
|
864
|
+
super().__init__()
|
|
865
|
+
key_args = {"Corner Index": corner_index}
|
|
866
|
+
|
|
867
|
+
self._establish_links(**key_args)
|
|
868
|
+
|
|
869
|
+
@property
|
|
870
|
+
def i_corner_index(self) -> SocketLinker:
|
|
871
|
+
"""Input socket: Corner Index"""
|
|
872
|
+
return self._input("Corner Index")
|
|
873
|
+
|
|
874
|
+
@property
|
|
875
|
+
def o_face_index(self) -> SocketLinker:
|
|
876
|
+
"""Output socket: Face Index"""
|
|
877
|
+
return self._output("Face Index")
|
|
878
|
+
|
|
879
|
+
@property
|
|
880
|
+
def o_index_in_face(self) -> SocketLinker:
|
|
881
|
+
"""Output socket: Index in Face"""
|
|
882
|
+
return self._output("Index in Face")
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
class ID(NodeBuilder):
|
|
886
|
+
"""Retrieve a stable random identifier value from the "id" attribute on the point domain, or the index if the attribute does not exist"""
|
|
887
|
+
|
|
888
|
+
_bl_idname = "GeometryNodeInputID"
|
|
889
|
+
node: bpy.types.GeometryNodeInputID
|
|
890
|
+
|
|
891
|
+
def __init__(self):
|
|
892
|
+
super().__init__()
|
|
893
|
+
key_args = {}
|
|
894
|
+
|
|
895
|
+
self._establish_links(**key_args)
|
|
896
|
+
|
|
897
|
+
@property
|
|
898
|
+
def o_id(self) -> SocketLinker:
|
|
899
|
+
"""Output socket: ID"""
|
|
900
|
+
return self._output("ID")
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
class Image(NodeBuilder):
|
|
904
|
+
"""Input an image data-block"""
|
|
905
|
+
|
|
906
|
+
_bl_idname = "GeometryNodeInputImage"
|
|
907
|
+
node: bpy.types.GeometryNodeInputImage
|
|
908
|
+
|
|
909
|
+
def __init__(self):
|
|
910
|
+
super().__init__()
|
|
911
|
+
key_args = {}
|
|
912
|
+
|
|
913
|
+
self._establish_links(**key_args)
|
|
914
|
+
|
|
915
|
+
@property
|
|
916
|
+
def o_image(self) -> SocketLinker:
|
|
917
|
+
"""Output socket: Image"""
|
|
918
|
+
return self._output("Image")
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
class ImageInfo(NodeBuilder):
|
|
922
|
+
"""Retrieve information about an image"""
|
|
923
|
+
|
|
924
|
+
_bl_idname = "GeometryNodeImageInfo"
|
|
925
|
+
node: bpy.types.GeometryNodeImageInfo
|
|
926
|
+
|
|
927
|
+
def __init__(
|
|
928
|
+
self,
|
|
929
|
+
image: TYPE_INPUT_IMAGE = None,
|
|
930
|
+
frame: TYPE_INPUT_INT = 0,
|
|
931
|
+
):
|
|
932
|
+
super().__init__()
|
|
933
|
+
key_args = {"Image": image, "Frame": frame}
|
|
934
|
+
|
|
935
|
+
self._establish_links(**key_args)
|
|
936
|
+
|
|
937
|
+
@property
|
|
938
|
+
def i_image(self) -> SocketLinker:
|
|
939
|
+
"""Input socket: Image"""
|
|
940
|
+
return self._input("Image")
|
|
941
|
+
|
|
942
|
+
@property
|
|
943
|
+
def i_frame(self) -> SocketLinker:
|
|
944
|
+
"""Input socket: Frame"""
|
|
945
|
+
return self._input("Frame")
|
|
946
|
+
|
|
947
|
+
@property
|
|
948
|
+
def o_width(self) -> SocketLinker:
|
|
949
|
+
"""Output socket: Width"""
|
|
950
|
+
return self._output("Width")
|
|
951
|
+
|
|
952
|
+
@property
|
|
953
|
+
def o_height(self) -> SocketLinker:
|
|
954
|
+
"""Output socket: Height"""
|
|
955
|
+
return self._output("Height")
|
|
956
|
+
|
|
957
|
+
@property
|
|
958
|
+
def o_has_alpha(self) -> SocketLinker:
|
|
959
|
+
"""Output socket: Has Alpha"""
|
|
960
|
+
return self._output("Has Alpha")
|
|
961
|
+
|
|
962
|
+
@property
|
|
963
|
+
def o_frame_count(self) -> SocketLinker:
|
|
964
|
+
"""Output socket: Frame Count"""
|
|
965
|
+
return self._output("Frame Count")
|
|
966
|
+
|
|
967
|
+
@property
|
|
968
|
+
def o_fps(self) -> SocketLinker:
|
|
969
|
+
"""Output socket: FPS"""
|
|
970
|
+
return self._output("FPS")
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
class ImportCSV(NodeBuilder):
|
|
974
|
+
"""Import geometry from an CSV file"""
|
|
975
|
+
|
|
976
|
+
_bl_idname = "GeometryNodeImportCSV"
|
|
977
|
+
node: bpy.types.GeometryNodeImportCSV
|
|
978
|
+
|
|
979
|
+
def __init__(
|
|
980
|
+
self,
|
|
981
|
+
path: TYPE_INPUT_STRING = "",
|
|
982
|
+
delimiter: TYPE_INPUT_STRING = ",",
|
|
983
|
+
):
|
|
984
|
+
super().__init__()
|
|
985
|
+
key_args = {"Path": path, "Delimiter": delimiter}
|
|
986
|
+
|
|
987
|
+
self._establish_links(**key_args)
|
|
988
|
+
|
|
989
|
+
@property
|
|
990
|
+
def i_path(self) -> SocketLinker:
|
|
991
|
+
"""Input socket: Path"""
|
|
992
|
+
return self._input("Path")
|
|
993
|
+
|
|
994
|
+
@property
|
|
995
|
+
def i_delimiter(self) -> SocketLinker:
|
|
996
|
+
"""Input socket: Delimiter"""
|
|
997
|
+
return self._input("Delimiter")
|
|
998
|
+
|
|
999
|
+
@property
|
|
1000
|
+
def o_point_cloud(self) -> SocketLinker:
|
|
1001
|
+
"""Output socket: Point Cloud"""
|
|
1002
|
+
return self._output("Point Cloud")
|
|
1003
|
+
|
|
1004
|
+
|
|
1005
|
+
class ImportOBJ(NodeBuilder):
|
|
1006
|
+
"""Import geometry from an OBJ file"""
|
|
1007
|
+
|
|
1008
|
+
_bl_idname = "GeometryNodeImportOBJ"
|
|
1009
|
+
node: bpy.types.GeometryNodeImportOBJ
|
|
1010
|
+
|
|
1011
|
+
def __init__(self, path: TYPE_INPUT_STRING = ""):
|
|
1012
|
+
super().__init__()
|
|
1013
|
+
key_args = {"Path": path}
|
|
1014
|
+
|
|
1015
|
+
self._establish_links(**key_args)
|
|
1016
|
+
|
|
1017
|
+
@property
|
|
1018
|
+
def i_path(self) -> SocketLinker:
|
|
1019
|
+
"""Input socket: Path"""
|
|
1020
|
+
return self._input("Path")
|
|
1021
|
+
|
|
1022
|
+
@property
|
|
1023
|
+
def o_instances(self) -> SocketLinker:
|
|
1024
|
+
"""Output socket: Instances"""
|
|
1025
|
+
return self._output("Instances")
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
class ImportPLY(NodeBuilder):
|
|
1029
|
+
"""Import a point cloud from a PLY file"""
|
|
1030
|
+
|
|
1031
|
+
_bl_idname = "GeometryNodeImportPLY"
|
|
1032
|
+
node: bpy.types.GeometryNodeImportPLY
|
|
1033
|
+
|
|
1034
|
+
def __init__(self, path: TYPE_INPUT_STRING = ""):
|
|
1035
|
+
super().__init__()
|
|
1036
|
+
key_args = {"Path": path}
|
|
1037
|
+
|
|
1038
|
+
self._establish_links(**key_args)
|
|
1039
|
+
|
|
1040
|
+
@property
|
|
1041
|
+
def i_path(self) -> SocketLinker:
|
|
1042
|
+
"""Input socket: Path"""
|
|
1043
|
+
return self._input("Path")
|
|
1044
|
+
|
|
1045
|
+
@property
|
|
1046
|
+
def o_mesh(self) -> SocketLinker:
|
|
1047
|
+
"""Output socket: Mesh"""
|
|
1048
|
+
return self._output("Mesh")
|
|
1049
|
+
|
|
1050
|
+
|
|
1051
|
+
class ImportSTL(NodeBuilder):
|
|
1052
|
+
"""Import a mesh from an STL file"""
|
|
1053
|
+
|
|
1054
|
+
_bl_idname = "GeometryNodeImportSTL"
|
|
1055
|
+
node: bpy.types.GeometryNodeImportSTL
|
|
1056
|
+
|
|
1057
|
+
def __init__(self, path: TYPE_INPUT_STRING = ""):
|
|
1058
|
+
super().__init__()
|
|
1059
|
+
key_args = {"Path": path}
|
|
1060
|
+
|
|
1061
|
+
self._establish_links(**key_args)
|
|
1062
|
+
|
|
1063
|
+
@property
|
|
1064
|
+
def i_path(self) -> SocketLinker:
|
|
1065
|
+
"""Input socket: Path"""
|
|
1066
|
+
return self._input("Path")
|
|
1067
|
+
|
|
1068
|
+
@property
|
|
1069
|
+
def o_mesh(self) -> SocketLinker:
|
|
1070
|
+
"""Output socket: Mesh"""
|
|
1071
|
+
return self._output("Mesh")
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
class ImportText(NodeBuilder):
|
|
1075
|
+
"""Import a string from a text file"""
|
|
1076
|
+
|
|
1077
|
+
_bl_idname = "GeometryNodeImportText"
|
|
1078
|
+
node: bpy.types.GeometryNodeImportText
|
|
1079
|
+
|
|
1080
|
+
def __init__(self, path: TYPE_INPUT_STRING = ""):
|
|
1081
|
+
super().__init__()
|
|
1082
|
+
key_args = {"Path": path}
|
|
1083
|
+
|
|
1084
|
+
self._establish_links(**key_args)
|
|
1085
|
+
|
|
1086
|
+
@property
|
|
1087
|
+
def i_path(self) -> SocketLinker:
|
|
1088
|
+
"""Input socket: Path"""
|
|
1089
|
+
return self._input("Path")
|
|
1090
|
+
|
|
1091
|
+
@property
|
|
1092
|
+
def o_string(self) -> SocketLinker:
|
|
1093
|
+
"""Output socket: String"""
|
|
1094
|
+
return self._output("String")
|
|
1095
|
+
|
|
1096
|
+
|
|
1097
|
+
class ImportVDB(NodeBuilder):
|
|
1098
|
+
"""Import volume data from a .vdb file"""
|
|
1099
|
+
|
|
1100
|
+
_bl_idname = "GeometryNodeImportVDB"
|
|
1101
|
+
node: bpy.types.GeometryNodeImportVDB
|
|
1102
|
+
|
|
1103
|
+
def __init__(self, path: TYPE_INPUT_STRING = ""):
|
|
1104
|
+
super().__init__()
|
|
1105
|
+
key_args = {"Path": path}
|
|
1106
|
+
|
|
1107
|
+
self._establish_links(**key_args)
|
|
1108
|
+
|
|
1109
|
+
@property
|
|
1110
|
+
def i_path(self) -> SocketLinker:
|
|
1111
|
+
"""Input socket: Path"""
|
|
1112
|
+
return self._input("Path")
|
|
1113
|
+
|
|
1114
|
+
@property
|
|
1115
|
+
def o_volume(self) -> SocketLinker:
|
|
1116
|
+
"""Output socket: Volume"""
|
|
1117
|
+
return self._output("Volume")
|
|
1118
|
+
|
|
1119
|
+
|
|
1120
|
+
class Index(NodeBuilder):
|
|
1121
|
+
"""Retrieve an integer value indicating the position of each element in the list, starting at zero"""
|
|
1122
|
+
|
|
1123
|
+
_bl_idname = "GeometryNodeInputIndex"
|
|
1124
|
+
node: bpy.types.GeometryNodeInputIndex
|
|
1125
|
+
|
|
1126
|
+
def __init__(self):
|
|
1127
|
+
super().__init__()
|
|
1128
|
+
key_args = {}
|
|
1129
|
+
|
|
1130
|
+
self._establish_links(**key_args)
|
|
1131
|
+
|
|
1132
|
+
@property
|
|
1133
|
+
def o_index(self) -> SocketLinker:
|
|
1134
|
+
"""Output socket: Index"""
|
|
1135
|
+
return self._output("Index")
|
|
1136
|
+
|
|
1137
|
+
|
|
1138
|
+
class InstanceBounds(NodeBuilder):
|
|
1139
|
+
"""Calculate position bounds of each instance's geometry set"""
|
|
1140
|
+
|
|
1141
|
+
_bl_idname = "GeometryNodeInputInstanceBounds"
|
|
1142
|
+
node: bpy.types.GeometryNodeInputInstanceBounds
|
|
1143
|
+
|
|
1144
|
+
def __init__(self, use_radius: TYPE_INPUT_BOOLEAN = True):
|
|
1145
|
+
super().__init__()
|
|
1146
|
+
key_args = {"Use Radius": use_radius}
|
|
1147
|
+
|
|
1148
|
+
self._establish_links(**key_args)
|
|
1149
|
+
|
|
1150
|
+
@property
|
|
1151
|
+
def i_use_radius(self) -> SocketLinker:
|
|
1152
|
+
"""Input socket: Use Radius"""
|
|
1153
|
+
return self._input("Use Radius")
|
|
1154
|
+
|
|
1155
|
+
@property
|
|
1156
|
+
def o_min(self) -> SocketLinker:
|
|
1157
|
+
"""Output socket: Min"""
|
|
1158
|
+
return self._output("Min")
|
|
1159
|
+
|
|
1160
|
+
@property
|
|
1161
|
+
def o_max(self) -> SocketLinker:
|
|
1162
|
+
"""Output socket: Max"""
|
|
1163
|
+
return self._output("Max")
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
class InstanceRotation(NodeBuilder):
|
|
1167
|
+
"""Retrieve the rotation of each instance in the geometry"""
|
|
1168
|
+
|
|
1169
|
+
_bl_idname = "GeometryNodeInputInstanceRotation"
|
|
1170
|
+
node: bpy.types.GeometryNodeInputInstanceRotation
|
|
1171
|
+
|
|
1172
|
+
def __init__(self):
|
|
1173
|
+
super().__init__()
|
|
1174
|
+
key_args = {}
|
|
1175
|
+
|
|
1176
|
+
self._establish_links(**key_args)
|
|
1177
|
+
|
|
1178
|
+
@property
|
|
1179
|
+
def o_rotation(self) -> SocketLinker:
|
|
1180
|
+
"""Output socket: Rotation"""
|
|
1181
|
+
return self._output("Rotation")
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
class InstanceScale(NodeBuilder):
|
|
1185
|
+
"""Retrieve the scale of each instance in the geometry"""
|
|
1186
|
+
|
|
1187
|
+
_bl_idname = "GeometryNodeInputInstanceScale"
|
|
1188
|
+
node: bpy.types.GeometryNodeInputInstanceScale
|
|
1189
|
+
|
|
1190
|
+
def __init__(self):
|
|
419
1191
|
super().__init__()
|
|
420
|
-
key_args =
|
|
1192
|
+
key_args = {}
|
|
1193
|
+
|
|
1194
|
+
self._establish_links(**key_args)
|
|
1195
|
+
|
|
1196
|
+
@property
|
|
1197
|
+
def o_scale(self) -> SocketLinker:
|
|
1198
|
+
"""Output socket: Scale"""
|
|
1199
|
+
return self._output("Scale")
|
|
1200
|
+
|
|
1201
|
+
|
|
1202
|
+
class InstanceTransform(NodeBuilder):
|
|
1203
|
+
"""Retrieve the full transformation of each instance in the geometry"""
|
|
1204
|
+
|
|
1205
|
+
_bl_idname = "GeometryNodeInstanceTransform"
|
|
1206
|
+
node: bpy.types.GeometryNodeInstanceTransform
|
|
1207
|
+
|
|
1208
|
+
def __init__(self):
|
|
1209
|
+
super().__init__()
|
|
1210
|
+
key_args = {}
|
|
1211
|
+
|
|
1212
|
+
self._establish_links(**key_args)
|
|
1213
|
+
|
|
1214
|
+
@property
|
|
1215
|
+
def o_transform(self) -> SocketLinker:
|
|
1216
|
+
"""Output socket: Transform"""
|
|
1217
|
+
return self._output("Transform")
|
|
1218
|
+
|
|
1219
|
+
|
|
1220
|
+
class Integer(NodeBuilder):
|
|
1221
|
+
"""Provide an integer value that can be connected to other nodes in the tree"""
|
|
1222
|
+
|
|
1223
|
+
_bl_idname = "FunctionNodeInputInt"
|
|
1224
|
+
node: bpy.types.FunctionNodeInputInt
|
|
1225
|
+
|
|
1226
|
+
def __init__(self, integer: int = 1):
|
|
1227
|
+
super().__init__()
|
|
1228
|
+
key_args = {}
|
|
1229
|
+
self.integer = integer
|
|
1230
|
+
self._establish_links(**key_args)
|
|
1231
|
+
|
|
1232
|
+
@property
|
|
1233
|
+
def o_integer(self) -> SocketLinker:
|
|
1234
|
+
"""Output socket: Integer"""
|
|
1235
|
+
return self._output("Integer")
|
|
1236
|
+
|
|
1237
|
+
@property
|
|
1238
|
+
def integer(self) -> int:
|
|
1239
|
+
return self.node.integer
|
|
1240
|
+
|
|
1241
|
+
@integer.setter
|
|
1242
|
+
def integer(self, value: int):
|
|
1243
|
+
self.node.integer = value
|
|
1244
|
+
|
|
1245
|
+
|
|
1246
|
+
class IsEdgeSmooth(NodeBuilder):
|
|
1247
|
+
"""Retrieve whether each edge is marked for smooth or split normals"""
|
|
1248
|
+
|
|
1249
|
+
_bl_idname = "GeometryNodeInputEdgeSmooth"
|
|
1250
|
+
node: bpy.types.GeometryNodeInputEdgeSmooth
|
|
1251
|
+
|
|
1252
|
+
def __init__(self):
|
|
1253
|
+
super().__init__()
|
|
1254
|
+
key_args = {}
|
|
1255
|
+
|
|
1256
|
+
self._establish_links(**key_args)
|
|
1257
|
+
|
|
1258
|
+
@property
|
|
1259
|
+
def o_smooth(self) -> SocketLinker:
|
|
1260
|
+
"""Output socket: Smooth"""
|
|
1261
|
+
return self._output("Smooth")
|
|
1262
|
+
|
|
1263
|
+
|
|
1264
|
+
class IsFacePlanar(NodeBuilder):
|
|
1265
|
+
"""Retrieve whether all triangles in a face are on the same plane, i.e. whether they have the same normal"""
|
|
1266
|
+
|
|
1267
|
+
_bl_idname = "GeometryNodeInputMeshFaceIsPlanar"
|
|
1268
|
+
node: bpy.types.GeometryNodeInputMeshFaceIsPlanar
|
|
1269
|
+
|
|
1270
|
+
def __init__(self, threshold: TYPE_INPUT_VALUE = 0.01):
|
|
1271
|
+
super().__init__()
|
|
1272
|
+
key_args = {"Threshold": threshold}
|
|
1273
|
+
|
|
1274
|
+
self._establish_links(**key_args)
|
|
1275
|
+
|
|
1276
|
+
@property
|
|
1277
|
+
def i_threshold(self) -> SocketLinker:
|
|
1278
|
+
"""Input socket: Threshold"""
|
|
1279
|
+
return self._input("Threshold")
|
|
1280
|
+
|
|
1281
|
+
@property
|
|
1282
|
+
def o_planar(self) -> SocketLinker:
|
|
1283
|
+
"""Output socket: Planar"""
|
|
1284
|
+
return self._output("Planar")
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
class IsFaceSmooth(NodeBuilder):
|
|
1288
|
+
"""Retrieve whether each face is marked for smooth or sharp normals"""
|
|
1289
|
+
|
|
1290
|
+
_bl_idname = "GeometryNodeInputShadeSmooth"
|
|
1291
|
+
node: bpy.types.GeometryNodeInputShadeSmooth
|
|
1292
|
+
|
|
1293
|
+
def __init__(self):
|
|
1294
|
+
super().__init__()
|
|
1295
|
+
key_args = {}
|
|
1296
|
+
|
|
1297
|
+
self._establish_links(**key_args)
|
|
1298
|
+
|
|
1299
|
+
@property
|
|
1300
|
+
def o_smooth(self) -> SocketLinker:
|
|
1301
|
+
"""Output socket: Smooth"""
|
|
1302
|
+
return self._output("Smooth")
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
class IsSplineCyclic(NodeBuilder):
|
|
1306
|
+
"""Retrieve whether each spline endpoint connects to the beginning"""
|
|
1307
|
+
|
|
1308
|
+
_bl_idname = "GeometryNodeInputSplineCyclic"
|
|
1309
|
+
node: bpy.types.GeometryNodeInputSplineCyclic
|
|
1310
|
+
|
|
1311
|
+
def __init__(self):
|
|
1312
|
+
super().__init__()
|
|
1313
|
+
key_args = {}
|
|
1314
|
+
|
|
1315
|
+
self._establish_links(**key_args)
|
|
1316
|
+
|
|
1317
|
+
@property
|
|
1318
|
+
def o_cyclic(self) -> SocketLinker:
|
|
1319
|
+
"""Output socket: Cyclic"""
|
|
1320
|
+
return self._output("Cyclic")
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
class IsViewport(NodeBuilder):
|
|
1324
|
+
"""Retrieve whether the nodes are being evaluated for the viewport rather than the final render"""
|
|
1325
|
+
|
|
1326
|
+
_bl_idname = "GeometryNodeIsViewport"
|
|
1327
|
+
node: bpy.types.GeometryNodeIsViewport
|
|
1328
|
+
|
|
1329
|
+
def __init__(self):
|
|
1330
|
+
super().__init__()
|
|
1331
|
+
key_args = {}
|
|
1332
|
+
|
|
1333
|
+
self._establish_links(**key_args)
|
|
1334
|
+
|
|
1335
|
+
@property
|
|
1336
|
+
def o_is_viewport(self) -> SocketLinker:
|
|
1337
|
+
"""Output socket: Is Viewport"""
|
|
1338
|
+
return self._output("Is Viewport")
|
|
1339
|
+
|
|
1340
|
+
|
|
1341
|
+
class Material(NodeBuilder):
|
|
1342
|
+
"""Output a single material"""
|
|
1343
|
+
|
|
1344
|
+
_bl_idname = "GeometryNodeInputMaterial"
|
|
1345
|
+
node: bpy.types.GeometryNodeInputMaterial
|
|
1346
|
+
|
|
1347
|
+
def __init__(self):
|
|
1348
|
+
super().__init__()
|
|
1349
|
+
key_args = {}
|
|
1350
|
+
|
|
1351
|
+
self._establish_links(**key_args)
|
|
1352
|
+
|
|
1353
|
+
@property
|
|
1354
|
+
def o_material(self) -> SocketLinker:
|
|
1355
|
+
"""Output socket: Material"""
|
|
1356
|
+
return self._output("Material")
|
|
1357
|
+
|
|
1358
|
+
|
|
1359
|
+
class MaterialIndex(NodeBuilder):
|
|
1360
|
+
"""Retrieve the index of the material used for each element in the geometry's list of materials"""
|
|
1361
|
+
|
|
1362
|
+
_bl_idname = "GeometryNodeInputMaterialIndex"
|
|
1363
|
+
node: bpy.types.GeometryNodeInputMaterialIndex
|
|
1364
|
+
|
|
1365
|
+
def __init__(self):
|
|
1366
|
+
super().__init__()
|
|
1367
|
+
key_args = {}
|
|
1368
|
+
|
|
1369
|
+
self._establish_links(**key_args)
|
|
1370
|
+
|
|
1371
|
+
@property
|
|
1372
|
+
def o_material_index(self) -> SocketLinker:
|
|
1373
|
+
"""Output socket: Material Index"""
|
|
1374
|
+
return self._output("Material Index")
|
|
1375
|
+
|
|
1376
|
+
|
|
1377
|
+
class MeshIsland(NodeBuilder):
|
|
1378
|
+
"""Retrieve information about separate connected regions in a mesh"""
|
|
1379
|
+
|
|
1380
|
+
_bl_idname = "GeometryNodeInputMeshIsland"
|
|
1381
|
+
node: bpy.types.GeometryNodeInputMeshIsland
|
|
1382
|
+
|
|
1383
|
+
def __init__(self):
|
|
1384
|
+
super().__init__()
|
|
1385
|
+
key_args = {}
|
|
1386
|
+
|
|
1387
|
+
self._establish_links(**key_args)
|
|
1388
|
+
|
|
1389
|
+
@property
|
|
1390
|
+
def o_island_index(self) -> SocketLinker:
|
|
1391
|
+
"""Output socket: Island Index"""
|
|
1392
|
+
return self._output("Island Index")
|
|
1393
|
+
|
|
1394
|
+
@property
|
|
1395
|
+
def o_island_count(self) -> SocketLinker:
|
|
1396
|
+
"""Output socket: Island Count"""
|
|
1397
|
+
return self._output("Island Count")
|
|
1398
|
+
|
|
1399
|
+
|
|
1400
|
+
class MousePosition(NodeBuilder):
|
|
1401
|
+
"""Retrieve the position of the mouse cursor"""
|
|
1402
|
+
|
|
1403
|
+
_bl_idname = "GeometryNodeToolMousePosition"
|
|
1404
|
+
node: bpy.types.GeometryNodeToolMousePosition
|
|
1405
|
+
|
|
1406
|
+
def __init__(self):
|
|
1407
|
+
super().__init__()
|
|
1408
|
+
key_args = {}
|
|
1409
|
+
|
|
1410
|
+
self._establish_links(**key_args)
|
|
1411
|
+
|
|
1412
|
+
@property
|
|
1413
|
+
def o_mouse_x(self) -> SocketLinker:
|
|
1414
|
+
"""Output socket: Mouse X"""
|
|
1415
|
+
return self._output("Mouse X")
|
|
1416
|
+
|
|
1417
|
+
@property
|
|
1418
|
+
def o_mouse_y(self) -> SocketLinker:
|
|
1419
|
+
"""Output socket: Mouse Y"""
|
|
1420
|
+
return self._output("Mouse Y")
|
|
1421
|
+
|
|
1422
|
+
@property
|
|
1423
|
+
def o_region_width(self) -> SocketLinker:
|
|
1424
|
+
"""Output socket: Region Width"""
|
|
1425
|
+
return self._output("Region Width")
|
|
1426
|
+
|
|
1427
|
+
@property
|
|
1428
|
+
def o_region_height(self) -> SocketLinker:
|
|
1429
|
+
"""Output socket: Region Height"""
|
|
1430
|
+
return self._output("Region Height")
|
|
1431
|
+
|
|
1432
|
+
|
|
1433
|
+
class NamedAttribute(NodeBuilder):
|
|
1434
|
+
"""Retrieve the data of a specified attribute"""
|
|
1435
|
+
|
|
1436
|
+
_bl_idname = "GeometryNodeInputNamedAttribute"
|
|
1437
|
+
node: bpy.types.GeometryNodeInputNamedAttribute
|
|
1438
|
+
|
|
1439
|
+
def __init__(
|
|
1440
|
+
self,
|
|
1441
|
+
name: TYPE_INPUT_STRING = "",
|
|
1442
|
+
*,
|
|
1443
|
+
data_type: Literal[
|
|
1444
|
+
"FLOAT",
|
|
1445
|
+
"INT",
|
|
1446
|
+
"BOOLEAN",
|
|
1447
|
+
"FLOAT_VECTOR",
|
|
1448
|
+
"FLOAT_COLOR",
|
|
1449
|
+
"QUATERNION",
|
|
1450
|
+
"FLOAT4X4",
|
|
1451
|
+
] = "FLOAT",
|
|
1452
|
+
):
|
|
1453
|
+
super().__init__()
|
|
1454
|
+
key_args = {"Name": name}
|
|
1455
|
+
self.data_type = data_type
|
|
1456
|
+
self._establish_links(**key_args)
|
|
1457
|
+
|
|
1458
|
+
@classmethod
|
|
1459
|
+
def float(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1460
|
+
"""Create Named Attribute with operation 'Float'."""
|
|
1461
|
+
return cls(data_type="FLOAT", name=name)
|
|
1462
|
+
|
|
1463
|
+
@classmethod
|
|
1464
|
+
def integer(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1465
|
+
"""Create Named Attribute with operation 'Integer'."""
|
|
1466
|
+
return cls(data_type="INT", name=name)
|
|
1467
|
+
|
|
1468
|
+
@classmethod
|
|
1469
|
+
def boolean(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1470
|
+
"""Create Named Attribute with operation 'Boolean'."""
|
|
1471
|
+
return cls(data_type="BOOLEAN", name=name)
|
|
1472
|
+
|
|
1473
|
+
@classmethod
|
|
1474
|
+
def vector(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1475
|
+
"""Create Named Attribute with operation 'Vector'."""
|
|
1476
|
+
return cls(data_type="FLOAT_VECTOR", name=name)
|
|
1477
|
+
|
|
1478
|
+
@classmethod
|
|
1479
|
+
def color(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1480
|
+
"""Create Named Attribute with operation 'Color'."""
|
|
1481
|
+
return cls(data_type="FLOAT_COLOR", name=name)
|
|
1482
|
+
|
|
1483
|
+
@classmethod
|
|
1484
|
+
def quaternion(cls, name: TYPE_INPUT_STRING = "") -> "NamedAttribute":
|
|
1485
|
+
"""Create Named Attribute with operation 'Quaternion'."""
|
|
1486
|
+
return cls(data_type="QUATERNION", name=name)
|
|
1487
|
+
|
|
1488
|
+
@property
|
|
1489
|
+
def i_name(self) -> SocketLinker:
|
|
1490
|
+
"""Input socket: Name"""
|
|
1491
|
+
return self._input("Name")
|
|
1492
|
+
|
|
1493
|
+
@property
|
|
1494
|
+
def o_attribute(self) -> SocketLinker:
|
|
1495
|
+
"""Output socket: Attribute"""
|
|
1496
|
+
return self._output("Attribute")
|
|
421
1497
|
|
|
422
|
-
|
|
1498
|
+
@property
|
|
1499
|
+
def o_exists(self) -> SocketLinker:
|
|
1500
|
+
"""Output socket: Exists"""
|
|
1501
|
+
return self._output("Exists")
|
|
423
1502
|
|
|
424
1503
|
@property
|
|
425
|
-
def
|
|
426
|
-
|
|
427
|
-
|
|
1504
|
+
def data_type(
|
|
1505
|
+
self,
|
|
1506
|
+
) -> Literal[
|
|
1507
|
+
"FLOAT",
|
|
1508
|
+
"INT",
|
|
1509
|
+
"BOOLEAN",
|
|
1510
|
+
"FLOAT_VECTOR",
|
|
1511
|
+
"FLOAT_COLOR",
|
|
1512
|
+
"QUATERNION",
|
|
1513
|
+
"FLOAT4X4",
|
|
1514
|
+
]:
|
|
1515
|
+
return self.node.data_type
|
|
1516
|
+
|
|
1517
|
+
@data_type.setter
|
|
1518
|
+
def data_type(
|
|
1519
|
+
self,
|
|
1520
|
+
value: Literal[
|
|
1521
|
+
"FLOAT",
|
|
1522
|
+
"INT",
|
|
1523
|
+
"BOOLEAN",
|
|
1524
|
+
"FLOAT_VECTOR",
|
|
1525
|
+
"FLOAT_COLOR",
|
|
1526
|
+
"QUATERNION",
|
|
1527
|
+
"FLOAT4X4",
|
|
1528
|
+
],
|
|
1529
|
+
):
|
|
1530
|
+
self.node.data_type = value
|
|
428
1531
|
|
|
429
1532
|
|
|
430
1533
|
class NamedLayerSelection(NodeBuilder):
|
|
431
1534
|
"""Output a selection of a Grease Pencil layer"""
|
|
432
1535
|
|
|
433
|
-
|
|
1536
|
+
_bl_idname = "GeometryNodeInputNamedLayerSelection"
|
|
434
1537
|
node: bpy.types.GeometryNodeInputNamedLayerSelection
|
|
435
1538
|
|
|
436
|
-
def __init__(self, name:
|
|
1539
|
+
def __init__(self, name: TYPE_INPUT_STRING = ""):
|
|
437
1540
|
super().__init__()
|
|
438
1541
|
key_args = {"Name": name}
|
|
439
|
-
key_args.update(kwargs)
|
|
440
1542
|
|
|
441
1543
|
self._establish_links(**key_args)
|
|
442
1544
|
|
|
443
1545
|
@property
|
|
444
|
-
def i_name(self) ->
|
|
1546
|
+
def i_name(self) -> SocketLinker:
|
|
445
1547
|
"""Input socket: Name"""
|
|
446
1548
|
return self._input("Name")
|
|
447
1549
|
|
|
448
1550
|
@property
|
|
449
|
-
def o_selection(self) ->
|
|
1551
|
+
def o_selection(self) -> SocketLinker:
|
|
450
1552
|
"""Output socket: Selection"""
|
|
451
1553
|
return self._output("Selection")
|
|
452
1554
|
|
|
@@ -454,22 +1556,22 @@ class NamedLayerSelection(NodeBuilder):
|
|
|
454
1556
|
class Normal(NodeBuilder):
|
|
455
1557
|
"""Retrieve a unit length vector indicating the direction pointing away from the geometry at each element"""
|
|
456
1558
|
|
|
457
|
-
|
|
1559
|
+
_bl_idname = "GeometryNodeInputNormal"
|
|
458
1560
|
node: bpy.types.GeometryNodeInputNormal
|
|
459
1561
|
|
|
460
|
-
def __init__(self, legacy_corner_normals: bool = False
|
|
1562
|
+
def __init__(self, legacy_corner_normals: bool = False):
|
|
461
1563
|
super().__init__()
|
|
462
|
-
key_args =
|
|
1564
|
+
key_args = {}
|
|
463
1565
|
self.legacy_corner_normals = legacy_corner_normals
|
|
464
1566
|
self._establish_links(**key_args)
|
|
465
1567
|
|
|
466
1568
|
@property
|
|
467
|
-
def o_normal(self) ->
|
|
1569
|
+
def o_normal(self) -> SocketLinker:
|
|
468
1570
|
"""Output socket: Normal"""
|
|
469
1571
|
return self._output("Normal")
|
|
470
1572
|
|
|
471
1573
|
@property
|
|
472
|
-
def o_true_normal(self) ->
|
|
1574
|
+
def o_true_normal(self) -> SocketLinker:
|
|
473
1575
|
"""Output socket: True Normal"""
|
|
474
1576
|
return self._output("True Normal")
|
|
475
1577
|
|
|
@@ -485,35 +1587,213 @@ class Normal(NodeBuilder):
|
|
|
485
1587
|
class Object(NodeBuilder):
|
|
486
1588
|
"""Output a single object"""
|
|
487
1589
|
|
|
488
|
-
|
|
1590
|
+
_bl_idname = "GeometryNodeInputObject"
|
|
489
1591
|
node: bpy.types.GeometryNodeInputObject
|
|
490
1592
|
|
|
491
|
-
def __init__(self
|
|
1593
|
+
def __init__(self):
|
|
492
1594
|
super().__init__()
|
|
493
|
-
key_args =
|
|
1595
|
+
key_args = {}
|
|
494
1596
|
|
|
495
1597
|
self._establish_links(**key_args)
|
|
496
1598
|
|
|
497
1599
|
@property
|
|
498
|
-
def o_object(self) ->
|
|
1600
|
+
def o_object(self) -> SocketLinker:
|
|
499
1601
|
"""Output socket: Object"""
|
|
500
1602
|
return self._output("Object")
|
|
501
1603
|
|
|
502
1604
|
|
|
1605
|
+
class ObjectInfo(NodeBuilder):
|
|
1606
|
+
"""Retrieve information from an object"""
|
|
1607
|
+
|
|
1608
|
+
_bl_idname = "GeometryNodeObjectInfo"
|
|
1609
|
+
node: bpy.types.GeometryNodeObjectInfo
|
|
1610
|
+
|
|
1611
|
+
def __init__(
|
|
1612
|
+
self,
|
|
1613
|
+
object: TYPE_INPUT_OBJECT = None,
|
|
1614
|
+
as_instance: TYPE_INPUT_BOOLEAN = False,
|
|
1615
|
+
*,
|
|
1616
|
+
transform_space: Literal["ORIGINAL", "RELATIVE"] = "ORIGINAL",
|
|
1617
|
+
):
|
|
1618
|
+
super().__init__()
|
|
1619
|
+
key_args = {"Object": object, "As Instance": as_instance}
|
|
1620
|
+
self.transform_space = transform_space
|
|
1621
|
+
self._establish_links(**key_args)
|
|
1622
|
+
|
|
1623
|
+
@property
|
|
1624
|
+
def i_object(self) -> SocketLinker:
|
|
1625
|
+
"""Input socket: Object"""
|
|
1626
|
+
return self._input("Object")
|
|
1627
|
+
|
|
1628
|
+
@property
|
|
1629
|
+
def i_as_instance(self) -> SocketLinker:
|
|
1630
|
+
"""Input socket: As Instance"""
|
|
1631
|
+
return self._input("As Instance")
|
|
1632
|
+
|
|
1633
|
+
@property
|
|
1634
|
+
def o_transform(self) -> SocketLinker:
|
|
1635
|
+
"""Output socket: Transform"""
|
|
1636
|
+
return self._output("Transform")
|
|
1637
|
+
|
|
1638
|
+
@property
|
|
1639
|
+
def o_location(self) -> SocketLinker:
|
|
1640
|
+
"""Output socket: Location"""
|
|
1641
|
+
return self._output("Location")
|
|
1642
|
+
|
|
1643
|
+
@property
|
|
1644
|
+
def o_rotation(self) -> SocketLinker:
|
|
1645
|
+
"""Output socket: Rotation"""
|
|
1646
|
+
return self._output("Rotation")
|
|
1647
|
+
|
|
1648
|
+
@property
|
|
1649
|
+
def o_scale(self) -> SocketLinker:
|
|
1650
|
+
"""Output socket: Scale"""
|
|
1651
|
+
return self._output("Scale")
|
|
1652
|
+
|
|
1653
|
+
@property
|
|
1654
|
+
def o_geometry(self) -> SocketLinker:
|
|
1655
|
+
"""Output socket: Geometry"""
|
|
1656
|
+
return self._output("Geometry")
|
|
1657
|
+
|
|
1658
|
+
@property
|
|
1659
|
+
def transform_space(self) -> Literal["ORIGINAL", "RELATIVE"]:
|
|
1660
|
+
return self.node.transform_space
|
|
1661
|
+
|
|
1662
|
+
@transform_space.setter
|
|
1663
|
+
def transform_space(self, value: Literal["ORIGINAL", "RELATIVE"]):
|
|
1664
|
+
self.node.transform_space = value
|
|
1665
|
+
|
|
1666
|
+
|
|
1667
|
+
class OffsetCornerInFace(NodeBuilder):
|
|
1668
|
+
"""Retrieve corners in the same face as another"""
|
|
1669
|
+
|
|
1670
|
+
_bl_idname = "GeometryNodeOffsetCornerInFace"
|
|
1671
|
+
node: bpy.types.GeometryNodeOffsetCornerInFace
|
|
1672
|
+
|
|
1673
|
+
def __init__(
|
|
1674
|
+
self,
|
|
1675
|
+
corner_index: TYPE_INPUT_INT = 0,
|
|
1676
|
+
offset: TYPE_INPUT_INT = 0,
|
|
1677
|
+
):
|
|
1678
|
+
super().__init__()
|
|
1679
|
+
key_args = {"Corner Index": corner_index, "Offset": offset}
|
|
1680
|
+
|
|
1681
|
+
self._establish_links(**key_args)
|
|
1682
|
+
|
|
1683
|
+
@property
|
|
1684
|
+
def i_corner_index(self) -> SocketLinker:
|
|
1685
|
+
"""Input socket: Corner Index"""
|
|
1686
|
+
return self._input("Corner Index")
|
|
1687
|
+
|
|
1688
|
+
@property
|
|
1689
|
+
def i_offset(self) -> SocketLinker:
|
|
1690
|
+
"""Input socket: Offset"""
|
|
1691
|
+
return self._input("Offset")
|
|
1692
|
+
|
|
1693
|
+
@property
|
|
1694
|
+
def o_corner_index(self) -> SocketLinker:
|
|
1695
|
+
"""Output socket: Corner Index"""
|
|
1696
|
+
return self._output("Corner Index")
|
|
1697
|
+
|
|
1698
|
+
|
|
1699
|
+
class OffsetPointInCurve(NodeBuilder):
|
|
1700
|
+
"""Offset a control point index within its curve"""
|
|
1701
|
+
|
|
1702
|
+
_bl_idname = "GeometryNodeOffsetPointInCurve"
|
|
1703
|
+
node: bpy.types.GeometryNodeOffsetPointInCurve
|
|
1704
|
+
|
|
1705
|
+
def __init__(
|
|
1706
|
+
self,
|
|
1707
|
+
point_index: TYPE_INPUT_INT = 0,
|
|
1708
|
+
offset: TYPE_INPUT_INT = 0,
|
|
1709
|
+
):
|
|
1710
|
+
super().__init__()
|
|
1711
|
+
key_args = {"Point Index": point_index, "Offset": offset}
|
|
1712
|
+
|
|
1713
|
+
self._establish_links(**key_args)
|
|
1714
|
+
|
|
1715
|
+
@property
|
|
1716
|
+
def i_point_index(self) -> SocketLinker:
|
|
1717
|
+
"""Input socket: Point Index"""
|
|
1718
|
+
return self._input("Point Index")
|
|
1719
|
+
|
|
1720
|
+
@property
|
|
1721
|
+
def i_offset(self) -> SocketLinker:
|
|
1722
|
+
"""Input socket: Offset"""
|
|
1723
|
+
return self._input("Offset")
|
|
1724
|
+
|
|
1725
|
+
@property
|
|
1726
|
+
def o_is_valid_offset(self) -> SocketLinker:
|
|
1727
|
+
"""Output socket: Is Valid Offset"""
|
|
1728
|
+
return self._output("Is Valid Offset")
|
|
1729
|
+
|
|
1730
|
+
@property
|
|
1731
|
+
def o_point_index(self) -> SocketLinker:
|
|
1732
|
+
"""Output socket: Point Index"""
|
|
1733
|
+
return self._output("Point Index")
|
|
1734
|
+
|
|
1735
|
+
|
|
1736
|
+
class PointsOfCurve(NodeBuilder):
|
|
1737
|
+
"""Retrieve a point index within a curve"""
|
|
1738
|
+
|
|
1739
|
+
_bl_idname = "GeometryNodePointsOfCurve"
|
|
1740
|
+
node: bpy.types.GeometryNodePointsOfCurve
|
|
1741
|
+
|
|
1742
|
+
def __init__(
|
|
1743
|
+
self,
|
|
1744
|
+
curve_index: TYPE_INPUT_INT = 0,
|
|
1745
|
+
weights: TYPE_INPUT_VALUE = 0.0,
|
|
1746
|
+
sort_index: TYPE_INPUT_INT = 0,
|
|
1747
|
+
):
|
|
1748
|
+
super().__init__()
|
|
1749
|
+
key_args = {
|
|
1750
|
+
"Curve Index": curve_index,
|
|
1751
|
+
"Weights": weights,
|
|
1752
|
+
"Sort Index": sort_index,
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
self._establish_links(**key_args)
|
|
1756
|
+
|
|
1757
|
+
@property
|
|
1758
|
+
def i_curve_index(self) -> SocketLinker:
|
|
1759
|
+
"""Input socket: Curve Index"""
|
|
1760
|
+
return self._input("Curve Index")
|
|
1761
|
+
|
|
1762
|
+
@property
|
|
1763
|
+
def i_weights(self) -> SocketLinker:
|
|
1764
|
+
"""Input socket: Weights"""
|
|
1765
|
+
return self._input("Weights")
|
|
1766
|
+
|
|
1767
|
+
@property
|
|
1768
|
+
def i_sort_index(self) -> SocketLinker:
|
|
1769
|
+
"""Input socket: Sort Index"""
|
|
1770
|
+
return self._input("Sort Index")
|
|
1771
|
+
|
|
1772
|
+
@property
|
|
1773
|
+
def o_point_index(self) -> SocketLinker:
|
|
1774
|
+
"""Output socket: Point Index"""
|
|
1775
|
+
return self._output("Point Index")
|
|
1776
|
+
|
|
1777
|
+
@property
|
|
1778
|
+
def o_total(self) -> SocketLinker:
|
|
1779
|
+
"""Output socket: Total"""
|
|
1780
|
+
return self._output("Total")
|
|
1781
|
+
|
|
1782
|
+
|
|
503
1783
|
class Position(NodeBuilder):
|
|
504
1784
|
"""Retrieve a vector indicating the location of each element"""
|
|
505
1785
|
|
|
506
|
-
|
|
1786
|
+
_bl_idname = "GeometryNodeInputPosition"
|
|
507
1787
|
node: bpy.types.GeometryNodeInputPosition
|
|
508
1788
|
|
|
509
|
-
def __init__(self
|
|
1789
|
+
def __init__(self):
|
|
510
1790
|
super().__init__()
|
|
511
|
-
key_args =
|
|
1791
|
+
key_args = {}
|
|
512
1792
|
|
|
513
1793
|
self._establish_links(**key_args)
|
|
514
1794
|
|
|
515
1795
|
@property
|
|
516
|
-
def o_position(self) ->
|
|
1796
|
+
def o_position(self) -> SocketLinker:
|
|
517
1797
|
"""Output socket: Position"""
|
|
518
1798
|
return self._output("Position")
|
|
519
1799
|
|
|
@@ -521,216 +1801,441 @@ class Position(NodeBuilder):
|
|
|
521
1801
|
class Radius(NodeBuilder):
|
|
522
1802
|
"""Retrieve the radius at each point on curve or point cloud geometry"""
|
|
523
1803
|
|
|
524
|
-
|
|
1804
|
+
_bl_idname = "GeometryNodeInputRadius"
|
|
525
1805
|
node: bpy.types.GeometryNodeInputRadius
|
|
526
1806
|
|
|
527
|
-
def __init__(self
|
|
1807
|
+
def __init__(self):
|
|
528
1808
|
super().__init__()
|
|
529
|
-
key_args =
|
|
1809
|
+
key_args = {}
|
|
530
1810
|
|
|
531
1811
|
self._establish_links(**key_args)
|
|
532
1812
|
|
|
533
1813
|
@property
|
|
534
|
-
def o_radius(self) ->
|
|
1814
|
+
def o_radius(self) -> SocketLinker:
|
|
535
1815
|
"""Output socket: Radius"""
|
|
536
1816
|
return self._output("Radius")
|
|
537
1817
|
|
|
538
1818
|
|
|
1819
|
+
class Rotation(NodeBuilder):
|
|
1820
|
+
"""Provide a rotation value that can be connected to other nodes in the tree"""
|
|
1821
|
+
|
|
1822
|
+
_bl_idname = "FunctionNodeInputRotation"
|
|
1823
|
+
node: bpy.types.FunctionNodeInputRotation
|
|
1824
|
+
|
|
1825
|
+
def __init__(self, rotation_euler: tuple[float, float, float] = (0.0, 0.0, 0.0)):
|
|
1826
|
+
super().__init__()
|
|
1827
|
+
key_args = {}
|
|
1828
|
+
self.rotation_euler = rotation_euler
|
|
1829
|
+
self._establish_links(**key_args)
|
|
1830
|
+
|
|
1831
|
+
@property
|
|
1832
|
+
def o_rotation(self) -> SocketLinker:
|
|
1833
|
+
"""Output socket: Rotation"""
|
|
1834
|
+
return self._output("Rotation")
|
|
1835
|
+
|
|
1836
|
+
@property
|
|
1837
|
+
def rotation_euler(self) -> tuple[float, float, float]:
|
|
1838
|
+
return self.node.rotation_euler
|
|
1839
|
+
|
|
1840
|
+
@rotation_euler.setter
|
|
1841
|
+
def rotation_euler(self, value: tuple[float, float, float]):
|
|
1842
|
+
self.node.rotation_euler = value
|
|
1843
|
+
|
|
1844
|
+
|
|
539
1845
|
class SceneTime(NodeBuilder):
|
|
540
1846
|
"""Retrieve the current time in the scene's animation in units of seconds or frames"""
|
|
541
1847
|
|
|
542
|
-
|
|
1848
|
+
_bl_idname = "GeometryNodeInputSceneTime"
|
|
543
1849
|
node: bpy.types.GeometryNodeInputSceneTime
|
|
544
1850
|
|
|
545
|
-
def __init__(self
|
|
1851
|
+
def __init__(self):
|
|
546
1852
|
super().__init__()
|
|
547
|
-
key_args =
|
|
1853
|
+
key_args = {}
|
|
548
1854
|
|
|
549
1855
|
self._establish_links(**key_args)
|
|
550
1856
|
|
|
551
1857
|
@property
|
|
552
|
-
def o_seconds(self) ->
|
|
1858
|
+
def o_seconds(self) -> SocketLinker:
|
|
553
1859
|
"""Output socket: Seconds"""
|
|
554
1860
|
return self._output("Seconds")
|
|
555
1861
|
|
|
556
1862
|
@property
|
|
557
|
-
def o_frame(self) ->
|
|
1863
|
+
def o_frame(self) -> SocketLinker:
|
|
558
1864
|
"""Output socket: Frame"""
|
|
559
1865
|
return self._output("Frame")
|
|
560
1866
|
|
|
561
1867
|
|
|
562
|
-
class
|
|
563
|
-
"""
|
|
1868
|
+
class Selection(NodeBuilder):
|
|
1869
|
+
"""User selection of the edited geometry, for tool execution"""
|
|
564
1870
|
|
|
565
|
-
|
|
566
|
-
node: bpy.types.
|
|
1871
|
+
_bl_idname = "GeometryNodeToolSelection"
|
|
1872
|
+
node: bpy.types.GeometryNodeToolSelection
|
|
567
1873
|
|
|
568
|
-
def __init__(self
|
|
1874
|
+
def __init__(self):
|
|
569
1875
|
super().__init__()
|
|
570
|
-
key_args =
|
|
1876
|
+
key_args = {}
|
|
571
1877
|
|
|
572
1878
|
self._establish_links(**key_args)
|
|
573
1879
|
|
|
574
1880
|
@property
|
|
575
|
-
def
|
|
576
|
-
"""Output socket:
|
|
577
|
-
return self._output("
|
|
1881
|
+
def o_selection(self) -> SocketLinker:
|
|
1882
|
+
"""Output socket: Boolean"""
|
|
1883
|
+
return self._output("Selection")
|
|
1884
|
+
|
|
1885
|
+
@property
|
|
1886
|
+
def o_float(self) -> SocketLinker:
|
|
1887
|
+
"""Output socket: Float"""
|
|
1888
|
+
return self._output("Float")
|
|
1889
|
+
|
|
1890
|
+
|
|
1891
|
+
class SelfObject(NodeBuilder):
|
|
1892
|
+
"""Retrieve the object that contains the geometry nodes modifier currently being executed"""
|
|
1893
|
+
|
|
1894
|
+
_bl_idname = "GeometryNodeSelfObject"
|
|
1895
|
+
node: bpy.types.GeometryNodeSelfObject
|
|
1896
|
+
|
|
1897
|
+
def __init__(self):
|
|
1898
|
+
super().__init__()
|
|
1899
|
+
key_args = {}
|
|
1900
|
+
|
|
1901
|
+
self._establish_links(**key_args)
|
|
1902
|
+
|
|
1903
|
+
@property
|
|
1904
|
+
def o_self_object(self) -> SocketLinker:
|
|
1905
|
+
"""Output socket: Self Object"""
|
|
1906
|
+
return self._output("Self Object")
|
|
578
1907
|
|
|
579
1908
|
|
|
580
1909
|
class ShortestEdgePaths(NodeBuilder):
|
|
581
1910
|
"""Find the shortest paths along mesh edges to selected end vertices, with customizable cost per edge"""
|
|
582
1911
|
|
|
583
|
-
|
|
1912
|
+
_bl_idname = "GeometryNodeInputShortestEdgePaths"
|
|
584
1913
|
node: bpy.types.GeometryNodeInputShortestEdgePaths
|
|
585
1914
|
|
|
586
1915
|
def __init__(
|
|
587
1916
|
self,
|
|
588
1917
|
end_vertex: TYPE_INPUT_BOOLEAN = False,
|
|
589
|
-
edge_cost:
|
|
590
|
-
**kwargs,
|
|
1918
|
+
edge_cost: TYPE_INPUT_VALUE = 1.0,
|
|
591
1919
|
):
|
|
592
1920
|
super().__init__()
|
|
593
1921
|
key_args = {"End Vertex": end_vertex, "Edge Cost": edge_cost}
|
|
594
|
-
key_args.update(kwargs)
|
|
595
1922
|
|
|
596
1923
|
self._establish_links(**key_args)
|
|
597
1924
|
|
|
598
1925
|
@property
|
|
599
|
-
def i_end_vertex(self) ->
|
|
1926
|
+
def i_end_vertex(self) -> SocketLinker:
|
|
600
1927
|
"""Input socket: End Vertex"""
|
|
601
1928
|
return self._input("End Vertex")
|
|
602
1929
|
|
|
603
1930
|
@property
|
|
604
|
-
def i_edge_cost(self) ->
|
|
1931
|
+
def i_edge_cost(self) -> SocketLinker:
|
|
605
1932
|
"""Input socket: Edge Cost"""
|
|
606
1933
|
return self._input("Edge Cost")
|
|
607
1934
|
|
|
608
1935
|
@property
|
|
609
|
-
def o_next_vertex_index(self) ->
|
|
1936
|
+
def o_next_vertex_index(self) -> SocketLinker:
|
|
610
1937
|
"""Output socket: Next Vertex Index"""
|
|
611
1938
|
return self._output("Next Vertex Index")
|
|
612
1939
|
|
|
613
1940
|
@property
|
|
614
|
-
def o_total_cost(self) ->
|
|
1941
|
+
def o_total_cost(self) -> SocketLinker:
|
|
615
1942
|
"""Output socket: Total Cost"""
|
|
616
1943
|
return self._output("Total Cost")
|
|
617
1944
|
|
|
618
1945
|
|
|
619
|
-
class
|
|
620
|
-
"""
|
|
1946
|
+
class SpecialCharacters(NodeBuilder):
|
|
1947
|
+
"""Output string characters that cannot be typed directly with the keyboard"""
|
|
621
1948
|
|
|
622
|
-
|
|
623
|
-
node: bpy.types.
|
|
1949
|
+
_bl_idname = "FunctionNodeInputSpecialCharacters"
|
|
1950
|
+
node: bpy.types.FunctionNodeInputSpecialCharacters
|
|
624
1951
|
|
|
625
|
-
def __init__(self
|
|
1952
|
+
def __init__(self):
|
|
626
1953
|
super().__init__()
|
|
627
|
-
key_args =
|
|
1954
|
+
key_args = {}
|
|
628
1955
|
|
|
629
1956
|
self._establish_links(**key_args)
|
|
630
1957
|
|
|
631
1958
|
@property
|
|
632
|
-
def
|
|
633
|
-
"""Output socket:
|
|
634
|
-
return self._output("
|
|
1959
|
+
def o_line_break(self) -> SocketLinker:
|
|
1960
|
+
"""Output socket: Line Break"""
|
|
1961
|
+
return self._output("Line Break")
|
|
1962
|
+
|
|
1963
|
+
@property
|
|
1964
|
+
def o_tab(self) -> SocketLinker:
|
|
1965
|
+
"""Output socket: Tab"""
|
|
1966
|
+
return self._output("Tab")
|
|
1967
|
+
|
|
1968
|
+
|
|
1969
|
+
class SplineLength(NodeBuilder):
|
|
1970
|
+
"""Retrieve the total length of each spline, as a distance or as a number of points"""
|
|
1971
|
+
|
|
1972
|
+
_bl_idname = "GeometryNodeSplineLength"
|
|
1973
|
+
node: bpy.types.GeometryNodeSplineLength
|
|
1974
|
+
|
|
1975
|
+
def __init__(self):
|
|
1976
|
+
super().__init__()
|
|
1977
|
+
key_args = {}
|
|
1978
|
+
|
|
1979
|
+
self._establish_links(**key_args)
|
|
1980
|
+
|
|
1981
|
+
@property
|
|
1982
|
+
def o_length(self) -> SocketLinker:
|
|
1983
|
+
"""Output socket: Length"""
|
|
1984
|
+
return self._output("Length")
|
|
1985
|
+
|
|
1986
|
+
@property
|
|
1987
|
+
def o_point_count(self) -> SocketLinker:
|
|
1988
|
+
"""Output socket: Point Count"""
|
|
1989
|
+
return self._output("Point Count")
|
|
1990
|
+
|
|
1991
|
+
|
|
1992
|
+
class SplineParameter(NodeBuilder):
|
|
1993
|
+
"""Retrieve how far along each spline a control point is"""
|
|
1994
|
+
|
|
1995
|
+
_bl_idname = "GeometryNodeSplineParameter"
|
|
1996
|
+
node: bpy.types.GeometryNodeSplineParameter
|
|
1997
|
+
|
|
1998
|
+
def __init__(self):
|
|
1999
|
+
super().__init__()
|
|
2000
|
+
key_args = {}
|
|
2001
|
+
|
|
2002
|
+
self._establish_links(**key_args)
|
|
2003
|
+
|
|
2004
|
+
@property
|
|
2005
|
+
def o_factor(self) -> SocketLinker:
|
|
2006
|
+
"""Output socket: Factor"""
|
|
2007
|
+
return self._output("Factor")
|
|
2008
|
+
|
|
2009
|
+
@property
|
|
2010
|
+
def o_length(self) -> SocketLinker:
|
|
2011
|
+
"""Output socket: Length"""
|
|
2012
|
+
return self._output("Length")
|
|
2013
|
+
|
|
2014
|
+
@property
|
|
2015
|
+
def o_index(self) -> SocketLinker:
|
|
2016
|
+
"""Output socket: Index"""
|
|
2017
|
+
return self._output("Index")
|
|
635
2018
|
|
|
636
2019
|
|
|
637
2020
|
class SplineResolution(NodeBuilder):
|
|
638
2021
|
"""Retrieve the number of evaluated points that will be generated for every control point on curves"""
|
|
639
2022
|
|
|
640
|
-
|
|
2023
|
+
_bl_idname = "GeometryNodeInputSplineResolution"
|
|
641
2024
|
node: bpy.types.GeometryNodeInputSplineResolution
|
|
642
2025
|
|
|
643
|
-
def __init__(self
|
|
2026
|
+
def __init__(self):
|
|
644
2027
|
super().__init__()
|
|
645
|
-
key_args =
|
|
2028
|
+
key_args = {}
|
|
646
2029
|
|
|
647
2030
|
self._establish_links(**key_args)
|
|
648
2031
|
|
|
649
2032
|
@property
|
|
650
|
-
def o_resolution(self) ->
|
|
2033
|
+
def o_resolution(self) -> SocketLinker:
|
|
651
2034
|
"""Output socket: Resolution"""
|
|
652
2035
|
return self._output("Resolution")
|
|
653
2036
|
|
|
654
2037
|
|
|
655
|
-
class
|
|
656
|
-
"""
|
|
2038
|
+
class String(NodeBuilder):
|
|
2039
|
+
"""Provide a string value that can be connected to other nodes in the tree"""
|
|
2040
|
+
|
|
2041
|
+
_bl_idname = "FunctionNodeInputString"
|
|
2042
|
+
node: bpy.types.FunctionNodeInputString
|
|
2043
|
+
|
|
2044
|
+
def __init__(self, string: str = ""):
|
|
2045
|
+
super().__init__()
|
|
2046
|
+
key_args = {}
|
|
2047
|
+
self.string = string
|
|
2048
|
+
self._establish_links(**key_args)
|
|
2049
|
+
|
|
2050
|
+
@property
|
|
2051
|
+
def o_string(self) -> SocketLinker:
|
|
2052
|
+
"""Output socket: String"""
|
|
2053
|
+
return self._output("String")
|
|
2054
|
+
|
|
2055
|
+
@property
|
|
2056
|
+
def string(self) -> str:
|
|
2057
|
+
return self.node.string
|
|
2058
|
+
|
|
2059
|
+
@string.setter
|
|
2060
|
+
def string(self, value: str):
|
|
2061
|
+
self.node.string = value
|
|
657
2062
|
|
|
658
|
-
name = "GeometryNodeInputTangent"
|
|
659
|
-
node: bpy.types.GeometryNodeInputTangent
|
|
660
2063
|
|
|
661
|
-
|
|
2064
|
+
class UVTangent(NodeBuilder):
|
|
2065
|
+
"""Generate tangent directions based on a UV map"""
|
|
2066
|
+
|
|
2067
|
+
_bl_idname = "GeometryNodeUVTangent"
|
|
2068
|
+
node: bpy.types.GeometryNodeUVTangent
|
|
2069
|
+
|
|
2070
|
+
def __init__(
|
|
2071
|
+
self,
|
|
2072
|
+
method: TYPE_INPUT_MENU = "Exact",
|
|
2073
|
+
uv: TYPE_INPUT_VECTOR = None,
|
|
2074
|
+
):
|
|
662
2075
|
super().__init__()
|
|
663
|
-
key_args =
|
|
2076
|
+
key_args = {"Method": method, "UV": uv}
|
|
664
2077
|
|
|
665
2078
|
self._establish_links(**key_args)
|
|
666
2079
|
|
|
667
2080
|
@property
|
|
668
|
-
def
|
|
2081
|
+
def i_method(self) -> SocketLinker:
|
|
2082
|
+
"""Input socket: Method"""
|
|
2083
|
+
return self._input("Method")
|
|
2084
|
+
|
|
2085
|
+
@property
|
|
2086
|
+
def i_uv(self) -> SocketLinker:
|
|
2087
|
+
"""Input socket: UV"""
|
|
2088
|
+
return self._input("UV")
|
|
2089
|
+
|
|
2090
|
+
@property
|
|
2091
|
+
def o_tangent(self) -> SocketLinker:
|
|
669
2092
|
"""Output socket: Tangent"""
|
|
670
2093
|
return self._output("Tangent")
|
|
671
2094
|
|
|
672
2095
|
|
|
2096
|
+
class Vector(NodeBuilder):
|
|
2097
|
+
"""Provide a vector value that can be connected to other nodes in the tree"""
|
|
2098
|
+
|
|
2099
|
+
_bl_idname = "FunctionNodeInputVector"
|
|
2100
|
+
node: bpy.types.FunctionNodeInputVector
|
|
2101
|
+
|
|
2102
|
+
def __init__(self, vector: tuple[float, float, float] = (0.0, 0.0, 0.0)):
|
|
2103
|
+
super().__init__()
|
|
2104
|
+
key_args = {}
|
|
2105
|
+
self.vector = vector
|
|
2106
|
+
self._establish_links(**key_args)
|
|
2107
|
+
|
|
2108
|
+
@property
|
|
2109
|
+
def o_vector(self) -> SocketLinker:
|
|
2110
|
+
"""Output socket: Vector"""
|
|
2111
|
+
return self._output("Vector")
|
|
2112
|
+
|
|
2113
|
+
@property
|
|
2114
|
+
def vector(self) -> tuple[float, float, float]:
|
|
2115
|
+
return self.node.vector
|
|
2116
|
+
|
|
2117
|
+
@vector.setter
|
|
2118
|
+
def vector(self, value: tuple[float, float, float]):
|
|
2119
|
+
self.node.vector = value
|
|
2120
|
+
|
|
2121
|
+
|
|
2122
|
+
class VertexNeighbors(NodeBuilder):
|
|
2123
|
+
"""Retrieve topology information relating to each vertex of a mesh"""
|
|
2124
|
+
|
|
2125
|
+
_bl_idname = "GeometryNodeInputMeshVertexNeighbors"
|
|
2126
|
+
node: bpy.types.GeometryNodeInputMeshVertexNeighbors
|
|
2127
|
+
|
|
2128
|
+
def __init__(self):
|
|
2129
|
+
super().__init__()
|
|
2130
|
+
key_args = {}
|
|
2131
|
+
|
|
2132
|
+
self._establish_links(**key_args)
|
|
2133
|
+
|
|
2134
|
+
@property
|
|
2135
|
+
def o_vertex_count(self) -> SocketLinker:
|
|
2136
|
+
"""Output socket: Vertex Count"""
|
|
2137
|
+
return self._output("Vertex Count")
|
|
2138
|
+
|
|
2139
|
+
@property
|
|
2140
|
+
def o_face_count(self) -> SocketLinker:
|
|
2141
|
+
"""Output socket: Face Count"""
|
|
2142
|
+
return self._output("Face Count")
|
|
2143
|
+
|
|
2144
|
+
|
|
2145
|
+
class VertexOfCorner(NodeBuilder):
|
|
2146
|
+
"""Retrieve the vertex each face corner is attached to"""
|
|
2147
|
+
|
|
2148
|
+
_bl_idname = "GeometryNodeVertexOfCorner"
|
|
2149
|
+
node: bpy.types.GeometryNodeVertexOfCorner
|
|
2150
|
+
|
|
2151
|
+
def __init__(self, corner_index: TYPE_INPUT_INT = 0):
|
|
2152
|
+
super().__init__()
|
|
2153
|
+
key_args = {"Corner Index": corner_index}
|
|
2154
|
+
|
|
2155
|
+
self._establish_links(**key_args)
|
|
2156
|
+
|
|
2157
|
+
@property
|
|
2158
|
+
def i_corner_index(self) -> SocketLinker:
|
|
2159
|
+
"""Input socket: Corner Index"""
|
|
2160
|
+
return self._input("Corner Index")
|
|
2161
|
+
|
|
2162
|
+
@property
|
|
2163
|
+
def o_vertex_index(self) -> SocketLinker:
|
|
2164
|
+
"""Output socket: Vertex Index"""
|
|
2165
|
+
return self._output("Vertex Index")
|
|
2166
|
+
|
|
2167
|
+
|
|
2168
|
+
class ViewportTransform(NodeBuilder):
|
|
2169
|
+
"""Retrieve the view direction and location of the 3D viewport"""
|
|
2170
|
+
|
|
2171
|
+
_bl_idname = "GeometryNodeViewportTransform"
|
|
2172
|
+
node: bpy.types.GeometryNodeViewportTransform
|
|
2173
|
+
|
|
2174
|
+
def __init__(self):
|
|
2175
|
+
super().__init__()
|
|
2176
|
+
key_args = {}
|
|
2177
|
+
|
|
2178
|
+
self._establish_links(**key_args)
|
|
2179
|
+
|
|
2180
|
+
@property
|
|
2181
|
+
def o_projection(self) -> SocketLinker:
|
|
2182
|
+
"""Output socket: Projection"""
|
|
2183
|
+
return self._output("Projection")
|
|
2184
|
+
|
|
2185
|
+
@property
|
|
2186
|
+
def o_view(self) -> SocketLinker:
|
|
2187
|
+
"""Output socket: View"""
|
|
2188
|
+
return self._output("View")
|
|
2189
|
+
|
|
2190
|
+
@property
|
|
2191
|
+
def o_is_orthographic(self) -> SocketLinker:
|
|
2192
|
+
"""Output socket: Is Orthographic"""
|
|
2193
|
+
return self._output("Is Orthographic")
|
|
2194
|
+
|
|
2195
|
+
|
|
673
2196
|
class VoxelIndex(NodeBuilder):
|
|
674
2197
|
"""Retrieve the integer coordinates of the voxel that the field is evaluated on"""
|
|
675
2198
|
|
|
676
|
-
|
|
2199
|
+
_bl_idname = "GeometryNodeInputVoxelIndex"
|
|
677
2200
|
node: bpy.types.GeometryNodeInputVoxelIndex
|
|
678
2201
|
|
|
679
|
-
def __init__(self
|
|
2202
|
+
def __init__(self):
|
|
680
2203
|
super().__init__()
|
|
681
|
-
key_args =
|
|
2204
|
+
key_args = {}
|
|
682
2205
|
|
|
683
2206
|
self._establish_links(**key_args)
|
|
684
2207
|
|
|
685
2208
|
@property
|
|
686
|
-
def o_x(self) ->
|
|
2209
|
+
def o_x(self) -> SocketLinker:
|
|
687
2210
|
"""Output socket: X"""
|
|
688
2211
|
return self._output("X")
|
|
689
2212
|
|
|
690
2213
|
@property
|
|
691
|
-
def o_y(self) ->
|
|
2214
|
+
def o_y(self) -> SocketLinker:
|
|
692
2215
|
"""Output socket: Y"""
|
|
693
2216
|
return self._output("Y")
|
|
694
2217
|
|
|
695
2218
|
@property
|
|
696
|
-
def o_z(self) ->
|
|
2219
|
+
def o_z(self) -> SocketLinker:
|
|
697
2220
|
"""Output socket: Z"""
|
|
698
2221
|
return self._output("Z")
|
|
699
2222
|
|
|
700
2223
|
@property
|
|
701
|
-
def o_is_tile(self) ->
|
|
2224
|
+
def o_is_tile(self) -> SocketLinker:
|
|
702
2225
|
"""Output socket: Is Tile"""
|
|
703
2226
|
return self._output("Is Tile")
|
|
704
2227
|
|
|
705
2228
|
@property
|
|
706
|
-
def o_extent_x(self) ->
|
|
2229
|
+
def o_extent_x(self) -> SocketLinker:
|
|
707
2230
|
"""Output socket: Extent X"""
|
|
708
2231
|
return self._output("Extent X")
|
|
709
2232
|
|
|
710
2233
|
@property
|
|
711
|
-
def o_extent_y(self) ->
|
|
2234
|
+
def o_extent_y(self) -> SocketLinker:
|
|
712
2235
|
"""Output socket: Extent Y"""
|
|
713
2236
|
return self._output("Extent Y")
|
|
714
2237
|
|
|
715
2238
|
@property
|
|
716
|
-
def o_extent_z(self) ->
|
|
2239
|
+
def o_extent_z(self) -> SocketLinker:
|
|
717
2240
|
"""Output socket: Extent Z"""
|
|
718
2241
|
return self._output("Extent Z")
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
class Value(NodeBuilder):
|
|
722
|
-
"""Input numerical values to other nodes in the tree"""
|
|
723
|
-
|
|
724
|
-
name = "ShaderNodeValue"
|
|
725
|
-
node: bpy.types.ShaderNodeValue
|
|
726
|
-
|
|
727
|
-
def __init__(self, **kwargs):
|
|
728
|
-
super().__init__()
|
|
729
|
-
key_args = kwargs
|
|
730
|
-
|
|
731
|
-
self._establish_links(**key_args)
|
|
732
|
-
|
|
733
|
-
@property
|
|
734
|
-
def o_value(self) -> bpy.types.NodeSocketFloat:
|
|
735
|
-
"""Output socket: Value"""
|
|
736
|
-
return self._output("Value")
|