我想知道如何使用"选择";在Maya MEL中。问题是:当我使用软件选择一个blendshape对象(这里是FBX格式的一双眼睛(时,我可以通过多种方式选择它,例如";选择-r|eye|eye"选择eye_ blendShapes"选择eyeShape"select eye|eye";。。。就像这个
但是,在我的c++程序中,它不能工作
MGlobal::executeCommand(MString("file -import -namespace "NTemp" -mergeNamespacesOnClash true") + """ + eye_file + """);
//MGlobal::executeCommand(MString("file -import ") + """ + eye_file + """,result);
MGlobal::executeCommand(MString("select -r eyeShape"));
我不知道如何在我的c++代码中选择眼睛,有人可以帮助我吗?非常感谢!
您应该使用python代码
import maya.OpenMaya as om
object_name = ""
om.MGlobal.selectByName(object_name, om.MGlobal.kReplaceList)
c++代码几乎是相同的
API的工作方式与MEL略有不同。首先,与其执行文件命令,不如使用MFileIO
接口。
在C++中选择事物方面,嗯,不要!?!
选择是用户驱动的操作。如果你在C++中发出修改选择列表的命令,那你就错了!
- 您是否确定要实际选择项目?您实际上只是想获取对象或对象的MDagPath吗?如果是后者,则使用MSelectionList执行选择,并在不修改全局选择列表的情况下查询结果(这将导致显示刷新,并存储额外的撤消步骤,并且会很快惹恼用户!(
MSelectionList sl;
if(sl.add("eyeShape")) {
MObject eyeShape;
sl.getDependNode(0, eyeShape);
/* do thing */
}
- 您是否完全确定要选择
eyeShape
?如果我看到有人在C++(或MEL!(中选择单个节点,我会有点担心。我大胆猜测eyeShape
是Maya中网格的一个非常常见的名称
a(。你确定选择的形状是正确的吗?DAG路径如何?你想选择eyeShape的每个实例,还是只关注一个实例?
b(。既然您刚刚将文件导入到命名空间中,那么您为什么要没有用您定义的名称空间限定您试图选择的内容?如果你的用户已经在场景中有一个角色,有一个eyeShape,您的选择命令将简单地首先返回该节点。你的导入的形状将再次返回。结果:你可能有一个bug?
因此,如果您确定选择eyeShape是正确的做法,那么可以修改全局选择列表来执行此操作。不过,请更喜欢MGlobal::selectCommand而不是MGlobal::select/selectByName。这只是意味着您的用户可以撤消该操作。
如果您这样做是因为您将在之后立即发出另一个MEL调用,该调用将对eyeShape进行操作(例如,您是否将某些MEL代码移植到MPxCommand?(。停止只需使用MEL。
"select -r |eye|eye" --> MSelectionList::add(MDagPath(), kReplaceList)
"select eye_blendShapes" --> MSelectionList::add(MString(), kAddList)
"select eyeShape" --> MSelectionList::add(MObject()/MString(), kAddList)
"select eye|eye" --> MSelectionList::add(MObject()/MString(), kAddList)