2017-05-31 49 views
1

我有一段python代碼可以在Maya中使用,該代碼應該通過UI colorSliderGrp從用戶處獲取顏色,並使用它來設置材質並將顏色設置爲某些柱面。colourSliderGrp和setAttr之間的鏈接

這是我的顏色滑塊,在createUI中函數中使用,我有:

colourControl=cmds.colorSliderGrp(label='Blue', rgb=(0, 0, 1)) 

然後,我有我的setMaterial功能:

def setMaterial(objName, colour, materialType='lambert'): 
    setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True) 
    shaderName = cmds.shadingNode(materialType, asShader=True) 

    cmds.setAttr(shaderName+'.color', colour[0], colour[1], colour[2], type='double3') 

    cmds.surfaceShaderList(shaderName, add=setName) 
    cmds.sets(objName, edit=True, forceElement=setName) 

我訪問setMaterial既OBJNAME和顏色參數在第三個函數中,我收到colourControl所在行的錯誤:

'NoneType' object has no attribute '__getitem__' 

我有以下的默認顏色的例子後嘗試這樣做:

def setMaterial(objName, materialType='lambert', colour=(0, 0, 1)): 
    setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True) 
    shaderName = cmds.shadingNode(materialType, asShader=True) 

    cmds.setAttr(shaderName+'.color', colour[0], colour[1], colour[2], type='double3') 

    cmds.surfaceShaderList(shaderName, add=setName) 
    cmds.sets(objName, edit=True, forceElement=setName) 

我試過其他滑塊以及和試圖打印colourControl,看看我的工作,但我得到了

a|columnLayout73|colorSliderGrp58 

其中a是我的UI窗口的名稱,columnLayout和colorSlider後面的數字在我的代碼的每次運行時都會保持不變。

祝您有美好的一天!

回答

1

我有一個簡單的工作版本的代碼,應該按照您的預期工作。除非重用浮動滑塊組,否則需要使用partial。如果是這樣,您將看到如何使用滑塊並查詢顏色值。

import maya.cmds as cmds 
from functools import partial 

def setMaterial(objName, myColorSlider, matType, *args): 
    colorValue = cmds.colorSliderGrp(myColorSlider, q=True, rgb=True) 
    setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True) 
    shaderName = cmds.shadingNode(matType, asShader=True) 
    cmds.setAttr(shaderName+'.color', colorValue[0], colorValue[1], colorValue[2], type='double3') 
    cmds.surfaceShaderList(shaderName, add=setName) 
    cmds.sets(objName, edit=True, forceElement=setName) 

cmds.window() 
cmds.columnLayout() 
myColorSlider = cmds.colorSliderGrp(label='Blue', rgb=(0, 0, 1)) 
cmds.colorSliderGrp(myColorSlider, edit=True, cc=partial(setMaterial, "pSphere1", myColorSlider, "lambert")) 
cmds.showWindow() 
+0

謝謝!我已經能夠在我的代碼中實現這個功能,即使沒有這個部分,它現在也可以工作。如果我理解正確,部分應該改變球體的屬性,因爲我會改變滑塊的位置?我不是在尋找,只是爲了將顏色值傳遞給另一個函數中的setAttr。 –