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.
@@ -1,85 +1,116 @@
1
1
  from typing import Literal
2
- from ..builder import NodeBuilder, SocketLinker
2
+
3
3
  import bpy
4
4
 
5
- from .types import TYPE_INPUT_INT, TYPE_INPUT_VALUE
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_ROTATION,
11
+ TYPE_INPUT_COLOR,
12
+ TYPE_INPUT_MATRIX,
13
+ TYPE_INPUT_VALUE,
14
+ TYPE_INPUT_VECTOR,
15
+ )
6
16
 
7
17
 
8
- class List(NodeBuilder):
9
- """Create a list of values"""
18
+ class GetListItem(NodeBuilder):
19
+ """Retrieve a value from a list"""
10
20
 
11
- name = "GeometryNodeList"
12
- node: bpy.types.GeometryNodeList
21
+ _bl_idname = "GeometryNodeListGetItem"
22
+ node: bpy.types.GeometryNodeListGetItem
13
23
 
14
24
  def __init__(
15
25
  self,
16
- count: TYPE_INPUT_INT = 1,
17
- value: TYPE_INPUT_VALUE = 0.0,
26
+ list: TYPE_INPUT_VALUE = 0.0,
27
+ index: TYPE_INPUT_INT = 0,
28
+ *,
18
29
  data_type: Literal[
19
- "FLOAT",
20
- "INT",
21
- "BOOLEAN",
22
- "VECTOR",
23
- "RGBA",
24
- "ROTATION",
25
- "MATRIX",
26
- "STRING",
27
- "MENU",
28
- "SHADER",
29
- "OBJECT",
30
- "IMAGE",
31
- "GEOMETRY",
32
- "COLLECTION",
33
- "TEXTURE",
34
- "MATERIAL",
35
- "BUNDLE",
36
- "CLOSURE",
30
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
37
31
  ] = "FLOAT",
38
- **kwargs,
39
32
  ):
40
33
  super().__init__()
41
- key_args = {"Count": count, "Value": value}
42
- key_args.update(kwargs)
34
+ key_args = {"List": list, "Index": index}
43
35
  self.data_type = data_type
44
36
  self._establish_links(**key_args)
45
37
 
38
+ @classmethod
39
+ def float(
40
+ cls, list: TYPE_INPUT_VALUE = 0.0, index: TYPE_INPUT_INT = 0
41
+ ) -> "GetListItem":
42
+ """Create Get List Item with operation 'Float'."""
43
+ return cls(data_type="FLOAT", list=list, index=index)
44
+
45
+ @classmethod
46
+ def integer(
47
+ cls, list: TYPE_INPUT_INT = 0, index: TYPE_INPUT_INT = 0
48
+ ) -> "GetListItem":
49
+ """Create Get List Item with operation 'Integer'."""
50
+ return cls(data_type="INT", list=list, index=index)
51
+
52
+ @classmethod
53
+ def boolean(
54
+ cls, list: TYPE_INPUT_BOOLEAN = False, index: TYPE_INPUT_INT = 0
55
+ ) -> "GetListItem":
56
+ """Create Get List Item with operation 'Boolean'."""
57
+ return cls(data_type="BOOLEAN", list=list, index=index)
58
+
59
+ @classmethod
60
+ def vector(
61
+ cls, list: TYPE_INPUT_VECTOR = None, index: TYPE_INPUT_INT = 0
62
+ ) -> "GetListItem":
63
+ """Create Get List Item with operation 'Vector'."""
64
+ return cls(data_type="VECTOR", list=list, index=index)
65
+
66
+ @classmethod
67
+ def color(
68
+ cls, list: TYPE_INPUT_COLOR = None, index: TYPE_INPUT_INT = 0
69
+ ) -> "GetListItem":
70
+ """Create Get List Item with operation 'Color'."""
71
+ return cls(data_type="RGBA", list=list, index=index)
72
+
73
+ @classmethod
74
+ def rotation(
75
+ cls, list: TYPE_INPUT_ROTATION = None, index: TYPE_INPUT_INT = 0
76
+ ) -> "GetListItem":
77
+ """Create Get List Item with operation 'Rotation'."""
78
+ return cls(data_type="ROTATION", list=list, index=index)
79
+
80
+ @classmethod
81
+ def matrix(
82
+ cls, list: TYPE_INPUT_MATRIX = None, index: TYPE_INPUT_INT = 0
83
+ ) -> "GetListItem":
84
+ """Create Get List Item with operation 'Matrix'."""
85
+ return cls(data_type="MATRIX", list=list, index=index)
86
+
87
+ @classmethod
88
+ def menu(
89
+ cls, list: TYPE_INPUT_MENU = "", index: TYPE_INPUT_INT = 0
90
+ ) -> "GetListItem":
91
+ """Create Get List Item with operation 'Menu'."""
92
+ return cls(data_type="MENU", list=list, index=index)
93
+
46
94
  @property
