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

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

Тема в разделе "Maya", создана пользователем Viktor Novicenko, 18 янв 2011.

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

    Viktor Novicenko Знаток

    С нами с:
    27.11.2007
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    31
    Вопшем дело такое, берем полигональный объект, заходим в режим редактирования фейсов, помечаем любой фейс, открываем настройки манипулятора 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"? Почему её нету в стандартной майской документацие? Почему выдается ошибка, если в скрипт едиторе воспроизвести данный набор команд?
    И вопшем проблема такая, написал скрипт, который "что-то" делает с каждым вторым фейсом, из всех выделенных. Так вот это "что-то" хочу чтоб он маштабировал фейсы, когда оси маипулятора лежат на самой плоскости фейса.
    Надеюсь ясно обяснил проблему.
     
  2. minstrel

    minstrel Знаток

    С нами с:
    10.01.2009
    Сообщения:
    120
    Симпатии:
    1
    Баллы:
    26
    Во-первых, существует не так мало команд, по которым нет стандартной документации. Одна из причин - эта команда описана как локальная. Попробуй запустить: "whatIs имя_команды". Выведется имя файла, где она описана.

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

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Думаю, это не команда, а процедура или функция. Поищите в скриптах, которые находятся в директории установки пакета.
     
  4. Viktor Novicenko

    Viktor Novicenko Знаток

    С нами с:
    27.11.2007
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    31
    Да, теперь убедился в этом.

    Да, нашел, процедура находится в скрипте "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") числа? Как он их расщитывает?
     

    Вложения:

    • 2121482.jpg
      2121482.jpg
      Размер файла:
      204 КБ
      Просмотров:
      96
  5. minstrel

    minstrel Знаток

    С нами с:
    10.01.2009
    Сообщения:
    120
    Симпатии:
    1
    Баллы:
    26
    Это записано в самом манипуляторе, в его коде.
    Основная сложность в твоей задаче состоит в нахождении вектора, по которому надо производить скалирование фейса.
    На мой взгляд, тебе нужно получить какую-нибудь вершину полигона, высчитать касательную к вершине и таким образом получить нужный вектор для конкретного фейса. Надеюсь, понятно объяснил. Этот способ годится только для меша, показанного на рисунке.
     
  6. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    --------------------------------------------------------------
    Интересно, как это вы нашли процедуру с помощю whatIs?
     
  7. Viktor Novicenko

    Viktor Novicenko Знаток

    С нами с:
    27.11.2007
    Сообщения:
    89
    Симпатии:
    0
    Баллы:
    31
    Елти просто вписать 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 //
     
  8. Prostrelov

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

    С нами с:
    08.05.2014
    Сообщения:
    33
    Симпатии:
    0
    Баллы:
    5
    Код:
        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]
    спасибо разобрался сам
     
  9. Покатигорошек

    Покатигорошек Активный участник

    С нами с:
    09.12.2005
    Сообщения:
    232
    Симпатии:
    3
    Баллы:
    15
    а вердикт будет?..)
     
  10. Prostrelov

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

    С нами с:
    08.05.2014
    Сообщения:
    33
    Симпатии:
    0
    Баллы:
    5
    stringArrayToString преобразовывает список в строку добавляя указанный разделитель
    в качестве разделителя использованы символы ", " в реузльтате получается строка
    bob", "bab", "bib
    поэтому вначале {} так же стоят экранированные ковычки
    что бы конечная строка имела вид
    "bob", "bab", "bib"
    с ходу не вспомню что там в результате передавалось строка или список из строк
    но суть всё это экранирования.
     
  11. Покатигорошек

    Покатигорошек Активный участник

    С нами с:
    09.12.2005
    Сообщения:
    232
    Симпатии:
    3
    Баллы:
    15
    а вот тебе мой вердикт:
    Код:
    whatIs stringArrayToString;
    // Mel procedure found in: C:/Program Files/Autodesk/Maya2014/scripts/others/stringArrayToString.mel // 
     
  12. Prostrelov

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

    С нами с:
    08.05.2014
    Сообщения:
    33
    Симпатии:
    0
    Баллы:
    5
    там есть ряд др ф-й из внешних модулей.
     
Модераторы: Dark™, Skif

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