Files
@ e683b449506b
Branch filter:
Location: light9/flax/Node.py
e683b449506b
4.3 KiB
text/x-python
blender effect that sets lights to match blender lights
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | # super rough code
# The magic value
NoChange = "NoChange"
class NodeType:
def __init__(self, iports=None, oports=None):
make_attributes_from_args('iports', 'oports')
def process(self,iports,oports):
pass
# TODO: handle NoChange stuff
class AddNode(NodeType):
"""Adds two nodes together"""
def __init__(self):
NodeType.__init__(self, iports={'in1' : Port, 'in2' : Port},
oports={'out1' : Port})
def process(self, ports):
ports.out1 = ports.in1 + ports.in2
class SumNode(NodeType):
"""Adds any number of nodes together"""
def __init__(self, empty_val=0):
NodeType.__init__(self, iports={'in1' : MultiPort},
oports={'out1' : Port})
self.empty_val = 0
def process(self, ports):
val = self.empty_val
for p in ports.in1:
val += p
ports.out1 = val
class FadeNode(NodeType):
"""Provides a UI scaler to let you fade a value"""
def __init__(self):
NodeType.__init__(self, iports={'in1' : Port(),
'scale1' : Port()},
oports={'out1' : Port()},
def process(self, iports, oports):
ports.out1 = ports.in1 * ports.scale1
class FadeConstellation(Constellation):
"""This somehow describes the following:
[ ] [ UI.Scale ]
| |
| in | scale
| ____ /
| |
[ FadeNode ]
|
| out
|
[ ]
Maybe this is a group (I like this more):
|
| in
| FadeGroup
- - - - - - - - - - - - -- - -
| | |
| [ UI.Scale ]
| | | |
| in | scale
| | ____ / |
| |
| [ FadeNode ] |
|
| | out |
|
\ - - - - - - - - - - - -- - - /
|
| out
|
"""
Persistence
node instance saves:
node name, id, and such
input ports:
any port details
what the port connects to
values:
maybe UI.Scale level
maybe group contents
p=InputPort(node=self,minconns=1,maxconns=2) # an input port to this node
p.connect(othernode)
print p.connections()
p.connect(yetanother)
op=OutputPort(node=self) # an output port
print op.connections() # lists all the nodes that call us an input node
op.connect(n) # calls n.connect(self)
Ports
Port: "scalar"
MultiPort: "array of Port"
^ all wrong
Ports II:
min/max number of connections
(failure to fit these numbers means port is "deactivated")
"Normal" ports are min=1, max=1
"Multiports" are min=0, max=None
"Binary" ports are min=2, max=2
oh yeah, there are two totally different types of ports
Input ports: min/max numbers of connections
store current connections
Output ports: nothing
store nothing!
fake node persistence for subtract node
<!-- "my subtract" is a unique id -->
<!-- drew: there is no such thing as a subtract group -->
<node name="my subtract" type="math.Add">
<inputs>
<port name="in1">
<noderef name="node I"/>
<noderef name="node II"/>
</port>
</inputs>
<state>
</state>
</node>
<node name="the group" type="group">
<!-- all of the port names of the group are being made up right
here- a group has no preset inputs or outputs-->
<inputs>
<port name="group-in 1">
<noderef name="node5"/>
<noderef name="node6"/>
</port>
</inputs>
<state>
<children>
<noderef name="node3">
<connect localPort="in1" groupPort="group-in1"/>
</noderef>
<noderef name="node4">
<connect localPort="in1" groupPort="group-in1"/>
<connect localPort="out1" groupPort="theoutput"/>
</noderef>
</children>
</state>
</node>
<node name="preset value" type="source.Scalar">
<!-- no inputs, node has output only -->
<state>
<value>8.3</value>
<minvalue>0</minvalue>
<maxvalue>100</maxvalue>
<gui>
<slider res=".1" height="200" bgcolor="red"/>
<priority>very high</priority>
<xpos>395</xpos>
<ypos>21</ypos>
</gui>
</state>
</node>
|