Sinitsyns поднял ранее тему ноды дисэйблера для других link
Однажды в разговоре с Димой Широковым он сказал, что хочет отписать на форум другую версию
В разговоре он сказал, что удобнее было бы включать Ноды в наборы. Например устанавливая им флаги в лейблах
И это действительно так
Все знают, что Дима человек занятой, поэтому не стал дожидаться, пока мир узреет его творения и написал свой вариант решения поставленной задачи
Публикую
И так задача:
Кастомная Нода, позволяющая массово дисэйблить наборы дргуих нод
При этом ноды включаются в наборы путём добавления в поле label определённого флага
Флаг задаётся пользователем
может быть изменён
В одном скрипте может находится несколько работающих Нод Дисэйблеров, со своими флагами
При этом одна нода может быть помечена несколькими флагами, тогда на неё будет оказывать влияние сразу неколько дисэйблеров
Решение:
Берём обычный StickyNote
Я предлагаю создать юзерскую кнобу для ввода текста (правая кнопка в любом месте открытого окошка редактирования ноды, Manage User Knobs, кнопка Add)
Назовём её Flag
в неё мы будем вводить флаг, по которому производится поиск подвластных Дисэйблеру нод
и создадим так же Юзерские Кнопки со скриптами на Питоне
у меня получилось как-то так
[реклама вместо картинки]
Как можно догадаться кнопки EnableFlagedNodes и DisableFlagedNodes dключают и выключают ноды из набора
ToggleFlagedNodes инвертируют disable у нод из набора
Что касается самого скрипта
Выбираем кнопку DisableFlagedNodes жмём Edit
пишем код
allnodes = nuke.allNodes(group = nuke.root()) fl = nuke.thisNode().knob("flag").value() for i in allnodes: L = i.knob("label").value() if L.find(fl)>-1: i.knob("disable").setValue(1)
код до безобразного прост
Берём список всех нод в скрипте, пробегаемся по нему, ищем у кого в label присутствует флаг
у тех, что присутствует ставим в кнобу disable ставим 1
Для двух других кнопок код будет практически идентичен
Только для EnableFlagedNodes мы записываем 0 ( i.knob("disable").setValue(1))
А для ToggleFlageNode записываем инвертированное значение по отношению к текущему
v=i.knob("disable").value() i.knob("disable").setValue(1-v)
Проверяем:
Назовём нашу ноду каким нибудь NodeDisabler1
Берём готовый скрипт, или создаём новый тестовый
В нужные ноды пишем в label dis (либо другой флаг, который разумеется так же прописываем в кнобе Flag нашего дисаблера)
Дальше кнопками можем дисаблить, енаблить, тоглить эти ноды )
всё работает
Разумеется, надо быть аккуратнее, если мы для иных целей используем поля label у нод
Думаю, это понятно
Флаги dis или там напирмер LightnesDisGroup будут автоматически показываться на поверхности помеченных нод в ДАГе (они же прописаны в label)
Что удобно
Исходник того, что получилось у меня:
set cut_paste_input [stack 0] version 6.0 v1 StickyNote { inputs 0 name NodeDisabler1 tile_color 0x360f3cff gl_color 0x52cc80ff selected true xpos 367 ypos -321 addUserKnob {20 User} addUserKnob {1 flag l Flag} flag dis addUserKnob {22 DisableFlagedNodes T "allnodes = nuke.allNodes(group = nuke.root())\nfl = nuke.thisNode().knob(\"flag\").value()\nfor i in allnodes: \n L = i.knob(\"label\").value()\n if L.find(fl)>-1:\n i.knob(\"disable\").setValue(1)" +STARTLINE} addUserKnob {22 EnableFlagedNodes -STARTLINE T "allnodes = nuke.allNodes(group = nuke.root()) \nfl = nuke.thisNode().knob(\"flag\").value()\nfor i in allnodes: \n L = i.knob(\"label\").value()\n if L.find(fl)>-1:\n i.knob(\"disable\").setValue(0)"} addUserKnob {22 ToggleFlagedNodes -STARTLINE T "allnodes = nuke.allNodes(group = nuke.root()) \nfl = nuke.thisNode().knob(\"flag\").value()\nfor i in allnodes: \n L = i.knob(\"label\").value()\n if L.find(fl)>-1:\n v=i.knob(\"disable\").value()\n i.knob(\"disable\").setValue(1-v)"} }
копируем, вставляем, пользуемся
Предложения? Замечания? Вопросы? - всегда рад
Надеюсь было полезно
Отредактировано jahamba (2010-06-10 23:49:13)