おはようございます
本日の当番、モーションデザイナーのR.Iです。
今回は久しぶりにスクリプトの話をしようと思います。
Softimageでスクリプトを組むことが多かった私ですが、最近、別のツールであるMayaでスクリプトの勉強中です。
使用する言語はSoftimageでも使用していたPythonなのが唯一の救いです。
ありがとう Python。
スクリプトを練習する時に大体行うことは、選択したモデルの名前を取得したり、座標を取ったりするところから始めます。地味ですが、私は大好きです。
色々調べているとUI作成する上でPySideというものが中々いいらしいということで少し検証してみました。
SoftimageのときにPyQtを少し検証していたのですが、私はあまり使用せず、そのままフェードアウトしてしまったので、今回はそういうことがないようにしたいと思います。
PySideとPyQtの違いは色々あるようですが、気になる方はググってみて下さい。
今回やりたいことはボタンを押したときにイベントが取得できているか検証したいので、ボタンを押したときにロケータを生成するようなものを作成しました。
from PySide import QtGui import maya.OpenMayaUI as mui import shiboken import maya
#ウィンドウが常に最上面に表示されるための情報取得 def getParentWindow(): pointer = mui.MQtUtil.mainWindow() return shiboken.wrapInstance(long(pointer), QtGui.QWidget)
#ロケーター生成処理 def createLocator(): maya.cmds.spaceLocator()
#ウィンドウ判定用変数 objectName = "LocatorFactory"
#ウィンドウがすでに表示されているときは再起動を行う if maya.cmds.window("LocatorFactory", exists = True): maya.cmds.deleteUI("LocatorFactory", wnd = True)
#ウィンドウの作成 parent = getParentWindow() window = QtGui.QMainWindow(parent) window.setObjectName(objectName)
#ウィジェットの作成 widget = QtGui.QWidget() window.setCentralWidget(widget)
#レイアウトの設定 layout = QtGui.QVBoxLayout(widget)
#ウィンドウにボタンの追加、設定 button = QtGui.QPushButton("Create Locator") layout.addWidget(button) button.setMinimumSize(100, 50) button.setMaximumSize(100, 50) button.setStyleSheet("background-color: rgb(0, 100, 0); color: rgb(255, 255, 255);") button.clicked.connect(createLocator)
#ウィンドウの表示 window.show() |
PySideはMayaとは別なので、Mayaのウィンドウをアクティブ状態にするとMayaのウィンドウが手前に表示され、スクリプトで生成したウィンドウが後ろに隠れてしまいます。
#ウィンドウが常に最上面に表示されるための情報取得 def getMayaWindow(): pointer = mui.MQtUtil.mainWindow() return shiboken.wrapInstance(long(pointer), QtGui.QWidget) |
上記でウィンドウのparentを取得します。
#ウィンドウの作成 parent = getParentWindow() window = QtGui.QMainWindow(parent) window.setObjectName(objectName) |
parentを利用してウィンドウを作成します。
#ロケーター生成処理 def createLocator(): maya.cmds.spaceLocator() |
上記は単純にロケータを生成する関数を作成
#ウィンドウにボタンの追加、設定 button = QtGui.QPushButton("Create Locator") layout.addWidget(button) button.setMinimumSize(100, 50) button.setMaximumSize(100, 50) button.setStyleSheet("background-color: rgb(0, 100, 0); color: rgb(255, 255, 255);") button.clicked.connect(createLocator) |
「Create Locator」というボタンを配置、設定します。
上記の最後の行、ボタンをクリックした際にロケータを生成する関数を呼び出しています。
個人的に「button.setStyleSheet」の辺りがCSSと記述が似ているなと思いました。
setStyleSheetといってるくらいなので、ボタンの配置とか色情報とか外部ファイルで設定できるのかも...要検証ですね。
まだまだ、実現できることも少ないですが、色々なことができるように精進したいと思います。
毎度のことながら...モーションデザイナーっぽくないネタだな...。
コメント