Aplicar animações de formas em apresentações usando C++
Introdução
Animações são efeitos visuais que podem ser aplicados a textos, imagens, formas ou gráficos. Elas dão vida às apresentações ou seus constituintes.
Por que usar animações em apresentações?
Usando animações, você pode
- controlar o fluxo de informações
- enfatizar pontos importantes
- aumentar o interesse ou a participação do público
- tornar o conteúdo mais fácil de ler, assimilar ou processar
- atrair a atenção dos leitores ou espectadores para partes importantes de uma apresentação
PowerPoint fornece muitas opções e ferramentas para animações e efeitos de animação nas categorias de entrada, saída, ênfase e caminhos de movimento.
Animações no Aspose.Slides
- Aspose.Slides fornece as classes e tipos que você precisa para trabalhar com animações no namespace Aspose.Slides.Animation,
- Aspose.Slides oferece mais de 150 efeitos de animação na enumeração EffectType. Esses efeitos são essencialmente os mesmos (ou equivalentes) usados no PowerPoint.
Aplicar animação a uma TextBox
Aspose.Slides para C++ permite que você aplique animação ao texto em uma forma.
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Adicione um
rectangleIAutoShape. - Adicione texto ao IAutoShape.TextFrame.
- Obtenha a sequência principal de efeitos.
- Adicione um efeito de animação ao IAutoShape.
- Defina a propriedade TextAnimation.BuildType para o valor da Enumeração BuildType.
- Grave a apresentação no disco como um arquivo PPTX.
Este código C++ mostra como aplicar o efeito Fade ao AutoShape e definir a animação de texto para o valor By 1st Level Paragraphs:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
System::SharedPtr<ISlide> sld = pres->get_Slides()->idx_get(0);
// Adiciona um novo AutoShape com texto
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");
// Obtém a sequência principal do slide.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();
// Adiciona o efeito de animação Fade à forma
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Anima o texto da forma por parágrafos de primeiro nível
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);
// Salva o arquivo PPTX no disco
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Aplicar animação a um PictureFrame
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Adicione ou obtenha um PictureFrame no slide.
- Obtenha a sequência principal de efeitos.
- Adicione um efeito de animação ao PictureFrame.
- Grave a apresentação no disco como um arquivo PPTX.
Este código C++ mostra como aplicar o efeito Fly a uma moldura de imagem:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
// Carrega a imagem a ser adicionada na coleção de imagens da apresentação
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);
// Adiciona um quadro de imagem ao slide
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);
// Obtém a sequência principal do slide.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Adiciona o efeito de animação Fly da esquerda ao quadro de imagem
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Salva o arquivo PPTX no disco
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Aplicar animação a uma Shape
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Adicione um
rectangleIAutoShape. - Adicione um
BevelIAutoShape (quando este objeto for clicado, a animação será reproduzida). - Crie uma sequência de efeitos na forma bevel.
- Crie um
UserPathpersonalizado. - Adicione comandos para mover para o
UserPath. - Grave a apresentação no disco como um arquivo PPTX.
Este código C++ mostra como aplicar o efeito PathFootball (caminho de futebol) a uma forma:
// O caminho para o diretório do documento.
const String outPath = u"../out/AnimationsOnShapes_out.pptx";
const String templatePath = u"../templates/ConnectorLineAngle.pptx";
// Carrega a apresentação
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Acessa o primeiro slide
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Acessa a coleção de formas do slide selecionado
SharedPtr<IShapeCollection> shapes = slide->get_Shapes();
// Cria o efeito PathFootball para a forma existente do zero.
SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
ashp->AddTextFrame(u"Animated TextBox");
// Adiciona o efeito de animação PathFootball
slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
EffectSubtype::None, EffectTriggerType::AfterPrevious);
// Cria algum tipo de "botão".
SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
// Cria uma sequência de efeitos para este botão.
SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
// Cria um caminho de usuário personalizado. Nosso objeto será movido somente após o botão ser clicado.
SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);
// Adiciona comandos para mover, pois o caminho criado está vazio.
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);
// Grava o arquivo PPTX no disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Obter os efeitos de animação aplicados a uma Shape
Os exemplos a seguir mostram como usar o método GetEffectsByShape da interface ISequence para obter todos os efeitos de animação aplicados a uma forma.
Exemplo 1: Obter efeitos de animação aplicados a uma forma em um slide normal
Anteriormente, você aprendeu como adicionar efeitos de animação a formas em apresentações do PowerPoint. O código de exemplo a seguir mostra como obter os efeitos aplicados à primeira forma do primeiro slide normal na apresentação 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();
Exemplo 2: Obter todos os efeitos de animação, incluindo os herdados de marcadores de posição
Se uma forma em um slide normal possui marcadores de posição que estão no slide de layout e/ou no slide mestre, e efeitos de animação foram adicionados a esses marcadores, então todos os efeitos da forma serão reproduzidos durante a apresentação, incluindo os herdados dos marcadores.
Suponha que tenhamos um arquivo de apresentação PowerPoint sample.pptx com um slide contendo apenas uma forma de rodapé com o texto “Made with Aspose.Slides” e o efeito Random Bars aplicado à forma.

