Vormanimaties toepassen in presentaties met C++

Inleiding

Animaties zijn visuele effecten die toegepast kunnen worden op tekst, afbeeldingen, vormen of grafieken. Ze geven leven aan presentaties of hun onderdelen.

Waarom animaties gebruiken in presentaties?

Met animaties kun je

  • de informatiestroom beheersen
  • belangrijke punten benadrukken
  • interesse of deelname van je publiek vergroten
  • de inhoud makkelijker leesbaar, begrijpelijk of verwerkbaar maken
  • de aandacht van lezers of kijkers richten op belangrijke delen in een presentatie

PowerPoint biedt vele opties en hulpmiddelen voor animaties en animatie‑effecten in de categorieën invoer, verwijdering, accent, en bewegingspaden.

Animaties in Aspose.Slides

  • Aspose.Slides levert de klassen en types die je nodig hebt om met animaties te werken onder de Aspose.Slides.Animation namespace,
  • Aspose.Slides biedt meer dan 150 animatie‑effecten via de EffectType enumeratie. Deze effecten zijn in wezen dezelfde (of equivalente) effecten die in PowerPoint worden gebruikt.

Animatie toepassen op een TextBox

Aspose.Slides for C++ maakt het mogelijk om animatie toe te passen op de tekst in een vorm.

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een referentie naar een dia via de index.
  3. Voeg een rectangle IAutoShape toe.
  4. Voeg tekst toe aan IAutoShape.TextFrame.
  5. Haal de hoofdreeks van effecten op.
  6. Voeg een animatie‑effect toe aan IAutoShape.
  7. Stel de eigenschap TextAnimation.BuildType in op de waarde uit de BuildType Enumeratie.
  8. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze C++‑code laat zien hoe je het Fade‑effect toepast op AutoShape en de tekstanimatie instelt op de By 1st Level Paragraphs‑waarde:

// Instantiëert een presentatie‑klasse die een presentatiedocument vertegenwoordigt.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

System::SharedPtr<ISlide> sld = pres->get_Slides()->idx_get(0);

// Voegt een nieuwe AutoShape met tekst toe
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");

// Haalt de hoofdreeks van de dia op.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();

// Voegt een Fade‑animatie‑effect toe aan de vorm
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
    Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Animeert de vormtekst per alinea op het eerste niveau
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);

// Sla het PPTX‑bestand op schijf
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Animatie toepassen op een PictureFrame

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een referentie naar een dia via de index.
  3. Voeg een PictureFrame toe of haal er een op van de dia.
  4. Haal de hoofdreeks van effecten op.
  5. Voeg een animatie‑effect toe aan de PictureFrame.
  6. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze C++‑code toont hoe je het Fly‑effect toepast op een afbeelding‑frame:

// Instantieert een presentatie‑klasse die een presentatiedocument vertegenwoordigt.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

// Laad afbeelding die wordt toegevoegd aan de afbeeldingscollectie van de presentatie
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);

// Voegt een afbeelding‑frame toe aan de dia
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);

// Haalt de hoofdreeks van de dia op.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();

// Voegt een Fly‑van‑links animatie‑effect toe aan het afbeelding‑frame
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
    Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Sla het PPTX‑bestand op schijf
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Animatie toepassen op een Shape

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een referentie naar een dia via de index.
  3. Voeg een rectangle IAutoShape toe.
  4. Voeg een Bevel IAutoShape toe (wanneer dit object wordt aangeklikt, wordt de animatie afgespeeld).
  5. Maak een reeks effecten op de bevel‑shape.
  6. Maak een aangepaste UserPath.
  7. Voeg opdrachten toe om naar de UserPath te bewegen.
  8. Schrijf de presentatie naar schijf als een PPTX‑bestand.

