You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maya中xform获取物体位置后,setAttr设置另一物体位置报错如何解决?

Maya cmds.setAttr报错Invalid flag 'tx':解决xform坐标赋值问题

问题场景

尝试通过xform查询pSphere1的世界空间坐标(参数r=True, ws=True, q=True, t=True),并将结果通过setAttr赋值给pSphere2的平移属性。执行代码后print能输出正确坐标,但setAttr报错:

Error: TypeError: file line 1: Invalid flag 'tx'

原代码:

pos = cmds.xform('pSphere1', r=True, ws=True, q=True, t=True )
print(pos)
cmds.setAttr('pSphere2', tx=pos[0], ty=pos[1], tz=pos[2])

问题原因

你误解了setAttr的用法:tx/ty/tz不是setAttr的命令参数,而是物体的属性名。直接传入物体名pSphere2后,命令无法识别这些"flag",这和xform返回的数据类型无关——xform返回的浮点列表完全符合setAttr的数值要求。

解决方案

有两种正确的写法:

写法1:单独指定每个平移属性的完整路径

直接给每个属性单独赋值,属性路径格式为物体名.属性名:

pos = cmds.xform('pSphere1', r=True, ws=True, q=True, t=True )
cmds.setAttr('pSphere2.tx', pos[0])
cmds.setAttr('pSphere2.ty', pos[1])
cmds.setAttr('pSphere2.tz', pos[2])

写法2:一次性设置translate复合属性

利用translate是复合属性的特性,直接传入三个数值的列表:

pos = cmds.xform('pSphere1', r=True, ws=True, q=True, t=True )
cmds.setAttr('pSphere2.translate', *pos)

这里用*pos解包列表,等价于传入pos[0], pos[1], pos[2]。

内容的提问来源于stack exchange,提问作者Heelaque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:15:26