我试图将选定的对象枢轴移动到选定顶点的中心。
我已经明确了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 :(得分:1)
您的obj
需要是变换节点,而是一个数组,其中每个元素的形状相同。
试试这个:
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)
flatten
的{{1}}标志将确保每个顶点在结果数组中都有一个条目。具有相邻索引的顶点不会被分组。
不是制作临时群集,而是迭代查找世界空间边界框,然后计算其中心。
对嵌套在另一个ls
中的listRelatives
的调用获取与第一个顶点关联的变换节点。 (它假设所有选定的顶点都在同一个网格中。)