colourSliderGrp 和 setAttr 之间的链接
Linking between colourSliderGrp and setAttr
我有一段要在 Maya 中使用的 python 代码,它应该通过 UI colorSliderGrp 从用户那里获取颜色并使用它来设置 material 和对某些气缸说颜色。
这是我的颜色滑块,用在我的 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)
我在第三个函数中使用 objName 和 color 参数访问 setMaterial,但在我定义 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 window 的名称,columnLayout 和 colorSlider 之后的数字将在我的代码的每个 运行 中不断变化。
祝你有美好的一天!
我有一个简单的代码工作版本,应该可以按您的预期工作。除非您重复使用浮动滑块组,否则您需要使用部分。如果是这样,您将了解如何使用滑块和查询颜色值。
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()
我有一段要在 Maya 中使用的 python 代码,它应该通过 UI colorSliderGrp 从用户那里获取颜色并使用它来设置 material 和对某些气缸说颜色。
这是我的颜色滑块,用在我的 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)
我在第三个函数中使用 objName 和 color 参数访问 setMaterial,但在我定义 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 window 的名称,columnLayout 和 colorSlider 之后的数字将在我的代码的每个 运行 中不断变化。
祝你有美好的一天!
我有一个简单的代码工作版本,应该可以按您的预期工作。除非您重复使用浮动滑块组,否则您需要使用部分。如果是这样,您将了解如何使用滑块和查询颜色值。
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()