Maya API - переместить резюме с помощью Kinect

Я пытаюсь создать 64-разрядный подключаемый модуль для Autodesk Maya 2013. Цель этого подключаемого модуля - возможность моделировать объекты с помощью Kinect.

В контексте, с помощью плагина вы можете выбрать резюме созданного объекта. Чтобы указать, что вы хотите переместить выбранные точки, положение выбранного резюме постоянно обновляется.

Вот моя проблема, когда я пытаюсь обновить позицию выбранного резюме объекта, результат не отображается на экране.

Я пробовал много способов, не получая никакого результата, например:

1) когда я делаю setPosition, точка не обновляется.

for ( ; !iter.isDone(); iter.next() ) {
    iter.getDagPath( mdagPath, mComponent );
    MItSurfaceCV sCvFn( mdagPath, mComponent, true, &stat );

    if ( MS::kSuccess == stat ) {
        for ( ; !sCvFn.isDone(); sCvFn.nextRow() ) {
            for ( ; !sCvFn.isRowDone(); sCvFn.next() ) {
                MPoint pto(pHand.posX, pHand.posY, pHand.posZ);
                sCvFn.setPosition(pto, MSpace::kWorld);
            }
        }
    }
    sCvFn.updateSurface();
 }

2) в этом случае, если вы перебираете массив newCVS перед выполнением setCVs Вы можете увидеть обновленные точки. Но тогда, когда делать setCVs и ищет позицию в массиве CV объекта (делает getCVs) позиция измененного резюме не меняется.

for ( ; !iter.isDone(); iter.next() ) {
    stat = iter.getDagPath( mdagPath, mComponent );

    if(stat == MS::kSuccess) {
        MFnNurbsSurface surf(mdagPath);
        MItSurfaceCV sCvFn( mdagPath, mComponent, true, &stat );
        MPointArray currentCV;
        surf.getCVs(currentCV, MSpace::kWorld); 
        MPointArray newCVS(currentCV.length(), MPoint::origin);
        newCVS.setLength(currentCV.length());

        for(unsigned i = 0; i < currentCV.length(); i++){
            newCVS[i] = newCVS[i] + currentCV[i];
        }

        int index;

        if ( MS::kSuccess == stat ) {

        for ( ; !sCvFn.isDone(); sCvFn.nextRow() ) {
            for ( ; !sCvFn.isRowDone(); sCvFn.next() ) {
                sCvFn.getIndex(indexU, indexV);
                int posArray = indexU * surf.numCVsInV() + indexV;
                index = posArray;
                MVector diff = MPoint(pHand.posX, pHand.posY, pHand.posZ)                   - currentCV[posArray];
                newCVS[posArray] = newCVS[posArray] + diff;
            }
        }
        surf.setCVs(newCVS, MSpace::kWorld);
        surf.updateSurface();
    }
 }

3) Выбрав CV в Maya, я попытался переместить эти точки с помощью команд MEL. Для этого я использую функцию MGlobal::executeCommand, но пока ничего не происходит.

Наконец то я поменял executeCommand в executeCommandOnIdle, В этом случае объект изменяется правильно, но процедура завершается сбоем, возможно, потому что эта процедура выполняется много раз в секунду.

Буду признателен, если кто-нибудь может мне помочь с этой проблемой или что-то знает об этом.

0 ответов

Другие вопросы по тегам