The Replicator Component creates a node for every row of a table, creating nodes ("replicants") and deleting them as the table changes. A node can be a full component and its contents.
It takes the node specified in the Master Node parameter, and makes a copy of the master for every row in the Template Table (or specified by the Number of Replicant parameter).
The nodes that are created can be named in two ways. Copies can be named/numbered sequentially using
the prefix specified by the Node Prefix parameter:
item2, ... Alternately, copies can be named based on the string in a column of the table, specified with the Name from Table parameter.
If you want to create a node for the first row of the table, un-set the Ignore First Row parameter.
The replicants get laid out in a grid in the network, determined by the Layout and Layout Origin parameters.
The Replicator does not assume or require that the master and replicants are components – they can all be Movie File In TOPs if you want. It also does not assume or require that the replicants are Clones. However the Master Node can be a component whose Clone parameter is set to itself, so that all nodes created are clones of the master.
For every replicant, you can run a script in the callback DAT where you can see some examples of typical cases that you can adapt. Here are some others:
- change the expression of a parameter:
c.par.display.expr = "op('thing')[op.digits, 'display']"
- Change the parameter expression mode:
c.par.display.mode = ParMode.EXPRESSIONThe mode is one of:
If only one line of a table changes, the other existing replicants are not changed or re-created.
This is an extremely powerful node type. Examples: (1) A button gadget for each row of the table. a geometry component, which is replicated at every point of a 3D particle system, each behaving separately. (2) You can feed the table of a Multi Touch In DAT directly to the Replicator to create something at each fingertip.
Parameters - Replicator Page
method - ⊞ - Choose between using a Template DAT Table where each row will create a replicant or using the Number of Replicants parameter below to set how many replications to make.
- By Number
- By Table
Number of Replicants
numreplicants - Set number of replicants when using Replication Method = By Number above.
Template DAT Table
template - Path to the table DAT that will drive the replicating.
Name from Table
namefromtable - ⊞ - How the node names will be generated.
- Row Index
rowindex- Uses the Node Prefix parameter followed by the row number. The default creates nodes named
item3.... (The top row is 0).
- Column by Index
colbyindex- The node name is in the column specified by a column number.
- Column by Name
colbyname- The node name is in a column specified by a column name in the first row.
Ignore First Row
ignorefirstrow - Do not create a node for the first row.
colname - Name at the top of the column.
colindex - Column number, starting from 0.
opprefix - Add this prefix to all nodes.
master - Which node or component to replicate.
destination - Where to put the replicant nodes. If the location is
.., it puts the nodes inside the parent, which is actually alongside the Replicator component. If you put
., it will put it inside itself, that is, inside the Replicator component. If left blank, it will error.
domaxops - Max number of nodes, to keep it under control.
tscript - Tscript only (use callback DAT in python): For every replicant, you can run a script to customize it relative to the master, such as setting the Display or Clone parameters, or a Render flag. Replicator runs the script command to customize each replicant versus the master.
me.curItem can be used here to access the current item and make changes to it. Select one of the 3 entries in the drop menu to the right for some examples.
If you are using Tscript, some local variables are defined:
- $ITEM Name of current node being replicated.
- $MASTER Name of master node.
- $LOCATION Name of the location component.
The most common need is for the master to not display, and the replicants to display. For Panel components it is most commonly "
opparm $ITEM paneldisplay ( 1 )", and for Geometry components it is most commonly "
opset -d on $ITEM". Use the popup menu for some common scripts.
callbacks - Path to a DAT containing callbacks for each event received. See replicatorCOMP_Class for usage.
layout - ⊞ - How to lay out the new nodes - all in one place (Off), horizontally, vertically, or in a grid.
layoutorigin - ⊞ - Where to lay out the new nodes, giving the XY location of the top-left node's bottom-left corner.
increment - Staggers the replication of operators to avoid large frame drops when creating replicants. It will create the specified number of replicants per frame at most, by default 1 per frame, if Incremental Update is on.
Recreate All Operators
recreateall - Deletes all nodes it has created, then re-creates them using the template and its current parameters.
Recreate Missing Operators
recreatemissing - Re-creates missing operators from the template table but does not delete and re-create already existing replicants.
Parameters - Extensions Page
The Extensions parameter page sets the component's python extensions. Please see extensions for more information.
Extension Object 1
extension1 - A number of class instances that can be attached to the component.
Extension Name 1
extname1 - Optional name to search by, instead of the instance class name.
Promote Extension 1
promoteextension1 - Controls whether or not the extensions are visible directly at the component level, or must be accessed through the
.ext member. Example:
Extension Object 2
extension2 - A number of class instances that can be attached to the component.
Extension Name 2
extname2 - Optional name to search by, instead of the instance class name.
Promote Extension 2
promoteextension2 - Controls whether or not the extensions are visible directly at the component level, or must be accessed through the
.ext member. Example:
Extension Object 3
extension3 - A number of class instances that can be attached to the component.
Extension Name 3
extname3 - Optional name to search by, instead of the instance class name.
Promote Extension 3
promoteextension3 - Controls whether or not the extensions are visible directly at the component level, or must be accessed through the
.ext member. Example:
Extension Object 4
extension4 - A number of class instances that can be attached to the component.
Extension Name 4
extname4 - Optional name to search by, instead of the instance class name.
Promote Extension 4
promoteextension4 - Controls whether or not the extensions are visible directly at the component level, or must be accessed through the
.ext member. Example:
reinitextensions - Recompile all extension objects. Normally extension objects are compiled only when they are referenced and their definitions have changed.
Parameters - Common Page
parentshortcut - Specifies a name you can use anywhere inside the component as the path to that component. See Parent Shortcut.
Global OP Shortcut
opshortcut - Specifies a name you can use anywhere at all as the path to that component. See Global OP Shortcut.
Internal OP Shortcut
iopshortcut - Specifies a name you can use anywhere inside the component as a path to "Internal OP" below. See Internal Operators.
iop - The path to the Internal OP inside this component. See Internal Operators.
nodeview - ⊞ - Determines what is displayed in the node viewer, also known as the Node Viewer. Some options will not be available depending on the Component type (Object Component, Panel Component, Misc.)
- Default Viewer
default- Displays the default viewer for the component type, a 3D Viewer for Object COMPS and a Control Panel Viewer for Panel COMPs.
- Operator Viewer
opviewer- Displays the node viewer from any operator specified in the Operator Viewer parameter below.
opviewer - Select which operator's node viewer to use when the Node View parameter above is set to Operator Viewer.
Keep in Memory
enablecloning - Control if the OP should be actively cloned. The Pulse button can be used to instantaneously clone the contents.
Enable Cloning Pulse
clone - Path to a component used as the Master Clone.
Load on Demand
loadondemand - Loads the component into memory only when required. Good to use for components that are not always used in the project.
externaltox - Path to a
.tox file on disk which will source the component's contents upon start of a
.toe. This allows for components to contain networks that can be updated independently. If the
.tox file can not be found, whatever the
.toe file was saved with will be loaded.
Reload .tox on Start
reloadtoxonstart - When on (default), the external .tox file will be loaded when the .toe starts and the contents of the COMP will match that of the external .tox. This can be turned off to avoid loading from the referenced external .tox on startup if desired (the contents of the COMP are instead loaded from the .toe file). Useful if you wish to have a COMP reference an external .tox but not always load from it unless you specifically push the Re-Init Network parameter button.
Reload Built-in Parameters
reloadbuiltin - When this checkbox is enabled, the values of the component's built-in parameters are reloaded when the .tox is reloaded.
Save Backup of External
savebackup - When this checkbox is enabled, a backup copy of the component specified by the External
.tox parameter is saved in the
.toe file. This backup copy will be used if the External
.tox can not be found. This may happen if the
.tox was renamed, deleted, or the
.toe file is running on another computer that is missing component media.
Sub-Component to Load
subcompname - When loading from an External
.tox file, this option allows you to reach into the
.tox and pull out a COMP and make that the top-level COMP, ignoring everything else in the file (except for the contents of that COMP). For example if a
.tox file named
geo1 as the Sub-Component to Load, will result in
geo1 being loaded in place of the current COMP. If this parameter is blank, it just loads the
.tox file normally using the top level COMP in the file.
reinitnet - This button will re-load from the external
.tox file (if present), followed by re-initializing itself from its master, if it's a clone.
|• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •|
Creates a new component for every line in a table. Unlike Clone, it automatically creates copies of a master component.
(1) The TouchDesigner window is made of a menu bar at the top, a Timeline at the bottom, plus one of a choice of Layouts in the middle. A Layout is made on one or more Panes, each Pane can contain a Network Editor, Viewer, Panel, etc. See Pane and Bookmark. (2) Nodes in a network are arranged using Layout commands in the RMB menu.
Any component can be extended with its own Python classes which contain python functions and data.
A Parent Shortcut is a parameter on a component that contains a name that you can use anywhere inside the component to refer to that component using the syntax
parent.Name, for example
parent.Effect.width to obtain panel width.
A name for a component that is accessible from any node in a project, which can be declared in a component's Global Operator Shortcut parameter.
There are four types of shortcuts: Application Shortcuts that are built-in to TouchDesigner's authoring interface, Panel Shortcuts that you create for any custom built panels, Parent Shortcuts for accessing a component from within that component, and Global OP Shortcuts that access a unique component from anywhere in TouchDesigner.
A custom interactive control panel built within TouchDesigner. Panels are created using Panel Components whose look is created entirely with TOPs.
To pulse a parameter is to send it a signal from a CHOP or python or a mouse click that causes a new action to occur immediately. A pulse from a CHOP is typically a 0 to 1 to 0 signal in a channel, and a pulse via python is via a
.pulse() call on a pulse-type parameter, such as Reset in a Speed CHOP.
TOuch Environment file, the file type used by TouchDesigner to save your project.
Every component contains a network of operators that create and modify data. The operators are connected by wires that define where data is routed after the operator cooks its inputs and generates an output.