使用Maya 2016 SP6 Python 2.0 API处理ramp节点的正确方法是什么?

时间:2017-06-14 17:21:03

标签: python maya maya-api

我是使用Python 2.0 API进行编程的新手(已经使用了Python Maya.cmds)。据我了解,我应该能够使用相应的斜坡节点功能集来操纵通过MObject引用的斜坡节点。不幸的是,我还没有找到任何关于如何正确执行此操作的示例,甚至还没有找到有关函数集调用的任何真实清晰信息。在API文档中,有一个" MRampAttribute" class,并且描述说它实际上是用于创建和使用ramp属性的" Functionset。"不幸的是,我没有运气好运......

我确实找到了另一条可能相关的信息here,它是斜坡节点的兼容函数集的简短列表,包括以下内容:kBase,kNamedObject,kDependencyNode,kTexture2d和kRamp。不幸的是,除了它们出现在MFn类下的常量列表中之外,我还没有真正找到关于这些函数集的文档。

理想情况下,有一个非常简单的示例显示以下内容会很棒:

  1. 正确存储MObject中场景中已存在的渐变节点(渐变纹理节点?)
  2. 创建正确的斜坡节点功能集的实例,并将其设置为对斜坡节点参考
  3. 进行操作
  4. 使用功能集来执行简单的操作,例如更改或添加颜色条目
  5. 我想最后要注意的是,我正在尝试使用颜色渐变(渐变斜坡),而不是曲线(?)渐变,因为看起来它们是紧密相关的。

    谢谢!

    更新:它看起来越来越像问题可能是Python 2.0 API非常不完整,特别是因为这个直接的Maya 2016 SP6没有扩展。正在调查其他一些问题,看来MItDag这样的基本内容在扩展2中被添加,并且在基本版本中不可用...

    TL; DR - 我似乎无法使用Python 2.0 API找到应该在Maya 2016 SP6中的ramp节点上运行的函数集。一个简单的工作示例代码片段将非常受欢迎作为入门的地方。

1 个答案:

答案 0 :(得分:0)

除了.colorEntryList属性是复合数组属性之外,Ramp节点不是特别特殊;它没有得到特殊的功能集。而且,令人困惑的是,.colorEntryList 一个MRampAttribute,它只是一个常规的索引复合属性。

 test = cmds.createNode('ramp')
node = om.MGlobal.getSelectionListByName(test).getDependNode(0)
depfn = om.MFnDependencyNode(node)
compound_plug = depfn.findPlug("colorEntryList", False)
for idx in range(compound_plug.numElements()):
    index_plug = compound_plug.elementByPhysicalIndex(idx)
    pos_handle = index_plug.child(0).asMDataHandle() 
    color_handle = index_plug.child(1).asMDataHandle()    

    print idx, pos_handle.asFloat(), ":",  color_handle.asFloat3()

您会注意到元素按照您期望的顺序而不是,您需要检查pos_handle中的位置值以找到您想要的位置值。节点上的其他属性只是通用属性。

如果你没有在MPxCommand中执行此操作,你可能只想用maya.cmds执行此操作,这不是一件麻烦事,如果这是一个工具操作,速度差异可能不大。< / p>