Hej, jak w temacie, piszę skrypt, który zapisuje pozycję kości a dokładnie head, tail i rotation_euler.
Męczę się z tym dość długo i niestety nie mogę przebrnąć przez pewien etap.
Oto kod który napisałem:
def getPosition(a_name):
bones=bpy.data.armatures[a_name].bones
bone_struct=[]
for bone in bones:
bone_ends=[]
bpy.context.active_object.data.bones[bone].select=True
bone_ends.append(bone.name)
bone_ends.append(bpy.context.active_pose_bone.head)
bone_ends.append(bpy.context.active_pose_bone.tail)
bone_ends.append(bpy.context.active_pose_bone.rotation_euler)
bone_struct.append(bone_ends)
return(bone_struct)
#zapisywanie animacji do pliku
def saveAnimation(a_name, file_name):
scene=bpy.context.scene
frames=scene.frame_end - scene.frame_start + 1
myFile=open(file_name,"w")
scene.frame_current=0
i=0
j=0
for i in range(scene.frame_start, scene.frame_end + 1):
myFile.write("Frame: %d;\n" % scene.frame_current)
scene.frame_current=i
scene.frame_set(scene.frame_current)
#korzystam z wczeniej utworzonej funkcji getPosition
myData=getPosition(a_name)
for line in myData:
myFile.write(str(line))
myFile.write("\n")
myFile.close()
return
saveAnimation('Armature', 'animation.txt')
W wyniku otrzymuje plik w którym w każdej klatce i przy każdej kości mam wartości obecnie aktywnej kości z klatki 0.
Stosując w konsoli komendę bpy.context.active_pose_bone.head dostaję poprawne wyniki przy zmianie klatki.
Więc sądzę, że kieruje się w dobrym kierunku, ale problem tkwi właśnie z aktywacją kości, której nie potrafie zaimplementować.
Wcześniej próbowałem zapisać pozycję nieco inaczej:
def getPosition(a_name):
bones=bpy.data.armatures[a_name].bones
bone_struct=[]
i=0
for bone in bones:
bone_ends=[]
bone_ends.append(bone.name)
bone_ends.append(bones[i].head)
bone_ends.append(bones[i].tail)
bone_struct.append(bone_ends)
i=i+1
return(bone_struct)
W wyniku otrzymywałem pozycję każdej kości, ale wyłącznie w pierwszej klatce.
Także drodzy koledzy proszę was o pomoc.