diff --git a/flax/Node.py b/flax/Node.py new file mode 100644 --- /dev/null +++ b/flax/Node.py @@ -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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8.3 + + 0 + 100 + + + + very high + 395 + 21 + + + + +