From 894dd16f3c828d3da1f7efb7c69f96e38f967afc Mon Sep 17 00:00:00 2001 From: JaschaW Date: Wed, 19 Nov 2025 08:22:49 +0200 Subject: [PATCH] Guide traversal support in core dag and component guide using the newer logic. --- release/scripts/mgear/core/dag.py | 36 +++++++++++++++++++ .../scripts/mgear/shifter/component/guide.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/release/scripts/mgear/core/dag.py b/release/scripts/mgear/core/dag.py index c5b87b99..66b55c41 100644 --- a/release/scripts/mgear/core/dag.py +++ b/release/scripts/mgear/core/dag.py @@ -255,3 +255,39 @@ def findComponentChildren3(node, name, sideIndex): children.append(item) return [pm.PyNode(x) for x in children] + + +def findComponentChildren4(node: pm.PyNode, name: str, sideIndex: str) -> list[pm.PyNode]: + """ + Return all transform DAG nodes that belong to a given component. + + :param pm.PyNode node: The root node whose hierarchy to search. + :param str name: Component name, for example "root" or "ik_hand_root". + :param str sideIndex: Side or index string, for example "C0". + :return: Matching transform nodes belonging to the component. + :rtype: list[pm.PyNode] + """ + name_tokens = name.split("_") + prefix_len = len(name_tokens) + 1 + children = set() + + # -- All descendant transforms plus the node itself + paths = pm.listRelatives(node.name(), + allDescendents=True, + fullPath=True, + type="transform") or [] + + for path in paths: + check_name = path.split("|")[-1] + parts = check_name.split("_") + + # -- Check if transform belongs to the component + is_component = (len(parts) >= prefix_len + and parts[:prefix_len - 1] == name_tokens + and parts[prefix_len - 1] == sideIndex) + + if is_component: + children.add(path) + + return [pm.PyNode(x) for x in children] + diff --git a/release/scripts/mgear/shifter/component/guide.py b/release/scripts/mgear/shifter/component/guide.py index c5712a1d..fb8e1f57 100644 --- a/release/scripts/mgear/shifter/component/guide.py +++ b/release/scripts/mgear/shifter/component/guide.py @@ -590,7 +590,7 @@ def rename(self, root, newName, newSide, newIndex): # objList = dag.findComponentChildren(self.parent, # oldName, oldSideIndex) # NOTE: Experimenta using findComponentChildren3 - objList = dag.findComponentChildren3(self.parent, oldName, oldSideIndex) + objList = dag.findComponentChildren4(self.parent, oldName, oldSideIndex) newSideIndex = newSide + str(self.values["comp_index"]) objList.append(self.parent) for obj in objList: