2

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

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

理想情况下,最好有一个非常简单的示例来显示以下内容:

  1. 将场景中已经存在的渐变节点(渐变纹理节点?)正确存储在 MObject 中
  2. 创建适当斜坡节点函数集的实例,并将其设置为作用于斜坡节点参考
  3. 使用函数集做一些简单的事情,比如更改或添加颜色条目

我想最后要注意的一件事是我正在尝试使用颜色渐变(渐变渐变),而不是曲线(?)渐变,因为它们似乎密切相关。

谢谢!

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

TL;DR - 我似乎找不到应该使用 Python 2.0 API 在 Maya 2016 SP6 中的斜坡节点上运行的函数集。一个简单的工作示例代码片段将不胜感激作为一个开始的地方。

4

1 回答 1

1

.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操作,如果这是一个工具操作,那么麻烦会更少,并且速度差异可能并不重要。

于 2017-06-20T00:55:37.223 回答