Передача переменных из 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:

    1. Чего вы пытаетесь достичь и как вы планируете это сделать?

    2. Закомментированный блок кода (примерно 10-15 строк - это хорошо и дает хороший обзор вашего скрипта mel)

    3. Каково ваше сообщение об ошибке

Надеюсь, это поможет.

Другие вопросы по тегам