overhaul: character migrator integration
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
"""Shared helpers for Dynamic Link Manager."""
|
||||
|
||||
import bpy
|
||||
|
||||
|
||||
def descendants(armature):
|
||||
"""Return a set of objects whose parent chain leads to the given armature."""
|
||||
out = set()
|
||||
for ob in bpy.data.objects:
|
||||
p = ob.parent
|
||||
while p:
|
||||
if p == armature:
|
||||
out.add(ob)
|
||||
break
|
||||
p = p.parent
|
||||
return out
|
||||
|
||||
|
||||
def collection_containing_armature(armature):
|
||||
"""
|
||||
Return a collection that contains the armature (for linked character context).
|
||||
Prefers a collection whose name matches the character base (e.g. "Steve" for Steve_Rigify).
|
||||
"""
|
||||
if not armature or armature.name not in bpy.data.objects:
|
||||
return None
|
||||
colls = getattr(armature, "users_collection", []) or []
|
||||
if not colls:
|
||||
return None
|
||||
name = armature.name
|
||||
base = name.replace("_Rigify", "").replace(".001", "").rstrip("0123456789.")
|
||||
for c in colls:
|
||||
if c.name == base or base in c.name or c.name in name:
|
||||
return c
|
||||
return colls[0]
|
||||
Reference in New Issue
Block a user