Ускоряя Maya, послесловие. Скрипты для ускорения работы в Maya.
- Автор темы Дмитрий damat Астапкович
- Дата создания
- Рейтинг
- 20
Приветствую всех любителей данной ветки У меня вопрос назрел тоже.
Имеется: окошка, написанная на PyQt. В своем состае имеет древовидный список, то есть является классом QTreeWidget.
Задача: организовать адекватный drag&drop элементов списка на майские виджеты (в Атрибут эдиторе).
Варианты:
- получить базовый виджет атрибутЭдитора, и переопределить у него функцию dropEvent. Результат не удачный. Либо совсем не сработало, либо чего то не хватает. Фитбек нулевой.
- получив виджет АЕ, добавить на него eventFilter на эвент drop. Результат так же нулевой, из-за того что Во время дропЭвента виджеты под курсором считывают дату из перетаскиваемого элемента, и при не соответствии типов отвергают эвент (типа нельзя, курсор соответственный), евент drop вообще не заводится. В общем не срабатывает.
- переопределить у моего QTreeWidget'а функцию mouseReleaseEvent и в момент отпускания мыши тупо считывать виджет под курсором, и после делать с ним что угодно. Изврат полный но работает. Тем не менее после переопределения mouseReleaseEvent процесс перетаскивания перестал работать. Хоть и релиз срабатывает, но захвата нет. Отпускается ничто.
В общем я в тупике пока. есть ли у кого идейки как такое реализовать???
Имеется: окошка, написанная на PyQt. В своем состае имеет древовидный список, то есть является классом QTreeWidget.
Задача: организовать адекватный drag&drop элементов списка на майские виджеты (в Атрибут эдиторе).
Варианты:
- получить базовый виджет атрибутЭдитора, и переопределить у него функцию dropEvent. Результат не удачный. Либо совсем не сработало, либо чего то не хватает. Фитбек нулевой.
- получив виджет АЕ, добавить на него eventFilter на эвент drop. Результат так же нулевой, из-за того что Во время дропЭвента виджеты под курсором считывают дату из перетаскиваемого элемента, и при не соответствии типов отвергают эвент (типа нельзя, курсор соответственный), евент drop вообще не заводится. В общем не срабатывает.
- переопределить у моего QTreeWidget'а функцию mouseReleaseEvent и в момент отпускания мыши тупо считывать виджет под курсором, и после делать с ним что угодно. Изврат полный но работает. Тем не менее после переопределения mouseReleaseEvent процесс перетаскивания перестал работать. Хоть и релиз срабатывает, но захвата нет. Отпускается ничто.
В общем я в тупике пока. есть ли у кого идейки как такое реализовать???
- Рейтинг
- 51
о сколько нам открытий чудных...
расскажи про первый вариант, он кажется наиболее правильным и странно, что результат совсем нулевой. Как делал?
третий отъезжает на уровне Maya, судя по всему, скорее всего нелечибельно
про переопредение своих данных - хорошая идея, надо покопаться в скриптах на тему AE: все темплейты доступны. Хотя не факт, что выковыряешь тип данных оттуда.
расскажи про первый вариант, он кажется наиболее правильным и странно, что результат совсем нулевой. Как делал?
третий отъезжает на уровне Maya, судя по всему, скорее всего нелечибельно
про переопредение своих данных - хорошая идея, надо покопаться в скриптах на тему AE: все темплейты доступны. Хотя не факт, что выковыряешь тип данных оттуда.
- Рейтинг
- 20
Из темплейтов точно не достать. Это прописано в кутишных классах. Про первый рассказываю:
Если есть PyQt то можете затестить код
сначала процедуры выцарапывания виджетов из майских в пайкутишные и вс такое:
Конвертировать майский объект в кутишный по имени
достаю АЕ из интерфейса как класс и помещаю в переменную
определяю новую процедуру для эвента drop
Переопределяю функцию
Таскаю айтемы из своего виджета - реакции ноль. Если проинсталить эвентфильтр на ae с принтами эвентов:
то отображаются эвенты в следающем порядке:
при входе курсора в зону виджета эвентов нет вообще
при отпускании кнопки срабатывает эвент Enter (курсор вошел в зону)
больше никаких
Следовательно отбрасывается дроп эвент как не соответствующий чему-то там, оно и понятно, я ж перетаскиваю не те данные.
Если есть PyQt то можете затестить код
сначала процедуры выцарапывания виджетов из майских в пайкутишные и вс такое:
Конвертировать майский объект в кутишный по имени
Код:
def qControl(mayaName):
ptr = omui.MQtUtil.findControl(mayaName)
if ptr is None:
ptr = omui.MQtUtil.findLayout(mayaName)
if ptr is None:
ptr = omui.MQtUtil.findMenuItem(mayaName)
return wrapinstance(long(ptr), qtc.QObject)
достаю АЕ из интерфейса как класс и помещаю в переменную
Код:
ae = ui.qControl('AEbaseFormLayout')
Код:
def nEvent(obj, event):
QWidget.drtopEvent(obj, event) #сначала то что он должен делать по дефолту
print 'DropEvent' #потом мои дела, в данном случае хотя бы принт
Код:
ae.dropEvent = nEvent
Код:
class eventFilterClass(QObject):
def eventFilter(self, obj, ev):
print ev.type()
return False
evFilter = eventFilterClass()
ae.installEventFilter(evFilter)
при входе курсора в зону виджета эвентов нет вообще
при отпускании кнопки срабатывает эвент Enter (курсор вошел в зону)
больше никаких
Следовательно отбрасывается дроп эвент как не соответствующий чему-то там, оно и понятно, я ж перетаскиваю не те данные.
- Рейтинг
- 137
Дим, я еще один вопрос по скрипту «Views» хочу задать. Ситуация такая: устанавдиваю image planes (к примеру на камеру top), все настроил, а когда переключаюсь по хоткею на вид "сверху" и потом возвращаюсь в perspective, то image plane камеры top поворачивается по оси Y, как захочет. То он смотрел строго "на восток", теперь бац, и смотрит "на север". Т.е. rotateY меняется. Этого можно как-то избежать? Пока временно поставил плейны из геометрии, но тогда, если переключаться в wireframe, то и чертежи пропадают. А прозрачность у ламберта или x-ray влючать все время не очень-то удобно...
- Рейтинг
- 20
https://dl.dropbox.com/u/22108850/PyQt-Py2.6-x64-gpl-4.8.3-1(maya2011).exe
Вообще это от от 2011, но я её и под 2012 юзаю. А вот под 2013 компилить пришлось.
Вообще это от от 2011, но я её и под 2012 юзаю. А вот под 2013 компилить пришлось.
- Рейтинг
- 137
Вот, я тут по-быстренькому сварганил сценку с плейнами и закинул текстурки: https://dl.dropbox.com/u/49584647/damat.rar. Плейны расставлены так, как надо по идее, если нажмешь тильду в позиции top, а потом обратно в перспективу, то плейн top повернется пушкой в боковой плейн. (Там просто танк изображен
- Рейтинг
- 51
Нововведение в том, что это - честный, вроде как, Direct X, а не OpenGl. До этого директовые шейдера работали через довольно странный hlsl шейдер. Я писал на нем чекер из ранних постов этой ветки, помню, что очень удивился, когда в конце концов оно нормально заработало.
Т.е., если все действительно работает, можно подключать в Maya те же шейдера, которые реально есть в игре, без всяких конвертов и прочего. Раньше этим мог похвастаться только Макс.
Т.е., если все действительно работает, можно подключать в Maya те же шейдера, которые реально есть в игре, без всяких конвертов и прочего. Раньше этим мог похвастаться только Макс.
Приветствую. Вот такая небольшая идейка у меня. Может не новая, но я по крайней мере сам до неё додумался.
Если кто пользуется кнопками на шельфах, лично я постоянно всё на полки складываю, знаете в общем, стандартный шельф Poligons, там есть кнопки комбайн, сепарейт и экстракт. Так вот, когда их применяешь, например комбайн, то пивот у полученного меша получается в центре мира, приходится лесть во вкладку модифи и делать центр_пивот. Я немного модифицировал эти кнопки:
Комбайн
Сепарейт
Экстракт
Вот, такой вот наглядный пример модификации стандартных команд и ускорения работы. Теперь пивоты сразу центрируются.
То-же можно и с Group провернуть.
Если кто пользуется кнопками на шельфах, лично я постоянно всё на полки складываю, знаете в общем, стандартный шельф Poligons, там есть кнопки комбайн, сепарейт и экстракт. Так вот, когда их применяешь, например комбайн, то пивот у полученного меша получается в центре мира, приходится лесть во вкладку модифи и делать центр_пивот. Я немного модифицировал эти кнопки:
Комбайн
Код:
//CombinePolygons
string $list[] = `CombinePolygons`;
xform -cp $list;
Код:
//SeparatePolygon
string $list[] = `SeparatePolygon`;
xform -cp $list;
Код:
//ExtractFace
string $list[] = `ExtractFace`;
xform -cp $list;
То-же можно и с Group провернуть.