Deze C++‑code laat zien hoe je het PathFootball (path football)‑effect toepast op een shape:

	// Het pad naar de documentmap.
	const String outPath = u"../out/AnimationsOnShapes_out.pptx";
	const String templatePath = u"../templates/ConnectorLineAngle.pptx";

	// Laadt de presentatie
	SharedPtr<Presentation> pres = MakeObject<Presentation>();

	// Benadert de eerste dia
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Benadert de vormcollectie voor de geselecteerde dia
	SharedPtr<IShapeCollection> shapes = slide->get_Shapes();

	// Maakt PathFootball‑effect voor bestaande vorm vanaf nul.
	SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);

	ashp->AddTextFrame(u"Animated TextBox");

	// Voegt het PathFootBall‑animatie‑effect toe
	slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
		EffectSubtype::None, EffectTriggerType::AfterPrevious);

	// Maak een soort "knop".
	SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);

	// Maakt een reeks effecten voor deze knop.
	SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
	
	 // Maakt een aangepast gebruikerspad. Ons object wordt alleen verplaatst nadat de knop is aangeklikt.
	SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);

	// Voegt opdrachten toe om te verplaatsen omdat het aangemaakte pad leeg is.
	 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);
	 
	 // Schrijft het PPTX‑bestand naar schijf
	 pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Animatie‑effecten ophalen die op een Shape zijn toegepast

De volgende voorbeelden laten zien hoe je de methode GetEffectsByShape van de ISequence interface gebruikt om alle animatie‑effecten op een shape op te halen.

Voorbeeld 1: Animatie‑effecten ophalen die op een shape op een normale dia zijn toegepast

Eerder heb je geleerd hoe je animatie‑effecten kunt toevoegen aan shapes in PowerPoint‑presentaties. De volgende voorbeeldcode laat zien hoe je de effecten die op de eerste shape van de eerste normale dia in de presentatie AnimExample_out.pptx zijn toegepast, kunt ophalen.

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();

Voorbeeld 2: Alle animatie‑effecten ophalen, inclusief die van placeholders

Als een shape op een normale dia placeholders heeft die zich op de layout‑dia en/of master‑dia bevinden, en er animatie‑effecten aan deze placeholders zijn toegevoegd, dan worden alle effecten van de shape afgespeeld tijdens de diavoorstelling, inclusief die geërfd van de placeholders.

Stel dat we een PowerPoint‑presentatie sample.pptx hebben met één dia die alleen een footer‑shape bevat met de tekst “Made with Aspose.Slides” en het Random Bars‑effect op de shape is toegepast.

Dia‑shape animatie‑effect

Stel bovendien dat het Split‑effect op de footer‑placeholder van de layout‑dia is toegepast.

Layout‑shape animatie‑effect

En tenslotte dat het Fly In‑effect op de footer‑placeholder van de master‑dia is toegepast.

Master‑shape animatie‑effect

De volgende voorbeeldcode laat zien hoe je de methode GetBasePlaceholder van de IShape interface gebruikt om via de shape‑placeholders de animatie‑effecten op de footer‑shape op te halen, inclusief die geërfd van placeholders op de layout‑ en master‑dia’s.

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);

// Haal animatie‑effecten op van de shape op de normale dia.
SharedPtr<IShape> shape = slide->get_Shape(0);
ArrayPtr<SharedPtr<IEffect>> shapeEffects = slide->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);

// Haal animatie‑effecten op van de placeholder op de layout‑dia.
SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);

// Haal animatie‑effecten op van de placeholder op de master‑dia.
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              // Vliegen, Onderkant
Type: 134, subtype: 45            // Splitsen, VerticaalIn
Type: 126, subtype: 22            // WillekeurigeBalken, Horizontaal

Timing‑eigenschappen van animatie‑effecten wijzigen

Aspose.Slides for C++ maakt het mogelijk om de timing‑eigenschappen van een animatie‑effect te wijzigen.

Dit is het Animation Timing‑paneel in Microsoft PowerPoint:

voorbeeld1_image

Dit zijn de overeenkomsten tussen PowerPoint‑Timing en de eigenschappen van Effect.Timing:

Zo wijzig je de Effect‑Timing‑eigenschappen:

  1. Pas of haal het animatie‑effect op.
  2. Stel nieuwe waarden in voor de Effect.Timing eigenschappen die je nodig hebt.
  3. Sla het gewijzigde PPTX‑bestand op.

Deze C++‑code demonstreert de bewerking:

// Instantieert een presentatie‑klasse die een presentatiedocument vertegenwoordigt.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");

// Haalt de hoofdreeks van de dia op.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();

// Haalt het eerste effect van de hoofdreeks op.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);

// Verandert het TriggerType van het effect naar starten bij klikken
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Verandert de duur van het effect
effect->get_Timing()->set_Duration(3.f);

// Verandert de TriggerDelayTime van het effect
effect->get_Timing()->set_TriggerDelayTime(0.5f);

// Slaat het PPTX‑bestand op schijf
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Geluid bij animatie‑effect

