в зависимости от того, что вы ищете, cmds.listHistory
или cmds.listConnections
расскажет вам, что входит в данный узел. listHistory
ограничивается подмножеством возможных подключений, которые изменяют изменения узла формы, поэтому, если вас интересуют ограничения, вам нужно будет пройти listConnections
для вашего узла и посмотреть, что находится вверху. Список может быть сколь угодно большим, поскольку он может содержать множество скрытых узлов, таких как переводы единиц, группы и т. Д., Которые вы, вероятно, не хотите заботиться.
Вот простой способ троллить входящие соединения узла и получить дерево входящих соединений:
def input_tree(root_node):
visited = set() # so we don't get into loops
# recursively extract input connections
def upstream(node, depth = 0):
if node not in visited:
visited.add(node)
children = cmds.listConnections(node, s=True, d=False)
if children:
grandparents =()
for history_node in children:
grandparents += (tuple(d for d in upstream(history_node, depth + 1)))
yield node, tuple((g for g in grandparents if len(g)))
# unfold the recursive generation of the tree
tree_iter = tuple((i for i in upstream(root_node)))
# return the grandparent array of the first node
return tree_iter[0][-1]
Который должен производить вложенный список входных соединений, как
((u'pCube1_parentConstraint1',
((u'pSphere1',
((u'pSphere1_orientConstraint1',()),
(u'pSphere1_scaleConstraint1',()))),)),
(u'pCube1_scaleConstraint1',()))
, в котором каждый уровень содержит список входов. Затем вы можете пройти через это, чтобы узнать, включает ли предлагаемое изменение этот элемент.
Это не будет, сообщите вам, если соединение вызовет реальный цикл, однако: это зависит от потока данных в разных узлах. Как только вы определите возможный цикл, вы можете вернуться назад, чтобы увидеть, действительно ли этот цикл (например, два предмета, влияющие на перевод друг друга) или безвредный (я влияю на ваш поворот, и вы влияете на мой перевод).
Вы проверили cmds.listConections()? – Achayan
Да, но если у него нет прямого соединения, это не удастся. –