Suponha também que o efeito Split esteja aplicado ao marcador de posição do rodapé no slide de layout.

E, finalmente, que o efeito Fly In esteja aplicado ao marcador de posição do rodapé no slide mestre.

O código de exemplo a seguir demonstra como usar o método GetBasePlaceholder da interface IShape para acessar os marcadores de posição da forma e obter os efeitos de animação aplicados à forma de rodapé, incluindo os herdados dos marcadores localizados nos slides de layout e mestre.
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);
// Get animation effects of the shape on the normal slide.
SharedPtr<IShape> shape = slide->get_Shape(0);
ArrayPtr<SharedPtr<IEffect>> shapeEffects = slide->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);
// Get animation effects of the placeholder on the layout slide.
SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);
// Get animation effects of the placeholder on the master slide.
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);
Saída:
Main sequence of shape effects:
Type: 47, subtype: 2 // Voa, Inferior
Type: 134, subtype: 45 // Dividir, EntradaVertical
Type: 126, subtype: 22 // BarrasAleatórias, Horizontal
Alterar propriedades de tempo do efeito de animação
Aspose.Slides para C++ permite que você altere as propriedades de tempo de um efeito de animação.
Este é o painel de Tempo de Animação no Microsoft PowerPoint:

Estas são as correspondências entre o Tempo do PowerPoint e as propriedades de Effect.Timing:
- A lista suspensa Start do PowerPoint Timing corresponde à propriedade Effect.Timing.TriggerType.
- O Duration do PowerPoint Timing corresponde à propriedade Effect.Timing.Duration. A duração de uma animação (em segundos) é o tempo total que a animação leva para completar um ciclo.
- O Delay do PowerPoint Timing corresponde à propriedade Effect.Timing.TriggerDelayTime.
Como alterar as propriedades de Tempo do Efeito:
- Aplique ou obtenha o efeito de animação.
- Defina novos valores para as propriedades de Effect.Timing que precisar.
- Salve o arquivo PPTX modificado.
Este código C++ demonstra a operação:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Obtém a sequência principal do slide.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Obtém o primeiro efeito da sequência principal.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);
// Altera o TriggerType do efeito para iniciar ao clicar
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Altera a Duração do efeito
effect->get_Timing()->set_Duration(3.f);
// Altera o TriggerDelayTime do efeito
effect->get_Timing()->set_TriggerDelayTime(0.5f);
// Salva o arquivo PPTX no disco
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Som do efeito de animação
Aspose.Slides fornece estas propriedades para permitir que você trabalhe com sons em efeitos de animação:
Adicionar som ao efeito de animação
Este código C++ mostra como adicionar um som ao efeito de animação e interrompê‑lo quando o próximo efeito iniciar:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Adiciona áudio à coleção de áudio da apresentação
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Obtém a sequência principal do slide.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Obtém o primeiro efeito da sequência principal
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);
// Verifica se o efeito tem "No Sound"
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
// Adiciona som ao primeiro efeito
firstEffect->set_Sound(effectSound);
}
// Obtém a primeira sequência interativa do slide.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);
// Define a bandeira "Stop previous sound" do efeito
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);
// Grava o arquivo PPTX no disco
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);
Extrair som do efeito de animação
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Obtenha a sequência principal de efeitos.
- Extraia o som incorporado de cada efeito de animação usando set_Sound().
Este código C++ demonstra como extrair o som incorporado em um efeito de animação:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);
// Obtém a sequência principal do 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();
}
Depois da animação
Aspose.Slides para C++ permite que você altere a propriedade After animation de um efeito de animação.
Este é o painel de Efeito de Animação e o menu expandido no Microsoft PowerPoint:

