correct finger rotation
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import bpy
|
import bpy
|
||||||
from random import random
|
from random import random
|
||||||
|
from mathutils import Matrix, Quaternion
|
||||||
|
|
||||||
ob = bpy.data.objects['Sphere']
|
ob = bpy.data.objects['Sphere']
|
||||||
frame_number = 0
|
frame_number = 0
|
||||||
@@ -14,7 +15,7 @@ thumb_rot_bone = "thumb_3"
|
|||||||
def grab_movement(open):
|
def grab_movement(open):
|
||||||
# Todo:
|
# Todo:
|
||||||
# select the 4 base finger bones
|
# select the 4 base finger bones
|
||||||
# Then: bpy.ops.transform.rotate(value=0.1, orient_axis='X', orient_type='LOCAL')
|
# Then:
|
||||||
# To rotate around local axis (will cause to grab)
|
# To rotate around local axis (will cause to grab)
|
||||||
# Then do the same with thumb, but only around local Z axis!
|
# Then do the same with thumb, but only around local Z axis!
|
||||||
bpy.ops.object.mode_set(mode='OBJECT')
|
bpy.ops.object.mode_set(mode='OBJECT')
|
||||||
@@ -29,20 +30,22 @@ def grab_movement(open):
|
|||||||
else:
|
else:
|
||||||
angle = 0.8
|
angle = 0.8
|
||||||
|
|
||||||
# Select all fingers
|
# Deselect all fingers
|
||||||
for bone in arm.pose.bones: # Deselect all selected bones
|
for bone in arm.pose.bones: # Deselect all selected bones
|
||||||
bone.bone.select = False
|
bone.bone.select = False
|
||||||
|
|
||||||
|
# Rotate fingers
|
||||||
for name in finger_grab_bones:
|
for name in finger_grab_bones:
|
||||||
bone = arm.pose.bones.get(name).bone
|
bone = arm.pose.bones.get(name)
|
||||||
#if bone: bone.select = True
|
# Bones need to be selected when adding keyframes, otherwise blender will throw an error:
|
||||||
|
# https://blender.stackexchange.com/questions/1828/what-constitutes-a-context-in-pose-mode
|
||||||
|
bone.bone.select = True
|
||||||
# rotate
|
# rotate
|
||||||
# TODO: change to posebone X axis instead of world X.l
|
|
||||||
axis = bone.x_axis
|
axis = bone.x_axis
|
||||||
bone.rotation_euler = (obj.rotation_euler.to_matrix() * Matrix.Rotation(angle, 3, 'X')).to_euler()
|
bone.rotation_quaternion = bone.rotation_quaternion @ Quaternion(axis, angle)
|
||||||
#bpy.ops.transform.rotate(value=angle, orient_axis=axis, orient_type='LOCAL')
|
# bone.matrix = bone.matrix @ Matrix.Rotation(-angle, 4, axis)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Add keyframe
|
||||||
bpy.ops.anim.keying_set_active_set(type='Rotation')
|
bpy.ops.anim.keying_set_active_set(type='Rotation')
|
||||||
bpy.ops.anim.keyframe_insert(type='Rotation')
|
bpy.ops.anim.keyframe_insert(type='Rotation')
|
||||||
|
|
||||||
@@ -57,6 +60,11 @@ def grab_movement(open):
|
|||||||
|
|
||||||
# Script start
|
# Script start
|
||||||
open = False
|
open = False
|
||||||
|
#if len(bpy.data.scenes['Scene'].keying_sets) == 0:
|
||||||
|
# # Add new keying set
|
||||||
|
# bpy.ops.anim.keying_set_add()
|
||||||
|
# # Activate keying set
|
||||||
|
# bpy.ops.anim.keying_set_active_set()
|
||||||
|
|
||||||
for i in range(50):
|
for i in range(50):
|
||||||
x = random()*max_dist
|
x = random()*max_dist
|
||||||
|
|||||||
Reference in New Issue
Block a user