Скрипт призначений для отримання повного списку суглобів (joints) у ієрархії, починаючи з обраного кореневого суглоба. Використовується для аналізу структури ріга, перевірки скелета або подальшої автоматизованої обробки списку кісток.
- Autodesk Maya
- Python API через
maya.cmds
- Працює з DAG-ієрархією об’єктів типу
joint
Скрипт отримує поточне виділення:
cmds.ls(selection=True, type='transform')
Береться перший об’єкт зі списку як корінь ієрархії. Якщо нічого не виділено — виводиться попередження:
Please select a root joint.
Функція get_bones_in_hierarchy(root_joint):
- Викликає:
cmds.listRelatives(root_joint, allDescendents=True, type='joint')
- Повертає всі дочірні суглоби (joints) у глибині ієрархії.
- Якщо дочірніх немає, використовується порожній список (
or []).
- Додає кореневий суглоб на початок списку:
joints.insert(0, root_joint)
У результаті формується список усіх суглобів скелета від кореня до кінцевих ланок.
Якщо список не порожній:
- Друкується заголовок:
----======<<<<<< Bones in List >>>>>>======----
- Виводиться весь список як масив Python.
- Далі друкується:
----======<<<<<< Bones in Hierarchy >>>>>>======----
- Кожен суглоб виводиться окремим рядком (зручно для копіювання або логів).
Якщо дочірніх суглобів не знайдено:
No bones found in the hierarchy.
- Працює рекурсивно через внутрішню логіку
listRelatives(allDescendents=True).
- Враховує тільки об’єкти типу
joint.
- Порядок елементів відповідає порядку обходу DAG, який повертає Maya (не гарантується суворий top-down по гілках).
- У сцені виділити кореневий суглоб скелета.
- Запустити скрипт у Python Script Editor або через меню/шелф.
- У Script Editor буде виведено:
- Повний список кісток
- Той самий список построково
- Перевірка структури скелета перед ріггінгом або експортом.
- Формування списку кісток для подальших скриптів (constraints, baking, retargeting).
- Діагностика ієрархії при зламаних рігах.
- Кореневий об’єкт перевіряється тільки як
transform, а не явно як joint. Якщо вибрано не joint, результат може бути неочікуваним.
- Не фільтруються проміжні transform-и, якщо ієрархія змішана (joint + інші вузли).
- Не обробляє кілька виділених коренів — використовується лише перший об’єкт зі selection list.