nodebpy 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl

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