ON-BLOG

CGのこと、あれこれ書いてます。

【覚書】maya python入門 其の十

今回も動画で学んだコマンドを紹介。

前回に続いて軽めのコードになります。
こんな感じのやつです。
f:id:tommy_on:20150727114016g:plain
シーン一覧をMAYAディレクトリから取得して
一覧表示し、選択後読み込みといったやつだったと思います。



ではコード

import maya.cmds as cmds
import os

def UI():
	if cmds.window( "Selector_Window" , exists=True ):
		cmds.deleteUI( "Selector_Window" )
	
	Create_Window = cmds.window( "Selector_Window" , t="Selector" , w=300 , h=300 ,mnb=False , mxb=False , s=False )
	oLayout = cmds.columnLayout( w=300 , h=300 )
	ImagePath = cmds.internalVar( upd=True ) + "icons/title.jpg"
	cmds.image( w=300 , h=100 , image=ImagePath )
	cmds.separator( h=15 )
	Menu_01 = cmds.optionMenu("Menu_01" ,  w=300 , l="Select Project" , cc=Charactor_Set)
	
	Project_Set()
	
	cmds.separator( h=15 )
	Menu_02 = cmds.optionMenu("Menu_02" ,  w=300 , l="Select Charactor")
	
	Charactor_Set()
	
	cmds.separator( h=15 )
	cmds.button( l="Open Scene" , w=300 , h=80 , c=Set )
	cmds.showWindow(Create_Window)

def Project_Set():
	projectPath = cmds.internalVar( upd=True ).rpartition( "prefs" )[0] + "projects/"
	projects = os.listdir(projectPath)
	
	for i in projects:
		cmds.menuItem( l=i , parent="Menu_01")
	

def Charactor_Set(*args):
	
	menuItems = cmds.optionMenu( "Menu_02" , q=True , itemListLong=True)
	
	if menuItems != None:
		for r in menuItems:
			cmds.deleteUI(r)
	
	selProject = cmds.optionMenu( "Menu_01" , q=True , v=True )
	charactorPath = cmds.internalVar( upd=True ).rpartition( "prefs" )[0] + "projects/" + selProject +"/"
	
	sceneFils = os.listdir(charactorPath)
	
	charactors = []
	
	for j in sceneFils:
		if j.rpartition( "." )[2] == "mb":
			charactors.append(j)
			
	for k in charactors:
		ScnceName = k.rpartition(".")[0]
		cmds.menuItem( l=ScnceName , parent="Menu_02")
		
def Set(*args):

	selProject = cmds.optionMenu( "Menu_01" , q=True , v=True )
	charactorPath = cmds.internalVar( upd=True ).rpartition( "prefs" )[0] + "projects/" + selProject +"/"
	SelectScene = cmds.optionMenu( "Menu_02" , q=True , v=True )
	SceneName = charactorPath + SelectScene + ".mb"
	
	cmds.file( SceneName , open=True , force=True , prompt=False )
	print "opening Scene " + SceneName
	
	
UI()

以外に長いんですよね。

使っている物は今までさほど変わらないので、違った部分だけ参照してみます。


Menu_01 = cmds.optionMenu("Menu_01" ,  w=300 , l="Select Project" , cc=Charactor_Set)

プルダウンのメニューの詳細を指定しています。


projectPath = cmds.internalVar( upd=True ).rpartition( "prefs" )[0] + "projects/"
	projects = os.listdir(projectPath)

ディレクトリフォルダパスで「prefs」で区切って(パスを戻って)
「projects」というパスを指定しています。
要は、
C:\Users\ユーザー名\Documents\maya\2016\prefs
が、
C:\Users\ユーザー名\Documents\maya\2016\projects
に変更した感じです。
んで、次に「listdir」にて作成したパスにあるファイル、フォルダを取得しています。


一応ここも

for i in projects:
		cmds.menuItem( l=i , parent="Menu_01")

このFOR文でプロジェクトフォルダを取得し、それをプルダウンのメニューに仕込んでます。


続けてそのプロジェクトにあるシーンファイル一覧を取得する部分。

charactorPath = cmds.internalVar( upd=True ).rpartition( "prefs" )[0] + "projects/" + selProject +"/"

ここはプロジェクト取得とほぼ一緒です。
さらに「selProject」というサブフォルダを取得しているだけです。


んで、シーンを取得するのですが、その時に下記のコードで「mbファイル」
だけを取得しております。

charactors = []
	
	for j in sceneFils:
		if j.rpartition( "." )[2] == "mb":
			charactors.append(j)

単純に空の配列を作成して、IFで引っ掛かったシーンファイルを
配列に格納しているだけです。


後はその配列に格納されたデータを元に
メニューに登録していきます。

for k in charactors:
		ScnceName = k.rpartition(".")[0]
		cmds.menuItem( l=ScnceName , parent="Menu_02")


あとは今までと同じなので、おいておきます…

そんな感じでした。

以上です。