Maya c ++ API, анимация объекта в потоке

Я пытаюсь обернуть голову, перемещая объект, используя c ++ API Maya.

Я создаю соединение, используя:

MFnIkJoint* rootJoint = new MFnIkJoint();
MObject rootTransform = rootJoint->create(MObject::kNullObj, &status);

Затем я запускаю поток, который перемещает это соединение:

bool dataStreamExit = false;
MStatus stat = MThreadAsync::init();
if (MStatus::kSuccess != stat) {
MString str = MString("Error creating MThreadAsync");
MGlobal::displayError(str);
}
else
{
MThreadAsync::createTask(ApplyData, this, NULL, NULL);
}

Где функция потока:

MVector currentCamPos;

MThreadRetVal ApplyData(void* data)
{
MStatus status;

while(dataStreamExit == false)
{

currentCamPos.x += 0.0001;

status = rootJoint->setTranslation(currentCamPos, MSpace::kTransform);

Sleep(1);
}
return (MThreadRetVal)0;

}

Я запускаю эту функцию, соединение создается в области просмотра и начинает двигаться. Затем через несколько секунд он перестает двигаться в области просмотра, но значения перевода в редакторе атрибутов продолжают обновляться.

Поток продолжает присваивать данные, но область просмотра перестает обновляться. Я попробовал этот подход также:

MPlug plug = MFnDependencyNode(rootTransform ).findPlug("tx", false, &status);
if (status == true)
{
plug.setFloat(currentCamPos.x);
}

Но я вижу то же самое поведение. Нужно ли как-то обновить вид после перемещения объекта? Как я могу обновлять область просмотра?

Спасибо.

0

Решение

Ах, мне нужно обновить область просмотра в главном потоке майя. Это можно сделать с помощью:

MTimerMessage::addTimerCallback

http://download.autodesk.com/us/maya/2010help/API/class_m_timer_message.html

0

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

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

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