2016-03-04 64 views
-1

請耐心等待 - 我對這一切都很陌生。我嘗試了搜索,只找到了我正在尋找的東西,但不是我需要將它們連接起來。使用setAttr和頻道框選擇的正確方法

基本上,我正在嘗試創建一個Python腳本,它允許用戶在Maya的Channel框中簡單地「排除」多個選定的屬性。

到目前爲止,我有:

import maya.cmds as cmds 

selObjs = cmds.ls(sl=1) 
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1) 

print selObjs # returns [u'pCube1'] 
print selAttrs # returns [u'ty'] 

如果我想設置的屬性:

cmds.setAttr(selObjs + "." + selAttrs, '0') 

這當然是不對的,所以我怎麼正確地在這個sceneario執行SETATTR命令? (如果我在頻道框中有多個選定的屬性,則意圖包括設置它們)。

我發現在MEL中,它是這樣工作的。所以我真的只需要幫助搞清楚如何創造這個蟒蛇對方:

string $object[] = `ls -sl`; 
string $attribute[] = `channelBox -q -sma mainChannelBox`; 
for ($item in $object) 
for($attr in $attribute) 
setAttr ($item + "." + $attr) 0; 

後搬家,我需要一個if循環的地方,如果選擇的屬性是一個規模屬性值應爲1 - 但這是我稍後會研究的內容,但不會介意提供建議。

謝謝!

+0

如果你使用你說的「錯誤」的代碼會發生什麼?你有例外嗎?我看到的顯而易見的事情是,你試圖把你的單項清單看作是字符串。您可能想嘗試'cmds.setAttr(selObjs [0] +「。」+ selAttrs [0],'0')',或者只是像寫在MEL代碼中那樣寫'for'循環。 – Blckknght

+0

是的,我學到了一個艱難的方法,那就是我在那裏做的是連接列表(而不是它們的內容)XD - 學習的痛苦 – Gogo

回答

1

所以這裏是我最後想到的:

import maya.cmds as cmds 

selObjs = cmds.ls(sl=1) 
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1) 
scales = ['sy','sx','sz','v'] 


if not selObjs: 
    print "no object and attribute is selected!" 
elif not selAttrs: 
    print "no attribute is selected!" 
else: 
    for eachObj in selObjs: 
     for eachAttr in selAttrs: 
      if any(scaleVizItem in eachAttr for scaleVizItem in scales): 
       cmds.setAttr (eachObj+"."+eachAttr, 1) 
      else: 
       cmds.setAttr (eachObj+"."+eachAttr, 0) 

這將重置基本轉換爲默認值。包括如果是規模和可見性值。

0

我設法想出這個:

import maya.cmds as cmds 

selObjs = cmds.ls(sl=1) 
selAttrs = cmds.channelBox("mainChannelBox", q=1, sma=1) 

for each in selObjs: 
     for eachAttr in selAttrs: 
      cmds.setAttr (each+"."+eachAttr, 0) 

,它的工作完美歸零選定的屬性。 現在我正在找出如何讓腳本識別它是否包含比例屬性 - 將此值更改爲1而不是0.(暫時停留在如何從列表中提取值)的階段,現在我正在考慮如何讓腳本識別它是否包含比例屬性。

相關問題