Nuke forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Nuke forum » R&D » ReadChanger: Пакетно подменяем пути в ридах


ReadChanger: Пакетно подменяем пути в ридах

Сообщений 1 страница 2 из 2

1

Согласитесь было бы удобно иметь инструмент, который бы мог вывалить все пути к ридам в текущем скрипте
При этом чтобы была возможность быстро переробить пути

Это полезно, когда мы носим скрипт на флешке, скидываем через инет, и в конце концов, когда кешируем сурс с сети на локал
Разумеется одним из решений для первых двух пунктов являются относительные пути. Об этом уже писали и обсуждали
Но это ведь надо следить за каждым ридом. А если мы не заморачивались. Теперь каждый скрипт открывать ручками. Искать путь файла. Перепробивать. Лениво - не так ли?

В общем имея подобные соображения, подкреплённые не только моими мыслями но и соображениями окружающих. Я решил попытаться сделать такой инструмент. Будем надеяться он будет удобен.

Честно. Сейчас нет огромного желания расписывать алгоритмы его создания. Кому интересно, Нюк открыт. В скрипте можно ковыряться
Если возникнут вопросы уже конкретные или предложения, буду с радостью общаться

Собственно привожу сам скрипт. Копируем, вставляем в Нюк как обычную ноду.
Тестим, смотрим, пишем отзывы. Какие пожелания, предложения. Будем считать, что это бета версия.

Код:
set cut_paste_input [stack 0]
version 6.0 v1
StickyNote {
 inputs 0
 name ReadChanger1
 tile_color 0x260736ff
 label "\[knob name]"
 selected true
 xpos 1088
 ypos -2138
 addUserKnob {20 User l Changer}
 addUserKnob {22 LoadReads l "Load read paths" -STARTLINE T "sn = nuke.thisNode()\nallnodes = nuke.allNodes(group = nuke.root())\n\nfor ks in sn.knobs():\n    if ks.find(\"rc_\")>-1:\n        k = sn.knob(ks)\n        sn.removeKnob(k)\n\n#k = nuke.Script_Knob(\"rc_ScriptB\",\"Update\")\n#sn.addKnob(k)\n\nb = 0\nfor node in allnodes:\n    type = node.Class()\n    if type == \"Read\":\n        #str+=node.knob(\"file\").value()+\"\\n\"\n        k = nuke.File_Knob(\"rc_\"+node.name(),node.name())\n        k.setValue(node.knob(\"file\").value())\n        k.setTooltip(node.knob(\"file\").value())\n        sn.addKnob(k)\n        b=1\nif b==1:\n     sn.knob(\"Update\").setEnabled(True)\n     sn.knob(\"Clear\").setEnabled(True)\nelse:\n     sn.knob(\"Update\").setEnabled(False)\n     sn.knob(\"Clear\").setEnabled(False)\n"}
 addUserKnob {22 Update l "Update paths" -STARTLINE +DISABLED T "allnodes = nuke.allNodes(group = nuke.root())\nsn = nuke.thisNode()\n\nfor node in allnodes:\n    type = node.Class()\n    if type == \"Read\":\n        k = sn.knob(\"rc_\"+node.name())\n        if k>-1:\t\n             node.knob(\"file\").setValue(k.value())\n"}
 addUserKnob {22 Clear -STARTLINE +DISABLED T "sn = nuke.thisNode()\nfor ks in sn.knobs():\n    if ks.find(\"rc_\")>-1:\n        k = sn.knob(ks)\n        sn.removeKnob(k)\n\nsn.knob(\"Update\").setEnabled(False)\nsn.knob(\"Clear\").setEnabled(False)"}
 addUserKnob {26 ""}
 addUserKnob {1 ReplaceFrom l Replace}
 addUserKnob {1 ReplaceTo l with -STARTLINE}
 addUserKnob {22 Replace -STARTLINE T "sn = nuke.thisNode()\nif len(sn.knob(\"ReplaceFrom\").value())>0:\n     #allnodes = nuke.allNodes(group = nuke.root())\n     fromS=sn.knob(\"ReplaceFrom\").value()\n     toS=sn.knob(\"ReplaceTo\").value()\n     for ks in sn.knobs():\n         if ks.find(\"rc_\")>-1:\n             k = sn.knob(ks)\n             s = k.value()\n             s=s.replace(fromS, toS)\n             k.setValue(s)"}
 addUserKnob {26 ""}
}

