Jonney Shih Jonney Shih - 5 months ago 8x
Python Question

Toggle between two commands with one key at a time

I'd like to make maya switch between top and bottom orthographic views with one hotkey, front and back with another hotkey, and left and right with a third, like in MODO. That is two commands with one key at a time.
I would like to know how to do that, in Python or Mel in the runtime command editor, and preferably with any other commands that I choose in the future.


It is actually quite simple, I don't really like to play with the default Maya cameras, but I don't think that is a problem here. All you have to do is multiply by -1 the translate coordinates. and add 180 degrees to the corresponding axis for each camera you want.

 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

You can then call those commands with a viewport in focus, and it will automatically switch to the specified camera.


You could also create new cameras for each orientation -if they don't exists already- and switch back and forth between the default and non-default ones. Without forgetting to copy their translate/rotate attribute, that's the tricky and less elegant part of that solution.