Aspose.Slides biedt deze eigenschappen om met geluiden in animatie‑effecten te werken:

Geluid aan een animatie‑effect toevoegen

Deze C++‑code laat zien hoe je een geluid aan een animatie‑effect toevoegt en stopt wanneer het volgende effect start:

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");

// Voegt audio toe aan de audio‑collectie van de presentatie
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Haalt de hoofdreeks van de dia op.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();

// Haalt het eerste effect van de hoofdreeks op
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);

// Controleert of het effect geen geluid heeft
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
    // Voeg geluid toe aan het eerste effect
    firstEffect->set_Sound(effectSound);
}

// Haalt de eerste interactieve reeks van de dia op.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);

// Zet de vlag "Stop previous sound" voor het effect
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);

// Schrijft het PPTX‑bestand naar schijf
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);

Geluid uit een animatie‑effect extraheren

  1. Maak een instantie van de Presentation klasse.
  2. Verkrijg een referentie naar een dia via de index.
  3. Haal de hoofdreeks van effecten op.
  4. Extraheer de ingebedde set_Sound() van elk animatie‑effect.

Deze C++‑code laat zien hoe je het ingebedde geluid in een animatie‑effect kunt extraheren:

// Instantiëert een presentatie‑klasse die een presentatiedocument vertegenwoordigt.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);

// Haalt de hoofdreeks van de dia op.
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 for C++ maakt het mogelijk om de After‑animation‑eigenschap van een animatie‑effect te wijzigen.

Dit is het Animation Effect‑paneel en het uitgebreide menu in Microsoft PowerPoint:

example1_image

De keuzelijst After animation in PowerPoint komt overeen met deze eigenschappen:

Deze C++‑code laat zien hoe je een after‑animation‑effect wijzigt:

// Instantieert een presentatie‑klasse die een presentatiedocument vertegenwoordigt
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Haalt het eerste effect van de hoofdreeks op
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);

// Wijzigt het after‑animation type naar Kleur
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);

// Stelt de dim‑kleur na animatie in
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());

// Schrijft het PPTX‑bestand naar schijf
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);

Tekst animeren

Aspose.Slides biedt deze eigenschappen om met het Animate text‑blok van een animatie‑effect te werken:

Zo kun je de eigenschappen van Effect Animate text wijzigen:

  1. Pas of haal het animatie‑effect op.
  2. Stel de eigenschap set_BuildType() in op de waarde BuildType.AsOneObject om de By Paragraphs‑animatiemodus uit te schakelen.
  3. Stel nieuwe waarden in voor de eigenschappen set_AnimateTextType() en set_DelayBetweenTextParts().
  4. Sla het gewijzigde PPTX‑bestand op.

Deze C++‑code demonstreert de bewerking:

// Instantieert een presentatie‑klasse die een presentatiedocument vertegenwoordigt.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Haalt het eerste effect van de hoofdreeks op
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);

// Wijzigt het type tekstanimatie van het effect naar "As One Object"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);

// Wijzigt het type animatietekst van het effect naar "By word"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);

// Stelt de vertraging tussen woorden in op 20% van de effectduur
firstEffect->set_DelayBetweenTextParts(20.0f);

// Slaat het PPTX‑bestand op schijf
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);

FAQ

Hoe kan ik ervoor zorgen dat animaties behouden blijven bij het publiceren van de presentatie naar het web?

Export to HTML5 en schakel de opties in die verantwoordelijk zijn voor animaties van shape en transition. Plain HTML speelt geen slide‑animaties af, HTML5 wel.

Hoe beïnvloedt het wijzigen van de z‑order (lagenvolgorde) van shapes de animatie?

Animatie‑ en tekenvolgorde zijn onafhankelijk: een effect bepaalt de timing en het type verschijnen/verdwijnen, terwijl z-order bepaalt wat wat bedekt. Het zichtbare resultaat wordt bepaald door hun combinatie. (Dit is het algemene gedrag van PowerPoint; het Aspose.Slides‑effect‑en‑shape‑model volgt dezelfde logica.)

Zijn er beperkingen bij het converteren van animaties naar video voor bepaalde effecten?

In het algemeen worden animaties ondersteund, maar zeldzame gevallen of specifieke effecten kunnen anders worden gerenderd. Het wordt aanbevolen de gebruikte effecten en de bibliotheekversie te testen.