Animation — Aspose.3D FOSS for Python API Reference

Example

Система анимации Aspose.3D организована вокруг иерархии объектов, которые связывают данные, отснятые во времени, со свойствами сцены.

  • Example AnimationClip является именованным диапазоном воспроизведения (например, “Walk”, “Run”) удерживаемым Scene.
  • Example AnimationNode находится внутри клипа и привязывает анимированные данные к конкретным свойствам объектов сцены.
  • A BindPoint соединяет AnimationNode к именованному Property на A3DObject.
  • Example AnimationChannel содержит один скаляр KeyframeSequence внутри точки привязки.
  • A KeyframeSequence является упорядоченным списком KeyFrame выборки времени‑значения.

Все классы анимации находятся в aspose.threed.animation подпакете, хотя они также доступны напрямую из aspose.threed.

from aspose.threed.animation import (
    AnimationClip,
    AnimationNode,
    AnimationChannel,
    BindPoint,
    KeyFrame,
    KeyframeSequence,
    Interpolation,
    ExtrapolationType,
)

AnimationClip

Именованный контейнер для одного диапазона воспроизведения. A Scene может содержать несколько клипов. Наследуется от SceneObject.

Example

ExampleExample
AnimationClip(name=None)Создаёт клип с необязательным именем

Example

ExampleExampleExample
namestrИмя клипа (например,. "Walk")
descriptionstrНеобязательное описание
startfloatВремя начала в секундах
stopfloatВремя окончания в секундах
animationslist[AnimationNode]Только для чтения список узлов анимации в этом клипе
propertiesPropertyCollectionПользовательские свойства

Example

ExampleТип возвращаемого значенияExample
create_animation_node(node_name)AnimationNodeСоздаёт и регистрирует новый AnimationNode в этом клипе

AnimationNode

Привязывает AnimationClip к одному или нескольким BindPoint объекты, нацеленные на свойства объектов сцены. Наследуется от A3DObject.

Example

ExampleExample
AnimationNode(name=None)Создаёт узел анимации с необязательным именем

Example

ExampleExampleExample
namestrИмя узла
bind_pointslist[BindPoint]Только для чтения список точек привязки
sub_animationslist[AnimationNode]Только для чтения список дочерних узлов анимации
propertiesPropertyCollectionПользовательские свойства

Example

ExampleТип возвращаемого значенияExample
find_bind_point(target, name)`BindPointNone`
get_bind_point(target, prop_name, create)`BindPointNone`
create_bind_point(obj, prop_name)`BindPointNone`
get_keyframe_sequence(target, prop_name, channel_name, create)`KeyframeSequenceNone`

BindPoint

Подключает AnimationNode к одному Property на A3DObject. Каждый BindPoint может содержать несколько AnimationChannel объектов (по одному на скалярный компонент). Наследуется от A3DObject.

Example

ExampleExampleExample
propertyPropertyСвойство сцены-объекта, к которому направлена эта точка привязки
channels_countintКоличество каналов анимации в этой точке привязки

Example

ExampleТип возвращаемого значенияExample
add_channel(name, value, type=None)boolДобавляет именованный канал с значением по умолчанию
get_channel(channel_name)`AnimationChannelNone`
get_keyframe_sequence(channel_name)`KeyframeSequenceNone`
create_keyframe_sequence(name)KeyframeSequenceСоздаёт новый KeyframeSequence для этой точки привязки
bind_keyframe_sequence(channel_name, sequence)NoneСвязывает существующий KeyframeSequence с каналом
reset_channels()NoneУдаляет все каналы

AnimationChannel

Содержит один скаляр KeyframeSequence для одного анимированного компонента.

Example

ExampleExampleExample
namestrИмя канала (например,. "X", "Y", "Z")
default_valueAnyЗначение, используемое когда данные ключевых кадров отсутствуют
keyframe_sequence`KeyframeSequenceNone`

KeyframeSequence

Упорядоченный список KeyFrame образцы для одного скалярного канала. Наследуется от A3DObject.

Example

