2017-08-01 176 views
0

我还在学习Maya中的Python。我无法让我的代码工作。我正在尝试创建一个定位器并在我的选择下将它父项创建,然后将定位器转换为零。Autodesk Maya中的setAttr函数

import maya.cmds as cmds 

sel = cmds.ls(selection = True) 
loc = cmds.spaceLocator() 
cmds.parent(loc, sel) 
cmds.setAttr(loc, "translateX", 0) 

我总是收到此错误信息:有位其他代码

#Error: TypeError: file <maya console> line 7: Invalid argument 1, '[u'locator6']'. Expected arguments of type (list,) 

有时候,我得到这样的:

#There does not exist something with name 'translateX' 

我知道它的工作,当我更换loc定位器的名称,但我尽量保持代码的通用性,并且不会绑定到定位器的名称。

setAttr函数在具有变量的Maya中如何工作?玛雅文档和其他问题在各种论坛忍不住...:/

回答

1

setAttr需要一个完整的属性作为它的参数:

cmds.setAtt(loc + ".translateX", 0) 

其中loc必须是一个字符串。 spaceLocator像大多数创建命令一样返回一个列表,而不是单个字符串。所以整个事情是:

sel = cmds.ls(selection = True) 
loc = cmds.spaceLocator() 
cmds.parent(loc, sel) 
cmds.setAttr(loc[0] + ".translateX", 0) 
+0

这对我有用,谢谢! :) –

+0

如果它的工作,你应该将其标记为已接受,以便其他人将知道如果他们有相同的问题使用它 – theodox

+0

对不起,该论坛不活跃。 标记了! :) –

0

我知道你似乎会问要求玛雅CMDS但我想附和这个作为替代。

在PyMel中,spaceLocator函数返回创建的对象本身。属性是对象内部的方法,允许您执行以下操作。我喜欢PyMel的一个原因!

import pymel.core as pm 

sel = pm.selected()[0] 
loc = pm.spaceLocator() 
pm.parent(loc, sel) 
loc.translateX.set(0) 
+0

谢谢! 但我正在学习python不仅为maya –

+0

我不知道你的意思是,但pymel是另一个python库(如maya.cmds),它是maya的一部分。这取决于你喜欢哪一个,但我更喜欢pymel出于各种原因。 –

+0

是的,但我不想学习更多Pymel语法和一些只针对玛雅人的功能,当我的实际目的是学习Pyhon的几个程序 –

相关问题