I need to render a cyclic animation of an object-armature from the command line. At the moment I am stack on how to repeat the keyframes, ie how to copy the keyframes of the first time points and paste them at the end of the animation the same object. I was able to do that with 2 different functions. One uses 'NLA_EDITOR':
def extend_cyclic_animation_nla(obj, n_repeatitions): for obj_i in bpy.data.objects: obj_i.select = False bpy.context.area.type = 'NLA_EDITOR' bpy.ops.nla.action_pushdown(channel_index=1) obj.animation_data.nla_tracks["NlaTrack"].strips["Armature|mixamo.com|Layer0"].repeat = n_repeatitions bpy.context.area.type = 'TEXT_EDITOR'
The second function uses 'DOPESHEET_EDITOR':
def extend_cyclic_animation_dopesheet(obj, n_repeatitions, frame_end): for obj_i in bpy.data.objects: obj_i.select = False bpy.context.area.type = 'DOPESHEET_EDITOR' bpy.context.space_data.dopesheet.show_only_selected = True obj.select = True bpy.ops.action.copy() bpy.context.scene.frame_current = frame_end for i in range(n_repeatitions): bpy.ops.action.paste() bpy.context.scene.frame_current += frame_end bpy.context.space_data.dopesheet.show_only_selected = False bpy.context.scene.frame_current = tmp bpy.context.area.type = 'TEXT_EDITOR'
My problem is that they only work when I run them from the blender window. When I run them from the command line I get an error. the reason is that when I run the code from the command line in the background
bpy.context.area seems to be set to None and None does not have an attribute 'type'. The error is:
bpy.context.area.type = 'DOPESHEET_EDITOR' AttributeError: 'NoneType' object has no attribute 'type'
So, My question is given an object with a cyclic animation data, how can I copy (or repeat) the keyframes of that object and paste them at the end of the same animation from the command line? I am using blender 2.79.