Render.ru

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

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

Пользователь сайта
Рейтинг
2
День добрый.
Подскажите пожалуйста какой командой переключается режим селекта в Maya ?

Код:
selectPref -paintSelect 1;
selectPref -paintSelect 0;
вроде где-то рядом но не отрабатывает.
 
Привет,

Сорри, что долго не отвечал, случайно отметил сообщение как прочитанное.

Уточню - а что надо переключить? Из marque в drag? Или Вкл/Выкл camera based selection?
 

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

Пользователь сайта
Рейтинг
2
Спасибо Дмитрий но вроде уже разобрался с ситуацией.
Данные команды отрабатывали, просто был какой-то сбой в приложении.

Есть немного более насущный вопрос.
Насколько я знаю средствами MEL выбрать элемент(атрибут) в chanelBox нельзя.
Можно получить его значение или установить его значение.
А хочется иметь возможность после применения процедуры сразу использовать CTRL+MMB слайд значения что бы интерактивно его накручивать.
То-есть что бы не выбирать атрибут руками а сразу в процедуру прописать его выбор. Кажется python умеет это.

Второй вопрос связан с SplitPolygonTool.
Данный инструмент в своём исходном варианте постоянно снимает текущее выделение и после добавления ряда рёбер приходится сново выбирать все выделенные ранее элементы.
Можно ли что-то дописать что бы по завершении работы SplitPolygonTool выделение возвращалось (в Vetrex\Edge\Polygon режимах).
 

Paul_Winex

Знаток
Рейтинг
20
С помощью MEL может быть и нельзя. Я не помню делал ли я это через MEL, но точно помню что с помощью pyqt все работало отлично. Как доберусь до компа, гляну.

Про второй вопрос не очень понятно, так как попробовать не могу. Знаю только что это не тот случай когда доптсывать чтото надо. Если завершаешь работу инструмента с помощью энтера, попробуй делать это с помощью пкм. Если не поможет, обратись к новым моделинговым инструментам в майе 14-15
 

Paul_Winex

Знаток
Рейтинг
20
Вот и скриптик для выделения атрибутов в channelBox

Код:
import maya.mel as mel
import maya.OpenMayaUI as omui
try:
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from sip import wrapinstance as wrap
    qMaya = wrap(long(omui.MQtUtil.mainWindow()), QObject)
except:
    from PySide.QtGui import *
    from PySide.QtCore import *
    from shiboken import wrapInstance as wrap
    qMaya = wrap(long(omui.MQtUtil.mainWindow()), QMainWindow)
   
# find chennelbox
gChannelBoxName = mel.eval('$temp=$gChannelBoxName')
table = qMaya.findChild(QTableView, gChannelBoxName)
if table:
    model = table.model()
else:
    model = None
 
# main function
def selectChannelBoxAttr(attrArray):
    if model:
        table.clearSelection()
        for atr in attrArray:
            for i in range(model.rowCount()):
                if atr ==  model.data(model.index(i,0)):
                    table.selectRow(i)
 
# ############################ test
attrs = ['Scale X', 'Scale Y', 'Translate Y']
selectChannelBoxAttr(attrs)
Сначала идет импорт для PyQt или PySide. Затем поиск виджета ченелбокса, который один раз найдется и будет в модуле сидеть. Потом функция для выделения строчек. Хочу подчеркнуть: поиск производится по тексту в ченелбоксе! То есть если отображение атрибутов не Nice, то нужны другие имена.
 

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

Пользователь сайта
Рейтинг
2
Спасибо за скрипт Paul.
Новые инструменты возможно кому-то подходят, но мне категорически не удобны.

В данный момент пытаюсь разобраться со след скриптом StoreRestoreSelection.py:
Код:
import maya.OpenMaya as om
import maya.cmds as cmd
import maya.mel as mel
import maya.OpenMayaUI as omui
import sys
import os
from math import *

def StoreRestoreSelectionProc():

    StoreRestoreSelectionClass()

class StoreRestoreSelectionClass():
    
    def __init__(self):
                
        def StoreSelection(self):
         self.mStoredSelection = cmd.ls(sl = True)
  
        def RestoreSelection(self):
         cmd.select(self.mStoredSelection, r = True)
данный скрипт позаимствован понаитию из dTools и в первом случае должен сохранять выделенные элементы а во втором вызывать их выделение.


userSetup.py:
import StoreRestoreSelection

Но видимо я что то упустил:
StoreRestoreSelection.StoreSelection()
# Error: line 1: 'module' object has no attribute 'StoreSelection'
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# AttributeError: 'module' object has no attribute 'StoreSelection' #
 

Александр Иванов

Активный участник
Рейтинг
7
Насчёт SplitPolygonTool - необходимо сделать два хоткея - на одну и ту же клавишу, но на Press и Release. В общем сделай как на картинке =) Работает так - вот ты чёта делаешь, потом зажимаешь выбранный хоткей - скрипт запоминает инструмент с которым ты работал, и выделение. Потом включает сплит полигон тул. Ты им чёта нарезаешь, отпускаешь хоткей, и оп! У тебя возвращается предидущий инструмент, и выделение.
 

Вложения

Александр Иванов

Активный участник
Рейтинг
7
Тогда сделай 2 разных хоткея, и в дирекшене обоих поставь Press. Одна кнопка будет запоминать и включать инструмент, другая возвращать всё назад. Но два хоткея на это тратить по-мойму не оптимально.
 
Когда ты пишешь:
Новые инструменты возможно кому-то подходят, но мне категорически не удобны.
что ты имеешь в веду?

В 2014.5 Майе (с покупкой и интеграцией Nex), при переключении между подобъектами (или нарезанием новых ребер), выделения сохраняются (если что, это можно в настройках отключить).

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

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

Пользователь сайта
Рейтинг
2
Александр Иванов, иногда нужно перемещаться по геометрии (ALT+LMB) иногда снепиться, да
и в общем как-то не привычен этот инструмент в таком быстром режиме. Я не отрицаю возможно
имея большой опыт и набитую руку stiky вариант как раз наоборот лучше.
Но даже если взять принцип работы stiky в XSI или данный скрипт при единовременном нажатии можно перейти в стандартный режим манипулятора.

Александр Чернега, я прошу прощения, но я запутался. О каком именно инструменте идёт речь ?
О самостоятельном плагине NEX или о майском InteractiveSplitTool. Последний также не сохраняет выделенные элементы.
Согласен отдавать два хоткея на один инсрумент - не очень удачный вариант.

p.s.
что за релиз 2014.5 , если не сложно дайте ссылку на дистриб
 

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

Пользователь сайта
Рейтинг
2
Видимо чего-то вы забыли упомянуть Александр, установил Extension for Maya 2014 SP2.
В Настройках стоит PreservSelectionForComponents но по прежнему стоит применить SplitTool или
InteractiveSplitTool и выделение снимается.
 

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

Пользователь сайта
Рейтинг
2
>полным ходом всё идёт.
Да вот что-то в тупик оно пришло.
Дмитрий, может быть вы посоветуете как решить задачу с помощью MEL или Python скрипта ?
 
Рейтинг
47
Я до сих пор иногда пользуюсь кодами на двух хоткеях.

Код:
if (sizeSel() > 0) createSet tmpSet;
сохраняет выделенные компоненты в сет

Код:
select tmpSet; createSet tmpSet;
в любой момент, выхватывает эти компоненты из сета


И стопроцентная гарантия, что нужное выделение сохраниться.
 
Сверху