[Bf-blender-cvs] [d7822981b1f] master: Python API Docs: add non-invert `Bone.convert_local_to_pose` example.

Alexander Gavrilov noreply at git.blender.org
Tue Jan 18 09:46:31 CET 2022


Commit: d7822981b1fed42e7f9c0a6aed568014892e8af5
Author: Alexander Gavrilov
Date:   Tue Jan 18 11:42:58 2022 +0300
Branches: master
https://developer.blender.org/rBd7822981b1fed42e7f9c0a6aed568014892e8af5

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.

===================================================================

M	doc/python_api/examples/bpy.types.Bone.convert_local_to_pose.py

===================================================================

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:



More information about the Bf-blender-cvs mailing list