1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

MEL+Expressions

Тема в разделе "Maya", создана пользователем DEL, 9 фев 2009.

Модераторы: Dark™, Skif
  1. DEL

    DEL Активный участник

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Привет!
    Как сделать так, что бы полученое значение в МЕЛ использовать в выражении.
    пример :

    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. Знаю, что данную задачу можно решить другим способом, но мне нужно именно так.
     
  2. alex_alv

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    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 ;
     
  3. DEL

    DEL Активный участник

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Спасибо, думаю первый вариан подходит. При втором варианте мая ругается - глобальная переменная требует постянное значение.
     
  4. DEL

    DEL Активный участник

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    alex_alv

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

    alex_alv Активный участник

    С нами с:
    23.04.2008
    Сообщения:
    150
    Симпатии:
    0
    Баллы:
    14
    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 ;
     
  6. DEL

    DEL Активный участник

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Ясно, спасибо за столь детальное обьяснение.
     
Модераторы: Dark™, Skif

Поделиться этой страницей