A lista suspensa After animation do PowerPoint Effect corresponde a estas propriedades:
- A propriedade set_AfterAnimationType() que descreve o tipo After animation :
- More Colors corresponde ao tipo AfterAnimationType.Color;
- Don’t Dim corresponde ao tipo AfterAnimationType.DoNotDim (tipo padrão);
- Hide After Animation corresponde ao tipo AfterAnimationType.HideAfterAnimation;
- Hide on Next Mouse Click corresponde ao tipo AfterAnimationType.HideOnNextMouseClick;
- A propriedade set_AfterAnimationColor() que define um formato de cor para after animation. Essa propriedade funciona em conjunto com o tipo AfterAnimationType.Color. Se você mudar o tipo para outro, a cor after animation será limpa.
Este código C++ mostra como alterar um efeito after animation:
// Instancia uma classe de apresentação que representa um arquivo de apresentação
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Obtém o primeiro efeito da sequência principal
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Altera o tipo de after animation para Cor
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);
// Define a cor de escurecimento after animation
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());
// Grava o arquivo PPTX no disco
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
Animar texto
Aspose.Slides fornece estas propriedades para permitir que você trabalhe com o bloco Animate text de um efeito de animação:
- set_AnimateTextType() que descreve o tipo de animação de texto do efeito. O texto da forma pode ser animado:
- Tudo de uma vez (AnimateTextType.AllAtOnce )
- Por palavra (AnimateTextType.ByWord )
- Por letra (AnimateTextType.ByLetter )
- set_DelayBetweenTextParts() define um atraso entre as partes do texto animado (palavras ou letras). Um valor positivo especifica a porcentagem da duração do efeito. Um valor negativo especifica o atraso em segundos.
Como alterar as propriedades Animate text do Efeito:
- Aplique ou obtenha o efeito de animação.
- Defina a propriedade set_BuildType() para o valor BuildType.AsOneObject para desativar o modo de animação By Paragraphs.
- Defina novos valores para as propriedades set_AnimateTextType() e set_DelayBetweenTextParts().
- Salve o arquivo PPTX modificado.
Este código C++ demonstra a operação:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Obtém o primeiro efeito da sequência principal
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Altera o tipo de animação de texto do efeito para "Como um único objeto"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);
// Altera o tipo de animação de texto do efeito para "Por palavra"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);
// Define o atraso entre palavras para 20% da duração do efeito
firstEffect->set_DelayBetweenTextParts(20.0f);
// Grava o arquivo PPTX no disco
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
FAQ
Como garantir que as animações sejam preservadas ao publicar a apresentação na web?
Exportar para HTML5 e habilitar as opções responsáveis por animações de shape e de transition. HTML simples não reproduz animações de slides, enquanto HTML5 sim.
Como a mudança da ordem Z (ordem de camadas) das formas afeta a animação?
Ordem de animação e ordem de desenho são independentes: um efeito controla o tempo e o tipo de aparição/desaparecimento, enquanto a z-order determina o que cobre o que. O resultado visível é definido pela combinação de ambos. (Esse é o comportamento geral do PowerPoint; o modelo de efeitos e formas do Aspose.Slides segue a mesma lógica.)
Existem limitações ao converter animações para vídeo para certos efeitos?
Em geral, as animações são suportadas, mas casos raros ou efeitos específicos podem ser renderizados de forma diferente. Recomenda‑se testar com os efeitos que você usa e com a versão da biblioteca.