2

Autodesk Maya 2013 用の 64 ビット プラグインを作成しようとしています。このプラグインの目的は、Kinect を介してオブジェクトをモデル化できるようにすることです。

コンテキストでは、プラグインを使用して、作成されたオブジェクトの CV を選択できます。選択したポイントを移動するように指定するために、選択した CV の位置が常に更新されます。

これが私の問題です。選択したオブジェクトの CV の位置を更新しようとすると、結果が画面に表示されません。

例として、結果を得ることなく多くの方法を試しました:

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) しても、変更された CV の位置は変わりません。

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) Maya で CV を選択しているときに、このポイントを MEL コマンドで移動しようとしました。このために、「MGlobal::executeCommand」関数を使用しますが、それでも何も起こりません。

最後に、私はに変更executeCommandしましたexecuteCommandOnIdle。この場合、オブジェクトは正しく変更されますが、おそらくこのプロシージャは 1 秒間に何度も実行されるため、プロシージャはクラッシュします。

誰かがこの問題について私を助けてくれたり、これについて何か知っていれば幸いです。

4

0 に答える 0