Что умеет:
- Собирать пути к файлам во всех ридах текущего скрипта (кноба Load read paths)
- Обновлять соответствующие пути из собранного списка в ридах (кноба Update paths)
- Очищать список (Clear)
- Заменять в списке строку на другую (заменяет именно в списке, а не в ридах. После замены, для обновления ридов необходимо нажать кнопку Update. Спомощью этого пакета удобно перепробивать во всех ридах, корневую папку проекта, заменять локал на сервер и прочее)
- Нода ReadChanger не связана с ридами никакими внутренними зависимостями. Апдэйт происходит исключительно в момент нажатия кнопки Update. Дальше риды всё так же продолжают жить своей независимой жизнью. Это позволяет нам не парится, удалять Рид ченжер. Это не приведёт к багам в скрипте. В общем минимум вмешательства.

Надеюсь, что будет полезно

0

2

Обнаружился баг
Оказалось, что функция setEnabled у кнобы появилась только с 6-той версии Нюка
соответственно более ранние версии будут ругаться и так и не сможет разлочить нужные кнопки
В данном случае юзаем подправленный скрипт

Код:
set cut_paste_input [stack 0]
version 6.0 v3
StickyNote {
 inputs 0
 name ReadChanger1
 tile_color 0x260736ff
 label "\[knob name]"
 selected true
 xpos -178
 ypos -170
 addUserKnob {20 User l Changer}
 addUserKnob {22 LoadReads l "Load read paths" -STARTLINE T "sn = nuke.thisNode()\nallnodes = nuke.allNodes(group = nuke.root())\n\nfor ks in sn.knobs():\n    if ks.find(\"rc_\")>-1:\n        k = sn.knob(ks)\n        sn.removeKnob(k)\n\n#k = nuke.Script_Knob(\"rc_ScriptB\",\"Update\")\n#sn.addKnob(k)\n\nb = 0\nfor node in allnodes:\n    type = node.Class()\n    if type == \"Read\":\n        #str+=node.knob(\"file\").value()+\"\\n\"\n        k = nuke.File_Knob(\"rc_\"+node.name(),node.name())\n        k.setValue(node.knob(\"file\").value())\n        k.setTooltip(node.knob(\"file\").value())\n        sn.addKnob(k)\n        b=1\n"}
 addUserKnob {22 Update l "Update paths" -STARTLINE T "allnodes = nuke.allNodes(group = nuke.root())\nsn = nuke.thisNode()\n\nfor node in allnodes:\n    type = node.Class()\n    if type == \"Read\":\n        k = sn.knob(\"rc_\"+node.name())\n        if k>-1:\t\n             node.knob(\"file\").setValue(k.value())\n"}
 addUserKnob {22 Clear -STARTLINE T "sn = nuke.thisNode()\nfor ks in sn.knobs():\n    if ks.find(\"rc_\")>-1:\n        k = sn.knob(ks)\n        sn.removeKnob(k)"}
 addUserKnob {26 ""}
 addUserKnob {1 ReplaceFrom l Replace}
 addUserKnob {1 ReplaceTo l with -STARTLINE}
 addUserKnob {22 Replace -STARTLINE T "sn = nuke.thisNode()\nif len(sn.knob(\"ReplaceFrom\").value())>0:\n     #allnodes = nuke.allNodes(group = nuke.root())\n     fromS=sn.knob(\"ReplaceFrom\").value()\n     toS=sn.knob(\"ReplaceTo\").value()\n     for ks in sn.knobs():\n         if ks.find(\"rc_\")>-1:\n             k = sn.knob(ks)\n             s = k.value()\n             s=s.replace(fromS, toS)\n             k.setValue(s)"}
 addUserKnob {26 ""}
}

не так интуитивен с т.з. юзабилити
но работать должен )

0


Вы здесь » Nuke forum » R&D » ReadChanger: Пакетно подменяем пути в ридах