Render.ru

MEL команда "manipScaleAlignHandleWith" нет в документации

Рейтинг
36
#1
Вопшем дело такое, берем полигональный объект, заходим в режим редактирования фейсов, помечаем любой фейс, открываем настройки манипулятора scale, в разделе "scale axes" жмем на кнопку "set to face" и выбираем тотже фейс (тогда оси маипулятора ориентируются по заданому фейсу). Теперь смотрим в скрипт едитор. Выдаёт что-то вроде:
select -r pPipe1.f[430] ;
{ string $Selection1[]; $Selection1[0] = "pPipe1.f[430]";
manipScaleAlignHandleWith($Selection1[0], {"pPipe1.f[430]"});; };
pPipe1.f[430]

Внимание вопрос: что делает команда "manipScaleAlignHandleWith"? Почему её нету в стандартной майской документацие? Почему выдается ошибка, если в скрипт едиторе воспроизвести данный набор команд?
И вопшем проблема такая, написал скрипт, который "что-то" делает с каждым вторым фейсом, из всех выделенных. Так вот это "что-то" хочу чтоб он маштабировал фейсы, когда оси маипулятора лежат на самой плоскости фейса.
Надеюсь ясно обяснил проблему.
 
Рейтинг
23
#2
Во-первых, существует не так мало команд, по которым нет стандартной документации. Одна из причин - эта команда описана как локальная. Попробуй запустить: "whatIs имя_команды". Выведется имя файла, где она описана.

Во-вторых, задача у тебя очень странная. По-хорошему, тебе ее надо переформулировать в вид: масштабировать каждый второй выделенный фейс в плоскости самого фейса. Манипулятор тут ни к чему- это всего лишь визуальная хрень.
Я правильно тебя понял?
 

DEL

Активный участник
Рейтинг
15
#3
Думаю, это не команда, а процедура или функция. Поищите в скриптах, которые находятся в директории установки пакета.
 
Рейтинг
36
#4
Манипулятор тут ни к чему- это всего лишь визуальная хрень.
Да, теперь убедился в этом.

Попробуй запустить: "whatIs имя_команды".
Да, нашел, процедура находится в скрипте "manipScaleOrient.mel".

По-хорошему, тебе ее надо переформулировать в вид:
У меня есть полигональное кольцо. Каждый второй полик на внешней окружности хочу увеличить (см. рис. выделенные полики увеличины вручную) по направлению плоскости полика. Когда я их маштабирую (предварительно манипулятор ориентировав в плоскости полика) скрипт едитор выдает команду:
scale -oa 0rad 0.726493rad 0rad -r -p 9.413178cm 0.714451cm -5.165894cm 1 1 1.593862 ;

Так откуда он берет эти("rad 0.726493rad 0rad" и "9.413178cm 0.714451cm -5.165894cm") числа? Как он их расщитывает?
 

Вложения

Рейтинг
23
#5
Так откуда он берет эти("rad 0.726493rad 0rad" и "9.413178cm 0.714451cm -5.165894cm") числа? Как он их расщитывает?
Это записано в самом манипуляторе, в его коде.
Основная сложность в твоей задаче состоит в нахождении вектора, по которому надо производить скалирование фейса.
На мой взгляд, тебе нужно получить какую-нибудь вершину полигона, высчитать касательную к вершине и таким образом получить нужный вектор для конкретного фейса. Надеюсь, понятно объяснил. Этот способ годится только для меша, показанного на рисунке.
 

DEL

Активный участник
Рейтинг
15
#6
Рейтинг
36
#7
Интересно, как это вы нашли процедуру с помощю whatIs?
Елти просто вписать whatIs то ненаходит, но если сначала воспользоваться этой процедурой, то тогда уже находит:

whatIs manipScaleAlignHandleWith;
// Unknown //

CreatePolygonPipe;
setToolTo CreatePolyPipeCtx;
setAttr "polyPipe1.thickness" 1.1;
polyPipe -ch on -o on -r 4.681525 -h 6.646362 -t 1.1 ;
// pPipe1 polyPipe1 //
select -r pPipe1.f[58] ;
{ string $Selection1[]; $Selection1[0] = "pPipe1.f[58]";
manipScaleAlignHandleWith($Selection1[0], {"pPipe1.f[58]"});; };
pPipe1.f[58]
whatIs manipScaleAlignHandleWith;
// Result: Mel procedure found in: C:/Program Files/Autodesk/Maya2011/scripts/others/manipScaleOrient.mel //
 

Prostrelov

Активный участник
Рейтинг
5
#8
Код:
    string $cmd = "manipMoveAlignHandleWith($Selection1[0], {\"";
    $cmd += stringArrayToString($currentSelection, "\", \"");
    $cmd += "\"});";
не могу понять эти строки.
здесь использованы какие-то декораторы ?
{\""; - что это ?
\""); - это ?
"\"});"; - это ?

я так понимаю это некая единая строка кода, записанная в три строки и теоритически она должна выглядеть след образом:
string $cmd = manipMoveAlignHandleWith($Selection1[0], {\" stringArrayToString($currentSelection, "\", \"") \"});

которая если убрать декораторы выглядит так:
string $cmd = manipMoveAlignHandleWith($Selection1[0], {" stringArrayToString($currentSelection, "\", "") "});

[2014.08.04]
спасибо разобрался сам
 

Prostrelov

Активный участник
Рейтинг
5
#10
stringArrayToString преобразовывает список в строку добавляя указанный разделитель
в качестве разделителя использованы символы ", " в реузльтате получается строка
bob", "bab", "bib
поэтому вначале {} так же стоят экранированные ковычки
что бы конечная строка имела вид
"bob", "bab", "bib"
с ходу не вспомню что там в результате передавалось строка или список из строк
но суть всё это экранирования.
 
Сверху