Read track

Материал из Blender3D.

Перейти к: навигация, поиск

При использовании python drivers часто требуется сослаться из одного анимационного трека на значение другого трека в определённом кадре (чаще всего в текущем). Ниже приведена функция, которая облегчает эту задачу.

import Blender
from Blender import *

def readTrack(ipoName, ipoCurveName, *offset):
    foundIpo = Ipo.Get(ipoName)
    for x in range(len(foundIpo.curves)):
        if foundIpo.curves[x].name == ipoCurveName:
            foundCurve = foundIpo.curves[x]
            break
    frame = Blender.Get('curframe')
    if not offset:
        offsetValue = 0
    else:
        offsetValue = offset[0]
    return foundCurve[frame+offsetValue]

Как этим пользоваться

Если в сцене есть текстовый блок с именем "pydrivers.py", то python drivers в блендере могут обращаться к определённым в этом тексте функциям. Эти функции доступны как методы объекта p. Создайте текстовый блок "pydrivers.py", вставьте в него приведённый выше листинг и выполните код (Alt+P). Теперь вы можете ссылаться на треки примерно вот так:

Изображение:readTrack.jpg

Функции можно передать 2 или 3 аргумента:

  1. Имя ipo-объекта, в котором хранится трек (это имя можно подсмотреть в редакторе анимационных кривых)
  2. Имя самого трека
  3. При необходимости — положительный (вперёд) или отрицательный (назад) отступ по шкале времени (может пригодиться для инерционного движения)

Примеры:

  • p.readTrack("ActIpo.001", "LocX")
  • p.readTrack('ObIpo', 'RotZ', -3)
  • p.readTrack("CoIpo", "Inf", 1)/10
  • p.readTrack("CoIpo.001", "Inf", p.readTrack("KeyIpo", "strength"))
Личные инструменты