Render.ru

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

Рейтинг
47
#1
Добрый день.
Начну с самых азов.

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

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

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

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

iNOD

Активный участник
Рейтинг
18
#2
1) Где в тексте скрипта ему дается имя и категория (если такое есть)
2) Как посадить загруженный скрипт на клавишу
Это вопросы или уроки?))

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

И вообще можно ли сделать так, что бы скрипт при загрузки Майи попадал в нужную категорию под нужным названием?
Не понятно для чего это?
 
Рейтинг
47
#3
Видимо я не смог корректно выразить мысль.

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

В майе же, как я теперь понимаю, создание команды для хоткея делается вручную.
Спасибо за ответ.
 
Рейтинг
47
#4
Новый вопрос.
Как сделать что бы переменная запоминала объекты, а не выделенные подобъекты.

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

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

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

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

О С (VirtualV)

Активный участник
Рейтинг
5
#5
ну можно было почитать справку команды ls, у него есть флаг например -geometry(-g) create List geometric Dag objects.
 

iNOD

Активный участник
Рейтинг
18
#6
2Александр Чернега если не секрет что за скрипт ты пишешь?)
 
Рейтинг
47
#7
VirtualV флаг –geometry не подходит, так как он выделяет абсолютно все геометрические объекты в сцене, а нужно было записать в переменную только те которые подсвечены или на которых что то выделено.

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

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

Ps: Забыл прицепить рисунок, а в режиме редактирования сообщение его добавлять нельзя. Ну да и не страшно, думаю все поймут что имелось ввиду.
 
Рейтинг
47
#9
Dark спасибо. Предложенный вариант в три раза меньше моего :) (не 3 строчки, а 1).
Странно, я пытался к команде ls применять два флага и у меня не получалось, может кавычки забывал поставить.
 
Рейтинг
47
#10
Итак, есть смысл написать какой скрипт хотелось бы видеть. Возможно, он уже у кого то есть, или кому то нечего делать и появится желание помочь. Вернее сказать, нужен не готовый скрипт, а основная его структура с возможностью в нужные места подставлять Майевские команды (инструменты)


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


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

И вот вопрос.
Можно ли с помощью этой команды настроить так, что бы допустим при нажатии на Q включался СелектТоол, при нажатии + LMB отрывалось меню СелектТоол, а при двойном клике на Q активировалось лассо.
 
Рейтинг
47
#12
Нашел в скрипт эдиторе галочку 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; };

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

Просьба посмотреть код, посмеяться и направить меня на путь истинны.
 
Рейтинг
47
#13
Господа, вопрос опять касающийся установки скриптов в Майю.

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

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

iNOD

Активный участник
Рейтинг
18
#14
Когда создаешь скрипт то делай так.

global proc nameProc()
{

//твой код

}

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

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

И вуаля :)
 

iNOD

Активный участник
Рейтинг
18
#15
А если ты маньяк хот киев то просто создаешь новую команду в хоткий эдиторе и прописуешь там nameProc;

И тоже вуаля :)
 
Рейтинг
47
#16
Спасибо за объяснения, общую идею я понял, но к сожалению все равно не получается.

Вот такой вот скрипт (замена стандартного 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 в коде не совсем корректно, но свое дело делает. Так что можно пользоваться.
 

iNOD

Активный участник
Рейтинг
18
#17
Я попробовал твой скрипт только немного подредактировал.


Код:
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
Создал по быстрому на шелфе кнопку и перезагрузил маю, все работает :)
 

iNOD

Активный участник
Рейтинг
18
#18
Кстате мне твоя задумка понравилась, могу добавить свой скрипт на измениние вида front side left back bottom top persp по одной кнопке.
И еще нужно вешать не "tUi()" а "tUi;"
 

VARVAR13

Активный участник
Рейтинг
8
#19
а в скрипте есть один мааааленький бок,
Командами setMainMenubarVisible 0; и toggleMenuBarsInAllPanels 0; вы выключаете меню всех окон, а при повторном запуске команды возврата назад нет, и нужно возврвщать нажатием ctrl+m и shift+m...
 
Сверху