Используя Maya Python API 2.0, я пытаюсь сделать обратный вызов, который изменяет значение плагина. Однако ни один из методов, которые я пробовал, не работает.
Я пытался использовать метод MPlug.setFloat (), но это не привело к ожидаемым результатам; Я не нашел изменений в значении плагина. Я подумал, что это не сработало, потому что мне нужно было почистить вилку после изменения ее значения. Затем я попытался получить дескриптор данных плагина с помощью метода MPlug.asDataHandle (), а затем с помощью метода datablock () дескриптора данных, чтобы использовать дескриптор данных и блок данных для установки значения плагина и его очистки. Тем не менее я получил сообщение об ошибке «RuntimeError: (kFailure): неожиданный внутренний сбой» при использовании MDataHandle.datablock ().
Теперь я пытаюсь сделать следующее, используя дескриптор данных, чтобы установить значение плагина и очистить его:
def setPlugFloatValue(node, plugName, val):
fnSet = OpenMaya.MFnDependencyNode(node)
plug = fnSet.findPlug(plugName,True)
handle = plug.asMDataHandle()
handle.setFloat(val)
handle.setClean()
Вышеприведенная функция предназначена для поиска определенного плагина в узле, а затем с помощью его дескриптора данных установите его значение и очистите его. В моей программе обратный вызов использует эту функцию для изменения плагинов translateX, translateY и translateZ дочерних узлов узла. Обратный вызов выполняется, когда значение translate узла, к которому он применяется, изменяется. В сцене, которую я использую для проверки этого обратного вызова, я применяю обратный вызов к объекту с полигональной сеткой, с одним дочерним объектом, который также является объектом с полигональной сеткой. Поэтому, когда я перевожу родительский объект, я ожидаю, что значения translate его потомка изменятся. Но когда я выбираю дочерний объект после перевода его родителя, его значения перевода не изменились.