Применение анимации фигур в презентациях с помощью C++
Анимации — это визуальные эффекты, которые можно применять к текстам, изображениям, фигурам или диаграммам. Они придают жизнь презентациям или их составляющим.
Зачем использовать анимации в презентациях?
С помощью анимаций вы можете
- контролировать поток информации
- выделять важные моменты
- повышать интерес или вовлечённость аудитории
- делать контент проще для чтения, восприятия или обработки
- привлекать внимание читателей или зрителей к важным частям презентации
PowerPoint предоставляет множество вариантов и инструментов для анимаций и анимационных эффектов в категориях вход, выход, акцент и трассы движения.
Анимации в Aspose.Slides
- Aspose.Slides предоставляет классы и типы, необходимые для работы с анимациями в пространстве имён Aspose.Slides.Animation,
- Aspose.Slides предлагает более 150 анимационных эффектов в перечислении EffectType. Эти эффекты по сути совпадают (или эквивалентны) эффектам, используемым в PowerPoint.
Применение анимации к TextBox
Aspose.Slides для C++ позволяет применять анимацию к тексту в фигуре.
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте
rectangleIAutoShape . - Добавьте текст в IAutoShape.TextFrame .
- Получите основную последовательность эффектов.
- Добавьте анимационный эффект к IAutoShape .
- Установите свойство TextAnimation.BuildType значением из перечисления BuildType .
- Запишите презентацию на диск в виде файла PPTX.
Этот C++ код показывает, как применить эффект Fade к AutoShape и задать анимацию текста со значением By 1st Level Paragraphs :
// Создает объект класса презентации, представляющий файл презентации.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
System::SharedPtr<ISlide> sld = pres->get_Slides()->idx_get(0);
// Добавляет новую AutoShape с текстом
System::SharedPtr<IAutoShape> autoShape =
sld->get_Shapes()->AddAutoShape(Aspose::Slides::ShapeType::Rectangle, 20.0f, 20.0f, 150.0f, 100.0f);
System::SharedPtr<ITextFrame> textFrame = autoShape->get_TextFrame();
textFrame->set_Text(u"First paragraph \nSecond paragraph \n Third paragraph");
// Получает основную последовательность слайда.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();
// Добавляет эффект анимации Fade к фигуре
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Анимирует текст фигуры по абзацам первого уровня
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);
// Сохраняет файл PPTX на диск
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Применение анимации к PictureFrame
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте или получите PictureFrame на слайде.
- Получите основную последовательность эффектов.
- Добавьте анимационный эффект к PictureFrame .
- Запишите презентацию на диск в виде файла PPTX.
Этот C++ код показывает, как применить эффект Fly к рамке изображения :
// Создаёт объект класса презентации, представляющий файл презентации.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
// Загружает изображение, которое будет добавлено в коллекцию изображений презентации
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);
// Добавляет рамку изображения к слайду
System::SharedPtr<IPictureFrame> picFrame =
pres->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 50.0f, 50.0f, 100.0f, 100.0f, image);
// Получает основную последовательность слайда.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Добавляет эффект анимации Fly слева к рамке изображения
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Сохраняет файл PPTX на диск
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Применение анимации к Shape
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Добавьте
rectangleIAutoShape . - Добавьте
BevelIAutoShape (при щелчке по этому объекту анимация запускается) . - Создайте последовательность эффектов для фигуры bevel.
- Создайте пользовательскую
UserPath. - Добавьте команды для перемещения по
UserPath. - Запишите презентацию на диск в виде файла PPTX.
Этот C++ код показывает, как применить эффект PathFootball (path football) к фигуре :
// Путь к каталогу документов.
const String outPath = u"../out/AnimationsOnShapes_out.pptx";
const String templatePath = u"../templates/ConnectorLineAngle.pptx";
// Загружает презентацию
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Получает первый слайд
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Получает коллекцию фигур выбранного слайда
SharedPtr<IShapeCollection> shapes = slide->get_Shapes();
// Создаёт эффект PathFootball для существующей фигуры с нуля.
SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
ashp->AddTextFrame(u"Animated TextBox");
// Добавляет анимационный эффект PathFootBall
slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
EffectSubtype::None, EffectTriggerType::AfterPrevious);
// Создаёт некую «кнопку».
SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
// Создаёт последовательность эффектов для этой кнопки.
SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
// Создаёт пользовательский путь. Наш объект будет перемещён только после нажатия кнопки.
SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);
// Добавляет команды перемещения, поскольку созданный путь пуст.
SharedPtr<MotionEffect> motionBhv = ExplicitCast<MotionEffect>(fxUserPath->get_Behaviors()->idx_get(0));
// SharedPtr<PointF> point = MakeObject<PointF >(0.076, 0.59);
const PointF point = PointF (0.076, 0.59);
System::ArrayPtr<PointF> pts = System::MakeObject<System::Array<PointF>>(1, point);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts, MotionPathPointsType::Auto, true);
//PointF point2[1] = { -0.076, -0.59 };
const PointF point2 = PointF(-0.076, -0.59 );
System::ArrayPtr<PointF> pts2 = System::MakeObject<System::Array<PointF>>(1, point2);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts2, MotionPathPointsType::Auto, false);
motionBhv->get_Path()->Add(MotionCommandPathType::End, nullptr, MotionPathPointsType::Auto, false);
//Записывает файл PPTX на диск
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Получение анимационных эффектов, применённых к фигуре
Ниже приведённые примеры показывают, как использовать метод GetEffectsByShape интерфейса ISequence для получения всех анимационных эффектов, применённых к фигуре.
Пример 1: Получение анимационных эффектов, применённых к фигуре на обычном слайде
Ранее вы изучили, как добавлять анимационные эффекты к фигурам в презентациях PowerPoint. Следующий пример кода показывает, как получить эффекты, применённые к первой фигуре на первом обычном слайде презентации AnimExample_out.pptx .
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"AnimExample_out.pptx");
SharedPtr<ISlide> firstSlide = presentation->get_Slide(0);
// Gets the main animation sequence of the slide.
SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Gets the first shape on the first slide.
SharedPtr<IShape> shape = firstSlide->get_Shape(0);
// Gets animation effects applied to the shape.
ArrayPtr<SharedPtr<IEffect>> shapeEffects = sequence->GetEffectsByShape(shape);
if (shapeEffects->get_Length() > 0)
{
Console::WriteLine(u"The shape " + shape->get_Name() + u" has " + shapeEffects->get_Length() + u" animation effects.");
}
presentation->Dispose();
Пример 2: Получение всех анимационных эффектов, включая унаследованные из заполнителей
Если фигура на обычном слайде имеет заполнители, которые находятся на слайде‑макете и/или мастере, и к этим заполнителям добавлены анимационные эффекты, тогда все эффекты фигуры будут воспроизводиться во время показа слайдов, включая унаследованные из заполнителей.
Предположим, у нас есть файл презентации PowerPoint sample.pptx с одним слайдом, содержащим только фигуру нижнего колонтитула с текстом «Made with Aspose.Slides», к которой применён эффект Random Bars .

