Python 如何从Maya中的脚本更改变形器的权重?
如何从Maya中的脚本更改变形器的权重?Python 如何从Maya中的脚本更改变形器的权重?,python,maya,mel,pymel,maya-api,Python,Maya,Mel,Pymel,Maya Api,如何从Maya中的脚本更改变形器的权重? 此问题最适合于Maya 2013中的Pymel,但如果不可能,我仍有兴趣了解Python、MEL中的答案,或者使用变形器的C++Maya API,可以通过以下方式查询Python中的权重: VertexNb = cmds.polyEvaluate(Mesh, v=1) - 1 weight = cmds.getAttr('{0}.weightList[0].weights[0:{1}]'.format(deformerNode, VertexNb))
此问题最适合于
Maya 2013
中的Pymel
,但如果不可能,我仍有兴趣了解Python
、MEL
中的答案,或者使用变形器的C++Maya API
,可以通过以下方式查询Python中的权重:
VertexNb = cmds.polyEvaluate(Mesh, v=1) - 1
weight = cmds.getAttr('{0}.weightList[0].weights[0:{1}]'.format(deformerNode, VertexNb))
对于混合形状:
VertexNb = cmds.polyEvaluate(Mesh, v=1)
weight = cmds.getAttr('{0}.inputTarget[0].baseWeights[0:{1}]'.format(blendShapeNode, VertexNb))
要设置值,请执行以下操作:
cmds.setAttr('{0}.weightList[0].weights[0:{1}]'.format(deformerNode, VertexNb), *weight, size=len(weight))
您可能会尝试使用.weightList[0].weights[:]但maya不会每次都返回所有值。我想在将答案标记为解决方案之前验证您的答案,但我对
*weight
中的*
感到困惑。它在Python中的含义是什么?*weight是pythonic,用于解压值。例如,当您使用:def myFunc(*args)时,您会看到与*相同的用法,双星**与kwargs(字典)一起使用。目前为止,它只测试了权重查询。我想明确指出,对于不在变形集中的所有索引,attribute.weightList[0].weights
将返回1。我们可以使用.weightList[0].weights.getArrayIndices()在Pymel中获得变形顶点的索引