47
- def i_count(self) -> SocketLinker:
48
- """Input socket: Count"""
49
- return self._input("Count")
95
+ def i_list(self) -> SocketLinker:
96
+ """Input socket: List"""
97
+ return self._input("List")
50
98
 
51
99
  @property
52
- def i_value(self) -> SocketLinker:
53
- """Input socket: Value"""
54
- return self._input("Value")
100
+ def i_index(self) -> SocketLinker:
101
+ """Input socket: Index"""
102
+ return self._input("Index")
55
103
 
56
104
  @property
57
- def o_list(self) -> SocketLinker:
58
- """Output socket: List"""
59
- return self._output("List")
105
+ def o_value(self) -> SocketLinker:
106
+ """Output socket: Value"""
107
+ return self._output("Value")
60
108
 
61
109
  @property
62
110
  def data_type(
63
111
  self,
64
112
  ) -> Literal[
65
- "FLOAT",
66
- "INT",
67
- "BOOLEAN",
68
- "VECTOR",
69
- "RGBA",
70
- "ROTATION",
71
- "MATRIX",
72
- "STRING",
73
- "MENU",
74
- "SHADER",
75
- "OBJECT",
76
- "IMAGE",
77
- "GEOMETRY",
78
- "COLLECTION",
79
- "TEXTURE",
80
- "MATERIAL",
81
- "BUNDLE",
82
- "CLOSURE",
113
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
83
114
  ]:
84
115
  return self.node.data_type
85
116
 
@@ -87,104 +118,100 @@ class List(NodeBuilder):
87
118
  def data_type(
88
119
  self,
89
120
  value: Literal[
90
- "FLOAT",
91
- "INT",
92
- "BOOLEAN",
93
- "VECTOR",
94
- "RGBA",
95
- "ROTATION",
96
- "MATRIX",
97
- "STRING",
98
- "MENU",
99
- "SHADER",
100
- "OBJECT",
101
- "IMAGE",
102
- "GEOMETRY",
103
- "COLLECTION",
104
- "TEXTURE",
105
- "MATERIAL",
106
- "BUNDLE",
107
- "CLOSURE",
121
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
108
122
  ],
109
123
  ):
110
124
  self.node.data_type = value
111
125
 
112
126
 
113
- class GetListItem(NodeBuilder):
114
- """Retrieve a value from a list"""
127
+ class List(NodeBuilder):
128
+ """Create a list of values"""
115
129
 
116
- name = "GeometryNodeListGetItem"
117
- node: bpy.types.GeometryNodeListGetItem
130
+ _bl_idname = "GeometryNodeList"
131
+ node: bpy.types.GeometryNodeList
118
132
 
119
133
  def __init__(
120
134
  self,
121
- list: TYPE_INPUT_VALUE = 0.0,
122
- index: TYPE_INPUT_INT = 0,
135
+ count: TYPE_INPUT_INT = 1,
136
+ value: TYPE_INPUT_VALUE = 0.0,
137
+ *,
123
138
  data_type: Literal[
124
- "FLOAT",
125
- "INT",
126
- "BOOLEAN",
127
- "VECTOR",
128
- "RGBA",
129
- "ROTATION",
130
- "MATRIX",
131
- "STRING",
132
- "MENU",
133
- "SHADER",
134
- "OBJECT",
135
- "IMAGE",
136
- "GEOMETRY",
137
- "COLLECTION",
138
- "TEXTURE",
139
- "MATERIAL",
140
- "BUNDLE",
141
- "CLOSURE",
139
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
142
140
  ] = "FLOAT",
143
- **kwargs,
144
141
  ):
145
142
  super().__init__()
146
- key_args = {"List": list, "Index": index}
147
- key_args.update(kwargs)
143
+ key_args = {"Count": count, "Value": value}
148
144
  self.data_type = data_type
149
145
  self._establish_links(**key_args)
150
146
 