Предположим также, что к заполнителю нижнего колонтитула на layout‑слайде применён эффект Split .

И, наконец, к заполнителю нижнего колонтитула на master‑слайде применён эффект Fly In .

Следующий пример кода показывает, как использовать метод GetBasePlaceholder интерфейса IShape для доступа к заполнителям фигуры и получения анимационных эффектов, применённых к фигуре нижнего колонтитула, включая унаследованные из заполнителей, расположенных на слайдах‑макете и мастере .
void PrintEffects(ArrayPtr<SharedPtr<IEffect>> effects)
{
for (SharedPtr<IEffect> effect : effects)
{
Console::WriteLine(String::Format(u"Type: {0}, subtype: {1}", effect->get_Type(), effect->get_Subtype()));
}
}
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"sample.pptx");
SharedPtr<ISlide> slide = presentation->get_Slide(0);
// Получить анимационные эффекты фигуры на обычном слайде.
SharedPtr<IShape> shape = slide->get_Shape(0);
ArrayPtr<SharedPtr<IEffect>> shapeEffects = slide->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);
// Получить анимационные эффекты заполнителя на слайде макета.
SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);
// Получить анимационные эффекты заполнителя на слайде мастера.
SharedPtr<IShape> masterShape = layoutShape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> masterShapeEffects = slide->get_LayoutSlide()->get_MasterSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(masterShape);
presentation->Dispose();
Console::WriteLine(u"Main sequence of shape effects:");
PrintEffects(masterShapeEffects);
PrintEffects(layoutShapeEffects);
PrintEffects(shapeEffects);
Output:
Main sequence of shape effects:
Type: 47, subtype: 2 // Полет, снизу
Type: 134, subtype: 45 // Разделение, вертикальное
Type: 126, subtype: 22 // Случайные полосы, горизонтальное
Изменение свойств времени анимационного эффекта
Aspose.Slides для C++ позволяет менять свойства Timing (время) анимационного эффекта.
Это панель Timing анимации в Microsoft PowerPoint :

