MItSurfaceCV,如何获取指数?

时间:2019-06-04 18:07:03

标签: python maya pymel maya-api

我正在尝试从NurbsSurface获取SurfaceCV索引。

使用MItSurfaceCV类时,索引太少。

到目前为止,我的代码已选择了NurbsSphere:

sel = om.MSelectionList()
om.MGlobal.getActiveSelectionList(sel, 0)

dg = om.MDagPath()
sel.getDagPath(0, dg)

cvIter = om.MItSurfaceCV(dg)

inds = []
while not cvIter.isDone():

    num1 = om.intPtr()
    num2 = om.intPtr()

    cvIter.getIndex(num1, num2)

    inds.append([num1.value(), num2.value()])

    cvIter.next()

我的输出:

[0, 0]
[1, 0]
[2, 0]
[3, 0]
[4, 0]
[5, 0]
[6, 0]

但是应该是:

[0,0]
[0,1]
...
[0,7]
[1,0]
[1,1]
...
[1,7]
[2,0]
...
[6,7]

感谢任何关注它的人。

1 个答案:

答案 0 :(得分:0)

这在选择nurb的cvs时似乎可以正常工作:

import maya.OpenMaya as om

sel = om.MSelectionList()
om.MGlobal.getActiveSelectionList(sel, 0)

dg = om.MDagPath()
mComponent = om.MObject()  # Create MObject to contain selected components.
sel.getDagPath(0, dg, mComponent)  # Construct dag path and components.

cvIter = om.MItSurfaceCV(dg, mComponent)  # Include components in constructor.

inds = []

def appendIndexes():
    num1 = om.intPtr()
    num2 = om.intPtr()

    cvIter.getIndex(num1, num2)

    inds.append([num1.value(), num2.value()])

while not cvIter.isDone():
    while not cvIter.isRowDone():
        num1 = om.intPtr()
        num2 = om.intPtr()

        cvIter.getIndex(num1, num2)
        inds.append([num1.value(), num2.value()])

        cvIter.next()
    cvIter.nextRow()

print len(inds)

但是由于某种原因,当您选择对象时,它会遍历多余的超出范围的索引。我不太清楚为什么。

Here's an example of it being used。我不确定我还缺少什么,但希望能向正确的方向推动你。