147
+ @classmethod
148
+ def float(cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_VALUE = 0.0) -> "List":
149
+ """Create List with operation 'Float'."""
150
+ return cls(data_type="FLOAT", count=count, value=value)
151
+
152
+ @classmethod
153
+ def integer(cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_INT = 0) -> "List":
154
+ """Create List with operation 'Integer'."""
155
+ return cls(data_type="INT", count=count, value=value)
156
+
157
+ @classmethod
158
+ def boolean(
159
+ cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_BOOLEAN = False
160
+ ) -> "List":
161
+ """Create List with operation 'Boolean'."""
162
+ return cls(data_type="BOOLEAN", count=count, value=value)
163
+
164
+ @classmethod
165
+ def vector(
166
+ cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_VECTOR = None
167
+ ) -> "List":
168
+ """Create List with operation 'Vector'."""
169
+ return cls(data_type="VECTOR", count=count, value=value)
170
+
171
+ @classmethod
172
+ def color(cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_COLOR = None) -> "List":
173
+ """Create List with operation 'Color'."""
174
+ return cls(data_type="RGBA", count=count, value=value)
175
+
176
+ @classmethod
177
+ def rotation(
178
+ cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_ROTATION = None
179
+ ) -> "List":
180
+ """Create List with operation 'Rotation'."""
181
+ return cls(data_type="ROTATION", count=count, value=value)
182
+
183
+ @classmethod
184
+ def matrix(
185
+ cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_MATRIX = None
186
+ ) -> "List":
187
+ """Create List with operation 'Matrix'."""
188
+ return cls(data_type="MATRIX", count=count, value=value)
189
+
190
+ @classmethod
191
+ def menu(cls, count: TYPE_INPUT_INT = 1, value: TYPE_INPUT_MENU = "") -> "List":
192
+ """Create List with operation 'Menu'."""
193
+ return cls(data_type="MENU", count=count, value=value)
194
+
151
195
  @property
152
- def i_list(self) -> SocketLinker:
153
- """Input socket: List"""
154
- return self._input("List")
196
+ def i_count(self) -> SocketLinker:
197
+ """Input socket: Count"""
198
+ return self._input("Count")
155
199
 
156
200
  @property
157
- def i_index(self) -> SocketLinker:
158
- """Input socket: Index"""
159
- return self._input("Index")
201
+ def i_value(self) -> SocketLinker:
202
+ """Input socket: Value"""
203
+ return self._input("Value")
160
204
 
161
205
  @property
162
- def o_value(self) -> SocketLinker:
163
- """Output socket: Value"""
164
- return self._output("Value")
206
+ def o_list(self) -> SocketLinker:
207
+ """Output socket: List"""
208
+ return self._output("List")
165
209
 
166
210
  @property
167
211
  def data_type(
168
212
  self,
169
213
  ) -> Literal[
170
- "FLOAT",
171
- "INT",
172
- "BOOLEAN",
173
- "VECTOR",
174
- "RGBA",
175
- "ROTATION",
176
- "MATRIX",
177
- "STRING",
178
- "MENU",
179
- "SHADER",
180
- "OBJECT",
181
- "IMAGE",
182
- "GEOMETRY",
183
- "COLLECTION",
184
- "TEXTURE",
185
- "MATERIAL",
186
- "BUNDLE",
187
- "CLOSURE",
214
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
188
215
  ]:
189
216
  return self.node.data_type
190
217
 
@@ -192,24 +219,7 @@ class GetListItem(NodeBuilder):
192
219
  def data_type(
193
220
  self,
194
221
  value: Literal[
195
- "FLOAT",
196
- "INT",
197
- "BOOLEAN",
198
- "VECTOR",
199
- "RGBA",
200
- "ROTATION",
201
- "MATRIX",
202
- "STRING",
203
- "MENU",
204
- "SHADER",
205
- "OBJECT",
206
- "IMAGE",
207
- "GEOMETRY",
208
- "COLLECTION",
209
- "TEXTURE",
210
- "MATERIAL",
211
- "BUNDLE",
212
- "CLOSURE",
222
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
213
223
  ],
214
224
  ):
215
225
  self.node.data_type = value
@@ -218,40 +228,62 @@ class GetListItem(NodeBuilder):
218
228
  class ListLength(NodeBuilder):
219
229
  """Count how many items are in a given list"""
220
230
 
221
- name = "GeometryNodeListLength"
231
+ _bl_idname = "GeometryNodeListLength"
222
232
  node: bpy.types.GeometryNodeListLength
223
233
 