Это соответствия между Timing в PowerPoint и свойствами Effect.Timing :
- Выпадающий список PowerPoint Timing Start соответствует свойству Effect.Timing.TriggerType .
- Поле PowerPoint Timing Duration соответствует свойству Effect.Timing.Duration . Длительность анимации (в секундах) — это общее время, необходимое для завершения одного цикла анимации.
- Поле PowerPoint Timing Delay соответствует свойству Effect.Timing.TriggerDelayTime .
Так меняются свойства Timing эффекта :
- Apply или получите анимационный эффект.
- Установите новые значения нужных вам свойств Effect.Timing .
- Сохраните изменённый файл PPTX.
Этот C++ код демонстрирует операцию :
// Создает объект класса презентации, представляющий файл презентации.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Получает основную последовательность слайда.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Получает первый эффект основной последовательности.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);
// Изменяет тип триггера эффекта на запуск по щелчку
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Изменяет длительность эффекта
effect->get_Timing()->set_Duration(3.f);
// Изменяет время задержки триггера эффекта
effect->get_Timing()->set_TriggerDelayTime(0.5f);
// Сохраняет файл PPTX на диск
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Звук анимационного эффекта
Aspose.Slides предоставляет следующие свойства для работы со звуками в анимационных эффектах :
Добавить звук к анимационному эффекту
Этот C++ код показывает, как добавить звук к анимационному эффекту и остановить его, когда начинается следующий эффект :
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Добавляет звук в коллекцию аудио презентации
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Получает основную последовательность слайда.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Получает первый эффект основной последовательности
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);
// Проверяет эффект на отсутствие звука
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
// Добавляет звук к первому эффекту
firstEffect->set_Sound(effectSound);
}
// Получает первую интерактивную последовательность слайда.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);
// Устанавливает флаг эффекта "Stop previous sound"
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);
// Записывает файл PPTX на диск
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);
Извлечь звук из анимационного эффекта
- Создайте экземпляр класса Presentation .
- Получите ссылку на слайд по его индексу.
- Получите основную последовательность эффектов.
- Извлеките встроенный звук из каждого анимационного эффекта с помощью set_Sound() .
Этот C++ код показывает, как извлечь звук, встроенный в анимационный эффект :
// Создает объект класса презентации, представляющий файл презентации.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);
// Gets the main sequence of the slide.
System::SharedPtr<ISequence> sequence = slide->get_Timeline()->get_MainSequence();
for (auto&& effect : sequence)
{
System::SharedPtr<IAudio> sound = effect->get_Sound();
if (sound == nullptr)
continue;
auto audio = sound->get_BinaryData();
}
After Animation
Aspose.Slides для C++ позволяет менять свойство After animation анимационного эффекта.
Это панель Effect и расширенное меню в Microsoft PowerPoint :

Выпадающий список PowerPoint Effect After animation соответствует следующим свойствам :
- Свойство set_AfterAnimationType() описывает тип After animation :
- Пункт PowerPoint More Colors соответствует типу AfterAnimationType.Color ;
- Пункт PowerPoint Don’t Dim соответствует типу AfterAnimationType.DoNotDim (значение по умолчанию) ;
- Пункт PowerPoint Hide After Animation соответствует типу AfterAnimationType.HideAfterAnimation ;
- Пункт PowerPoint Hide on Next Mouse Click соответствует типу AfterAnimationType.HideOnNextMouseClick ;
- Свойство set_AfterAnimationColor() задаёт цвет после анимации. Это свойство работает совместно с типом AfterAnimationType.Color . Если изменить тип на иной, цвет после анимации будет очищен.
Этот C++ код показывает, как изменить эффект After animation :
// Создает объект класса презентации, представляющий файл презентации
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Получает первый эффект основной последовательности
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Изменяет тип анимации после выполнения на Цвет
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);
// Устанавливает цвет затемнения после анимации
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());
// Записывает файл PPTX на диск
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
Animate Text
Aspose.Slides предоставляет следующие свойства для работы с блоком Animate text анимационного эффекта :
- set_AnimateTextType() описывает тип анимации текста эффекта. Текст фигуры может анимироваться :
- Всё сразу (AnimateTextType.AllAtOnce тип)
- По словам (AnimateTextType.ByWord тип)
- По буквам (AnimateTextType.ByLetter тип)
- set_DelayBetweenTextParts() задаёт задержку между частями анимированного текста (словами или буквами). Положительное значение указывает процент от длительности эффекта. Отрицательное значение задаёт задержку в секундах.
Так можно изменить свойства Effect Animate text :
- Apply или получите анимационный эффект.
- Установите свойство set_BuildType() в значение BuildType.AsOneObject чтобы отключить режим анимации By Paragraphs .
- Установите новые значения для свойств set_AnimateTextType() и set_DelayBetweenTextParts() .
- Сохраните изменённый файл PPTX.
Этот C++ код демонстрирует операцию :
// Создает объект класса презентации, представляющий файл презентации.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Получает первый эффект основной последовательности
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Изменяет тип анимации текста эффекта на "As One Object"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);
// Изменяет тип анимации текста эффекта на "By word"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);
// Устанавливает задержку между словами в 20% от длительности эффекта
firstEffect->set_DelayBetweenTextParts(20.0f);
// Записывает файл PPTX на диск
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
FAQ
Как обеспечить сохранение анимаций при публикации презентации в веб?
Export to HTML5 и включите параметры отвечающие за анимацию shape и transition . Обычный HTML не воспроизводит анимацию слайдов, тогда как HTML5 делает.
Как изменение порядка слоёв (z-order) фигур влияет на анимацию?
Порядок анимации и порядок рисования независимы: эффект управляет временем и типом появления/исчезновения, а z-order определяет, что покрывает что. Видимый результат определяется их сочетанием. (Это общее поведение PowerPoint; модель Aspose.Slides effects-and-shapes следует той же логике.)
Есть ли ограничения при конвертации анимаций в видео для некоторых эффектов?
В целом, анимации поддерживаются, но редкие случаи или специфические эффекты могут отображаться иначе. Рекомендуется тестировать используемые эффекты и версию библиотеки.