X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Farmature.py;fp=blender%2Fio_mspgl%2Farmature.py;h=ccf5a5538aa8e12464af47ca76f56d9ecd72b444;hb=b61c103559c83d6fe7309f2ca4489f09e701c4cf;hp=0000000000000000000000000000000000000000;hpb=fcdc70624618488c514676874006f5eddc4e63df;p=libs%2Fgl.git diff --git a/blender/io_mspgl/armature.py b/blender/io_mspgl/armature.py new file mode 100644 index 00000000..ccf5a553 --- /dev/null +++ b/blender/io_mspgl/armature.py @@ -0,0 +1,39 @@ +class Link: + def __init__(self, bone): + self._bone = bone + self.name = self._bone.name + self.index = None + self.parent_name = None + if self._bone.parent: + self.parent_name = self._bone.parent.name + self.parent = None + self.base = self._bone.head_local + +class Armature: + def __init__(self, arm): + self._armature = arm + + self.links = [Link(b) for b in self._armature.bones] + for i, l in enumerate(self.links): + l.index = i + + links_by_name = dict((l.name, l) for l in self.links) + for l in self.links: + if l.parent_name: + l.parent = links_by_name[l.parent_name] + + def sort_links(self): + sorted_links = [] + for l in self.links: + if l in sorted_links: + continue + if not l.parent: + sorted_links.append(l) + else: + chain = [l] + p = l.parent + while p and p not in sorted_links: + chain.append(p) + p = p.parent + sorted_links += reversed(chain) + self.links = sorted_links