224
234
  def __init__(
225
235
  self,
226
236
  list: TYPE_INPUT_VALUE = 0.0,
237
+ *,
227
238
  data_type: Literal[
228
- "FLOAT",
229
- "INT",
230
- "BOOLEAN",
231
- "VECTOR",
232
- "RGBA",
233
- "ROTATION",
234
- "MATRIX",
235
- "STRING",
236
- "MENU",
237
- "SHADER",
238
- "OBJECT",
239
- "IMAGE",
240
- "GEOMETRY",
241
- "COLLECTION",
242
- "TEXTURE",
243
- "MATERIAL",
244
- "BUNDLE",
245
- "CLOSURE",
239
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
246
240
  ] = "FLOAT",
247
- **kwargs,
248
241
  ):
249
242
  super().__init__()
250
243
  key_args = {"List": list}
251
- key_args.update(kwargs)
252
244
  self.data_type = data_type
253
245
  self._establish_links(**key_args)
254
246
 
247
+ @classmethod
248
+ def float(cls, list: TYPE_INPUT_VALUE = 0.0) -> "ListLength":
249
+ """Create List Length with operation 'Float'."""
250
+ return cls(data_type="FLOAT", list=list)
251
+
252
+ @classmethod
253
+ def integer(cls, list: TYPE_INPUT_INT = 0) -> "ListLength":
254
+ """Create List Length with operation 'Integer'."""
255
+ return cls(data_type="INT", list=list)
256
+
257
+ @classmethod
258
+ def boolean(cls, list: TYPE_INPUT_BOOLEAN = False) -> "ListLength":
259
+ """Create List Length with operation 'Boolean'."""
260
+ return cls(data_type="BOOLEAN", list=list)
261
+
262
+ @classmethod
263
+ def vector(cls, list: TYPE_INPUT_VECTOR = None) -> "ListLength":
264
+ """Create List Length with operation 'Vector'."""
265
+ return cls(data_type="VECTOR", list=list)
266
+
267
+ @classmethod
268
+ def color(cls, list: TYPE_INPUT_COLOR = None) -> "ListLength":
269
+ """Create List Length with operation 'Color'."""
270
+ return cls(data_type="RGBA", list=list)
271
+
272
+ @classmethod
273
+ def rotation(cls, list: TYPE_INPUT_ROTATION = None) -> "ListLength":
274
+ """Create List Length with operation 'Rotation'."""
275
+ return cls(data_type="ROTATION", list=list)
276
+
277
+ @classmethod
278
+ def matrix(cls, list: TYPE_INPUT_MATRIX = None) -> "ListLength":
279
+ """Create List Length with operation 'Matrix'."""
280
+ return cls(data_type="MATRIX", list=list)
281
+
282
+ @classmethod
283
+ def menu(cls, list: TYPE_INPUT_MENU = "") -> "ListLength":
284
+ """Create List Length with operation 'Menu'."""
285
+ return cls(data_type="MENU", list=list)
286
+
255
287
  @property
256
288
  def i_list(self) -> SocketLinker:
257
289
  """Input socket: List"""
@@ -266,24 +298,7 @@ class ListLength(NodeBuilder):
266
298
  def data_type(
267
299
  self,
268
300
  ) -> Literal[
269
- "FLOAT",
270
- "INT",
271
- "BOOLEAN",
272
- "VECTOR",
273
- "RGBA",
274
- "ROTATION",
275
- "MATRIX",
276
- "STRING",
277
- "MENU",
278
- "SHADER",
279
- "OBJECT",
280
- "IMAGE",
281
- "GEOMETRY",
282
- "COLLECTION",
283
- "TEXTURE",
284
- "MATERIAL",
285
- "BUNDLE",
286
- "CLOSURE",
301
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
287
302
  ]:
288
303
  return self.node.data_type
289
304
 
@@ -291,24 +306,7 @@ class ListLength(NodeBuilder):
291
306
  def data_type(
292
307
  self,
293
308
  value: Literal[
294
- "FLOAT",
295
- "INT",
296
- "BOOLEAN",
297
- "VECTOR",
298
- "RGBA",
299
- "ROTATION",
300
- "MATRIX",
301
- "STRING",
302
- "MENU",
303
- "SHADER",
304
- "OBJECT",
305
- "IMAGE",
306
- "GEOMETRY",
307
- "COLLECTION",
308
- "TEXTURE",
309
- "MATERIAL",
310
- "BUNDLE",
311
- "CLOSURE",
309
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX", "MENU"
312
310
  ],
313
311
  ):
314
312
  self.node.data_type = value