【问题标题】:Maya - Center Object Pivot to Locator/ClusterMaya - 中心对象枢轴到定位器/集群
【发布时间】:2016-10-06 14:13:13
【问题描述】:

我正在尝试将选定的对象枢轴移动到所选顶点的中心。

我已经到了定义 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]) ) 

这就是我所拥有的,任何可以发现我缺少的东西的额外眼睛将不胜感激。

【问题讨论】:

标签: python-2.7 maya maya-api


【解决方案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)

lsflatten 标志将确保每个顶点在结果数组中都有一个条目。具有相邻索引的顶点不会被分组。

它不是做一个临时的集群,而是迭代找到世界空间边界框,然后计算它的中心。

对嵌套在另一个listRelatives 中的listRelatives 的调用获取与第一个顶点关联的变换节点。 (假设所有选定的顶点都在同一个网格中)。

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多