Я пытаюсь понять, как перемещать объект с помощью C ++ Maya API.
Я создаю стык, используя:
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);
}
Но я наблюдаю то же поведение. Нужно ли мне как-то обновлять вид после перемещения объекта? Как я могу постоянно обновлять область просмотра?
Спасибо.