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
 
 
 
 |