home contents changes options help

Terminology

Node -- The most general object. Nodes have input and output ports. An input port of one node is connected to an output port of another node. One port can connect to multiple nodes, but the same data will be transmitted (or read) to/from all of them. Details are a bit fuzzy in this area. Almost everything is representable as a node, so this base class has a lot of responsibility. Children include: Dimmers, GroupNodes?, ScalerNodes?, FunctionNodes?. (Note that all nodes have some function, known as an incorporation function. FunctionNodes? are the ones that only perform some operation, such as 'max', 'min', 'sine wave', etc.)

Node Relationships

Upsteam / Downstream -- This is the most common case. It refers to nodes connected by ports:

  Up
 /  \
D1   D2

Up is upstream of D1 and D2.  D1 and D2 are downstream of Up.

Parent / Child -- This refers to groups. Parents enclose their children (what would Freud say?):

  1      2
+-|------|--+
| A---x--B  |
| |__/ \_|  | E
| C      D  |
+-|------|--+
  3      4

E (the group with ports 1-4) is the parent of nodes A, B, C, and D.  Additionally, A is upstream of C and D and B is upstream of C,
and D.

Now back to Terminology...

Port -- Ports are what connect two nodes together. Some ports have multiple "pins", one pin for each connection. In other words, if a node receives inputs from 3 nodes on a certain port, that port has 3 pins. Optionally, ports will grow to meet the number of incoming connections. It would probably be nice to indicate that Ports can accept X or infinite connections. If X == 1, the op function will receive the actual value, otherwise, it receives a list of values for that port. Where does that port get those values, you ask? From the output ports of the upstream connecting nodes. If an op doesn't handle the number of nodes connected to a certain input, it should be able to communicate it somehow, or, (more likely) raise an exception and caught by the magic ExceptionHandler?, which should do the RightThing?.

Group Nodes -- Groups are Nodes that actually contain other Nodes. They have input and output ports, which are processed, passed on to the an inner network of nodes. The outputs of the inner nodes is then processed and sent to the group node's outputs. Group nodes are important, as the entire Node universe could be represented as a group with physical sliders/buttons connecting to the input ports of it and the DMX code connecting to the output ports.

Fade -- A fade is a change in lighting. Strictly speaking, it involves a ScalerNode?'s (or just plain Node's) level being adjusted over time. Timing information: start time, length (or end point). Associated ScalerNode?. Fades are given a time and return a dictionary of values, where the keys are ScalerNodes? or Nodes (or any other type of Node - even a Cue)

Cue -- A group of fades. Also a fade itself (read: subclass). It combines the values from a bunch of Fades to determine the overall effect. Inputs include a time step and a level to scale the cue by, which are given by the fader.

Fader -- A Cue Master, aka "Master of Time". Handles crossfades and gives times to all Cues. It also changes their levels.

ScalerNode? -- A node often confused with GroupNodes?. ScalerNodes? contain a dict of values for it's downstream nodes, like this:

<pre>

System Message: SEVERE/4 (<string>, line 42)

Unexpected section title or transition.

-----
SN | -----

/ | |

N N N N

</pre>

The ScalerNode? may include scaled levels for each of the N's. When the SN is brought to full, it applies those full scaled levels to the Ns. When scaled itself, it scales the scaled values and then applies the results to the Ns. Confusing? Most likely.