2016-11-19 10 views
0

これはおそらくばかげた質問ですが、私は解決策を見たり見つけたりできません。私はMayaでUVマップを作成しており、Pythonスクリプトを使って変換値を設定する必要があります。しかし、返されたオブジェクトが範囲表記法のときに、リスト内の特定の要素を選択することはできません。例:最初だから、mayaの範囲表記の要素にアクセスする

、私はエッジを選択して、UV-ポイントに変換します。

cmds.select(name+'.e[0:4]', add=True) 
cmds.select(cmds.polyListComponentConversion(fe=True, tuv=True), add=False) 
selection = cmds.ls(sl=True) 
print(selection) 


今、私はこれを印刷するとき、私が取得:

[u'pSphere1.map[0:1]', u'pSphere1.map[4]', u'pSphere1.map[6]', u'pSphere1.map[8]', u'pSphere1.map[10]'] 

今の私があります問題。リストの中には5つの要素がありますが、最初の要素が範囲表記になっているため、6つの点が選択されています。

私は次のようにこのリストを反復:最初のオブジェクトが1つのUVが、2つのない選択されているので、これは、動作していない

var = cmds.polyEditUV(query=True) 

:よう

p = 0 
cmds.select(clear=True) 
for pUV in selection: 
    cmds.select(pUV, add=False) 
    cmds.polyEditUV(uValue=vList[p][0], vValue=vList[p][1], r=True) 
    p = p+1 

またはクエリ文字列pSphere1.map[0:1]は範囲を定義します。私が必要とするのは、範囲を単一のUVに分割すること、またはこの範囲のサブエレメントにアクセスできることです。ただし、lsを使用すると、範囲表記の文字列が返されます。

私は文字列を解析してコロンを探し、コロンの前と後の値を抽出し、整数として再解釈してこれを繰り返しに使うことができますが、もっと簡単な方法が必要です。

答えて

0

あなたが範囲のない孤立したエントリまでのリストを取得するにはflattenオプションでlsを使用することができます。他のオプションは、コンポーネントを選択するために、コードのやや不可解なシリーズを使用していますfilterExpandコマンドです

compressed = cmds.ls('pCube1.vtx[*]') 
print compressed 
# [u'pCube1.vtx[0:7]'] 
expanded = cmds.ls('pCube1.vtx[*]', flatten=True) 
print expanded 
# [u'pCube1.vtx[0]', u'pCube1.vtx[1]', u'pCube1.vtx[2]', u'pCube1.vtx[3]', u'pCube1.vtx[4]', u'pCube1.vtx[5]', u'pCube1.vtx[6]', u'pCube1.vtx[7]'] 

print cmds.filterExpand(compressed, sm = 31) 
# [u'pCube1.vtx[0]', u'pCube1.vtx[1]', u'pCube1.vtx[2]', u'pCube1.vtx[3]', u'pCube1.vtx[4]', u'pCube1.vtx[5]', u'pCube1.vtx[6]', u'pCube1.vtx[7]'] 
filterExpand

(コードのリンクを参照)のみを混合し、選択を制限する供給マスク値ので、混合の選択に特に有用です一度に1つのコンポーネントタイプに変更できます。

+0

恥ずかしい、私は完全にその旗を見落としました。ありがとう。私は返事としてマークし、私の代理人が十分であれば直ちに議決権を行使する。 – phx16

関連する問題