Back to Overview

Maya Control Curve UI

Tools & Techart Topics

これはPythonとPyQtをもう一度拾うプロジェクトとしてスタートしました。UIでは、作成したコントロールを保存して他のプロジェクトでリロードするだけでなく、テキストコントロールを作成したり、色を設定したりすることができるようになります。

保存されたコントロールは、シーンの原点にあるコントロールの cv's を再現したり、度数やノットを作成したり、周期的な曲線を作成したり、いくつかの形状を一つに結合したりすることができる Python ファイルを作成します。

このツールには、ビューポート内の曲線からスクリーンショットを取得するための時間をかけて行われた追加があり、また、それらが親になったときにユーザーがコントロールの階層を保存することができます。

このツールの便利なところは、リグ用の高品質なコントロールを簡単に作成できるだけでなく、コントロールをPythonファイルとして保存して自動リギングのセットアップに利用できることです。私はこれを全てのハンドメイドリグで使用しており、現在はCGMAのリギングコースでも使用されているツールの一部となっています。

これは、Qt ウィジェットに埋め込まれたビューポートからスクリーンショットを取得できるモジュールを示しています。

viewport

# create paneLayout
paneLayoutName = cmds.paneLayout("test")

#get Qt pointer
ptr = OpenMayaUI.MQtUtil.findControl(paneLayoutName)
paneLayout = wrapinstance(long(ptr))

# get maya modelPanel based on camera
cameraName = cmds.camera()[0]
cmds.hide(cameraName)
modelPanelName = cmds.modelPanel(label="modelPanelName", cam=cameraName, mbv=False)
mel.eval('modelPanelBarDecorationsCallback("GridBtn","%s", "%s|modelEditorIconBar");'%(modelPanelName, modelPanelName))

# get modelPanel Qt pointer (this is the part that can be attached to a qt window)
ptr = OpenMayaUI.MQtUtil.findControl(modelPanelName)
modelPanel = wrapinstance(long(ptr))

# some cleanup of the model view
cmds.modelEditor( modelPanelName, edit = True, displayAppearance='smoothShaded', lw=2)
cmds.viewFit( cameraName, all=True )
barLayout = cmds.modelPanel(modelPanelName, q=True, bl=True)

# cleanup of the menu bar above the vieport
ptr = OpenMayaUI.MQtUtil.findControl(barLayout)
barLayout = wrapinstance(long(ptr))

children =  barLayout.children()
if default == "pyqt4":
    sip.delete(children[0])