2016-10-06 8 views
1

選択したオブジェクトのピボットを選択した頂点の中心に移動しようとしています。この時点までMaya - 中心オブジェクトをロケータ/クラスタにピボットする

私はxformを定義したポイントに得ているが、(objとして定義)オブジェクトを移動することができないようピボット

import maya.cmds as cmds 

sel = cmds.ls(sl=True) 
print sel 
obj = cmds.ls(*sel, o=True) 
print obj 

selVerts = cmds.ls(sl=True) 
tempClstr = cmds.cluster() 
pos = cmds.xform(tempClstr[1], q=True, ws=True, rp=True) 
loc = cmds.spaceLocator() 
cmds.move(pos[0], pos[1], pos[2]) 
cmds.delete(tempClstr) 

piv = cmds.xform (loc[1], piv=True, q=True, ws=True) 
print piv 
cmds.xform(obj, ws=True, piv=(piv[0], piv[1], piv[2])) 

はここで任意の、私が持っているものです私は何が失われているのかを知ることができる余分な目を大いに評価します。

+0

[Maya Python - オブジェクトピボットを選択中心に設定](http://stackoverflow.com/questions/39902493/maya-python-set-object-pivot-to-selection-center) –

答えて

1

あなたのobjはトランスフォームノードである必要がありますが、代わりに各要素が同じ形の配列です。 lsflattenフラグは、すべての頂点が、結果配列のエントリを持っていることを確認します

import pymel.core as pm 
bigNum = 1.0e+9 
sel = pm.ls(sl=True, flatten=True) 
min = pm.dt.Point(bigNum,bigNum,bigNum) 
max = pm.dt.Point(-bigNum,-bigNum,-bigNum) 

for v in sel: 
    p = pm.pointPosition(v) 
    if p.x < min.x: 
     min.x = p.x 
    elif p.x > max.x: 
     max.x = p.x 
    if p.y < min.y: 
     min.y = p.y 
    elif p.y > max.y: 
     max.y = p.y  
    if p.z < min.z: 
     min.z = p.z 
    elif p.z > max.z: 
     max.z = p.z  

center = (min+max)*0.5 

obj = pm.listRelatives(pm.listRelatives(sel[0], p=True), p=True) 
pm.xform (obj, piv=(center.x, center.y, center.z) , ws=True) 
pm.spaceLocator(p=center) 

pm.select(obj) 

はこれを試してみてください。隣接するインデックスを持つ頂点はグループ化されません。

一時的なクラスタを作成するのではなく、ワールドスペースの境界ボックスを繰り返し検索し、その中心を計算します。

listRelativesにネストされた別のlistRelativesを呼び出すと、最初の頂点に関連付けられた変換ノードが取得されます。 (選択したすべての頂点が同じメッシュ内にあると仮定します)。

関連する問題