Render.ru

Ускоряя Maya, послесловие. Скрипты для ускорения работы в Maya.

Проверил Split в Maya 2015, работает без слетания активного объекта. Так же нормально работает multi-cut.
Бравлин Печатник, к сожалению, помочь в таком раскладе нечем.
 

Бравлин Печатник

Пользователь сайта
Рейтинг
2
Вот простой скрипт для сохранения выбранных компонентов и их последующего вызова
Код:
import maya.cmds as mc

mStoredSelection = None

def StoreSelection():
    global mStoredSelection
    mStoredSelection = mc.ls(sl = True)

def RestoreSelection():
    global mStoredSelection
    mc.select(mStoredSelection, r = True)
При переключении между типами компонент выделенние не пропадает.
Соответственно если эти выделения выгрузить например в глобальные переменные то нет никакой проблемы добавить такой кусок кода перед вызовом Split тула.
Или если есть возможность написать event для инструмента то можно написать эвент для Split тула.
Я так понимаю просто имея готовое решение в 2015й лишняя работа кажется не актуальной.
Но не все "плюшки" есть под 2015ю поэтому возможности туда перейти пока нет.
 

LightDip

Активный участник
Рейтинг
13
Добрый день, нужна помощь знающих людей, при работе в майя, начинаются ужасные тормоза, на каждое выполнения действия уходит в среднем около 5 секунд, хоть экструд хоть мердж, при работе с ретопотулом, квадра. удаление истории и отключение результата не дает, после перезагрузки майки, результат тот же, с каждым действием объем съедаемой ей памяти увеличивается, подскажите кто знает в чем может быть проблема, работать просто невозможно, то что делал за 20 мин занимает по 1 часу:(
 

LightDip

Активный участник
Рейтинг
13
ультимативное решение почти всех проблем , а да только надо ещё сделать копию полок и скриптов что бы заново не настраивать
А как это относиться к тому что программа начинает замедлять свою работу (тормозить), при увеличении объекта ретопологии? Может еще посоветуете перебить винду? ну так на всякий случай.
 

АлексПес

Пользователь сайта
Рейтинг
2
LightDip сказал(а):
Зачем?​
ультимативное решение почти всех проблем , а да только надо ещё сделать копию полок и скриптов что бы заново не настраивать
Эта проблема явно не решается удалением папки. Такая же ситуация - при использовании Modeling Toolkit с каждым действием все больше и больше начинает тупить камп.
 

Бравлин Печатник

Пользователь сайта
Рейтинг
2
Я всё с тем же. Пропадает выделение компонентов при использовании SplitPolygonTool или InteractiveSplitPolygonTool.
Без разницы какая версия Maya. Проверено и мной и знакомыми.
Помогите хотя бы определится с алгоритмом. Реализацию накостыляю сам.

Как лучше сохранять выбранные компоненты ?
Мне предложили сделать через SelectionSet'ы и ScriptJob'ы.
 

Rush

Знаток
Рейтинг
33
Дмитрий, не поможете скомпилировать имеющийся код плагина на питоне, под 2014 и 2015 версию Maya? Года два уж висит на сайте у автора, вещь нужная, но похоже он забросил её. Выложил код - мол, сами )). Зарание благодарен.

код.txt

P.S.: Пользуясь случаем, хочу сказать спасибо за ваш скрипт views - уж несколько лет переставляю с майки на майку.
 

Вложения

  • 12,7 КБ Просмотров: 1 103
Рейтинг
137
Товарищи, в скриптинге ни бум-бум, может подскажете, что нужно подправить в скрипте viewer, чтобы он работал в 2015 так же, как и в предыдущих версиях? Сейчас, если выделен какой-нибудь компонент, при запуске скрипта вид переходит в соответсвующий ортографический, но весь остальной объект скрывается и остаюсь я с одним полигоном наедине.
 
Рейтинг
47
Да вроде бы в 2015-ой, такого не замечал. Все работает как положено.
Быть может, ты слишком близко приближаешься к объекту. Вот он его и "клипает".

Или у тебя установлена версия скрипта, которая раздавалась на первых страницах (он же потом со временем, по чуть чуть корректировался).
 

Максим Волков (maks02n)

Активный участник
Рейтинг
14
Помогите подправить данный скрипт, чтобы показывал координаты не объекта, а компонентов(нужны координаты выделенного вертекса). Ну или если это возможно, совместить чтоб в режиме объекта показывались координаты объекта( как сейчас) в режиме компонентов - координаты вертексов. Очень нужно, сам методом тыка почти сделал скрипт, но знаний не хватает.
 

Вложения

Prostrelov

Активный участник
Рейтинг
5
День добрый.
Есть задачка, нужно разложить в разные переменные два edge-периметра.
Не привязываясь к углам и к расстоянию между ейдж-периметрами.

exp1.png


Я голову сломал над циклами и итераторами.

Как я это видел:
a). Для начального селекта берём все ейджи и все вертексы.
1_list - вертексы 2_list -ейджи.

b). Идём по первому 1_list. Берём произвольно один любой вертекс.
Если у примыкающих к нему ейджей два пересечения с начальным селектом обьявляем его начальным вертексом. Его ейджи складываем в
3_list - из этого листа в дальнейшем получим первую переменную для
первого периметра. Соседние (примыкающие к ним) вертексы -
складываем в 4_list и исключаем их из 1_list.

c). Берём 4_list (соседние вертексы) и их примыкающие ейджи.
Из этих ейджей исключаем 3_list. Для оставшихся Оставшиеся ейджей ищем
пересечения с начальными селектами и складываем их в 3_list. А вертексы
в 4_list и исключаем их из 1_list.

d) ...
Так мы двигаемся по первому списку до тех пор пока не наткнёмся на 1н
вертекс имеющий 2 пересечения ейджей. Он будет конечным для данного
замкнутого ейдж периметра. Затем полученный 3_list с ейджам мы
вычитаем из 2_list c ейджами начального селекта и в остатке начинаем
такую же итерацию.

Но реализацию алгоритм на практике я так и не осилил, т.к. одновременно и
указывать API итераторам 2 индекса от соседних ейджей и при этом
уменьшать список выбранных вначале вертексов у меня не получалось.
Да и выглядело всё это очень грамоздко. Посоветуйте как написать алгоритм.
 
Последнее редактирование:

Paul_Winex

Знаток
Рейтинг
20
Код:
from pymel.core import *

def getSelectionShellsEdges(sel):
    def getConnected(e, sel):
        con = list(set(ls(e.connectedEdges(), fl=1)).intersection(set(sel)))
        if con:
            for c in con:
                if c in sel:
                    sel.remove(c)
                con += getConnected(c, sel)
            return con
        return []

    sel = ls(sel, fl=1)
    shells = []
   
    while sel:
        e = sel.pop(0)
        shell = [e]
        shell += getConnected(e, sel)
        shells.append(shell)
    return shells
   
s = selected()
shells = getSelectionShellsEdges(s)
print len(shells)
 

Paul_Winex

Знаток
Рейтинг
20
Алгоритм: хватаем любой эдж и рекурсивно вытаскиваем соседей если они есть в выделении. Пока таковые имеются, собираем в отдельынй массив. Как только закончились, хватаем следующий любой эдж в выделении и тд. Таким образом каждое замкнутое выделение попадает в отдельный массив.
Не очень быстро работает но работает. Суть в том что рекурсивно надо. Скорее всего можно оптимизировать.
 
Сверху