nodebpy 0.14.0__tar.gz → 0.15.1__tar.gz
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-0.14.0 → nodebpy-0.15.1}/PKG-INFO +1 -1
- {nodebpy-0.14.0 → nodebpy-0.15.1}/pyproject.toml +1 -1
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/socket.py +121 -3
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/__init__.py +6 -5
- nodebpy-0.15.1/src/nodebpy/nodes/geometry/attribute.py +291 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/converter.py +0 -405
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/manual.py +783 -17
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/zone.py +48 -40
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/types.py +69 -17
- nodebpy-0.14.0/src/nodebpy/nodes/geometry/attribute.py +0 -723
- {nodebpy-0.14.0 → nodebpy-0.15.1}/README.md +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/__init__.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/arrange.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/__init__.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/_registry.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/_utils.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/accessor.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/mixins.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/node.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/builder/tree.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/diagram.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/__init__.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/graph.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/ordering.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/ranking.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/realize.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/stacking.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/structs.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/sugiyama.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/x_coords.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/arrange/y_coords.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/config.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/lib/nodearrange/utils.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/__init__.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/__init__.py +2 -2
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/color.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/converter.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/distort.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/filter.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/group.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/input.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/interface.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/manual.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/matte.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/output.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/compositor/vector.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/color.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/geometry.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/grid.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/group.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/groups.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/input.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/interface.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/output.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/texture.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/utilities.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/geometry/vector.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/__init__.py +2 -2
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/color.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/converter.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/grid.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/group.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/input.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/manual.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/output.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/script.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/shader.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/texture.py +0 -0
- {nodebpy-0.14.0 → nodebpy-0.15.1}/src/nodebpy/nodes/shader/vector.py +0 -0
|
@@ -30,17 +30,36 @@ from bpy.types import (
|
|
|
30
30
|
)
|
|
31
31
|
from mathutils import Euler
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
from ..types import (
|
|
34
|
+
SOCKET_TYPES,
|
|
35
|
+
InputBoolean,
|
|
36
|
+
InputBundle,
|
|
37
|
+
InputClosure,
|
|
38
|
+
InputCollection,
|
|
39
|
+
InputColor,
|
|
40
|
+
InputFloat,
|
|
41
|
+
InputFont,
|
|
42
|
+
InputGeometry,
|
|
43
|
+
InputImage,
|
|
44
|
+
InputInteger,
|
|
45
|
+
InputMaterial,
|
|
46
|
+
InputMatrix,
|
|
47
|
+
InputMenu,
|
|
48
|
+
InputObject,
|
|
49
|
+
InputRotation,
|
|
50
|
+
InputString,
|
|
51
|
+
InputVector,
|
|
52
|
+
)
|
|
35
53
|
from ._registry import _SOCKET_LINKER_REGISTRY, _get_socket_linker
|
|
36
54
|
from ._utils import _NodeLike, _SocketLike
|
|
37
55
|
from .mixins import LinkingMixin, OperatorMixin
|
|
38
56
|
|
|
39
57
|
if TYPE_CHECKING:
|
|
40
|
-
from ..nodes.geometry
|
|
58
|
+
from ..nodes.geometry import (
|
|
41
59
|
IntegerMath,
|
|
42
60
|
Math,
|
|
43
61
|
MultiplyMatrices,
|
|
62
|
+
Switch,
|
|
44
63
|
TransformPoint,
|
|
45
64
|
)
|
|
46
65
|
from ..nodes.geometry.manual import Compare
|
|
@@ -587,6 +606,99 @@ class _IntegerMixin(BaseSocket):
|
|
|
587
606
|
# ---------------------------------------------------------------------------
|
|
588
607
|
|
|
589
608
|
|
|
609
|
+
class _BooleanSwitchSocketFactory:
|
|
610
|
+
def __init__(self, socket: NodeSocketBool):
|
|
611
|
+
self._socket = socket
|
|
612
|
+
from ..nodes.geometry import Switch
|
|
613
|
+
|
|
614
|
+
self._switch = Switch
|
|
615
|
+
|
|
616
|
+
def float(
|
|
617
|
+
self, false: InputFloat = None, true: InputFloat = None
|
|
618
|
+
) -> "Switch[FloatSocket]":
|
|
619
|
+
return self._switch.float(self._socket, false, true)
|
|
620
|
+
|
|
621
|
+
def integer(
|
|
622
|
+
self, false: InputInteger = None, true: InputInteger = None
|
|
623
|
+
) -> "Switch[IntegerSocket]":
|
|
624
|
+
return self._switch.integer(self._socket, false, true)
|
|
625
|
+
|
|
626
|
+
def boolean(
|
|
627
|
+
self, false: InputBoolean = None, true: InputBoolean = None
|
|
628
|
+
) -> "Switch[BooleanSocket]":
|
|
629
|
+
return self._switch.boolean(self._socket, false, true)
|
|
630
|
+
|
|
631
|
+
def vector(
|
|
632
|
+
self, false: InputVector = None, true: InputVector = None
|
|
633
|
+
) -> "Switch[VectorSocket]":
|
|
634
|
+
return self._switch.vector(self._socket, false, true)
|
|
635
|
+
|
|
636
|
+
def color(
|
|
637
|
+
self, false: InputColor = None, true: InputColor = None
|
|
638
|
+
) -> "Switch[ColorSocket]":
|
|
639
|
+
return self._switch.color(self._socket, false, true)
|
|
640
|
+
|
|
641
|
+
def rotation(
|
|
642
|
+
self, false: InputRotation = None, true: InputRotation = None
|
|
643
|
+
) -> "Switch[RotationSocket]":
|
|
644
|
+
return self._switch.rotation(self._socket, false, true)
|
|
645
|
+
|
|
646
|
+
def matrix(
|
|
647
|
+
self, false: InputMatrix = None, true: InputMatrix = None
|
|
648
|
+
) -> "Switch[MatrixSocket]":
|
|
649
|
+
return self._switch.matrix(self._socket, false, true)
|
|
650
|
+
|
|
651
|
+
def string(
|
|
652
|
+
self, false: InputString = None, true: InputString = None
|
|
653
|
+
) -> "Switch[StringSocket]":
|
|
654
|
+
return self._switch.string(self._socket, false, true)
|
|
655
|
+
|
|
656
|
+
def menu(
|
|
657
|
+
self, false: InputMenu = None, true: InputMenu = None
|
|
658
|
+
) -> "Switch[MenuSocket]":
|
|
659
|
+
return self._switch.menu(self._socket, false, true)
|
|
660
|
+
|
|
661
|
+
def object(
|
|
662
|
+
self, false: InputObject = None, true: InputObject = None
|
|
663
|
+
) -> "Switch[ObjectSocket]":
|
|
664
|
+
return self._switch.object(self._socket, false, true)
|
|
665
|
+
|
|
666
|
+
def image(
|
|
667
|
+
self, false: InputImage = None, true: InputImage = None
|
|
668
|
+
) -> "Switch[ImageSocket]":
|
|
669
|
+
return self._switch.image(self._socket, false, true)
|
|
670
|
+
|
|
671
|
+
def geometry(
|
|
672
|
+
self, false: InputGeometry = None, true: InputGeometry = None
|
|
673
|
+
) -> "Switch[GeometrySocket]":
|
|
674
|
+
return self._switch.geometry(self._socket, false, true)
|
|
675
|
+
|
|
676
|
+
def collection(
|
|
677
|
+
self, false: InputCollection = None, true: InputCollection = None
|
|
678
|
+
) -> "Switch[CollectionSocket]":
|
|
679
|
+
return self._switch.collection(self._socket, false, true)
|
|
680
|
+
|
|
681
|
+
def material(
|
|
682
|
+
self, false: InputMaterial = None, true: InputMaterial = None
|
|
683
|
+
) -> "Switch[MaterialSocket]":
|
|
684
|
+
return self._switch.material(self._socket, false, true)
|
|
685
|
+
|
|
686
|
+
def bundle(
|
|
687
|
+
self, false: InputBundle = None, true: InputBundle = None
|
|
688
|
+
) -> "Switch[BundleSocket]":
|
|
689
|
+
return self._switch.bundle(self._socket, false, true)
|
|
690
|
+
|
|
691
|
+
def closure(
|
|
692
|
+
self, false: InputClosure = None, true: InputClosure = None
|
|
693
|
+
) -> "Switch[ClosureSocket]":
|
|
694
|
+
return self._switch.closure(self._socket, false, true)
|
|
695
|
+
|
|
696
|
+
def font(
|
|
697
|
+
self, false: InputFont = None, true: InputFont = None
|
|
698
|
+
) -> "Switch[FontSocket]":
|
|
699
|
+
return self._switch.font(self._socket, false, true)
|
|
700
|
+
|
|
701
|
+
|
|
590
702
|
class _BooleanMixin(BaseSocket):
|
|
591
703
|
"""Boolean-specific operator overrides — routes directly through BooleanMath."""
|
|
592
704
|
|
|
@@ -610,6 +722,12 @@ class _BooleanMixin(BaseSocket):
|
|
|
610
722
|
|
|
611
723
|
return BooleanMath.l_and(self.socket, other)
|
|
612
724
|
|
|
725
|
+
@property
|
|
726
|
+
def switch(self) -> "_BooleanSwitchSocketFactory":
|
|
727
|
+
"Creat a Switch node with this boolean as the `switch` input."
|
|
728
|
+
|
|
729
|
+
return _BooleanSwitchSocketFactory(self.socket)
|
|
730
|
+
|
|
613
731
|
|
|
614
732
|
class _RotationMixin(BaseSocket):
|
|
615
733
|
"""Rotation-specific properties (.w, .x, .y, .z) via RotationToQuaternion."""
|
|
@@ -5,12 +5,12 @@ from .manual import (
|
|
|
5
5
|
HandleTypeSelection,
|
|
6
6
|
IndexSwitch,
|
|
7
7
|
MenuSwitch,
|
|
8
|
+
Switch,
|
|
8
9
|
CaptureAttribute,
|
|
9
10
|
FieldToGrid,
|
|
10
11
|
JoinGeometry,
|
|
11
12
|
SDFGridBoolean,
|
|
12
13
|
Bake,
|
|
13
|
-
JoinStrings,
|
|
14
14
|
GeometryToInstance,
|
|
15
15
|
RepeatInput,
|
|
16
16
|
RepeatOutput,
|
|
@@ -26,6 +26,7 @@ from .manual import (
|
|
|
26
26
|
ClosureOutput,
|
|
27
27
|
ClosureZone,
|
|
28
28
|
FormatString,
|
|
29
|
+
JoinStrings,
|
|
29
30
|
Collection,
|
|
30
31
|
Material,
|
|
31
32
|
Object,
|
|
@@ -43,6 +44,9 @@ from .manual import (
|
|
|
43
44
|
SampleCurve,
|
|
44
45
|
Frame,
|
|
45
46
|
Float,
|
|
47
|
+
FloatCurve,
|
|
48
|
+
ColorRamp,
|
|
49
|
+
StoreNamedAttribute,
|
|
46
50
|
tree,
|
|
47
51
|
)
|
|
48
52
|
from .converter import (
|
|
@@ -53,7 +57,6 @@ from .converter import (
|
|
|
53
57
|
Blackbody,
|
|
54
58
|
BooleanMath,
|
|
55
59
|
Clamp,
|
|
56
|
-
ColorRamp,
|
|
57
60
|
CombineBundle,
|
|
58
61
|
CombineColor,
|
|
59
62
|
CombineMatrix,
|
|
@@ -61,7 +64,6 @@ from .converter import (
|
|
|
61
64
|
CombineXYZ,
|
|
62
65
|
EulerToRotation,
|
|
63
66
|
FindInString,
|
|
64
|
-
FloatCurve,
|
|
65
67
|
FloatToInteger,
|
|
66
68
|
GetBundleItem,
|
|
67
69
|
HashValue,
|
|
@@ -97,7 +99,6 @@ from .converter import (
|
|
|
97
99
|
StoreBundleItem,
|
|
98
100
|
StringLength,
|
|
99
101
|
StringToValue,
|
|
100
|
-
Switch,
|
|
101
102
|
TransformDirection,
|
|
102
103
|
TransformPoint,
|
|
103
104
|
TransposeMatrix,
|
|
@@ -186,7 +187,6 @@ from .attribute import (
|
|
|
186
187
|
BlurAttribute,
|
|
187
188
|
DomainSize,
|
|
188
189
|
RemoveNamedAttribute,
|
|
189
|
-
StoreNamedAttribute,
|
|
190
190
|
)
|
|
191
191
|
from .geometry import (
|
|
192
192
|
Arc,
|
|
@@ -521,6 +521,7 @@ __all__ = (
|
|
|
521
521
|
"JoinBundle",
|
|
522
522
|
"JoinGeometry",
|
|
523
523
|
"JoinStrings",
|
|
524
|
+
"JoinStrings",
|
|
524
525
|
"LinearGizmo",
|
|
525
526
|
"MagicTexture",
|
|
526
527
|
"MapRange",
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# Auto-generated by generate.py — do not edit manually.
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Literal
|
|
4
|
+
|
|
5
|
+
import bpy
|
|
6
|
+
|
|
7
|
+
from ...builder import (
|
|
8
|
+
BaseNode as BaseNode,
|
|
9
|
+
SocketAccessor,
|
|
10
|
+
FloatSocket,
|
|
11
|
+
GeometrySocket,
|
|
12
|
+
IntegerSocket,
|
|
13
|
+
MenuSocket,
|
|
14
|
+
StringSocket,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
from ...types import (
|
|
18
|
+
InputColor,
|
|
19
|
+
InputGeometry,
|
|
20
|
+
InputInteger,
|
|
21
|
+
InputMenu,
|
|
22
|
+
InputString,
|
|
23
|
+
InputFloat,
|
|
24
|
+
InputVector,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class BlurAttribute(BaseNode):
|
|
29
|
+
"""
|
|
30
|
+
Mix attribute values of neighboring elements
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
value : InputFloat
|
|
35
|
+
Value
|
|
36
|
+
iterations : InputInteger
|
|
37
|
+
Iterations
|
|
38
|
+
weight : InputFloat
|
|
39
|
+
Weight
|
|
40
|
+
|
|
41
|
+
Inputs
|
|
42
|
+
------
|
|
43
|
+
i.value : FloatSocket
|
|
44
|
+
Value
|
|
45
|
+
i.iterations : IntegerSocket
|
|
46
|
+
Iterations
|
|
47
|
+
i.weight : FloatSocket
|
|
48
|
+
Weight
|
|
49
|
+
|
|
50
|
+
Outputs
|
|
51
|
+
-------
|
|
52
|
+
o.value : FloatSocket
|
|
53
|
+
Value
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
_bl_idname = "GeometryNodeBlurAttribute"
|
|
57
|
+
node: bpy.types.GeometryNodeBlurAttribute
|
|
58
|
+
|
|
59
|
+
class _Inputs(SocketAccessor):
|
|
60
|
+
value: FloatSocket
|
|
61
|
+
"""Value"""
|
|
62
|
+
iterations: IntegerSocket
|
|
63
|
+
"""Iterations"""
|
|
64
|
+
weight: FloatSocket
|
|
65
|
+
"""Weight"""
|
|
66
|
+
|
|
67
|
+
class _Outputs(SocketAccessor):
|
|
68
|
+
value: FloatSocket
|
|
69
|
+
"""Value"""
|
|
70
|
+
|
|
71
|
+
if TYPE_CHECKING:
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def i(self) -> _Inputs: ...
|
|
75
|
+
@property
|
|
76
|
+
def o(self) -> _Outputs: ...
|
|
77
|
+
|
|
78
|
+
def __init__(
|
|
79
|
+
self,
|
|
80
|
+
value: InputFloat = 0.0,
|
|
81
|
+
iterations: InputInteger = 1,
|
|
82
|
+
weight: InputFloat = 1.0,
|
|
83
|
+
*,
|
|
84
|
+
data_type: Literal["FLOAT", "INT", "FLOAT_VECTOR", "FLOAT_COLOR"] = "FLOAT",
|
|
85
|
+
):
|
|
86
|
+
super().__init__()
|
|
87
|
+
key_args = {"Value": value, "Iterations": iterations, "Weight": weight}
|
|
88
|
+
self.data_type = data_type
|
|
89
|
+
self._establish_links(**key_args)
|
|
90
|
+
|
|
91
|
+
@classmethod
|
|
92
|
+
def float(
|
|
93
|
+
cls,
|
|
94
|
+
value: InputFloat = 0.0,
|
|
95
|
+
iterations: InputInteger = 1,
|
|
96
|
+
weight: InputFloat = 1.0,
|
|
97
|
+
) -> "BlurAttribute":
|
|
98
|
+
"""Create Blur Attribute with operation 'Float'. Floating-point value"""
|
|
99
|
+
return cls(data_type="FLOAT", value=value, iterations=iterations, weight=weight)
|
|
100
|
+
|
|
101
|
+
@classmethod
|
|
102
|
+
def integer(
|
|
103
|
+
cls,
|
|
104
|
+
value: InputInteger = 0,
|
|
105
|
+
iterations: InputInteger = 1,
|
|
106
|
+
weight: InputFloat = 1.0,
|
|
107
|
+
) -> "BlurAttribute":
|
|
108
|
+
"""Create Blur Attribute with operation 'Integer'. 32-bit integer"""
|
|
109
|
+
return cls(data_type="INT", value=value, iterations=iterations, weight=weight)
|
|
110
|
+
|
|
111
|
+
@classmethod
|
|
112
|
+
def vector(
|
|
113
|
+
cls,
|
|
114
|
+
value: InputVector = None,
|
|
115
|
+
iterations: InputInteger = 1,
|
|
116
|
+
weight: InputFloat = 1.0,
|
|
117
|
+
) -> "BlurAttribute":
|
|
118
|
+
"""Create Blur Attribute with operation 'Vector'. 3D vector with floating-point values"""
|
|
119
|
+
return cls(
|
|
120
|
+
data_type="FLOAT_VECTOR", value=value, iterations=iterations, weight=weight
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
def color(
|
|
125
|
+
cls,
|
|
126
|
+
value: InputColor = None,
|
|
127
|
+
iterations: InputInteger = 1,
|
|
128
|
+
weight: InputFloat = 1.0,
|
|
129
|
+
) -> "BlurAttribute":
|
|
130
|
+
"""Create Blur Attribute with operation 'Color'. RGBA color with 32-bit floating-point values"""
|
|
131
|
+
return cls(
|
|
132
|
+
data_type="FLOAT_COLOR", value=value, iterations=iterations, weight=weight
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def data_type(self) -> Literal["FLOAT", "INT", "FLOAT_VECTOR", "FLOAT_COLOR"]:
|
|
137
|
+
return self.node.data_type
|
|
138
|
+
|
|
139
|
+
@data_type.setter
|
|
140
|
+
def data_type(self, value: Literal["FLOAT", "INT", "FLOAT_VECTOR", "FLOAT_COLOR"]):
|
|
141
|
+
self.node.data_type = value
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class DomainSize(BaseNode):
|
|
145
|
+
"""
|
|
146
|
+
Retrieve the number of elements in a geometry for each attribute domain
|
|
147
|
+
|
|
148
|
+
Parameters
|
|
149
|
+
----------
|
|
150
|
+
geometry : InputGeometry
|
|
151
|
+
Geometry
|
|
152
|
+
|
|
153
|
+
Inputs
|
|
154
|
+
------
|
|
155
|
+
i.geometry : GeometrySocket
|
|
156
|
+
Geometry
|
|
157
|
+
|
|
158
|
+
Outputs
|
|
159
|
+
-------
|
|
160
|
+
o.point_count : IntegerSocket
|
|
161
|
+
Point Count
|
|
162
|
+
o.edge_count : IntegerSocket
|
|
163
|
+
Edge Count
|
|
164
|
+
o.face_count : IntegerSocket
|
|
165
|
+
Face Count
|
|
166
|
+
o.face_corner_count : IntegerSocket
|
|
167
|
+
Face Corner Count
|
|
168
|
+
o.spline_count : IntegerSocket
|
|
169
|
+
Spline Count
|
|
170
|
+
o.instance_count : IntegerSocket
|
|
171
|
+
Instance Count
|
|
172
|
+
o.layer_count : IntegerSocket
|
|
173
|
+
Layer Count
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
_bl_idname = "GeometryNodeAttributeDomainSize"
|
|
177
|
+
node: bpy.types.GeometryNodeAttributeDomainSize
|
|
178
|
+
|
|
179
|
+
class _Inputs(SocketAccessor):
|
|
180
|
+
geometry: GeometrySocket
|
|
181
|
+
"""Geometry"""
|
|
182
|
+
|
|
183
|
+
class _Outputs(SocketAccessor):
|
|
184
|
+
point_count: IntegerSocket
|
|
185
|
+
"""Point Count"""
|
|
186
|
+
edge_count: IntegerSocket
|
|
187
|
+
"""Edge Count"""
|
|
188
|
+
face_count: IntegerSocket
|
|
189
|
+
"""Face Count"""
|
|
190
|
+
face_corner_count: IntegerSocket
|
|
191
|
+
"""Face Corner Count"""
|
|
192
|
+
spline_count: IntegerSocket
|
|
193
|
+
"""Spline Count"""
|
|
194
|
+
instance_count: IntegerSocket
|
|
195
|
+
"""Instance Count"""
|
|
196
|
+
layer_count: IntegerSocket
|
|
197
|
+
"""Layer Count"""
|
|
198
|
+
|
|
199
|
+
if TYPE_CHECKING:
|
|
200
|
+
|
|
201
|
+
@property
|
|
202
|
+
def i(self) -> _Inputs: ...
|
|
203
|
+
@property
|
|
204
|
+
def o(self) -> _Outputs: ...
|
|
205
|
+
|
|
206
|
+
def __init__(
|
|
207
|
+
self,
|
|
208
|
+
geometry: InputGeometry = None,
|
|
209
|
+
*,
|
|
210
|
+
component: Literal[
|
|
211
|
+
"MESH", "POINTCLOUD", "CURVE", "INSTANCES", "GREASEPENCIL"
|
|
212
|
+
] = "MESH",
|
|
213
|
+
):
|
|
214
|
+
super().__init__()
|
|
215
|
+
key_args = {"Geometry": geometry}
|
|
216
|
+
self.component = component
|
|
217
|
+
self._establish_links(**key_args)
|
|
218
|
+
|
|
219
|
+
@property
|
|
220
|
+
def component(
|
|
221
|
+
self,
|
|
222
|
+
) -> Literal["MESH", "POINTCLOUD", "CURVE", "INSTANCES", "GREASEPENCIL"]:
|
|
223
|
+
return self.node.component
|
|
224
|
+
|
|
225
|
+
@component.setter
|
|
226
|
+
def component(
|
|
227
|
+
self, value: Literal["MESH", "POINTCLOUD", "CURVE", "INSTANCES", "GREASEPENCIL"]
|
|
228
|
+
):
|
|
229
|
+
self.node.component = value
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class RemoveNamedAttribute(BaseNode):
|
|
233
|
+
"""
|
|
234
|
+
Delete an attribute with a specified name from a geometry. Typically used to optimize performance
|
|
235
|
+
|
|
236
|
+
Parameters
|
|
237
|
+
----------
|
|
238
|
+
geometry : InputGeometry
|
|
239
|
+
Geometry
|
|
240
|
+
pattern_mode : InputMenu | Literal['Exact', 'Wildcard']
|
|
241
|
+
Pattern Mode
|
|
242
|
+
name : InputString
|
|
243
|
+
Name
|
|
244
|
+
|
|
245
|
+
Inputs
|
|
246
|
+
------
|
|
247
|
+
i.geometry : GeometrySocket
|
|
248
|
+
Geometry
|
|
249
|
+
i.pattern_mode : MenuSocket
|
|
250
|
+
Pattern Mode
|
|
251
|
+
i.name : StringSocket
|
|
252
|
+
Name
|
|
253
|
+
|
|
254
|
+
Outputs
|
|
255
|
+
-------
|
|
256
|
+
o.geometry : GeometrySocket
|
|
257
|
+
Geometry
|
|
258
|
+
"""
|
|
259
|
+
|
|
260
|
+
_bl_idname = "GeometryNodeRemoveAttribute"
|
|
261
|
+
node: bpy.types.GeometryNodeRemoveAttribute
|
|
262
|
+
|
|
263
|
+
class _Inputs(SocketAccessor):
|
|
264
|
+
geometry: GeometrySocket
|
|
265
|
+
"""Geometry"""
|
|
266
|
+
pattern_mode: MenuSocket
|
|
267
|
+
"""Pattern Mode"""
|
|
268
|
+
name: StringSocket
|
|
269
|
+
"""Name"""
|
|
270
|
+
|
|
271
|
+
class _Outputs(SocketAccessor):
|
|
272
|
+
geometry: GeometrySocket
|
|
273
|
+
"""Geometry"""
|
|
274
|
+
|
|
275
|
+
if TYPE_CHECKING:
|
|
276
|
+
|
|
277
|
+
@property
|
|
278
|
+
def i(self) -> _Inputs: ...
|
|
279
|
+
@property
|
|
280
|
+
def o(self) -> _Outputs: ...
|
|
281
|
+
|
|
282
|
+
def __init__(
|
|
283
|
+
self,
|
|
284
|
+
geometry: InputGeometry = None,
|
|
285
|
+
pattern_mode: InputMenu | Literal["Exact", "Wildcard"] = "Exact",
|
|
286
|
+
name: InputString = "",
|
|
287
|
+
):
|
|
288
|
+
super().__init__()
|
|
289
|
+
key_args = {"Geometry": geometry, "Pattern Mode": pattern_mode, "Name": name}
|
|
290
|
+
|
|
291
|
+
self._establish_links(**key_args)
|