Blenderforum
Timeline Keyframes per Python generieren - Druckversion

+- Blenderforum (https://blender-forum.de/forum)
+-- Forum: Blender Hilfe (https://blender-forum.de/forum/forumdisplay.php?fid=4)
+--- Forum: Support (https://blender-forum.de/forum/forumdisplay.php?fid=5)
+--- Thema: Timeline Keyframes per Python generieren (/showthread.php?tid=380)



Timeline Keyframes per Python generieren - moevenbaer - 16.10.2023

Hallo und guten Tag.

Ich versuche für ein markiertes Object die Keyframes für die Animation per Phyton zu generieren:



Code:
import bpy
bpy.context.scene.frame_start =  1
bpy.context.scene.frame_end  = 201

for f in range(2,12,2):
    bpy.context.scene.frame_current = 20*f
    bpy.ops.anim.keyframe_delete_v3d()

for f in range(2,12,2):
    bpy.context.scene.frame_current = 20*f
    px=0.0
    py=f
    pz=0.0
    bpy.context.object.location = (px,py,pz)
    bpy.ops.anim.keyframe_insert_by_name(type="Location")
Ich erwarte eigentlich, dass die einzelnen Keyframes mit unterschiedlichen Locations (y=2,4,6,...) versehen sind, aber im Ergebnis haben sie alle nur den ersten Positionswert.


Was denke ich falsch?



Ekkehard

Blender 6.4.0
   


RE: Timeline Keyframes per Python generieren - moevenbaer - 16.10.2023

Zwar weiß ich noch nicht, was ich falsch gedacht habe, aber ich habe einen Weg für das aktive Objekt gefunden (Positionierung, Drehung und Skalierung):

Code:
import bpy, math

obj=bpy.context.active_object

# Alte Keyframes löschen
for f in range(2,12,2):
    bpy.context.scene.frame_current = 20*f
    bpy.ops.anim.keyframe_delete_v3d()

bpy.context.scene.frame_start   =   1
bpy.context.scene.frame_end     = 201
bpy.context.scene.frame_current =   1

for f in range(2,12,2):
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++#
    px=0.0
    py=f*1.0
    pz=0.0
    obj.location = (px,py,pz)
    obj.keyframe_insert(data_path="location", frame=f*20)
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++#
    rdx=0.0
    rdy=0.0
    rdz=f*10.0
    rex=rdx*math.pi/180
    rey=rdy*math.pi/180
    rez=rdz*math.pi/180
    obj.rotation_euler = (rex,rey,rez)
    obj.keyframe_insert(data_path="rotation_euler", frame=f*20)
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++#
    sx=1.0
    sy=f*1.0
    sz=1.0
    obj.scale = (sx,sy,sz)
    obj.keyframe_insert(data_path="scale", frame=f*20)
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++#

Ekkehard