- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在更新我的命令以使用 MDGModifier::commandToExecute 而不是 MGlobal::executeCommand 以提供撤消机制。问题是我的命令序列取决于从以前的命令返回的值,并且由于 MDGModifier 保存所有命令而不是执行它们,我不知道该怎么做......示例:
MStringArray commandResult;
MGlobal::executeCommand("polyCube", commandResult);
MGlobal::executeCommand( "polyTriangulate " + commandResult[0]);
由于 MDGModifier::commandToExecute 没有给我一个返回值(commandResult),我应该将什么传递给第二个命令?我想这很简单,人们已经想通了。任何帮助是极大的赞赏!谢谢。
最佳答案
您可以在命令中使用多个 MDGModifier 实例。在您的命令的 doIt 中,每当子命令依赖于先前子命令创建的 DG 节点的名称时,安排在第一个 MDGModifier 上创建 DG 节点,调用第一个 MDGModifier 的 doIt,然后安排第二个使用 DG 节点现在已知的名称对第二个 MDGModifier 执行子命令,并调用第二个 MDGModifier 的 doIt。您的命令的 redoIt 只是以相同的顺序在两个 MDGModifier 上调用 doIt,而您的命令的 undoIt 以相反的顺序在两个 MDGModifier 上调用 undoIt。
在您给出的示例中,您的第一个子命令是一个 polyCube,它创建多个 DG 节点,因此使用 MDGModifier::commandToExecute 调度 polyCube comamnd 是以一种可撤销的方式实现它的最简单方法。但与 MDGModifer::createNode 或 MDagModifier::createNode 不同,它不会为您提供任何引用已创建节点的 MObject,您需要一个来获取名称。要获得这样的 MObject,您需要在调用 MDGModfier 的 doIt 之前使用 MDGMessage::addNodeAddedCallback 添加回调,然后将其删除。
警告:未经测试!
class MyCommand: public MPxCommand
{
...
MDGModifier m_modifier1;
MDGModifier m_modifier2;
static void NodeAdded( MObject& node, void* clientData )
{
if ( node.hasFn( MFn::kMesh ) )
{
*static_cast< MObject* >( clientData ) = node;
}
}
MStatus doIt( const MArgList& args )
{
MObject node;
MFnDependencyNode nodeFn;
MCallbackId nodeAddedId;
nodeAddedId = MDGMessage::addNodeAddedCallback( NodeAdded, &node );
m_modifier1.commandToExecute( "polyCube" );
m_modifier1.doIt();
MMessage::removeCallback( nodeAddedId );
nodeFn.setObject( node );
m_modifier2.commandToExecute( "polyTriangulate " + nodeFn.name() );
m_modifier2.doIt();
return MStatus::kSuccess;
}
MStatus redoIt()
{
m_modifier1.doIt();
m_modifier2.doIt();
return MStatus::kSuccess;
}
MStatus undoIt()
{
m_modifier2.undoIt();
m_modifier1.undoIt();
return MStatus::kSuccess;
}
...
};
关于api - MDGModifier 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15626408/
我正在更新我的命令以使用 MDGModifier::commandToExecute 而不是 MGlobal::executeCommand 以提供撤消机制。问题是我的命令序列取决于从以前的命令返回的
我是一名优秀的程序员,十分优秀!