Hey #b3d peeps!!
ボーンの回転角を得ます。
ポーズ無しの状態、すなわち[Tab]キーで編集した状態の値を得るには:
理解のために:
ボーンを配置した後に、プロパティエディタ、DataタブのDisplayの"Name"と"Axes"のチェックを入れておくとはかどります。
ボーンの軸は+yがHead方向となります。
上図のような場合の、Armatureの回転角を取得してみます。
ボーンの取得:
>>> bpy.data.objects['Armature'] bpy.data.objects['Armature'] >>> bpy.data.objects['Armature'].data bpy.data.armatures['Armature'] >>> bpy.data.objects['Armature'].data.bones[0].name 'Bone'
ボーンの軸方向定義
>>> bpy.data.objects['Armature'].data.bones['Bone'].x_axis Vector((1.0, 0.0, 0.0)) >>> bpy.data.objects['Armature'].data.bones['Bone'].y_axis Vector((0.0, 0.0, 1.0)) >>> bpy.data.objects['Armature'].data.bones['Bone'].z_axis Vector((0.0, -1.0, 0.0))
'Bone'のグローバル座標軸上の回転角を取得:
>>> bpy.data.objects['Armature'].data.bones['Bone'].matrix.to_euler() Euler((1.5707963705062866, -0.0, 0.0), 'XYZ') >>> bpy.data.objects['Armature'].data.bones['Bone'].matrix.to_euler().x * 180 / pi 90.00000250447816
'Bone.001'のグローバル座標軸上の回転角を取得:
>>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix.to_euler() Euler((-0.7853981852531433, -1.570796251296997, 0.0), 'XYZ') >>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix.to_euler().x * 180 / pi -45.00000125223908 >>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix.to_euler().y * 180 / pi -89.999995674289
'Bone.002'のグローバル座標軸上の回転角を取得:
>>> bpy.data.objects['Armature'].data.bones['Bone.002'].matrix.to_euler() Euler((-1.5707963705062866, -1.570796251296997, 0.0), 'XYZ') >>> bpy.data.objects['Armature'].data.bones['Bone.002'].matrix.to_euler().x * 180 / pi -90.00000250447816 >>> bpy.data.objects['Armature'].data.bones['Bone.002'].matrix.to_euler().y * 180 / pi -89.999995674289
'Bone.001'のローカル座標軸上の回転角を取得:
>>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix_local.to_euler() Euler((0.7853981256484985, -2.9802322387695312e-08, -1.570796251296997), 'XYZ') >>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix_local.to_euler().x * 180 / pi 44.9999978371445 >>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix_local.to_euler().y * 180 / pi -1.7075472925031877e-06 >>> bpy.data.objects['Armature'].data.bones['Bone.001'].matrix_local.to_euler().z * 180 / pi -89.999995674289