Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Действие объекта

Действие объекта

Прыгающий мяч.


#--------------------------------------------------
# File ob_action.py
#--------------------------------------------------
import bpy import math 
def run(origin):
    # Установка начала и конца анимации
    scn = bpy.context.scene
    scn.frame_start = 11
    scn.frame_end = 200
    # Создание ico-сферы
    bpy.ops.mesh.primitive_ico_sphere_add(location=origin)
    ob = bpy.context.object
  # Вставка ключевых кадров с operator code (кодом оператора ???)
    # Объект должен быть выбранным автоматически
    z = 10
    t = 1
    for n in range(5):
        t += 10
        bpy.ops.anim.change_frame(frame = t)
        bpy.ops.transform.translate(value=(2, 0, z))
        bpy.ops.anim.keyframe_insert_menu(type='Location')
        t += 10
        bpy.ops.anim.change_frame(frame = t)
        bpy.ops.transform.translate(value=(2, 0, -z))
        bpy.ops.anim.keyframe_insert_menu(type='Location')
        z *= 0.67
    action = ob.animation_data.action
    # Создание словаря с графиком FCurves типа location (позиция)
    fcus = {}
    for fcu in action.fcurves:
        if fcu.data_path == 'location':
            fcus[fcu.array_index] = fcu
    print(fcus.items())
    # Добавление новых ключевых точек к x и z
    kpts_x = fcus[0].keyframe_points
    kpts_z = fcus[2].keyframe_points
    (x0,y0,z0) = origin
    omega = 2*math.pi/20
    z *= 0.67
    for t in range(101, 201):
        xt = 20 + 0.2*(t-101)
        zt = z*(1-math.cos(omega*(t - 101)))
        z *= 0.98
        kpts_z.insert(t, zt+z0, options={'FAST'})
    kpts_x.insert(t, xt+x0)
    # Изменение типа экстраполяции и интерполяции
    # для кривой X на линейный
    fcus[0].extrapolation = 'LINEAR'
    for kp in kpts_x:
        kp.interpolation = 'LINEAR'
    # Позиция Y - константа и может быть удалена
    action.fcurves.remove(fcus[1])
    bpy.ops.object.paths_calculate()
    return 
if __name__ == "__main__":
    run((0,0,10))
    bpy.ops.screen.animation_play(reverse=False, sync=False)

Оглавление книги


Генерация: 0.028. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз