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
相关产品推荐
相关产品推荐

