几个小时以来,我尝试用Maya / MEL / Python解决问题。 我有一个脚本来设置流体容器的值。
E.g。 setAttr“fluidShape1.densityDissipation”0.2
效果很好......
我的问题:实际上无法使用界面更改值(参见图片)。有没有办法找出“文本框”是否已启用?
谢谢!
P.S。我无法上传图片:(。但我希望你们知道我的意思
答案 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