python - colorSliderGrp 和 setAttr 之间的链接

标签 python maya

我有一段要在 Maya 中使用的 python 代码,该代码应该通过 UI colorSliderGrp 从用户那里获取颜色,并使用它来设置 Material 以及某些圆柱体的颜色。

这是我的颜色 slider ,在我拥有的 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,但在定义 colorControl 的行中出现错误:

 '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)

我也尝试了其他 slider ,并尝试打印 colorControl 以查看我正在使用的内容,但我得到了

a|columnLayout73|colorSliderGrp58

其中 a 是我的 UI 窗口的名称,columnLayout 和 colorSlider 之后的数字将在每次运行代码时不断变化。

祝你有美好的一天!

最佳答案

我有一个简单的代码工作版本,它应该按您的预期工作。除非您重复使用 float slider 组,否则您需要使用部分。如果是这样,您将看到如何使用 slider 并查询颜色值。

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()

关于python - colorSliderGrp 和 setAttr 之间的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44292982/

相关文章:

python - "Fraction"类型和分数一起出现在我打印的列表中

python - 如何使用python从mp3文件中提取原始数据?

Python 线程/线程实现

menu - 如何安全地将 menuItems 添加到 Maya MEL 中的现有菜单

python - cvxpy :'sum_entries' 未定义

python - 多个导出是否可以展平一个长的 Python 函数?

python - 如何更改 Maya 2013 中的 python 版本?

c++ - 尝试访问数组时数据从数组中丢失

python - 使用 python 在 Maya 中选择单个面

python - 我的对象重命名脚本中发生了什么?