2016-04-29 50 views
1

我希望使用一個熱鍵在頂部和底部正視圖視圖之間切換,另一個熱鍵正面和背面,以及在MODO中與第三個圖像左右相切。這是一次只有一個鍵的兩個命令。 我想知道如何做到這一點,在Python或梅爾在運行時命令編輯器,並最好與我將來選擇的任何其他命令。 謝謝。一次只用一個按鍵在兩個命令之間切換

+0

這個比你想象的要難一些,因爲你可以非常容易地獲得瑪雅相機的_name_,但確保它實際上處於默認方向的唯一方法是檢查相機的實際方向:可以有一臺攝像頭開始像「前置攝像頭」一樣生活,但用戶已將其翻轉過來,因此它面向左側 - 但是,儘管瑪雅知道它仍然是前置攝像頭。 你是否在意擁有比默認的front/side/top/persp更多的攝像頭? – theodox

+0

@theodox是對的Mayas相機不像人們所期望的那樣工作。最好不要試圖強迫瑪雅成爲別的東西,而是利用瑪雅擅長的東西,例如在瑪雅人中,你可以通過挖掘空間和挖空來做到這一點。這可以做,但我不建議它做,因爲它有幾個嚴重的警告,因爲瑪雅在這方面不像max或modo那樣工作。 – joojaa

回答

2

這其實很簡單,我不喜歡玩默認的Maya相機,但我認爲這不是問題。 所有你需要做的就是乘以-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') 

你也可以爲每個方向創造新的相機 - 如果他們不存在already-和來回切換默認和非默認的之間。不要忘記複製他們的翻譯/旋轉屬性,這是該解決方案中棘手和不那麼優雅的部分。

+0

謝謝,但我該如何使用該python腳本? –

+0

你是什麼意思? 你可以將它複製到你的控制檯並執行它來檢查它是否工作。 如果您的意思是「如何將該功能分配給某個熱鍵/擱板?」這是一個完全不同的問題。 您可以複製所有腳本+每個攝像頭所需的攝像頭的呼叫,然後複製代碼。或者把代碼放到你的Maya「腳本」文件夾中的switchcamera.py文件(或任何你想要調用它的文件)中,並將其放入你想要的快捷方式: 'import switchcameras; switchcameras.switchcamera('top')' – Regnareb