読者です 読者をやめる 読者になる 読者になる

ON-BLOG

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

Pythonのメモ

maya.cmds

こんな事できるなんて…と思ったのをメモに

【リストを変数に個々に格納】

Sel1,Sel2,Sel3,Sel4 = ["polyShpere1","pTorus1","pCylinder1","pCube1"]
print Sel2

結果↓

pTorus1

こんな事できたとは…
あと、内包表記。
今まで少しだけ使ってたんですが、いろんなチュートリアル
スクリプトを見てると、上手いこと内包表記を使われてる方が多い。
なので、復習がてらにメモ。

以下のコードは、MAYAのパスにPSDファイルを保存するための
(実際は絶対こんな事はしてはいけないのですが。。。)
コードです。
単純に文字列をくっつけてるだけの例になります。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

ScenePath = cmds.internalVar(uad = True)
File_List = ["File1.psd","File2.psd","File3.psd"]
CreatePath = []
for File in File_List:
	CreatePath.append(ScenePath + File)
print CreatePath


結果がこれ↓

[u'C:/Users/UserName/Documents/maya/File1.psd', u'C:/Users/UserName/Documents/maya/File2.psd', u'C:/Users/UserName/Documents/maya/File3.psd']

今まで結構使ってた手法です。
これでも問題ないのですが、あまりすっきりした書き方がではないです。
なのでここに内包表記をつかってみるとこうなります。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

ScenePath = cmds.internalVar(uad = True)
File_List = ["File1.psd","File2.psd","File3.psd"]
CreatePath = []
CreatePath = [ScenePath + File for File in File_List]
print CreatePath

結果は同じで、結構スッキリしました。
これは今後優先して使っていこう。


【更新】
次にBoolのトグルについて
今までは、IF文を使っていたが以下の書き方にすることで
IF分がいらないようになる。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

Sel = cmds.ls(sl=True,tr=True)
for i in Sel:
	Vis = cmds.getAttr(i+".visibility")
	cmds.setAttr(i+".visibility",(1-int(cmds.getAttr(i+".visibility"))))

要は「1-今の値」をしてるだけという、めちゃシンプルな内容。
昔からあるやり方みたいなんですが、最近知りました。
こうやって簡単に考えないと行けないっすよね‥

●USERパスを取得
単純に便利だなって思ったのでメモ

# -*- coding: utf-8 -*-
import os

FileExtension = 'Anim'

print os.path.join(os.path.expanduser('~'),'Sample.%s'%FileExtension)

結果こうなる。

##C:/Users/tommy_on/Documents\Sample.Anim

うん。
地味に便利。
今後はこっちを使おう。

ちなみに、

print os.path.expanduser('~')

でカレントユーザのホームディレクトリを取得してます。
もっと短く(拡張子の汎用性を無視するなら)

print os.path.expanduser('~/Sample.Anim')

でもいける。
ファイルの有無を簡単に調べるかも。

●Panelのドッキング方法
これ初めて知ったのでメモを‥
全く使ってコなかったなぁと。

パスにシンプルなウィンドウを記載してスクリプトを配置して実行

import maya.cmds as cmds
#パスにtestScript.pyを配置している。中身はクラス化した、簡単なウィンドウ
import testScript
Samplescript = testScript.ClassName()
Samplescript.main()
cmds.toggleWindowVisibility(Samplescript.window)
layout = cmds.paneLayout(configuration='single')
dock = cmds.dockControl(label=Samplescript.title,
						width=Samplescript.size[0],
						allowedArea='all',
						area='left',
						floating=False,
						content=layout)

cmds.control(Samplescript.window,e=True,p=layout)

うん。すごくいい。
ただ、あんま使わないかな‥
とりあえずメモ。

●joinでの'|'の追加
私普通にテキストの接続でやってましたがこっちの方が
キレイですね。
こんな感じ。

base = 'one|two|three'
add = 'five|six'
mix = '|'.join([base,'fore',add])

print mix

結果

one|two|three|fore|five|six

ウン。。
わかりやすいのがいい感じです。



こんな感じで、気になった事を
今後もこのページにメモしていきたいと思います。


以上。