コンポーネントを選択した順番で取得する!!




通常、選択を取得する時に「cmds.ls(sl=True, fl=True)」っとすることが多いかと思いますが、これではコンポーネントのID順になってしまいます。

だけど、、、

選択した順番で
取得したい!!

と思いませんか!?そんな時に便利な方法です!(`・ω・´)ゞ

コチラは、AUTODESK KNOWLEDGE NETWORKでも紹介されている「lsコマンドで、選択したコンポーネント(頂点、エッジ、フェース)の名前を選択した順番で取得したい」を元に、使いやすくしたものになります。

lsコマンド

Maya2012から、「cmds.ls」にフラグ「orderedSelection(os)」が追加されたようで、コレを使って「cmds.ls(os=True, fl=True)」とすることで、選択した順番で取得できるようです!

が!

コレを使うには、下記の「Preferences」の「Selection」にある「Track selection order」がONの場合に有効になるようです。

ツールを使う人に設定してもらうっというのは、現実てきではないですよね、、、(´・ω・`)

こちらの設定は、コマンドからも設定・取得することができますので、ツールで設定を書き換えてしまいたいっと思います!

関数の作成

選択の取得をする度に、「Track selection order」が有効になっているか確認するコードを書くのはアレなので、関数化したいと思います(`・ω・´)ゞ

from maya import cmds

def getOrderedSelection():
	# Track selection orderが有効になっているか確認
	if not cmds.selectPref(q=True, tso=True):
		# Track selection orderを有効にする
		cmds.selectPref(tso=True)
	
	# フラグosを使って、選択を取得し返す。
	return cmds.ls(os=True, fl=True)