選択を変更せずコンポーネントリストを変換する!!




モデリングサポートのツールを作っていると、フェイスから頂点に変換したり、、、オブジェクトからUVに変換したり、、、

しますよね!?

その時に、コンポーネントを変換して、「cmds.ls(sl=True)」とかで再取得して処理をする、、、間違いではないんですが、、、

処理が遅くなります
(゚A゚;)

そんな時に便利なのが、「polyListComponentConversion」です!(*´ω`*) これを使えば、Maya上での選択変換を行わず、変換後のリストを取得することができます!

しかーし!

そのままだと、「[u’pSphere1.vtx[256:257]’, u’pSphere1.vtx[276:277]’]」のように、連続したIDはまとめられてしまいます・・・

繰り返し処理しにくいですね、、、

そこで使うのが「ls」の「fl=True」です!すると、連続したIDがあっても、1つ1つリストにしてくれます!

よく使う変換の関数を、いっぺんにご紹介いたします!

from maya import cmds

#
# コンポーネントのIDが連続していてもまとめられないようにする関数
#
def toFlatten(components):
	return cmds.ls(components, fl=True, l=True)

#
# 頂点のリストに変換する関数
#
def toVertex(components):
	components = cmds.polyListComponentConversion(
					components, fv=1, ff=1, fe=1, fuv=1, fvf=1, tv=1
					)
	return toFlatten(components)

#
# エッジのリストに変換する関数
#
def toEdge(components):
	components = cmds.polyListComponentConversion(
					components, fv=1, ff=1, fuv=1, fvf=1, te=1
					)
	return toFlatten(components)

#
# すべてのコンポーネントが含まれたエッジに変換する関数
#
def toContainedEdge(components):
	components = cmds.polyListComponentConversion(
					components, fv=1, ff=1, fuv=1, fvf=1, te=1, internal=1
					)
	return toFlatten(components)

#
# フェイスに変換する関数
#
def toFace(components):
	components = cmds.polyListComponentConversion(
					components, fv=1, fe=1, fuv=1, fvf=1, tf=1
					)
	return toFlatten(components)

足りない関数は、Mayaのヘルプを参考の上、自作してみてください(`・ω・´)ゞ