我正试着用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);
}
但我看到了同样的行为。移动对象后,我是否需要以某种方式刷新视图?如何保持视口更新?
谢谢。
答案 0 :(得分:0)
啊,我需要更新主Maya线程中的视口。这可以使用:
完成 MTimerMessage::addTimerCallback
http://download.autodesk.com/us/maya/2010help/API/class_m_timer_message.html