« 芸術の秋イベント2016 | トップページ | 映像編集の話 »

2016年11月 9日 (水)新しいツールで蛇使い 其の陸

おはようございます。本日の当番、モーションデザイナーのR.Iです。

最近まで暑い暑いと言っていたと思えば、今年もあと1ヶ月というところまでやってきました。
皆様、いかがお過ごしでしょうか。

そろそろネタ尽きてきたかもしれないですが、スクリプトのことについて書こうと思います。
特に新しいことではないですが、ライブラリ化について書こうと思います。

ライブラリ化とは、よく使う機能などをまとめて、簡単に呼び出せるようにしておこうというものです。(あってる?プログラマさん)
スクリプトを書く時、そのプロジェクト専用の処理だったり、フローだったりに合わせて書きますが、別のプロジェクトでも使える処理というものは結構あります。

まずはテスト用に以下のスクリプトを用意しました。
ちなみに過去の記事「新しいツールで蛇使い 其の壱」で書いたものになります(懐かしい…)

# -*- coding: utf-8 -*-
from PySide import QtGui
import maya.OpenMayaUI as mui
import shiboken

#ウィンドウが常に最上面に表示されるための情報取得
def getMayaWindow():
Ptr = mui.MQtUtil.mainWindow()
return shiboken.wrapInstance(long(Ptr), QtGui.QWidget)

#ロケーター生成処理
def createLocator():
maya.cmds.spaceLocator()

#ウィンドウ判定用変数
objectName = "LocatorFactory"

#ウィンドウがすでに表示されているときは再起動を行う
if maya.cmds.window("LocatorFactory", exists = True):
maya.cmds.deleteUI("LocatorFactory", wnd = True)

#ウィンドウの作成
parent = getMayaWindow()
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()

上記の処理の中に

# -*- coding: utf-8 -*-
from PySide import QtGui
import maya.OpenMayaUI as mui
import shiboken

#ウィンドウが常に最上面に表示されるための情報取得
def getMayaWindow():
Ptr = mui.MQtUtil.mainWindow()
return shiboken.wrapInstance(long(Ptr), QtGui.QWidget)

というものがありますが、MayaでPySide系のGUIを処理する際、Mayaの後ろにウィンドウが隠れないようにする処理になります。
これはよく使いますので、この部分をライブラリ化してみましょう。

フォルダ構成は以下になります。
├ libフォルダ
│ ┝ __init__.py(中身は空白でOK)
│ └ getMayaWindow.py
└ main.py

ライブラリ化したものを呼びだす処理に置き換えた最終スクリプトは以下になります。

getMayaWindow.py

# -*- coding: utf-8 -*-
import shiboken
from maya import OpenMayaUI as mui
from PySide import QtGui

def getMayaWindow():
Ptr = mui.MQtUtil.mainWindow()
return shiboken.wrapInstance(long(Ptr), QtGui.QWidget)

main.py

from PySide import QtGui
import maya.OpenMayaUI as mui
import shiboken

#ライブラリ化したものを呼び出し
import lib.getMayaWindow
reload(lib.getMayaWindow)

#ロケーター生成処理
def createLocator():
    maya.cmds.spaceLocator()

#ウィンドウ判定用変数
objectName = "LocatorFactory"

#ウィンドウがすでに表示されているときは再起動を行う
if maya.cmds.window("LocatorFactory", exists = True):
    maya.cmds.deleteUI("LocatorFactory", wnd = True)

#ウィンドウの作成
#libフォルダ内にあるgetMayaWindow.pyのgetMayaWindow関数を呼び出す
parent = lib.getMayaWindow.getMayaWindow()
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()

以降は他のスクリプトでも呼び出し処理で共通の処理を実行することができます。

自分の場合は空き時間にスクリプトを見直し、汎用的な処理や使用頻度の高そうな処理はできる限りライブラリ化するようにしています。
もちろん、どの処理をライブラリ化するのが効率的かを考える必要はありますが、うまくいけば処理の重複を防止することができます。
管理する箇所も少なくなるので、スクリプトの保守性も向上するでしょう。

といいながら、スクリプトの整理があまり進んでないので、年末に向けて少しずつ整理していきたいと思います。
次回、ブログを書く時にはいいネタがあるといいな~。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2016/11/post-08c7.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

| | コメント (0) | トラックバック (0)

« 芸術の秋イベント2016 | トップページ | 映像編集の話 »

モーションデザイナー」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 新しいツールで蛇使い 其の陸:

« 芸術の秋イベント2016 | トップページ | 映像編集の話 »