Render.ru

MEL+Expressions

DEL

Активный участник
Рейтинг
15
#1
Привет!
Как сделать так, что бы полученое значение в МЕЛ использовать в выражении.
пример :

proc test()
{


sphere;
move -r 0 3 7;

float $num = `getAttr nurbsSphere1.translateY`;

polyCube;

expression -s "pCube1.translateY = $num;" -o "" -ae 1 -uc all ;

}

Значение полученое с помощю getAttr надо назнахчить pCube1. Знаю, что данную задачу можно решить другим способом, но мне нужно именно так.
 

alex_alv

Активный участник
Рейтинг
11
#2
expression -s ("pCube1.translateY = "+$num+";") -o "" -ae 1 -uc all ;

может быть это имеется в виду?

Либо вариант и в MEL и в expression переменную объявить глобальной:

...
global float $num =...
...
expression -s "global float $num;\npCube1.translateY = $num;" -o "" -ae 1 -uc all ;
 

DEL

Активный участник
Рейтинг
15
#3
Спасибо, думаю первый вариан подходит. При втором варианте мая ругается - глобальная переменная требует постянное значение.
 

DEL

Активный участник
Рейтинг
15
#4
alex_alv

Обясните пожалуйста почему надо написть именно так - заключить выражение в скобки а переменную в кавычки с ++ми ? Безусловно, мойкод заработал, но я не хочу делать что то тупо повторяя написанное.
 

alex_alv

Активный участник
Рейтинг
11
#5
expression - это MEL-команда, которая создает или модифицирует экспрешн.
О параметрах подробно написано в документации Maya
Одним из параметров (после ключа -s) является строковыый параметр, содержащий тескт экспрешна.
Как известно, строки можно складывать.
Т. е. "1234"+" 5678" тоже самое, что "1234 5678".
Так как к строке можно прибавлять только строку, то если к строке прибавить числвую переменную, произойдет автоматическое преобразование типов (число будет преобразовано в строку). Т. е. если, например, $num равен 4,запись "pCube1.translateY = "+$num+";" равносильна записи "pCube1.translateY = 4;".

В скобки данную конструкцию необходимо заключать из-за синтаксического анализатора MEL-команд. Вызов может expression может быть осуществлен двумя способами - передача параметров через запятую в скобках, или передача параметров через разделители без скобок.

В первом случае, вызов может выглядеть так:
expression("-s","pCube1.translateY = "+$num+";", ...);

Вы пользуетесь вторым способом. Во втором способе символ "+", как я понял, воспринимается как разделитель и все, что после него воспринимается маей как следующий параметр. Чтобы этого не происходило, параметр необходимо заключить в скобки.

Для большей понятности, можно переписать все это следующим образом:

string $exprbody;
$exprbody="pCube1.translateY = ";
$exprbody+=$num;
$exprbody+=";";
expression -s $exprbody -o "" -ae 1 -uc all ;
 
Сверху