ExampleExample
KeyframeSequence(name=None)Создаёт пустую последовательность ключевых кадров

Example

ExampleExampleExample
namestrИмя последовательности
key_frameslist[KeyFrame]Только для чтения список ключевых кадров в хронологическом порядке
pre_behaviorExtrapolationПоведение до первого ключевого кадра
post_behaviorExtrapolationПоведение после последнего ключевого кадра
bind_point`BindPointNone`

Example

ExampleТип возвращаемого значенияExample
add(time, value, interpolation=Interpolation.LINEAR)NoneДобавляет ключевой кадр в time (секунды) с заданным value и interpolation режим
reset()NoneОчищает все ключевые кадры и сбрасывает поведение до/после

KeyFrame

Один образец значения времени в KeyframeSequence.

Example

KeyFrame объекты создаются внутренне с помощью KeyframeSequence.add(); не создавайте их напрямую.

Example

ExampleExampleExample
timefloatПозиция времени в секундах
valuefloatАнимированное значение в данный момент
interpolationInterpolationРежим интерполяции, применяемый между этим ключевым кадром и следующим
tangent_weight_modeWeightedModeРежим веса касательной (кривые Безье)
step_modeStepModeПоведение шага (PREVIOUS_VALUE или NEXT_VALUE)
next_in_tangent`Vector2None`
out_tangent`Vector2None`
out_weightfloatВес исходящей касательной
next_in_weightfloatВходящий вес касательной
tensionfloatПараметр натяжения (TCB‑сплайн)
continuityfloatПараметр непрерывности (TCB‑сплайн)
biasfloatПараметр смещения (TCB‑сплайн)
independent_tangentboolExample True, входные и выходные касательные независимы
flatboolExample True, касательные зажаты плоско
time_independent_tangentboolExample True, направление касательной независимо от масштабирования времени

Example

Управляет тем, как значения интерполируются между последовательными ключевыми кадрами.

ExampleExample
CONSTANTExample
LINEARЛинейная интерполяция между значениями
BEZIERКубический Безье с входными/выходными касательными
B_SPLINEРавномерный B-сплайн
CARDINAL_SPLINEКардинальный сплайн
TCB_SPLINEСплайн натяжения–непрерывности–смещения

Example

Управляет поведением анимации за пределами первого и последнего ключевого кадра.

ExampleExample
CONSTANTУдерживать граничное значение
GRADIENTЭкстраполировать по касательному градиенту граничного ключевого кадра
CYCLEПовторить диапазон ключевых кадров (циклы)
CYCLE_RELATIVEПовторить с кумулятивным смещением (относительно конечного значения)
OSCILLATEPing-pong (чередующееся прямое и обратное повторение)

Example

from aspose.threed import Scene
from aspose.threed.animation import AnimationClip, Interpolation
from aspose.threed.utilities import Vector3

scene = Scene()
node = scene.root_node.create_child_node("animated_box")
node.transform.translation = Vector3(0.0, 0.0, 0.0)

# Create an animation clip
clip = AnimationClip("Move")
clip.start = 0.0
clip.stop  = 2.0

# Create an animation node inside the clip
anim_node = clip.create_animation_node("box_anim")

# Get keyframe sequences for the X and Y translation channels
seq_x = anim_node.get_keyframe_sequence(node.transform, "Translation", "X", True)
seq_y = anim_node.get_keyframe_sequence(node.transform, "Translation", "Y", True)

if seq_x:
    seq_x.add(0.0,  0.0,  Interpolation.LINEAR)
    seq_x.add(1.0, 10.0,  Interpolation.LINEAR)
    seq_x.add(2.0,  0.0,  Interpolation.LINEAR)

if seq_y:
    seq_y.add(0.0,  0.0, Interpolation.BEZIER)
    seq_y.add(1.0,  5.0, Interpolation.BEZIER)
    seq_y.add(2.0,  0.0, Interpolation.BEZIER)

# Export to FBX to preserve animation data
scene.save("animated.fbx")

См. также

 Русский