MItSurfaceCV, как получить индексы? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь получить индексы SurfaceCV из NurbsSurface.

Когда я использую класс 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 голосов
/ 05 июня 2019

Кажется, что это нормально работает при выборе 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)

Но по какой-то причине он перебирает лишние индексы вне диапазона, когда вы выбрали объект.Я не совсем уверен, почему ..

Вот пример его использования .Я не уверен, что еще мне не хватает, но надеюсь, что это подтолкнет вас в правильном направлении.

...