2017-08-01 108 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的幾個程序 –

相關問題