モデリングサポートのツールを作っていると、フェイスから頂点に変換したり、、、オブジェクトから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のヘルプを参考の上、自作してみてください(`・ω・´)ゞ