Animación de Formas

Las animaciones son efectos visuales que se pueden aplicar a textos, imágenes, formas o gráficos. Dan vida a las presentaciones o a sus constituyentes.

¿Por qué usar animaciones en presentaciones?

Usando animaciones, puedes

  • controlar el flujo de información
  • enfatizar puntos importantes
  • aumentar el interés o la participación entre tu audiencia
  • hacer el contenido más fácil de leer, asimilar o procesar
  • llamar la atención de tus lectores o espectadores hacia partes importantes en una presentación

PowerPoint proporciona muchas opciones y herramientas para animaciones y efectos de animación en las categorías de entrada, salida, énfasis y rutas de movimiento.

Animaciones en Aspose.Slides

  • Aspose.Slides proporciona las clases y tipos que necesitas para trabajar con animaciones bajo el espacio de nombres Aspose.Slides.Animation,
  • Aspose.Slides proporciona más de 150 efectos de animación bajo la enumeración EffectType. Estos efectos son esencialmente los mismos (o equivalentes) efectos utilizados en PowerPoint.

Aplicar animación a TextBox

Aspose.Slides para C++ te permite aplicar animación al texto en una forma.

  1. Crea una instancia de la clase Presentation.
  2. Obtén la referencia de una diapositiva a través de su índice.
  3. Agrega un rectángulo IAutoShape.
  4. Agrega texto a IAutoShape.TextFrame.
  5. Obtén una secuencia principal de efectos.
  6. Agrega un efecto de animación a IAutoShape.
  7. Establece la propiedad TextAnimation.BuildType al valor de BuildType Enumeration.
  8. Escribe la presentación en el disco como un archivo PPTX.

Este código de C++ te muestra cómo aplicar el efecto Desvanecer a AutoShape y establecer la animación de texto al valor Por párrafos de 1er nivel:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

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

// Agrega una nueva AutoShape con 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"Primer párrafo \nSegundo párrafo \n Tercer párrafo");

// Obtiene la secuencia principal de la diapositiva.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();

// Agrega efecto de animación Desvanecer a la forma
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
    Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Anima el texto de la forma por párrafos de 1er nivel
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);

// Guarda el archivo PPTX en disco
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Aplicar animación a PictureFrame

  1. Crea una instancia de la clase Presentation.
  2. Obtén la referencia de una diapositiva a través de su índice.
  3. Agrega o obtiene un PictureFrame en la diapositiva.
  4. Obtén la secuencia principal de efectos.
  5. Agrega un efecto de animación al PictureFrame.
  6. Escribe la presentación en el disco como un archivo PPTX.

Este código de C++ te muestra cómo aplicar el efecto Desplazar a un marco de imagen:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

// Carga la imagen que se va a agregar a la colección de imágenes de la presentación
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);

// Agrega un marco de imagen a la diapositiva
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);

// Obtiene la secuencia principal de la diapositiva.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();

// Agrega efecto de animación Desplazar desde la izquierda al marco de imagen
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
    Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Guarda el archivo PPTX en disco
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Aplicar animación a Forma

  1. Crea una instancia de la clase Presentation.
  2. Obtén la referencia de una diapositiva a través de su índice.
  3. Agrega un rectángulo IAutoShape.
  4. Agrega un Bevel IAutoShape (cuando este objeto es clicado, la animación se reproduce).
  5. Crea una secuencia de efectos en la forma de bisel.
  6. Crea un UserPath personalizado.
  7. Agrega comandos para mover al UserPath.
  8. Escribe la presentación en el disco como un archivo PPTX.

Este código de C++ te muestra cómo aplicar el efecto PathFootball (camino de fútbol) a una forma:

	// La ruta al directorio del documento.
	const String outPath = u"../out/AnimationsOnShapes_out.pptx";
	const String templatePath = u"../templates/ConnectorLineAngle.pptx";

	// Carga la presentación
	SharedPtr<Presentation> pres = MakeObject<Presentation>();

	// Accede a la primera diapositiva
	SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);

	// Accede a la colección de formas para la diapositiva seleccionada
	SharedPtr<IShapeCollection> shapes = slide->get_Shapes();

	// Crea el efecto PathFootball para una forma existente desde cero.
	SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);

	ashp->AddTextFrame(u"Cuadro de Texto Animado");

	// Agrega el efecto de animación PathFootBall
	slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
		EffectSubtype::None, EffectTriggerType::AfterPrevious);

	// Crea algún tipo de "botón".
	SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);

	// Crea una secuencia de efectos para este botón.
	SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
	
	 // Crea un camino de usuario personalizado. Nuestro objeto solo se moverá después de que se haga clic en el botón.
	SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);

	// Agrega comandos para moverse ya que el camino creado está vacío.
	 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);
	 
	 //Escribe el archivo PPTX en disco
	 pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Obtener los efectos de animación aplicados a la forma

Puedes decidir averiguar todos los efectos de animación aplicados a una sola forma.

Este código de C++ te muestra cómo obtener todos los efectos aplicados a una forma específica:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");

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

