Передача переменных из MEL в выражение MAYA
У меня есть небольшая путаница относительно того, почему то, что письмо не работает. в моем редакторе сценариев MEL я пишу
string $Adistance = ("distanceDimensionShape1"+".distance");
expression -s (" $Bdistance = $Adistance; joint2.scaleX = $distance");
но я получаю эту ошибку
// Warning: line 1: Converting string "distanceDimensionShape1.distance" to a float value of 0. //
- Я хочу, чтобы joint2.scaleX скопировал distanceDimensionShape1.distance float
2 ответа
Если вы хотите создать выражение один раз, а затем изменить то, что с ним связано, создайте его следующим образом:
expression -s ("joint2.scaleX = .I[0]")
Затем вы можете подключить определенный атрибут к этому плагину следующим образом:
connectAttr distanceDimensionShape1.distance expression1.input[0]
Предполагается, что есть законная причина, по которой вы не можете просто написать выражение один раз:
expression -s ("joint2.scaleX = distanceDimensionShape1.distance")
Итак, во-первых, я не программист на Mel, обычно я делаю свой скрипт на Python, поэтому в моем коде могут быть синтаксические ошибки.
Твоя проблема:
Поправьте меня, если я ошибаюсь, но я думаю, что вы пытаетесь получить distance
атрибут distanceDimensionShape1
в переменную и установите его в scaleX
атрибут из joint2
,
Ваш код:
string $Adistance = ("distanceDimensionShape1"+".distance");
expression -s (" $Bdistance = $Adistance; joint2.scaleX = $distance");
Что вы делаете в первой строке: вы объявляете строковую переменную, содержащую "distanceDimensionShape1.distance"
, не получая distance
атрибут distanceDimensionShape1
Что вы должны делать в первой строке: используйте команду getAttr, предоставленную в maya docs для получения атрибута вашей фигуры.
Что вы делаете во второй строке: вы пытаетесь установить joint2.scaleX
который является значением с плавающей точкой со строковым значением. Я думаю... потому что я не знаю что $distance
как это появляется только здесь, в вашем коде.
Что вы должны делать во второй строке: используйте setAttr для правильной установки вашего атрибута.
Мое решение:
Я надеюсь, что это поможет, поскольку у нас мало информации о вашей текущей проблеме:
float $Adistance = `getAttr distanceDimensionShape1.distance`;
setAttr joint2.scaleX $Adistance;
1-я строка правильно выбирает выбранные атрибуты и сохраняет их в float
, 2-я строка устанавливает ваш атрибут с полученным значением.
Замечания:
- Вы можете посмотреть, какие методы вызываются при выполнении манипуляций в Maya, открыв редактор скриптов и проверив
History > Echo All Commands
, Таким образом, вы сможете воспроизвести поведение Майи. - Всегда имейте интернет-браузер, указывающий на документацию Maya Mel/Python при написании сценариев: ссылка
Попытайтесь развить больше, отправляя вопрос на SO:
Чего вы пытаетесь достичь и как вы планируете это сделать?
Закомментированный блок кода (примерно 10-15 строк - это хорошо и дает хороший обзор вашего скрипта mel)
Каково ваше сообщение об ошибке
Надеюсь, это поможет.