comparison flax/Node.py @ 0:45b12307c695

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