2016-04-29 7 views
1

Я хочу сделать переключатель майа между верхним и нижним орфографическими видами с одной горячей клавишей, спереди и сзади с помощью одной горячей клавиши, а влево и вправо - третьей, как в MODO. Это две команды с одним ключом за раз. Я хотел бы знать, как это сделать, в Python или Mel в редакторе команд runtime, и желательно с любыми другими командами, которые я выбираю в будущем. Спасибо.Переключить между двумя командами с одной клавишей за один раз

+0

Это немного сложнее, чем вы могли бы подумать, потому что вы можете легко получить _name_ камеры майя, но единственный способ убедиться, что на самом деле это ориентация по умолчанию - проверить фактическую ориентацию камеры: вы можете есть камера, которая начала жизнь как «передняя» камера, но пользователь перевернул ее так, что она обращена влево - но, поскольку майя знает, что это все еще передняя камера. Вас интересует наличие большего количества камер, чем по умолчанию front/side/top/persp? – theodox

+0

@ theodox - это камеры правого майаса, которые не работают, как ожидают люди. Его также лучше не пытаться заставить майю быть чем-то другим, кроме как использовать то, что майя хорошо, например, в майе, вы делаете это, используя космос и коснувшись пространства. Однако это можно сделать, но я не рекомендую это делать, поскольку у него есть несколько серьезных предостережений, потому что майя не работает, как макс или modo в этом отношении. – joojaa

ответ

2

На самом деле это довольно просто, мне не очень нравится играть с камерами майя по умолчанию, но я не думаю, что здесь проблема. Все, что вам нужно сделать, это умножить на -1 координаты перевода. и добавьте 180 градусов к соответствующей оси для каждой камеры, которую вы хотите.

def getActiveViewport(): 
    """Return the active 3D viewport if any""" 
    panel = cmds.getPanel(withFocus=True) 
    if cmds.getPanel(typeOf=panel) == 'modelPanel': 
     return panel 
    return '' 


def switchcamera(cam): 
    viewport = getActiveViewport() 
    if viewport: 
     orient = {'top': 'X', 'front': 'Y', 'side': 'Y'} 
     translate = cmds.getAttr(cam + '.translate')[0] 
     translate = [i*-1 for i in translate] 
     rotate = cmds.getAttr(cam + '.rotate' + orient[cam]) 
     rotate = (rotate + 180) % 360 
     if rotate < 0: 
      rotate = rotate + 360   

     cmds.setAttr(cam + '.translate', *translate, type='double3') 
     cmds.setAttr(cam + '.rotate' + orient[cam], rotate) 
     cmds.modelPanel(viewport, edit=True, camera=cam) # Set the camera to the active viewport 

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

switchcamera('top') 
switchcamera('front') 
switchcamera('side') 

Вы также можете создавать новые камеры для каждой ориентации -если они не существует уже- и переключаться между умолчанию и те, не по умолчанию. Не забывая копировать атрибут translate/rotate, это сложная и менее элегантная часть этого решения.

+0

спасибо, но как я могу использовать этот скрипт python? –

+0

Что вы подразумеваете под этим? Вы можете скопировать его на консоль и выполнить ее, чтобы проверить, работает ли она. Если вы имеете в виду под этим «Как назначить эту функцию какой-либо горячей клавише/полке?» это совершенно другой вопрос. Вы можете либо скопировать весь сценарий + звонок с помощью камеры, которую вы хотите для каждой камеры, а затем дублировать код. Или поместите код в файл switchcamera.py (или все, что вы хотите называть) в своей папке «скрипты» Maya, и поместите его в ярлык, который вы хотите: 'import switchcameras; switchcameras.switchcamera ('top')' – Regnareb