// Obtiene la secuencia principal de la diapositiva.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();

// Obtiene la primera forma en la diapositiva.
System::SharedPtr<IShape> shape = firstSlide->get_Shapes()->idx_get(0);

// Obtiene todos los efectos de animación aplicados a la forma.
System::ArrayPtr<System::SharedPtr<IEffect>> shapeEffects = sequence->GetEffectsByShape(shape);

if (shapeEffects->get_Length() > 0)
{
    System::Console::WriteLine(System::String(u"La forma ") + shape->get_Name() + u" tiene " + shapeEffects->get_Length() + u" efectos de animación.");
}

Cambiar las propiedades de tiempo del efecto de animación

Aspose.Slides para C++ te permite cambiar las propiedades de tiempo de un efecto de animación.

Este es el panel de tiempo de animación en Microsoft PowerPoint:

example1_image

Estas son las correspondencias entre el tiempo de PowerPoint y las propiedades Effect.Timing:

  • La lista desplegable de Inicio de tiempo de PowerPoint coincide con la propiedad Effect.Timing.TriggerType.
  • Duración de tiempo de PowerPoint coincide con la propiedad Effect.Timing.Duration. La duración de una animación (en segundos) es el tiempo total que tarda la animación en completar un ciclo.
  • Retraso de tiempo de PowerPoint coincide con la propiedad Effect.Timing.TriggerDelayTime.

Así es como cambias las propiedades de tiempo del efecto:

  1. Aplica o obtiene el efecto de animación.
  2. Establece nuevos valores para las propiedades Effect.Timing que necesites.
  3. Guarda el archivo PPTX modificado.

Este código de C++ demuestra la operación:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");

// Obtiene la secuencia principal de la diapositiva.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();

// Obtiene el primer efecto de la secuencia principal.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);

// Cambia el TriggerType del efecto para iniciar al hacer clic
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);

// Cambia la duración del efecto
effect->get_Timing()->set_Duration(3.f);

// Cambia el TriggerDelayTime del efecto
effect->get_Timing()->set_TriggerDelayTime(0.5f);

// Guarda el archivo PPTX en disco
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);

Sonido del efecto de animación

Aspose.Slides proporciona estas propiedades para permitirte trabajar con sonidos en efectos de animación:

Agregar sonido al efecto de animación

Este código de C++ te muestra cómo agregar un sonido al efecto de animación y detenerlo cuando comienza el siguiente efecto:

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

// Agrega audio a la colección de audio de la presentación
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Obtiene la secuencia principal de la diapositiva.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();

// Obtiene el primer efecto de la secuencia principal
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);

// Verifica el efecto para "Sin Sonido"
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
    // Agrega sonido para el primer efecto
    firstEffect->set_Sound(effectSound);
}

// Obtiene la primera secuencia interactiva de la diapositiva.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);

// Establece la marca de "Detener sonido anterior" del efecto
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);

// Escribe el archivo PPTX en disco
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);

Extraer sonido del efecto de animación

  1. Crea una instancia de la clase Presentation .
  2. Obtén la referencia de una diapositiva a través de su índice.
  3. Obtén la secuencia principal de efectos.
  4. Extrae el set_Sound() incrustado en cada efecto de animación.

Este código de C++ te muestra cómo extraer el sonido incrustado en un efecto de animación:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);

// Obtiene la secuencia principal de la diapositiva.
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();
}

Después de la animación

Aspose.Slides para C++ te permite cambiar la propiedad Después de la animación de un efecto de animación.

Este es el panel de Efecto de animación y el menú extendido en Microsoft PowerPoint:

example1_image

La lista desplegable Después de la animación de PowerPoint coincide con estas propiedades:

Este código de C++ te muestra cómo cambiar un efecto después de la animación:

// Instancia una clase de presentación que representa un archivo de presentación
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Obtiene el primer efecto de la secuencia principal
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);

// Cambia el tipo de animación posterior a Color
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);

// Establece el color de atenuación después de la animación
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());

// Escribe el archivo PPTX en disco
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);

Animar texto

Aspose.Slides proporciona estas propiedades para permitirte trabajar con el bloque Animar texto de un efecto de animación:

Así es como puedes cambiar las propiedades del Efecto de animar texto:

  1. Aplica o obtiene el efecto de animación.
  2. Establece la propiedad set_BuildType() al valor BuildType.AsOneObject para desactivar el modo de animación Por párrafos.
  3. Establece nuevos valores para las propiedades set_AnimateTextType() y set_DelayBetweenTextParts().
  4. Guarda el archivo PPTX modificado.

Este código de C++ demuestra la operación:

// Instancia una clase de presentación que representa un archivo de presentación.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);

// Obtiene el primer efecto de la secuencia principal
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);

// Cambia el tipo de animación de texto del efecto a "Como un objeto"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);

// Cambia el tipo de animación de texto del efecto a "Por palabra"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);

// Establece el retraso entre palabras al 20% de la duración del efecto
firstEffect->set_DelayBetweenTextParts(20.0f);

// Escribe el archivo PPTX en disco
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);