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, В этом случае объект изменяется правильно, но процедура завершается сбоем, возможно, потому что эта процедура выполняется много раз в секунду.

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

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]