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

MEL моделирование

Тема в разделе "Maya", создана пользователем Александр Чернега, 24 авг 2011.

Модераторы: Dark™, Skif
  1. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Добрый день.
    Начну с самых азов.

    1) Где в тексте скрипта ему дается имя и категория (если такое есть)

    В максскрипте это делается так:
    Код:
    macroScript X_key
    	category:"Chernega"
    ( скрипт)
    
    А то скачал репак скриптов Deniseich_0-1 от DRL, сложил в папку Script, запустил, и шо, куда, где они делись где появились (хотя возможно я не выполнил все инструкции).
    Скачал оригинальную сборку Deniseich_0-1, по прежнему ни чего не ясно, но у него создается меню Скрипт из которого можно все запускать.

    2) Как посадить загруженный скрипт на клавишу
    Сейчас я щелкаю по скрипту из меню с контролом и шифтор, потом отрываю его в шелле, на подвкладке команд копирую название, отрываю ноткей эдитор и категории юзар создаю новую команду.
    Может есть какой то более изящный способ.

    И вообще можно ли сделать так, что бы скрипт при загрузки Майи попадал в нужную категорию под нужным названием?
     
  2. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Это вопросы или уроки?))

    По 2 если это вопрос. :) Открываешь мел скрипт через блокнот ищешь там строку global proc (имя команды), копируеш имя и создаеш на шелфе кнопку и вставляеш туда это имя, либо на хоткий.

    Не понятно для чего это?
     
  3. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Видимо я не смог корректно выразить мысль.

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

    В майе же, как я теперь понимаю, создание команды для хоткея делается вручную.
    Спасибо за ответ.
     
  4. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Новый вопрос.
    Как сделать что бы переменная запоминала объекты, а не выделенные подобъекты.

    Поясю:
    Если при выделенных привимивах запустить код
    string $Sel[] = `ls -sl`;

    майна вернет
    // Result: pSphere1 pCube1 pCylinder1 //

    Если же у этих привитовов выделенны подобъекты, возващается (и записывается в массив)
    // Result: pSphere1.f[258] pCube1.vtx[3] pCylinder1.e[57] //

    И следовательно потом во время применения select $Sel; выделяются не сами объекты, а их подобъкты.
     
  5. VirtualV

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

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    ну можно было почитать справку команды ls, у него есть флаг например -geometry(-g) create List geometric Dag objects.
     
  6. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    2Александр Чернега если не секрет что за скрипт ты пишешь?)
     
  7. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    VirtualV флаг –geometry не подходит, так как он выделяет абсолютно все геометрические объекты в сцене, а нужно было записать в переменную только те которые подсвечены или на которых что то выделено.

    Нашел достаточно простое решение:
    Код:
    selectMode -co;
    selectMode -object;
    string $Sel [] = `ls -sl`
    Сперва сделал код без первой строчки, но в виду того что в майе почему то при переключении в подобъекты с помощью правой кнопки мыши и меню (а не F8; F9…), не переключается с режима объекта в режим компонентов (рис). Таким образом, первые две строчки нахально включают режим компонентов и выводят назад в режим объекта, при этом сбрасывая все выделение (если оно там было) и в переменную записываются выделенные объекты.

    iNOD Пока присматриваюсь что к чему и как действует. Конечная цель (пока что) сделать простенькие интерактивные кнопки с Маркинг меню (упрощенное Xumi). Завтра распишу по подробней

    Ps: Забыл прицепить рисунок, а в режиме редактирования сообщение его добавлять нельзя. Ну да и не страшно, думаю все поймут что имелось ввиду.
     
  8. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    ls -sl -o
    или так
    listRelatives -p
     
  9. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Dark спасибо. Предложенный вариант в три раза меньше моего :) (не 3 строчки, а 1).
    Странно, я пытался к команде ls применять два флага и у меня не получалось, может кавычки забывал поставить.
     
  10. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Итак, есть смысл написать какой скрипт хотелось бы видеть. Возможно, он уже у кого то есть, или кому то нечего делать и появится желание помочь. Вернее сказать, нужен не готовый скрипт, а основная его структура с возможностью в нужные места подставлять Майевские команды (инструменты)


    Основная идея:
    Допустим за основу берем кнопку "х"
    Скрипт распознает какого типа выбранный объект (причем именно объект целиком, а не подъобьекты), после чего при нажатии "х" выполняется команда.
    Создаю несколько Маркинг меню (для поли, нурбсов, сплайнов). Наполняю их соответствующими инструментами и действиями. Получаю (подскажите как) код вызова нужного маркинг меню. Вставляю его в скрипт.


    Как будет работать:
    При выборе Поли объекта и нажатия "х", будет открываться полигональное меню. Соответственно при выделение нурбсов, откроется нурбсовое.
    (Важно) Нужно что бы при выборе к примеру полигонов на одном объекте, и скажем на сплайне через правую кнопку мыши Контрол вертексов, отрывалось сплайновое Маркинг меню. То есть что бы меню соответствовало последнему выделенному объекту.
     
  11. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    И еще одно.
    Посмотрел мастер класс Дмитрия Остапковича (ускоряя Майю). Он там в разговоре о тройном переключателе обмолвился, что в этом коде можно использовать функцию двойного клика.

    И вот вопрос.
    Можно ли с помощью этой команды настроить так, что бы допустим при нажатии на Q включался СелектТоол, при нажатии + LMB отрывалось меню СелектТоол, а при двойном клике на Q активировалось лассо.
     
  12. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Нашел в скрипт эдиторе галочку Echo All Commands. Благодаря этому получил код вызова нужного маркинг меню. По большому счету теперь нужно добавить в скрипт проверку на тип объекта, и уже хоть как то можно будет им пользоваться.

    Что то вроде:

    // Пример условный и отображает суть моего понимания как должен работать этот скрипт. Большинство команд высосаны из пальца :)

    string $Selected[] = `ls -sl`

    if ($SelectedObjectType == Poly)
    {
    POLY_Menu _Press;
    if (`popupMenu -exists tempMM`) { deleteUI tempMM; }
    popupMenu -button 1 -ctl false -alt true -sh false -allowOptionBoxes true -parent viewPanes -mm 1 tempMM;
    source "menu_ POLY_Menu ";
    }

    if ($SelectedObjectType == Nurbs)
    {
    NURBS_Menu _Press;
    if (`popupMenu -exists tempMM`) { deleteUI tempMM; }
    popupMenu -button 1 -ctl false -alt true -sh false -allowOptionBoxes true -parent viewPanes -mm 1 tempMM;
    source "menu_ NURBS _Menu ";
    }

    А во второй скрипт бросить кучей все релис которые отдает скрипт эдитор:

    PA_Style_MMB_Release;
    if (`popupMenu -exists tempMM`) { deleteUI tempMM; };

    POLY_Menu _Release;
    if (`popupMenu -exists tempMM`) { deleteUI tempMM; };

    // Понятно что такой скрипт сможет работать только с одним выделенным объектом

    Просьба посмотреть код, посмеяться и направить меня на путь истинны.
     
  13. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Господа, вопрос опять касающийся установки скриптов в Майю.

    Скорее всего правильнее создавать текстовый файл с первой строчкой global proc + название, вписывать это название в userSetup.mel и потом опять же создавать новую команду в хоткей эдиторе с названием global proc. Но у меня почему то при создании собственного скрипта и проделования всех этих процедур, в конечном итоге когда запускаешь скрипт с клавиши, вылетает майа (2012). Скорее всего где то не поставил скобочку. Но в скрипт эдиторе этот код проходит нормально и не выдает ошибки. И так же, если в хоткей эдиторе создавать новую команду и туда лупануть весь код, тоже работает.

    Вопрос:
    Если некоторые скрипты заливать непосредственно в Хоткей эдитор в поле Коммандс, не возникнет ли потом каких то непредвиденных глюков?
     
  14. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Когда создаешь скрипт то делай так.

    global proc nameProc()
    {

    //твой код

    }

    За тем сохраняешь скрипт например называешь test.mel и копируешь его в C:\Documents and Settings\Admin\Мои документы\maya\2011\scripts

    За тем запускаешь маю и прописуешь внизу nameProc; обводишь там зажимаешь колесико мышки и тянешь на шелф и отпускаешь.

    И вуаля :)
     
  15. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    А если ты маньяк хот киев то просто создаешь новую команду в хоткий эдиторе и прописуешь там nameProc;

    И тоже вуаля :)
     
  16. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Спасибо за объяснения, общую идею я понял, но к сожалению все равно не получается.

    Вот такой вот скрипт (замена стандартного ctrl + Space):

    Код:
    global proc Toggle_UIE_lements() 
    { 
    
    toggleAllMainWindowComponentsVisible;
    
    if (`isUIComponentVisible("Command Line")`==0) { 
     toggleUIComponentVisibility "Command Line";
    
         if (`isUIComponentVisible("Channel Box / Layer Editor")`==0)
         { 
         toggleUIComponentVisibility "Channel Box / Layer Editor";
         }
    
     setMainMenubarVisible 0; 
     toggleMenuBarsInAllPanels 0; 
     updateMainWindowComponentState(); 
     } 
    
    else { 
    if (`isUIComponentVisible("Tool Settings")`==1) { 
     toggleUIComponentVisibility "Tool Settings";
    
          if (`isUIComponentVisible("Channel Box / Layer Editor")`==0)
         { 
         toggleUIComponentVisibility "Channel Box / Layer Editor";
    
         }
                   if (`isUIComponentVisible("Attribute Editor")`==1)
             { 
             toggleUIComponentVisibility "Attribute Editor";
             }
    
     setMainMenubarVisible 1; 
     toggleMenuBarsInAllPanels 1; 
     }
    }
    }
    В таком виде помещаю его в папку скриптов. Цепляю на кнопку Toggle_UIE_lements(), и при первом же нажатии вылетает программа. Думал может 2012 глуканутая, но тоже происходит и в 2011.
    А вот если это код (без global proc и первых и последних скобок) поместить в поле комманд в хоткей эдиторе работает великолепно.

    Ps: Я понимаю что такой количество if в коде не совсем корректно, но свое дело делает. Так что можно пользоваться.
     
  17. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Я попробовал твой скрипт только немного подредактировал.


    Код:
    global proc tUi()
    {
    toggleAllMainWindowComponentsVisible;
    if (`isUIComponentVisible("Command Line")`==0) 
        {
        toggleUIComponentVisibility "Command Line";
        if (`isUIComponentVisible("Channel Box / Layer Editor")`==0)
            {
            toggleUIComponentVisibility "Channel Box / Layer Editor";
            }
        setMainMenubarVisible 0;
        toggleMenuBarsInAllPanels 0;
        updateMainWindowComponentState();
        }
    else
        {
        if (`isUIComponentVisible("Tool Settings")`==1)
            {
            toggleUIComponentVisibility "Tool Settings";
            if (`isUIComponentVisible("Channel Box / Layer Editor")`==0)
                {
                toggleUIComponentVisibility "Channel Box / Layer Editor";
                }
            if (`isUIComponentVisible("Attribute Editor")`==1)
                {
                toggleUIComponentVisibility "Attribute Editor";
                }
            setMainMenubarVisible 1;
            toggleMenuBarsInAllPanels 1;
            }
        }
    }
    
    Как видно я назвал процедуру tUi что б меньше писать :)
    За тем я сохранил как tUi.mel и поместил в C:\Documents and Settings\Admin\Мои документы\maya\2011\scripts
    Создал по быстрому на шелфе кнопку и перезагрузил маю, все работает :)
     
  18. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Кстате мне твоя задумка понравилась, могу добавить свой скрипт на измениние вида front side left back bottom top persp по одной кнопке.
    И еще нужно вешать не "tUi()" а "tUi;"
     
  19. VARVAR13

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

    С нами с:
    29.12.2010
    Сообщения:
    80
    Симпатии:
    3
    Баллы:
    9
    а в скрипте есть один мааааленький бок,
    Командами setMainMenubarVisible 0; и toggleMenuBarsInAllPanels 0; вы выключаете меню всех окон, а при повторном запуске команды возврата назад нет, и нужно возврвщать нажатием ctrl+m и shift+m...
     
  20. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Внимательно смотри на скрипт. Перед тремя заключительными скобками, две строчки.
     
Модераторы: Dark™, Skif

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