nodebpy 0.1.1__py3-none-any.whl → 0.2.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.
@@ -0,0 +1,70 @@
1
+ from nodebpy.builder import NodeBuilder, SocketLinker
2
+
3
+
4
+ import bpy
5
+ from typing import Literal
6
+ from .types import TYPE_INPUT_IMAGE, TYPE_INPUT_VECTOR, TYPE_INPUT_INT
7
+
8
+
9
+ class ImageTexture(NodeBuilder):
10
+ """Sample values from an image texture"""
11
+
12
+ name = "GeometryNodeImageTexture"
13
+ node: bpy.types.GeometryNodeImageTexture
14
+
15
+ def __init__(
16
+ self,
17
+ image: TYPE_INPUT_IMAGE = None,
18
+ vector: TYPE_INPUT_VECTOR = None,
19
+ frame: TYPE_INPUT_INT = 0,
20
+ interpolation: Literal["Linear", "Closest", "Cubic"] = "Linear",
21
+ extension: Literal["REPEAT", "EXTEND", "CLIP", "MIRROR"] = "REPEAT",
22
+ **kwargs,
23
+ ):
24
+ super().__init__()
25
+ key_args = {"Image": image, "Vector": vector, "Frame": frame}
26
+ key_args.update(kwargs)
27
+ self.interpolation = interpolation
28
+ self.extension = extension
29
+ self._establish_links(**key_args)
30
+
31
+ @property
32
+ def i_image(self) -> SocketLinker:
33
+ """Input socket: Image"""
34
+ return self._input("Image")
35
+
36
+ @property
37
+ def i_vector(self) -> SocketLinker:
38
+ """Input socket: Vector"""
39
+ return self._input("Vector")
40
+
41
+ @property
42
+ def i_frame(self) -> SocketLinker:
43
+ """Input socket: Frame"""
44
+ return self._input("Frame")
45
+
46
+ @property
47
+ def o_color(self) -> SocketLinker:
48
+ """Output socket: Color"""
49
+ return self._output("Color")
50
+
51
+ @property
52
+ def o_alpha(self) -> SocketLinker:
53
+ """Output socket: Alpha"""
54
+ return self._output("Alpha")
55
+
56
+ @property
57
+ def interpolation(self) -> Literal["Linear", "Closest", "Cubic"]:
58
+ return self.node.interpolation
59
+
60
+ @interpolation.setter
61
+ def interpolation(self, value: Literal["Linear", "Closest", "Cubic"]):
62
+ self.node.interpolation = value
63
+
64
+ @property
65
+ def extension(self) -> Literal["REPEAT", "EXTEND", "CLIP", "MIRROR"]:
66
+ return self.node.extension
67
+
68
+ @extension.setter
69
+ def extension(self, value: Literal["REPEAT", "EXTEND", "CLIP", "MIRROR"]):
70
+ self.node.extension = value
nodebpy/nodes/types.py CHANGED
@@ -1,16 +1,329 @@
1
+ from __future__ import annotations
2
+
1
3
  import typing
4
+ from typing import Literal
2
5
 
