Связывание двух полей в 2 разных узлах, созданных процедурно - PullRequest
1 голос
/ 05 ноября 2019

Я создаю атомный узел, чтобы легко манипулировать моими различными источниками света в узле. Я хочу закодировать его так, чтобы не имело значения, сколько источников света в каком-либо конкретном файле, и код может выяснить это и отобразить необходимые инструменты для их изменения. Чтобы добиться этого, я сначала определяю, сколько источников света в файле, и сохраняю это значение, которое затем подается в цикл «для», чтобы создать столько узлов и инструментов, сколько источников света в исходном файле. «tempNumber» - это номер, назначенный исходным источникам света в файле, и он помогает создавать и управлять всеми инструментами, помеченными в соответствии с изменяемым ими освещением. Это становится сложным, потому что имена сгенерированных узлов выглядят так:

globals()['expoParent{}'.format(tempNumber)]

До сих пор все работало нормально, но я застрял, пытаясь связать два разных узла экспозиции, чтобы отразитьте же значения, что и пользователь, изменяет их. Я создал этот код для этой цели в отдельном скрипте:

par = nuke.nodes.EXPTool(mode = 'Stops', name = 'Parent')

chi = nuke.nodes.EXPTool(mode = 'Stops', name = 'Child')

par.knob('knobChanged').setValue('chi["red"].setValue(par["red"].value())\nchi["green"].setValue(par["green"].value())\nchi["blue"].setValue(par["blue"].value())')

Этот предыдущий бит кодаработает отлично, создает 2 узла экспозиции и связывает дочерний элемент с родительским, так что любое изменение, внесенное в родительский элемент, автоматически передается дочернему элементу немедленно. Теперь проблема возникает, когда я пытаюсь заменить переменные par и chi на globals()['expoParent{}'.format(tempNumber)] и globals()['expoChild{}'.format(tempNumber)]. На этом этапе код перестает работать, и ссылка не удалась. Я читал много людей, которые говорили, что переменные не должны создаваться через цикл for, но я не вижу другого способа сделать это.

...