diff flax/Node.py @ 0:45b12307c695

Initial revision
author drewp
date Wed, 03 Jul 2002 09:37:57 +0000
parents
children 490843093506
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flax/Node.py	Wed Jul 03 09:37:57 2002 +0000
@@ -0,0 +1,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>