3
- # Type aliases for node inputs
4
- LINKABLE = "NodeSocket | NodeBuilder | Any"
5
- TYPE_INPUT_VECTOR = "tuple[float, float, float] | NodeSocket | NodeBuilder | None"
6
- TYPE_INPUT_ROTATION = (
7
- "tuple[float, float, float, float] | NodeSocket | NodeBuilder | None"
6
+ from bpy.types import (
7
+ NodeSocket,
8
+ NodeSocketBool,
9
+ NodeSocketCollection,
10
+ NodeSocketColor,
11
+ NodeSocketFloat,
12
+ NodeSocketGeometry,
13
+ NodeSocketImage,
14
+ NodeSocketInt,
15
+ NodeSocketMaterial,
16
+ NodeSocketMatrix,
17
+ NodeSocketMenu,
18
+ NodeSocketObject,
19
+ NodeSocketString,
20
+ NodeSocketVector,
8
21
  )
9
- TYPE_INPUT_BOOLEAN = "bool | NodeSocket | NodeBuilder | None"
22
+ from mathutils import Euler
23
+
24
+ if typing.TYPE_CHECKING:
25
+ from ..builder import NodeBuilder, SocketLinker
26
+
27
+
28
+ def _is_default_value(value: TYPE_INPUT_ALL):
29
+ return isinstance(value, (int, float, str, bool, tuple, list, Euler))
30
+
31
+
32
+ # Type aliases for node inputs using typing.Union for runtime compatibility
33
+ LINKABLE = typing.Union["NodeBuilder", "SocketLinker", NodeSocket, None]
34
+ TYPE_INPUT_ROTATION = typing.Union[
35
+ tuple[float, float, float], float, int, Euler, LINKABLE
36
+ ]
37
+ TYPE_INPUT_BOOLEAN = typing.Union[
38
+ bool, LINKABLE, NodeSocketBool, NodeSocketInt, NodeSocketFloat, NodeSocketVector
39
+ ]
40
+ TYPE_INPUT_VALUE = typing.Union[float, int, LINKABLE, NodeSocketInt, NodeSocketFloat]
41
+ TYPE_INPUT_INT = typing.Union[
42
+ int, LINKABLE, NodeSocketInt, NodeSocketInt, NodeSocketInt
43
+ ]
44
+ TYPE_INPUT_VECTOR = typing.Union[
45
+ typing.Tuple[float, float, float],
46
+ LINKABLE,
47
+ TYPE_INPUT_INT,
48
+ TYPE_INPUT_VALUE,
49
+ TYPE_INPUT_BOOLEAN,
50
+ NodeSocketVector,
51
+ NodeSocketColor,
52
+ TYPE_INPUT_ROTATION,
53
+ ]
54
+
55
+
56
+ TYPE_INPUT_COLOR = typing.Union[
57
+ LINKABLE, tuple[float, float, float, float], NodeSocketColor
58
+ ]
59
+ TYPE_INPUT_STRING = typing.Union[str, LINKABLE, NodeSocketString]
60
+ TYPE_INPUT_GEOMETRY = typing.Union[LINKABLE, NodeSocketGeometry]
61
+ TYPE_INPUT_OBJECT = typing.Union[LINKABLE, NodeSocketObject]
62
+ TYPE_INPUT_MATERIAL = typing.Union[LINKABLE, NodeSocketMaterial]
63
+ TYPE_INPUT_IMAGE = typing.Union[LINKABLE, NodeSocketImage]
64
+ TYPE_INPUT_COLLECTION = typing.Union[LINKABLE, NodeSocketCollection]
65
+ TYPE_INPUT_MATRIX = typing.Union[LINKABLE, NodeSocketMatrix]
66
+ TYPE_INPUT_GRID = typing.Union[
67
+ TYPE_INPUT_VALUE, TYPE_INPUT_VECTOR, TYPE_INPUT_BOOLEAN, TYPE_INPUT_INT
68
+ ]
69
+ TYPE_INPUT_MENU = typing.Union[LINKABLE, NodeSocketMenu]
70
+
71
+ TYPE_INPUT_ALL = typing.Union[
72
+ TYPE_INPUT_VALUE,
73
+ TYPE_INPUT_INT,
74
+ TYPE_INPUT_STRING,
75
+ TYPE_INPUT_COLOR,
76
+ TYPE_INPUT_GEOMETRY,
77
+ TYPE_INPUT_OBJECT,
78
+ TYPE_INPUT_MATERIAL,
79
+ TYPE_INPUT_IMAGE,
80
+ TYPE_INPUT_COLLECTION,
81
+ TYPE_INPUT_MATRIX,
82
+ TYPE_INPUT_VECTOR,
83
+ TYPE_INPUT_BOOLEAN,
84
+ TYPE_INPUT_MENU,
85
+ TYPE_INPUT_ROTATION,
86
+ ]
87
+
88
+ _AccumulateFieldDataTypes = Literal["FLOAT", "INT", "FLOAT_VECTOR", "TRANSFORM"]
10
89
 
11
90
  _AttributeDomains = typing.Literal[
12
91
  "POINT", "EDGE", "FACE", "CORNER", "CURVE", "INSTANCE", "LAYER"
13
92
  ]
93
+ _DeleteGeometryDomains = typing.Literal[
94
+ "POINT", "EDGE", "FACE", "CURVE", "INSTANCE", "LAYER"
95
+ ]
96
+ _BakedDataTypeValues = (
97
+ "FLOAT",
98
+ "INT",
99
+ "BOOLEAN",
100
+ "VECTOR",
101
+ "RGBA",
102
+ "ROTATION",
103
+ "MATRIX",
104
+ "STRING",
105
+ "GEOMETRY",
106
+ "BUNDLE",
107
+ )
108
+ _IntegerMathOperations = Literal[
109
+ "ADD",
110
+ "SUBTRACT",
111
+ "MULTIPLY",
112
+ "DIVIDE",
113
+ "MULTIPLY_ADD",
114
+ "ABSOLUTE",
115
+ "NEGATE",
116
+ "POWER",
117
+ "MINIMUM",
118
+ "MAXIMUM",
119
+ "SIGN",
120
+ "DIVIDE_ROUND",
121
+ "DIVIDE_FLOOR",
122
+ "DIVIDE_CEIL",
123
+ "FLOORED_MODULO",
124
+ "MODULO",
125
+ "GCD",
126
+ "LCM",
127
+ ]
128
+ _BakeDataTypes = Literal[
129
+ "FLOAT",
130
+ "INT",
131
+ "BOOLEAN",
132
+ "VECTOR",
133
+ "RGBA",
134
+ "ROTATION",
135
+ "MATRIX",
136
+ "STRING",
137
+ "GEOMETRY",
138
+ "BUNDLE",
139
+ ]
140
+
141
+ _GridDataTypes = Literal[
142
+ "FLOAT",
143
+ "INT",
144
+ "BOOLEAN",
145
+ "VECTOR",
146
+ ]
147
+ _AdvectGridIntegration = Literal[
148
+ "Semi-Lagrangian",
149
+ "Midpoint",
150
+ "Runge-Kutta 3",
151
+ "Runge-Kutta 4",
152
+ "MacCormack",
153
+ "BFECC",
154
+ ]
155
+
156
+ _DeleteGeoemtryModes = Literal["ALL", "EDGE_FACE", "ONLY_FACE"]
157
+ _RandomValueDataTypes = Literal["FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR"]
158
+ _EvaluateAtIndexDataTypes = Literal[
159
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
160
+ ]
161
+ _DuplicateElementsDomains = Literal[
162
+ "POINT", "EDGE", "FACE", "SPLINE", "LAYER", "INSTANCE"
163
+ ]
164
+
165
+ _AttributeDataTypes = Literal[
166
+ "FLOAT", "INT", "BOOLEAN", "VECTOR", "RGBA", "ROTATION", "MATRIX"
167
+ ]
168
+ _MixDataTypes = Literal["FLOAT", "VECTOR", "COLOR", "ROTATION"]
169
+
170
+
171
+ _MixColorBlendTypes = Literal[
172
+ "MIX",
173
+ "DARKEN",
174
+ "MULTIPLY",
175
+ "BURN",
176
+ "LIGHTEN",
177
+ "SCREEN",
178
+ "DODGE",
179
+ "ADD",
180
+ "OVERLAY",
181
+ "SOFT_LIGHT",
182
+ "LINEAR_LIGHT",
183
+ "DIFFERENCE",
184
+ "EXCLUSION",
185
+ "SUBTRACT",
186
+ "DIVIDE",
187
+ "HUE",
188
+ "SATURATION",
189
+ "COLOR",
190
+ "VALUE",
191
+ ]
192
+
193
+ _RaycaseDataTypes = Literal[
194
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
195
+ ]
196
+ _SampleIndexDataTypes = Literal[
197
+ "FLOAT", "INT", "BOOLEAN", "FLOAT_VECTOR", "FLOAT_COLOR", "QUATERNION", "FLOAT4X4"
198
+ ]
199
+
200
+ _EvaluateCurveModes = Literal["EVALUATED", "COUNT", "LENGTH"]
201
+
202
+ _StoreNamedAttributeTypes = Literal[
203
+ "FLOAT",
204
+ "INT",
205
+ "BOOLEAN",
206
+ "FLOAT_VECTOR",
207
+ "FLOAT_COLOR",
208
+ "QUATERNION",
209
+ "FLOAT4X4",
210
+ "STRING",
211
+ "INT8",
212
+ "FLOAT2",
213
+ "BYTE_COLOR",
214
+ ]
215
+
216
+ _SocketShapeStructureType = Literal["AUTO", "DYNAMIC", "FIELD", "GRID", "SINGLE"]
217
+
218
+ _VectorMathOperations = Literal[
219
+ "ADD",
220
+ "SUBTRACT",
221
+ "MULTIPLY",
222
+ "DIVIDE",
223
+ "MULTIPLY_ADD",
224
+ "CROSS_PRODUCT",
225
+ "PROJECT",
226
+ "REFLECT",
227
+ "REFRACT",
228
+ "FACEFORWARD",
229
+ "DOT_PRODUCT",
230
+ "DISTANCE",
231
+ "LENGTH",
232
+ "SCALE",
233
+ "NORMALIZE",
234
+ "ABSOLUTE",
235
+ "POWER",
236
+ "SIGN",
237
+ "MINIMUM",
238
+ "MAXIMUM",
239
+ "FLOOR",
240
+ "CEIL",
241
+ "FRACTION",
242
+ "MODULO",
243
+ "WRAP",
244
+ "SNAP",
245
+ "SINE",
246
+ "COSINE",
247
+ "TANGENT",
248
+ ]
249
+
250
+
251
+ SOCKET_TYPES = Literal[
252
+ "FLOAT",
253
+ "INT",
254
+ "BOOLEAN",
255
+ "VECTOR",
256
+ "RGBA",
257
+ "ROTATION",
258
+ "MATRIX",
259
+ "STRING",
260
+ "MENU",
261
+ "OBJECT",
262
+ "GEOMETRY",
263
+ "COLLECTION",
264
+ "IMAGE",
265
+ "MATERIAL",
266
+ "BUNDLE",
267
+ "CLOSURE",
268
+ ]
269
+
270
+ SOCKET_COMPATIBILITY = {
271
+ "VALUE": (
272
+ "VALUE",
273
+ "VECTOR",
274
+ "INT",
275
+ "BOOLEAN",
276
+ "RGBA",
277
+ "ROTATION",
278
+ ),
279
+ "INT": (
280
+ "INT",
281
+ "VALUE",
282
+ "BOOLEAN",
283
+ "VECTOR",
284
+ "RGBA",
285
+ ),
286
+ "BOOLEAN": (
287
+ "BOOLEAN",
288
+ "INT",
289
+ "VALUE",
290
+ "VECTOR",
291
+ "RGBA",
292
+ ),
293
+ "VECTOR": (
294
+ "VECTOR",
295
+ "RGBA",
296
+ "ROTATION",
297
+ "VALUE",
298
+ "INT",
299
+ "BOOLEAN",
300
+ ),
301
+ "RGBA": (
302
+ "RGBA",
303
+ "VECTOR",
304
+ "VALUE",
305
+ "INT",
306
+ "BOOLEAN",
307
+ ),
308
+ "ROTATION": (
309
+ "ROTATION",
310
+ "MATRIX",
311
+ "VECTOR",
312
+ ),
313
+ "MATRIX": (
314
+ "MATRIX",
315
+ "ROTATION",
316
+ ),
317
+ "STRING": ("STRING",),
318
+ "MENU": ("MENU",),
319
+ "OBJECT": ("OBJECT",),
320
+ "GEOMETRY": ("GEOMETRY",),
321
+ "COLLECTION": ("COLLECTION",),
322
+ "IMAGE": ("IMAGE",),
323
+ "MATERIAL": ("MATERIAL",),
324
+ "BUNDLE": ("BUNDLE",),
325
+ "CLOSURE": ("CLOSURE",),
326
+ }
14
327
 
15
328
 
16
329
  class DataTypes:
File without changes