有没有一种方法可以检查一个对象是否依赖于另一个对象的父对象、约束或连接?我想在为一个对象建立父子关系之前做这个检查,看看它是否会导致依赖循环。在
我记得3DsMax有一个命令可以做到这一点。我检查了OpenMaya
,但什么也没找到。有cmds.cycleCheck
,但这只在当前有一个循环时有效,这对我来说太晚了。在
棘手的是,这两个对象可能位于场景层次中的任何位置,因此它们可能有也可能没有直接的父子关系。在
编辑
比较容易检查层次结构是否会导致任何问题:
children = cmds.listRelatives(obj1, ad = True, f = True)
if obj2 in children:
print "Can't parent to its own children!"
不过,检查约束或连接是另一回事。在
这不是最优雅的方法,但它是一种快速而肮脏的方法,目前看来效果还不错。其思想是,如果发生循环,则只需撤消操作并停止脚本的其余部分。用钻机测试,不管连接有多复杂,它都会抓住它。在
根据您要查找的内容,}将告诉您给定节点的内容。
cmds.listHistory
或{listHistory
仅限于驱动形状节点更改的可能连接的子集,因此如果您对约束感兴趣,则需要遍历节点的listConnections
,并查看上游的内容。这个列表可以任意大,因为它可能包含许多隐藏的节点,比如单元转换、组部件等等,而这些都是您可能不想关心的。在这里有一个简单的方法来控制一个节点的传入连接并得到一个传入连接的树:
它应该生成一个嵌套的输入连接列表,比如
^{pr2}$其中每个级别都包含一个输入列表。然后你可以浏览一下,看看你提议的变更是否包括这个项目。在
然而,这个不会告诉您连接是否会导致真正的循环:这取决于不同节点内的数据流。一旦你确定了可能的循环,你就可以回去看看这个循环是真的(比如两个影响彼此翻译的项目)还是无害的(我影响你的旋转,你影响我的翻译)。在
相关问题 更多 >
编程相关推荐