我正在尝试使用 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);
}
但我看到了同样的行为。移动对象后是否需要以某种方式刷新视图?如何保持视口更新?
谢谢你。