首先,我们知道所有Shape节点都必须有一个Transform父节点。如果一个Shape节点是他的父Transform节点的最后一个子节点,那么,当我们使用MDagModifier来删除这个Shape节点的时候,他的父节点也会被同时删除掉。这是Maya的一个正常行为,Maya通过这种方式来使场景中避免了出现一些孤立的Transform节点。同样,当使用MDagModifier::createNode() 函数来创建一个新的Dag节点的时候,如果没有指定父节点并且是Shape节点的话,Maya也会同时创建一个新的Transform父节点给他,这和删除节点是一致的。
然而,需要注意的是,MDagModifier::reparentNode()是不会删除空的父节点的,这个和前面提到的是不一样的;另外,delete 命令也不会自动删除空的父节点。
如果当上面的情况发生时,也就是说删除Transform节点的最后一个Shape子节点的时候,如果你不希望Maya自动帮你把父节点也删除掉的话,下面两个API可以帮到你:
MStatus MPxNode::setExistWithoutOutConnections |
( |
bool |
flag |
) |
MStatus MPxNode::setExistWithoutInConnections |
( |
bool |
flag |
) |
将flag设成true的话,当该节点没有任何上游或下游连接时,Maya也不会自动删除该节点了。