Python API: implement `PoseBone.children` via `Bone.children`.

Currently `PoseBone.children` is implemented by a linear scan of
the list of armature bones. This is doubly inefficient, since
not only is it scanning all bones, the `obj.data.bones` list
is actually synthetic and generated from Bone children lists.

Instead, use the `Bone.children` native RNA property.

Differential Revision: https://developer.blender.org/D12727
This commit is contained in:
Alexander Gavrilov 2021-10-01 15:30:12 +03:00
parent 497d0400bd
commit 1996efe7aa
1 changed files with 2 additions and 3 deletions

View File

@ -378,10 +378,9 @@ class PoseBone(StructRNA, _GenericBone, metaclass=StructMetaPropGroup):
def children(self):
obj = self.id_data
pbones = obj.pose.bones
self_bone = self.bone
return tuple(pbones[bone.name] for bone in obj.data.bones
if bone.parent == self_bone)
# Use Bone.children, which is a native RNA property.
return tuple(pbones[bone.name] for bone in self.bone.children)
class Bone(StructRNA, _GenericBone, metaclass=StructMetaPropGroup):