From d7822981b1fed42e7f9c0a6aed568014892e8af5 Mon Sep 17 00:00:00 2001 From: Alexander Gavrilov Date: Tue, 18 Jan 2022 11:42:58 +0300 Subject: Python API Docs: add non-invert `Bone.convert_local_to_pose` example. This updates the example function to support assigning a subset of bone matrices. The code was tested to work in real use by @gaiaclary. --- .../bpy.types.Bone.convert_local_to_pose.py | 51 ++++++++++++++-------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/doc/python_api/examples/bpy.types.Bone.convert_local_to_pose.py b/doc/python_api/examples/bpy.types.Bone.convert_local_to_pose.py index f3cc95dec61..4a88096cf6f 100644 --- a/doc/python_api/examples/bpy.types.Bone.convert_local_to_pose.py +++ b/doc/python_api/examples/bpy.types.Bone.convert_local_to_pose.py @@ -8,27 +8,42 @@ def set_pose_matrices(obj, matrix_map): "Assign pose space matrices of all bones at once, ignoring constraints." def rec(pbone, parent_matrix): - matrix = matrix_map[pbone.name] + if pbone.name in matrix_map: + matrix = matrix_map[pbone.name] - ## Instead of: - # pbone.matrix = matrix - # bpy.context.view_layer.update() + ## Instead of: + # pbone.matrix = matrix + # bpy.context.view_layer.update() - # Compute and assign local matrix, using the new parent matrix - if pbone.parent: - pbone.matrix_basis = pbone.bone.convert_local_to_pose( - matrix, - pbone.bone.matrix_local, - parent_matrix=parent_matrix, - parent_matrix_local=pbone.parent.bone.matrix_local, - invert=True - ) + # Compute and assign local matrix, using the new parent matrix + if pbone.parent: + pbone.matrix_basis = pbone.bone.convert_local_to_pose( + matrix, + pbone.bone.matrix_local, + parent_matrix=parent_matrix, + parent_matrix_local=pbone.parent.bone.matrix_local, + invert=True + ) + else: + pbone.matrix_basis = pbone.bone.convert_local_to_pose( + matrix, + pbone.bone.matrix_local, + invert=True + ) else: - pbone.matrix_basis = pbone.bone.convert_local_to_pose( - matrix, - pbone.bone.matrix_local, - invert=True - ) + # Compute the updated pose matrix from local and new parent matrix + if pbone.parent: + matrix = pbone.bone.convert_local_to_pose( + pbone.matrix_basis, + pbone.bone.matrix_local, + parent_matrix=parent_matrix, + parent_matrix_local=pbone.parent.bone.matrix_local, + ) + else: + matrix = pbone.bone.convert_local_to_pose( + pbone.matrix_basis, + pbone.bone.matrix_local, + ) # Recursively process children, passing the new matrix through for child in pbone.children: -- cgit v1.2.3