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