Replicator COMP
オペレータを複製するために使うオペレータ
UI構築やデータからのオペレータ自動生成を簡易にするために用いられます
How to Use
- 複製したいオペレータ(Master Operater) を設定
- 複製方法を選択(TableDAT or 数値入力)
- Operator Prefixで複製されるオペレータの名前を指定
複製方法 (Replication Method)
複製方法は
- DAT(Table)から指定
- 数値で指定
の2種類があります
DATから複製する
- Template DAT Table
- 複製数などを決めるDATの指定
- Name from Table
- 複製されたオペレータの接尾語の付け方の設定
- デフォルトだとDATの行番号
- Ignore First Row
- 最初の行を無視するかどうか、ヘッダーに情報を持っている場合などには無視しないほうが良('name'とか'path'とか持っているとき)
数値で指定
- Number of Replicants
- 複製数を整数で指定
- 特定のCHOPの長さなどを参照すると良
- Replicant Suffix Start
- 接尾後の数値の開始番号
Maximun Operators
複製されるオペレータ数の上限値
APIや外部データを元にオペレータを複製する際に、想定以上の大量のデータが来ることは多々ありまう。
そのようなとき時に(例えば、10万行のデータのDAT)全てを複製してしまうとパフォーマンスに甚大な影響が出てしまします。
入力のDATや数値を事前に処理して必要な物だけを抜け出す処理は必要ですが、複製数の上限を設定してあげることで予期せぬ処理落ちやクラッシュなどを防ぐことができます。
Layout
複製したオペレータのレイアウトの設定
- Off 一箇所に複製される
- Horizontal 横並び
- Vertical 縦並び
- Grid グリッド
- Layout Origin
- レイアウトの基準点、最初に複製されるオペレータの位置、この位置からレイアウトがされる
Destination
複製するオペレータのできる階層の指定
特定のCompの中に生成するなどができる
参照切れなどに注意!
Incremental Update
1Frameに複製する数
複製時の処理落ちを回避できる
Callbacks DAT
def onRemoveReplicant(comp, replicant):
replicant.destroy()
return
def onReplicate(comp, allOps, newOps, template, master):
for c in newOps:
#c.display = True
#c.render = True
#c.par.display = 1
#c.par.clone = comp.par.master
pass
return
オペレータが複製される時などに呼び出される関数
onReplicate
オペレータの複製時に呼び出される
arg | 中身 |
---|---|
comp | 複製をするreplicatorCOMP |
allOps | 複製されたすべてのオペレータ |
newOps | 新規に複製されたオペレータ |
template | テンプレートDAT |
master | 複製元のオペレータ |
新規に作り出されたオペレータにだけ処理をかけたりできる
def onReplicate(comp, allOps, newOps, template, master):
for c in newOps:
c.par.display = 1 # 複製時にDisplayをオン、マスターオペレータは表示させない時とかに
pass
return
onRemoveReplicant
templateDATの行数などが変化して複製数が減った際にその分減るオペレータに対しての処理
デフォルトだと行数が減る時は対応する数だけオペレータが削除される
replicant.destroy()
を削除することにより、自動的には削除されないようになる
Clone
マスターオペレータを編集するたびにReplicatorCOMPのRecreateAllボタンなどを押すが手間な時などに使用
def onReplicate(comp, allOps, newOps, template, master):
for c in newOps:
c.par.clone = comp.par.master
pass
Callback関数をでマスターオペレータをクローンオペレータに設定してあげることによって、マスターオペレータの変更がそのまま複製先でも同じく反映されます
CloneについてはWikiをお読みください
https://docs.derivative.ca/Clone
Replicatorをもっと自在に使う
parent().digits
複製されたオペレータで名前の末尾につく数値を取得することができる
例えばButtonCOMPを複製し、背景となるTextTOPのTextにparent().digits
と入力します
そうすると背景には複製名の末尾の数字が表示されどのボタンなのかが一目瞭然となります
select DAT
複製先でテンプレートDATの自分のインデックスの行を取得し、そこのデータを使う際にSelectDATが役に立ちます。
上記のparent().digits
と併用し、行の選択をしてあげることで元となるDATから自分に必要な情報のみを取得できます
select CHOP
ButtonCOMPなどを複製した時に全てのオペレータの出力を取得する際にCompのアウトからMergeなどに繋ぐことが多いと思います
↓ こんな感じ
しかし複製ごとに繋ぎ直さなくてはならなかったり、Callback関数でConnectorsをごにょごにょして自動で繋いであげる処理を書いてあげるなど結構手間が掛かってるかと思います。
そんな時に便利なのがSelectChopです
パラメータのCHOPに item*/out1
と記述してあげるだけでitemと名のつくオペレータが持つout1というCHOPを取得することができます
この記述方法などは PatternMatching などを調べてみてください
execute DAT とか
executeDATのonCreate()
を記述することにより、複製された際にScriptを走らせることができます。
またそれと同様にExtensionで拡張したCOMPを複製することにより生成時などにより柔軟に複製されたオペレータを扱うことができます
最後に
replicator 使ってこんなツールが作りたいですね、、
結局は細部の作りこみとかなのでそれ以外の部分でいかにreplicatorとかで自動的に生成ししたりして楽ができるかが大事なんじゃないですかね