Maya Script Python リファレンスのインポート

Mayaでシーンに読み込まれているリファレンスをインポートするときは、

import maya.cmds as cmds

refFiles = cmds.file(q=1,r=1)
if refFiles:
	for r in refFiles:
		refName = cmds.file(r,q=1,rfn=1)
		cmds.file(r,ir=1)

pymelではfileコマンドがないので、

import pymel.core as pm

refFiles = pm.listReferences()
if refFiles:
	for r in refFiles:
		r.importContents()

と、なるようです。
リスト内包表現では、

import pymel.core as pm

[x.importContents() for x in pm.listReferences()]

なるほど、簡単だ。

Maya Script PyQt – uiファイルの表示

test.ui
上のものはQtのdesigner.exeで作成したuiファイルです。
ただMaya上でuiを表示させるだけならば、

import maya.cmds as cmds
ui = cmds.loadUI(f=r"C:\Users\a\Documents\maya\2013-x64\ja_JP\prefs\scripts\test.ui")
cmds.showWindow(ui)
cmds.window(ui, e=1, tlc=[100,100])

のように、絶対パスでuiファイルを指定すれば表示だけはできます。
ただ、全く機能しません。designer.exeで作成したファイルメニューからウィンドウを閉じることが出来るだけです。

 

バッチを通して変換する方法があるそうですが、そっちは試していません。
人様の書いたスクリプトを継ぎ合わせて、少し手を施したものがこちらです。大変参考になりました。ありがとうございます。
test_window.py
このファイルとuiファイルをスクリプトのパスが通っているディレクトリに一緒に置き、

import test_window
reload(test_window)
test_window.open()

とスクリプトエディタに入力すると、ウィンドウが表示され、ボタンを押すとポリゴンキューブが作成されます。
ただ、この方法だと、エラーとも警告ともつかない、良く分からないメッセージがたくさん表示されます。
uiファイルの中身に関しての事のようです。

 

因みにtest_window.pyのコードは、

# -*- coding:utf-8 -*-
import os
import sip
import maya.OpenMayaUI as OpenMayaUI
from PyQt4 import QtGui, QtCore, uic
import maya.cmds as cmds

def getMayaWindow():
	ptr = OpenMayaUI.MQtUtil.mainWindow()
	return sip.wrapinstance(long(ptr), QtCore.QObject)

selfDirectory = os.path.dirname(__file__)
uiFile= selfDirectory+"/test.ui"

form, base = uic.loadUiType(uiFile)

class UI(base, form):
	def __init__(self, parent=getMayaWindow()):
		super(base, self).__init__(parent)
		self.setupUi(self)
		self.Establish_Connections()
	def create_cube(self):
		cmds.polyCube()
	def Establish_Connections(self):
		QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"),self.create_cube)

def open():
	global testWindow
	x = 0
	try:
		x = testWindow.x()
		y = testWindow.y()
		w = testWindow.width()
		h = testWindow.height()
		testWindow.close()
	except:
		pass
	testWindow = UI()
	testWindow.show()
	if x:
		testWindow.move(x,y)
		testWindow.resize(w,h)

こんな感じです。
この方法でuiを作ると位置やサイズを記憶してくれません。
なので、無理やりセットさせています。書き方が美しくない、、
Mayaを終了させると元に戻ります。
記憶させるにはもう一手間必要です。

 

で、scriptJobに紐付けはできないのだろうか。と探していると幾つかヒントを見つけました。
何とか動作するところまでは行ったのですが、いかんせんコードが汚い。
綺麗に整理することができたら公開してみます。

Maya Script PyQt

うっかりと年をあけてしまいました。
随分と間を開けてしまいました。
年末からPyQtに取り組んでおります。
Qt自体はCにバインドされたライブラリのようで、GUIを作成することができます。
Maya自体も2011からQtでGUIを作っているそうです。

 

で、PythonからQtをMayaで使うにはインストールが必要なようです。
調べてみると、PyQt-Py2.6-gpl-4.6-snapshot-20090810-1.exeを入れることで、使えるようになりました。
インストールの際にインストールするものをカスタムし、ディレクトリを、
C:\Program Files\Autodesk\Maya2013\Python\
にすれば使うことができます。
ランタイムだけで大丈夫そうですが、自分は一番下のもの以外をインストールしてみました。

 

C:\Program Files\Autodesk\Maya2013\bin\
にも入っているのですが、designer.exeという実行ファイルが入ります。
GUIをGUIで作るツールだそうです。一見すると素人感覚で作ることが出来そうですが、色々と厄介なものだそうです。
作られるGUIはxmlで拡張子「.ui」がついて保存されます。

 

これをMaya上のウィンドウに表示させるところまでは比較的スムーズにできたのですが、機能させることに躓いておりました。
それはまた今度。

 

できるファイルがxmlならば、modoでも使えないか、と試してみたところ、ダメのようです。
情報を探しても見つからない。modoのUIを簡単に作る方法はないものだろうか?

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です