Репликатор и генерация сети
Когда узлов должно быть много и одинаковых: Replicator COMP, клоны и построение сети скриптом.
Двадцать одинаковых блоков руками — это двадцать мест, где вы забудете внести правку. Правильный ответ — один мастер и механизм размножения.
Replicator COMP
Replicator COMP создаёт копии компонента-мастера по строкам таблицы.
Как настроить:
- Мастер — компонент, который надо размножить (
Master Operator). - Таблица —
Table DATсо строкой на каждую копию (Template DAT Table). Replicatorсоздаёт клоны, называя их по значению из таблицы.
Каждая копия — клон мастера: правите мастер, меняются все.
Как копия узнаёт свои данные
Через колбэк репликатора:
def onReplicate(comp, allOps, newOps, template, master):
for c in newOps:
row = template.row(c.digits) # или по имени
c.par.Universe = int(row[1].val)
c.par.Address = int(row[2].val)
c.nodeY = -150 * c.digits
return
или выражением внутри мастера, опирающимся на me.digits и таблицу —
Ссылки.
Что размножают
| Что | Таблица описывает |
|---|---|
| Экраны и выходы | Разрешение, положение, монитор |
| Слои композиции | Источник, режим наложения, прозрачность |
| Приборы света | Юниверс, адрес, тип — Патч |
| Сцены шоу | Файл, длительность, переход |
| Панели интерфейса | Подпись, диапазон, адрес параметра |
Смысл один: структура проекта описывается данными, а не рисуется руками. Добавить экран — это строка в CSV, а не полчаса в сетевом редакторе.
Генерация скриптом
Когда репликатора мало, сеть строят кодом:
parent().op('gen').destroyChildren() # аккуратно: удаляет всё внутри
for i, row in enumerate(op('table1').rows()[1:]):
n = parent().op('gen').copy(op('master'))
n.name = f'unit_{row[0].val}'
n.nodeY = -150 * i
n.par.Address = int(row[2].val)
Правила безопасности:
- генерируйте в отдельный контейнер, чтобы
destroyChildren()не снёс лишнего; - запускайте по кнопке (
Pulse-параметр), а не на каждом кадре; - сохраняйте результат в проект осознанно: сгенерированная сеть уедет в
.toeи на площадке уже не будет пересобираться.
Создание и удаление узлов — дорогая операция, которая может занять десятки кадров. Всё, что можно построить заранее, строится при загрузке проекта, а не в момент, когда зритель смотрит на экран.
Держите одну таблицу на проект, из которой растёт всё: экраны, приборы, сцены. Тогда «сколько у нас выходов» — это вопрос к файлу, а не к памяти разработчика.