我有一个 Maya 节点myNode
,它创建一个shadeNode
,该inMesh
属性连接到shapeNode.outMesh
并具有一个属性distance
。
myNode.outMesh -> shapeNode.inMesh
myNode.distance = 10
然后我有一个命令,它适用于形状节点,但需要距离参数,它通过迭代inMesh
连接来实现:
MPlugArray meshConnections;
MPlug inMeshPlug = depNodeFn.findPlug("inMesh");
inMeshPlug.connectedTo(meshConnections, true, false); // in connections
bool node_found = false;
for(uint i = 0; i < numConnections; i++) {
MPlug remotePlug = meshConnections[i];
myNode = remotePlug.node();
if(MFnDependencyNode(myNode ).typeName() == "myNode") {
node_found = true;
break;
}
}
MFnDependencyNode myDepNode(myNode);
MPlug distancePlug = myDepNode.findPlug("distance");
现在我遇到了一个问题,当将另一个节点(另一种类型)应用于 时myShape
,因为依赖关系图现在看起来像这样:
myNode.outMesh -> myOtherNode.inMesh
myOtherNode.outMesh -> shapeNode.inMesh
myNode.distance = 10
我试图删除对 的检查typeName() == "myNode"
,因为我理解文档就像应该递归到父节点一样,当下一个节点返回Mstatus::kInvalidParameter
未知的 MPlug 时,但我无法在distance
不实现进一步图形遍历的情况下到达插头。
即使在中间添加了一些其他节点,可靠地找到父节点的属性的正确方法是什么?
命令本身应该使用距离插头来连接myNode
或连接到某个以递归方式获取值的插头。如果可能,我不想更改myOtherNode
为具有用于转发数据的距离插头和相应的连接。
我在如何获取图中所有节点的问题的答案(python 代码)中找到了答案。我在MPxCommand
now 中查找节点的代码如下所示:
MPlugArray meshConnections;
MPlug inMeshPlug = depNodeFn.findPlug("inMesh");
MItDependencyGraph depGraphIt(inMeshPlug, MFn::kInvalid, MItDependencyGraph::Direction::kUpstream);
bool offset_mesh_node_found = false;
while(!depGraphIt.isDone()) {
myNode = depGraphIt.currentItem();
if(MFnDependencyNode(myNode).typeName() == "myNode") {
offset_mesh_node_found = true;
break;
}
depGraphIt.next();
}
所述MItDependencyGraph
可遍历的上游或下游方向的任图表从对象或插头开始。在这里,我只搜索 的第一个实例myNode
,因为我认为在我的用例中只会有一个。然后它连接图中的距离MPlug
,当插入更多网格变换时,它仍然有效。
该MItDependencyGraph对象允许过滤器节点ID,但只有数字节点ID不是节点名称。当我在所有插件中分配了唯一的 Maya id时,我可能会稍后添加一个过滤器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句