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). Теперь вы можете ссылаться на треки примерно вот так:
Функции можно передать 2 или 3 аргумента:
- Имя ipo-объекта, в котором хранится трек (это имя можно подсмотреть в редакторе анимационных кривых)
- Имя самого трека
- При необходимости — положительный (вперёд) или отрицательный (назад) отступ по шкале времени (может пригодиться для инерционного движения)
Примеры:
- 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"))


