Maya - 检查属性是否已启用/禁用

时间:2015-06-30 14:40:16

标签: python maya mel

几个小时以来,我尝试用Maya / MEL / Python解决问题。 我有一个脚本来设置流体容器的值。

E.g。 setAttr“fluidShape1.densityDissipation”0.2

效果很好......

我的问题:实际上无法使用界面更改值(参见图片)。有没有办法找出“文本框”是否已启用?

谢谢!

P.S。我无法上传图片:(。但我希望你们知道我的意思

5 个答案:

答案 0 :(得分:1)

要确定属性是否可设置,请使用

getAttr -settable your_object.your_attribute

如果您可以使用setAttr设置属性,则返回1;如果不能,则返回0。

如果该值在UI中显示属性已锁定,则可以使用

解锁
setAttr -lock 0  your_object.your_attribute

如果用户界面中的值为紫色,它是由某种连接驱动的,那么您需要使用超图或listConnections命令来找出什么是' s驾驶它并决定是否要覆盖连接。

答案 1 :(得分:1)

我已经尝试了 -settable 标志,但由于某种原因,这在我的情况下不起作用。

好吧,我想创建一个FluidContainer。使用此命令将密度设置为零:

setAttr "fluidShape1.densityMethod" 0;

使用-settable标志

getAttr -settable "fluidShapeq.densityScale"

结果是 1. 但是我无法更改相应的滑块。 但是仍然可以通过使用setAttr更改值...这对我来说很困惑!

答案 2 :(得分:0)

好吧我觉得我找到了解决问题的“解决方案”,但我认为我可以做得更好。 我使用以下命令获取滑块和字段的“grougID”:

import maya.cmds as cmds
txt = "attrFieldSliderGrp214" 
cmds.attrFieldSliderGrp( txt, q=True, l=True ) # Density Scale

现在我可以通过以下方式使用启用字段:

gray = cmds.attrFieldSliderGrp(txt, q=True, en=True ) # True/False

答案 3 :(得分:0)

这对我来说很好。

>>> print chr(0)

>>> print "hello" + chr(0)
hello

答案 4 :(得分:0)

通过界面,如果我理解你的意思是AttributeEditor,你可以试试这个。

import pymel.core as pc
def findAEFieldByLabel(label='Dissipation', field_type=pc.ui.AttrFieldSliderGrp):   
    for i in pc.ui.PyUI('MainAttributeEditorLayout').walkChildren():
        if isinstance(i, pc.ui.RowLayout):
            name = i.name()
            try:
                grp = field_type(name)
                if grp.getLabel() == label:
                    return grp
            except:
                pass
print findAEFieldByLabel().getEnable()

我在这里使用了pymel因为它可以帮助你找到python ui的类型。嗯......不过不然!因为它将attrFieldSliderGrps识别为RowLayouts