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

Скрипты,настройки и вопросы.

Тема в разделе "Maya", создана пользователем Слава Подчуфаров 40220, 15 сен 2008.

Модераторы: Dark™, Skif
  1. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    Скрипты,настройки и вопросы.


    Добрый день!!!
    Хочу разместить здесь некоторые свои скрипты и настройки Maya.
    Для меня они очень удобны, возможно и вам пригодятся.От вас мне интересно услышать предложения по их модернизации,свои варианты настроек и ,возможно, спасибы:)).

    Так же по ходу дела будут возникать вопросы.У меня, например уже есть довольно длинный списочек.
    Если можете - ответьте,если я найду ответы - выложу.
    Если у вас есть вопросы - спрашивайте.Я не супер-профи(то есть я вообще пока не профи))),но постараюсь ответить.






    Когда нажимаешь правой кнопкой мыши во вьюпорте,возникает маленькая маркинг менюшка:CompleteTool и SelectAll.
    Вы часто ей пользуетесь?
    Я - нет.
    Что-бы это исправить делаем следующее:
    Создаём два маркинг меню,лезем в C:\Documents and Settings\UserName(имя польз.)\My Documents\maya\8.0\prefs\markingMenus,открываем файлы с их названиями и копируем оттуда весь текст.
    В папке C:\Documents and Settings\UserName(имя польз.)\My Documents\maya\scripts создаём MEL файл с именем buildObjectMenuItemsNow и вставляем в него этот текст(это просто чуть чуть изменённый майский скрипт "buildObjectMenuItemsNow"):


    global proc buildObjectMenuItemsNow( string $parentName)
    {
    global int $gIsMarkingMenuOn;

    if (`popupMenu -e -exists $parentName`) {
    popupMenu -e -deleteAllItems $parentName;
    if (`popupMenu -q -mm $parentName` != $gIsMarkingMenuOn) {
    deleteUI {$parentName};
    popupMenu -e -mm $gIsMarkingMenuOn $parentName;
    }}






    if (size(`ls -sl`)==0&&(`selectMode -q -o`)) {if (`popupMenu -e -exists $parentName`) {
    popupMenu -e -deleteAllItems $parentName;
    if (`popupMenu -q -mm $parentName` != $gIsMarkingMenuOn) {
    popupMenu -e -mm $gIsMarkingMenuOn $parentName;
    deleteUI {$parentName};
    }}




    setParent -menu $parentName;


    //Сюда вставляем текст первого марк.меню(для вьюпорта)



    setParent ..;
    }
    else
    {if (`popupMenu -e -exists $parentName`) {
    popupMenu -e -deleteAllItems $parentName;
    if (`popupMenu -q -mm $parentName` != $gIsMarkingMenuOn) {
    popupMenu -e -mm $gIsMarkingMenuOn $parentName;
    deleteUI {$parentName};
    }}
    setParent -menu $parentName;



    //А сюда текст для второго марк.меню(для тыка на обьекте)


    setParent -m ..;


    }
    }




    Удаляем абзацы начинающиеся со слов -label "ELFdefaultMenuItem" (Почему-то пишет что кнопки с настройками(квадратиками) в это меню нельзя.Кто знает почему и как это исправить - пишите).

    Теперь при нажатии RMB во вьюпорте появляется удобное маркинг меню для открытия наиболее часто используемых окон(у меня),а если
    ткнуть на обьекте - появится набор инструментов для моделирования(тоже у меня,Вы можете настроить что-нибудь другое)).Ура!!!
    P.S.Что-бы всё работало как прежде - надо просто удалить или переименовать этот файл.




    Перейдя с макса на Маю я долго скучал по хорошей возможности -"сохранению" выделения.То есть выделил вершины,подредактировал рёбра,проэкструдил полики, и вернулся к ранее выделенным вершинам.
    Позавчера реализовал эту очень удобную возможность в Мае(честно говоря-это был мой первый собственноручно написанный скрипт))).

    Значит так.
    В хоткей эдиторе,в категории User создаём хоткеи для режимов выделения:
    Name:Vert_Sel
    Command:
    setSelectMode components Components; selectType -smp 1 -sme 0 -smf 0 -smu 0 -pv 1 -pe 0 -pf 0 -puv 0;
    global string $LastVert[];
    global string $LastEdge[];
    global string $LastFace[];
    global string $LastObj[];
    global int $LastComp;
    if ($LastComp==4) $LastFace=(`ls -sl`);else
    if ($LastComp==3) $LastEdge=`ls -sl`;else
    if ($LastComp==2) $LastVert=`ls -sl`;else
    if ($LastComp==1) $LastObj=`ls -hl`;
    select -cl;
    if (`size $LastVert`>0) select $LastVert;
    $LastComp=2;
    print $LastVert;
    print $LastEdge;
    print $LastComp;

    Name:Edge_Sel
    Command:
    if ($LastComp==4) $LastFace=(`ls -sl`);else
    if ($LastComp==3) $LastEdge=`ls -sl`;else
    if ($LastComp==2) $LastVert=`ls -sl`;else
    if ($LastComp==1) $LastObj=`ls -hl`;
    select -cl;
    if (`size $LastEdge`>0) select $LastEdge;
    $LastComp=3;
    print $LastVert;
    print $LastEdge;
    print $LastComp;

    Name:Face_Sel
    Command:
    if ($LastComp==3) $LastEdge=`ls -sl`;else
    if ($LastComp==2) $LastVert=`ls -sl`;else
    if ($LastComp==1) $LastObj=`ls -hl`;
    select -cl;
    if (`size $LastFace`>0) select $LastFace;
    $LastComp=4;
    print $LastVert;
    print $LastEdge;
    print $LastComp;

    Name:Obj_Sel
    Command:
    if ($LastComp==1) $LastObj=`ls -hl`;
    select -cl;changeSelectMode -object;
    if (`size $LastObj`>0) select $LastObj;
    $LastComp=1;
    print $LastVert;
    print $LastEdge;
    print $LastComp;

    Вешаем их на удобные клавиши(у меня это не F8-F11,а 1,2,3,4),нажимаем Save, и всё работает(Это самый приятный момент.Знаете,как я обрадовался?)))!!!

    А вот пример "липкого" хоткея (всем рекомендую сборник мастерклассов "Maya F1",скрипт оттуда):
    Name:Stickey_q_press
    Command:
    global string $Stickey_Ctx;
    $Stickey_Ctx=`currentCtx`;

    global string $Stickey_Sel[];
    $Stickey_Sel=`ls -sl`;

    global string $Stickey_HL[];
    $Stickey_HL=`ls -hl`;

    setToolTo polySplitContext;

    Name:Stickey_q_release
    Command:
    global string $Stickey_Ctx;
    global string $Stickey_Sel[];
    global string $Stickey_HL[];
    setToolTo $Stickey_Ctx;
    select $Stickey_Sel;
    hilite $Stickey_HL;
    if (`size $Stickey_HL`>0)
    changeSelectMode -component;

    Теперь выделяем обьект,жмём на "q",сплитим нашу модельку,отпускаем.Моделька разрезалась!(Обалдеть!Это тоже работает!Сразу чувствуешь себя таким умным-умным:))))



    А теперь вопросы:
    Где в Мае аналог максовскому Cap и Bridge для полигонов.Или как их сделать.
    Способы Определения и "назначения" положения курсора.
    У меня на мыши 5 кнопок,а использую только три основных.Как узнать названия для остальных двух?

    И чуть-чуть не в тему(не создавать же для этого вопроса отдельный форум.А узнать ответ интересно):
    Графические планшеты делают в виде чувствительной к нажатию "доски"(не знаю как она называется) и "ручки".Скажите, почему нельзя сделать просто мышь в виде ручки? И удобнее,и рисовать такой можно где угодно,и,наверное,дешевле.
    Уже который день мучаюсь:))) Может пора бежать в патентное бюро и начать делать состояние на этом гениальном изобритении? :)))))))



    У-ф-ф! Вроде всё написал!Слава Богу! :)))
     
  2. Fabis

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

    С нами с:
    26.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Баллы:
    16
    Насчет сохранения выделения есть скрипт на highend3d.
    Насчет Cap в максе - давно с нее перешел, поэтому не помню что за инструмент, а Bridge - в меню Polygons>Edit mesh>Bridge.
    Насчет планшета - очень важно чтобы вес пера был наименьшим, я вес пера wacoma после нескольких часов работы не чувствую - это самое главное. То есть само перо выполнено крайне просто, без питания. Все основное - в планшете. Плюс ко всему оптическая мышь не распознает угол наклона. Сами представьте, надо сделать наконечник одновременно пропускающий луч для определения перемещения и улавливающий уровни нажатия, также систему уровня по двум осям (наклон пера), так еще чтоб это все было беспроводным и максимально легким - такая вещь несомненно удобна, так как не ограничена форматами (А4, А3 и т.д.) Но раньше, я думаю, удобнее было начинать с простого и относительно дешевого варианта - планшета, также наверняка есть маркетинговый ход - человек видит за что платит (формат А3, скажем). А сейчас наверно это не супер новинка, учитывая что уже есть планшетные мониторы. Хотя кто знает, может и будет такая штука востребована, может - нет.
     
  3. DLCool

    DLCool Знаток

    С нами с:
    08.07.2000
    Сообщения:
    85
    Симпатии:
    0
    Баллы:
    25
    Мышки в виде ручки существуют у "Genius". Они идут в комплекте с "доской", но она не функциональна в относительном режиме(только кнопки на нее выведены разные и размечена она всячески + в комплекте линейки и лекала). Удобна для чертежников. Не реагирует на нажатие и наклон.
     
  4. imha

    imha Знаток

    С нами с:
    04.07.2007
    Сообщения:
    166
    Симпатии:
    0
    Баллы:
    21
    а на счет скриптов для удобства, тема то интересная!
    афтор пеши исчё!
     
  5. Слава Подчуфаров 35702

    Слава Подчуфаров 35702 Пользователь сайта

    С нами с:
    05.02.2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Cap - это когда выделяешь border edge , тыкаешь на кнопку, и по ним создаётся один полигон.Впрочем штука не очень нужная, я так, из любопытства спросил.
    А про этот Bridge я знаю.Там надо border edge выделять.А я хочу:выделил полики,нажал на кнопку и bridge построился.
    Или так можно, а я просто ступил с настройками?

    Чёрт! Обломалась моя идея стать мультимиллионером:)))

    Да я вроде всё что есть написал.Доделаю работу на конкурс - попробую нормальный бридж сделать. И ещё хочу сделать так чтобы когда наводишь мышь на верхюю границу экрана она перескакивала на нижнюю.Как в максе при изменении параметров.Для этого буду разбираться с положением курсора.

    Если есть идеи - пишите, попробую реализовать.Предлагайте свои варианты.

    2All: Кто-нибудь знает как переназначать глобальные переменные?То-есть например был интежер, а надо сделсть стринг.
     
  6. Fabis

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

    С нами с:
    26.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Баллы:
    16
    А, ну значит аналог Cap - это Fill Hole в Майе, а по поводу Bridge, то какая разница что выделять, полигоны или края. Принцип построения одинаков.
     
  7. Dark™ vip

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

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    Всмысле?
     
  8. imha

    imha Знаток

    С нами с:
    04.07.2007
    Сообщения:
    166
    Симпатии:
    0
    Баллы:
    21
    2 Fabis только в максе кэпится любой замкнутый контур(если я не ошипся), а в мае только те замкнутые контуры, вершины которых лежат в одной плоскости.

    кстати на счет первого скрипта.
    я вот часто ей пользуюсь например)) перепрыгиваю в режимы точечек, эджей, изопарм и т.д....

    а нельзя ли этот скрип модифицировать, чтоб не убирать уже имеющееся меню, а лишь добавить то, что ты предлагаешь?
     
  9. Fabis

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

    С нами с:
    26.10.2006
    Сообщения:
    454
    Симпатии:
    0
    Баллы:
    16
    Только что проверил - закрывается полигоном любой контур. в том числе и с вершинами не в одной плоскости.

    Это когда правой кнопкой по объекту такое меню возникает. Автор видимо заместил меню ПКМ на пустом пространстве окна.
     
  10. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    В скрипте сохранения выделения обнаружил небольшой баг.Что-бы исправить мне надо научиться удалять глобальные переменные.

    В представленном скрипте я заменил оба меню.
    В майском скрипте "buildObjectMenuItemsNow", находящемся в /maya/scripts/others оператор if переключает меню "тыка на обьекте" и меню "тыка на пустом пространстве экрана".
    После if идет 6-7 строчек создания меню тыка на экране.Разобраться в них и заменить на свои в принципе не сложно.
    Если не получится - пишите,тогда в понедельник,максимум - во вторник выложу скрипт со всеми пояснениями.
     
  11. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    Когда я узнал что в Maya единственный способ остановить выполнение зациклившегося сценария - это аварийное завершение работы программы, мне стало малость обидно.Когда из-за этого я потерял второй сценарий подряд - прямо скажем неприятно.
    Не знаю, может зря я считаю себя самым умным, и всем такой способ известен и без меня,но вдруг пригодится:
    Вставляем это:

    $startTimer=`timerX`;

    перед циклом, а это:

    $startTime=`timerX -startTime $startTimer`;
    if ($startTime>5)
    error "Script execute too long";

    в цикл.
    Это значит,что если скрипт будет выполнятся дольше 5-ти секунд ,произайдёт его остановка и на экран будет выведенна ошибка "Script execute too long".
    Вот пример:

    $startTimer=`timerX`;
    int $i;
    $i=0;
    while($i<50)
    {
    sphere;
    $startTime=`timerX -startTime $startTimer`;
    print $startTime;
    if ($startTime>1)
    error "Script execute too long";
    move 0 0 $i;
    //$i++;
    }


    А вот исправление бага в моём скрипте сохранения выделения:
    Создаём в C:\Documents and Settings\Slava\My Documents\maya\scripts файл doDelete.mel и вставляем в него следующий текст(опять же совсем чуть-чуть изменённый майский "doDelete") :

    proc skinClusterPreDelete(string $objs[])
    // If skin influence objects are deleted, remove them
    // as influences so that the skin in that area will not pop to zero
    // when the object is deleted.
    {
    // build list of skinClusters that can be ignored
    //
    string $skinNodesToSkip[];

    for ($obj in $objs) {
    // check if the object is a skin influence
    //
    string $skins[] = `listConnections -s 0 -d 1 -type skinCluster ($obj+".worldMatrix")`;
    for ($skinNode in $skins) {
    if (0 == AWNumberOfOccurrencesInStringArray($skinNode,
    $skinNodesToSkip)) {
    int $removeIt = 1;

    // Check if the skin itself if also being deleted.
    // If so, we don't need to remove the influence object.
    //
    string $skinGeom[] = `skinCluster -q -g $skinNode`;
    if (size($skinGeom) > 0) {
    if (AWNumberOfOccurrencesInStringArray($skinGeom[0],
    $objs)) {
    $skinNodesToSkip[size($skinNodesToSkip)] = $skinNode;
    $removeIt = 0;
    }
    }

    if ($removeIt) {
    // Check if all the influences will be deleted.
    // If so, we don't need to remove the influence object.
    //
    int $allInfsDeleted = 1;
    string $infs[] = `skinCluster -q -inf $skinNode`;
    for ($inf in $infs) {
    if (0 == AWNumberOfOccurrencesInStringArray($inf,
    $objs)) {
    $allInfsDeleted = 0;
    break;
    }
    }
    if ($allInfsDeleted) {
    $skinNodesToSkip[size($skinNodesToSkip)] = $skinNode;
    $removeIt = 0;
    }
    }

    if ($removeIt) {
    skinCluster -e -removeInfluence $obj $skinNode;
    }
    }
    }
    }
    }


    global proc
    doDelete()
    {
    if (size(`filterExpand -sm 31`)==0 && size(`filterExpand -sm 32`)==0 && size(`filterExpand -sm 34`)==0)
    {
    global string $LastVert[];
    global string $LastEdge[];
    global string $LastFace[];
    global string $LastObj[];
    global string $Clear[];
    $LastVert=$Clear;
    $LastEdge=$Clear;
    $LastFace=$Clear;
    $LastObj=$Clear;
    }

    string $sel[] = `ls -sl -dag`;
    skinClusterPreDelete($sel);
    if (size(`filterExpand -sm 32`)>0 && `getModifiers`!=1)//anee e-ai aua ?aaa? filterExpand -sm 32 aieuoa ioey e && SHIFT ia ca?ao`getModifiers`!=1, oi auiieiyaa iaea a iai?polyDelEdge -cv true ii oieuei aey ??aa? (`filterExpand -sm 32`)
    polyDelEdge -cv true (`filterExpand -sm 32`);
    delete;
    }



    До кучи ещё теперь при удалении рёбер они будут удаляться вместе с вершинами.Так удобне.Если хотите использовать старый делит - нажмите shift+delete.

    P.s.Создавая эту тему я хотел не только продемострировать свои скрипты и настройки, но надеялся что и вы поделитесь своими.
    Не обязательно так детально.Можете написать просто идею.Интересно же!
     
  12. Andrey83

    Andrey83 Пользователь сайта

    С нами с:
    22.09.2008
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    2
    Идея вот какая, как зделать так, что б при выделении рамкой выделялись только полностью поавшие в рамку рёбра. Да ещё и так как в Риноцерос4 - слева на право полностью попавшие в выделение, а справа на лево - все зацепленные рамкой.
     
  13. Andrey83

    Andrey83 Пользователь сайта

    С нами с:
    22.09.2008
    Сообщения:
    22
    Симпатии:
    0
    Баллы:
    2
    А ещё я хотел бы окно из иконок, как на шелфе, набросать туда нужных кнопок и прикрутить например к средней кнопке мыши, а на каждую кнопу, как миниму по 2 команды(первой кнопкай мыши - одна команда, второй другая...) я такую штуку опять же в Риноцеросе ипользую. Там ещё можна размер иконок задавать в пикселях, и прям в пограме иконки рисовать....
     

    Вложения:

    • 892795.jpg
      892795.jpg
      Размер файла:
      126,8 КБ
      Просмотров:
      64
  14. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    Всем привет!
    Решил возобновить тему.На предыдущие сообщения не ответил потому что....ну короче мне слабО.

    Есть такая идея:
    Каждый раз когда мне надо создать в гиперграфе узел...ну скажем multiplyDivide, мне приходится открывать гипершейдер и искать там его.
    А в Houdini можно сделать так: после нажатия кнопки таб появляется окошко со списком всех доступных узлов. Просто выбираешь и жмешь enter.
    Мне кажется это удобно, и реализовать вполне возможно.

    Напишите пожалуйста, это кому-нибудь кроме меня нужно?
    А может можно сделать как-то удобнее?
    Ну и конечно я буду задавать сдесь вопросы возникающие по ходу.
    Вот например:
    Что-бы получить список всех доступных нод я использовал комманду listNodeTypes $nodeType;
    Проблема в том что я незнаю как узнать весь список типов нод существующих в Maya.Минут сорок хелп мучал.Често.
    Подскажите, плиз.
    Или это делается другим способом?

    P.S.
    В любом случае, не молчите.Напишите что-нибудь. А то я боюсь что занимаюсь фигнёй и это давно реализованно в Maya.



    А это версия 0.00005 beta(откройте гиперграф,нажмите на кнопку Input And Output Connections, и запустите скрипт):
    int $i;
    string $nodeTypes[];
    string $nodes[],$tabs[],$tab;
    string $layName;
    $nodeTypes[0]="shader";
    $nodeTypes[1]="utility";
    $nodeTypes[2]="other";
    window;
    $layName=`columnLayout -adjustableColumn true`;
    tabLayout;
    for ($nodeType in $nodeTypes)
    {
    $i++;
    $tab=`columnLayout $nodeType`;
    $nodes=`listNodeTypes $nodeType`;
    for ($node in $nodes)
    {
    button -l $node -command ("createNode "+$node);
    }
    setParent..;
    //tabLayout -edit -tabLabel $tab="$nodeType";
    }
    showWindow;
     
  15. ymesh

    ymesh Пользователь сайта

    С нами с:
    02.07.2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Попробуй запустить:
    Код:
    string $n, $nodes[] = `listNodeTypes "/" `;	
    for( $n in $nodes ) 
       print( "\t" + $n + "\n" );
    
     
  16. ymesh

    ymesh Пользователь сайта

    С нами с:
    02.07.2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Есть еще mel-команда:
    Код:
    ls -nodeTypes;
     
  17. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    Спасибо большое! То что надо!
    Пока руки не доходят сделать.Попозже выложу.
    У меня ещё два вопроса(я стараюсь не наглеть, но где найти ответы на эти вопросы - не знаю.А очень надо):
    1.У меня в мае 2009 не работает прога для отправки скриптов из текстовых редакторов в maya.Mapy называется.
    Кто знаеткак можно прикрутить текстовый редактор к мая(любыми способами) помогите, плиз.

    2.Как можно заменить ноду с большим количеством входящих и исходящих связей на другую.Что-бы не пересвязывать в ручную.
    Это мне для флюид эффектс надо.Хочу настроить жидкость в 2D контейнере(так быстрее), а потом её настройки перекинуть на 3D контейнер.
    Не переписывать же мне их вручную?

    Помогите, плиз.
     
  18. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    Я вот тут подумал...
    Вобщем мне не обязательно "прикручивать" текстовый редактор к мае.... В конце концов,какая разница,нажимать 2 хоткея или один.
    Подскажите,пожалуйста, как сделать аналог меловского "source" в phyton?
    Я бы кинул его на полку и загружал бы скрипт двумя тыками.И был бы счастлив :)
     
  19. Dark™ vip

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

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    Код:
    import {имя файла} 
    reload ({имя файла})
    без расширения из maya/scripts или из PYTHONPATH.
     
  20. Слава Подчуфаров 40220

    Слава Подчуфаров 40220 Знаток

    С нами с:
    01.04.2007
    Сообщения:
    612
    Симпатии:
    1
    Баллы:
    30
    УА-А-А-А-А!!!!!!
    ЗАРАБОТАЛО!!!!!!!!!
    Чего я только не делал....
    А оказалось так просто!
    Спасибо огромное!
     
Модераторы: Dark™, Skif

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