Python'da Özel Animasyon Davranışlarını Oluşturma ve Değiştirme

Genel Bakış

Özel animasyon davranışları, bir renk değişikliği, bir şeklin döndürülmesi veya düzenlenebilir bir hareket yolu takip edilmesi gibi bir animasyon efektindeki bireysel işlemleri kontrol etmenizi sağlar. Bu kılavuz, davranışların nasıl oluşturulacağını ve birleştirileceğini, zamanlamalarının nasıl yapılandırılacağını, mevcut animasyonların nasıl inceleneceğini ve değiştirileceğini ve özelliklerinin bir sunumu kaydedip yeniden açtıktan sonra da korunup korunmadığını gösterir.

Önceden tanımlanmış efektler ve tıklama tetikleyicileri için, Şekil Animasyonu sayfasına bakın.

Animasyon Modelini Anlamak

Bir animasyon Timeline → Sequence → Effect → Behaviors olarak düzenlenir:

  • Slaytın timeline ana sekansını ve etkileşimli sekansları içerir.
  • Sequence efektleri içerir ve potansiyel olarak farklı şekilleri hedefleyebilir.
  • Effect hedef şekli, ön ayarı, alt türü ve efekt zamanlamasını tanımlar.
  • Effect.behaviors efekti uygulayan işlemleri içerir: rengin değiştirilmesi, hareket, döndürme, bir özelliğin ayarlanması vb.

Bireysel Davranışlar Oluşturma

Sequence.add_effect çağırarak bir efekt oluşturabilir ve onun behaviors koleksiyonuna erişebilirsiniz. Bir ön ayar bu koleksiyonu otomatik olarak doldurabilir. Ön ayarı genişletirken işlemlerini koruyun veya kasıtlı olarak değiştirmek istediğinizde clear yöntemini kullanın.

BehaviorFactory aşağıda gösterilen sekiz davranış tipini oluşturur. Hareket, Bir Hareket Yolu Oluşturma bölümünde ele alınmıştır. Her oluşturma örneği eksiksiz bir programdır; sonraki düzenleme örnekleri hangi çıktı dosyasını kullandıklarını belirtir.

Döndürme

Döndürme oluşturmak için create_rotation_effect kullanın. by derece cinsinden göreceli bir açı belirtir; from_address ve to uç noktaları tanımlar.

Örnek, bir Spin etkisiyle başlar, ön ayar işlemlerini tek bir döndürme davranışıyla değiştirir ve bu işleme iki saniyelik bir süre verir. 90 derece göreceli açı, şeklin başlangıç yönelmesinden bir çeyrek dönüşü ifade eder, bu yüzden açık bir başlangıç açısına gerek yoktur.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.SPIN, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    rotation = factory.create_rotation_effect()
    rotation.by = 90
    rotation.timing.duration = 2

    effect.behaviors.add(rotation)

    presentation.save("rotation.pptx", slides.export.SaveFormat.PPTX)

rotation.pptx bir şekil ve bir döndürme davranışı içerir. Aşağıdaki koleksiyon, zamanlama ve döndürme düzenleme örnekleri bu dosyayı kullanır.

Ölçekleme

X/Y yüzdeleriyle create_scale_effect kullanın: from_address ve to başlangıç ve bitiş boyutlarını tanımlar, by ise göreceli bir değişikliği açıklar. Burada, 100 orijinal boyutu ifade eder.

Örnek, iki saniye içinde her iki boyutu %100’den %125’e büyütür. Yatay ve dikey yüzde değerlerinin eşit olması şeklin oranlarını korur; farklı yüzde değerleri bir boyutu diğerine göre daha fazla uzatır.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.GROW_SHRINK, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    scale = factory.create_scale_effect()
    scale.from_address = draw.PointF(100, 100)
    scale.to = draw.PointF(125, 125)
    scale.timing.duration = 2

    effect.behaviors.add(scale)

    presentation.save("scale.pptx", slides.export.SaveFormat.PPTX)

Renk

Dolgu rengini mavi’den turuncuya değiştirmek için create_color_effect kullanın. from_address ve to renklerdir; by bir renk ofsetidir. Behavior.properties animasyon yapılan özelliği tanımlar.

Şeklin katı dolgu rengi animasyonun başlangıç rengiyle eşleşecek şekilde mavi olarak başlatılır. Dolgu rengi özelliğini seçmek, davranışa şeklin hangi kısmının değişeceğini söyler; sadece renk uç noktaları bu özelliği tanımlamaz. Kaydedilen efekt, iki saniyelik bir turuncuya geçişi tanımlar.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)
    shape.fill_format.fill_type = slides.FillType.SOLID
    shape.fill_format.solid_fill_color.color = draw.Color.blue

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.CHANGE_FILL_COLOR, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    color = factory.create_color_effect()
    color.properties.add(slides.animation.BehaviorProperty.fill_color.value)
    color.from_address.color = draw.Color.blue
    color.to.color = draw.Color.orange
    color.timing.duration = 2

    effect.behaviors.add(color)

    presentation.save("color.pptx", slides.export.SaveFormat.PPTX)

Filtre

Bir silme efekti seçmek için create_filter_effect kullanın. type, subtype, ve reveal filtreyi, yönü ve şeklin gösterilip gizleneceğini belirtir.

Bu örnek, sağ yön alt türünü kullanarak şekli iki saniyelik bir silme ile ortaya çıkarır. Filtre ayarları, efekt içindeki davranışa aittir, bu yüzden ön ayarın orijinal işlemleri kaldırıldıktan sonra yapılandırılır.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.WIPE, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    filter_behavior = factory.create_filter_effect()
    filter_behavior.type = slides.animation.FilterEffectType.WIPE
    filter_behavior.subtype = slides.animation.FilterEffectSubtype.RIGHT
    filter_behavior.reveal = slides.animation.FilterEffectRevealType.IN
    filter_behavior.timing.duration = 2

    effect.behaviors.add(filter_behavior)

    presentation.save("filter.pptx", slides.export.SaveFormat.PPTX)

Özellik

Saydamlığı canlandırmak için create_property_effect kullanın. from_address, to, ve by value_type ve calc_mode kullanılarak yorumlanan metinlerdir. Üçünü de rastgele ayarlamak yerine uç noktaları ya da göreceli bir offseti seçin.

Burada, seçilen özellik saydamlıktır ve sayısal metinler %25 saydamlıktan tam saydamlığa bir değişimi temsil eder. Doğrusal ara değerleme bu değerler arasında kademeli bir değişimi tanımlar. Bu örneği başka bir özelliğe uyarlarken, o özelliğe uygun bir değer tipi ve uç değerler seçin.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.FADE, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    property_behavior = factory.create_property_effect()
    property_behavior.properties.add(slides.animation.BehaviorProperty.style_opacity.value)
    property_behavior.value_type = slides.animation.PropertyValueType.NUMBER
    property_behavior.calc_mode = slides.animation.PropertyCalcModeType.LINEAR
    property_behavior.from_address = "0.25"
    property_behavior.to = "1"
    property_behavior.timing.duration = 2

    effect.behaviors.add(property_behavior)

    presentation.save("property.pptx", slides.export.SaveFormat.PPTX)

Ayarla

Görünürlüğü to aracılığıyla atamak için create_set_effect kullanın. Bir ayarla davranışı uç noktalar arasında ara değerleme yapmaz.

Örnek, görünürlük özelliğini seçer ve davranış çalıştığında visible metnini atar. Bu minimal sunumda dikdörtgen zaten görünür olduğundan atama tek başına belirgin bir görsel değişiklik üretmeyebilir. Bu tür bir işlem, şeklin ne zaman gizleneceğini veya görüneceğini kontrol eden daha büyük bir etkinin parçası olarak faydalıdır.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.APPEAR, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    set_behavior = factory.create_set_effect()
    set_behavior.properties.add(slides.animation.BehaviorProperty.style_visibility.value)
    set_behavior.to = "visible"

    effect.behaviors.add(set_behavior)

    presentation.save("set.pptx", slides.export.SaveFormat.PPTX)

Komut

create_command_effect kullanın ve type, command_string, ve shape_target ayarlarını yapın. Çalışma dizinine sample.wav adlı bir WAV kaydı yerleştirin. Bu örnek, kaydı add_audio_frame_embedded ile gömerek ses çerçevesine bir oynatma komutu ekler.

Ses çerçevesi hem efektin hem de komutun hedefidir. Bu, oynatma isteğini gömülü kayda bağlar; yalnızca bir komut dizesi hangi medya nesnesinin kontrol edileceğini belirtmez. Efekt, slayt gösterisi sırasında bir tıklamayla başlaması için yapılandırılır.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    with open("sample.wav", "rb") as audio_stream:
        audio_frame = slide.shapes.add_audio_frame_embedded(100, 100, 40, 40, audio_stream)

    effect = slide.timeline.main_sequence.add_effect(audio_frame, slides.animation.EffectType.MEDIA_PLAY, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    command = factory.create_command_effect()
    command.type = slides.animation.CommandEffectType.CALL
    command.command_string = "play"
    command.shape_target = audio_frame

    effect.behaviors.add(command)

    presentation.save("command.pptx", slides.export.SaveFormat.PPTX)

Kaydetme, komutu command.pptx içinde saklar; kaydı oynatmaz. Oynatma, komutu ve onun medya hedefini destekleyen bir slayt gösterisi oynatıcı gerektirir.

Davranış Koleksiyonunu Yönetme

BehaviorCollection add, insert, remove, ve remove_at yöntemlerini destekler. Bu örnek rotation.pptx dosyasını açar, ölçekleme ekler, döndürmeden önce yerleştirir ve döndürmeyi kaldırır. Aynı nesneyi kaldırıp tekrar eklemek, kopya oluşturmadan depolanan konumunu değiştirir.

Düzenleme sırası koleksiyonu döndürme‑ölçekleme’den ölçekleme‑döndürmeye, ardından sadece ölçeklemeye değiştirir. İndeksler mevcut koleksiyona referans verir, bu yüzden kaldırma, yeniden sıralamadan sonra döndürmenin yeni indeksini kullanır. Son sayım, hangi davranışın kaydedileceğini doğrular.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("rotation.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]
    behaviors = effect.behaviors

    factory = slides.animation.BehaviorFactory()
    scale = factory.create_scale_effect()
    scale.to = draw.PointF(125, 125)
    scale.timing.duration = 2

    behaviors.add(scale)
    behaviors.remove(scale)
    behaviors.insert(0, scale)
    behaviors.remove_at(1)

    for behavior in behaviors:
        print(type(behavior).__name__)

    presentation.save("collection-edited.pptx", slides.export.SaveFormat.PPTX)

Çıktı ScaleEffect‘tir: sadece ölçekleme kalır. Koleksiyon sırası, tek başına davranışları art arda zamanlamaz. Tüm işlemlerini değiştirdiğinizde koleksiyonu temizleyin.

Davranış Zamanlamasını Yapılandırma

Behavior.timing Timing nesnesini ortaya çıkarır ve bu, Effect.timing independent olarak çalışır. Efekt zamanlaması kapsayıcı efekti zamanlar; davranış zamanlaması ise içindeki bir işlemi tanımlar.

Süre, Gecikme, Tekrar ve Hızlanma Ayarlama

rotation.pptx dosyasını açın ve duration ve trigger_delay_time saniye cinsinden ayarlayın, ardından repeat_count yapılandırın. accelerate ve decelerate sürenin kesirleridir; toplamlarının en fazla 1 olmasına dikkat edin.

Girdi dosyası, döndürme örneğinde oluşturulan ve ilk davranışın bir döndürme olduğu bilinen dosyadır. Bu örnek yalnızca bu davranışın zamanlamasını değiştirir; 90 derece açı aynı kalır. Açıyı ve zamanlamayı ayrı tutmak, animasyonu yeniden oluşturmak zorunda kalmadan hızı ayarlamayı kolaylaştırır.

import aspose.slides as slides

with slides.Presentation("rotation.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]

    rotation = effect.behaviors[0]
    rotation.timing.duration = 2
    rotation.timing.trigger_delay_time = 0.5
    rotation.timing.repeat_count = 3
    rotation.timing.accelerate = 0.2
    rotation.timing.decelerate = 0.2

    presentation.save("timing.pptx", slides.export.SaveFormat.PPTX)

Davranış iki saniyelik bir süre, yarım saniyelik gecikme ve 3 tekrar sayısı kullanır. Süresinin ilk ve son %20’si hızlanma ve yavaşlama için ayrılmıştır.

Diğer tekrar politikaları repeat_duration, repeat_until_end_slide, ve repeat_until_next_click içerir; hepsini aynı anda etkinleştirmek yerine bir politikayı seçin. auto_reverse animasyonu ileri geçişten sonra tersine oynatır. Hızlanma ve yavaşlama, kesikli atamalar veya komutlar yerine sürekli değişikliklere uygulanır.

Bir Hareket Yolu Oluşturma

Hareket oluşturmak için create_motion_effect kullanın. Its from_address, to, ve by yüzde tabanlı koordinatlar veya ofsetleri tanımlar. Düzenlenebilir bir rota için bir MotionPath oluşturun ve bunu MotionEffect.path’e atayın. MotionPath yol komutlarını depolar.

Komut Nokta Sayısı Anlam
MOVE_TO Bir Başlangıç konumunu ayarlar.
LINE_TO Bir Düz bir segment boyunca son noktasına hareket eder.
CURVE_TO Üç İki denetim noktası ve bir bitiş noktası tarafından tanımlanan kübik bir eğriyi izler.
CLOSE_LOOP Yok Başlangıç konumuna geri döner.
END Yok Yolu tamamlar.

MotionPathPointsType nokta düzenleme özelliklerini, köşe veya pürüzsüz noktalar gibi, tanımlar. Komut tipinin yerini almaz. Aşağıdaki eğri örneği için bir eğri nokta tipini, düz segmentler için ise bir köşe nokta tipini kullanın.

Yol koordinatları slayt boyutlarına göre normalize edilir: 0.25 X kayması slayt genişliğinin dörtte birini temsil eder, 0.25 puanı değil. Pozitif Y aşağı doğru ilerler. Mutlak komutlar yol koordinat sisteminde konumları belirtir; göreceli komutlar mevcut konumdan ofsetleri tanımlar. Bu, yolu referans çerçevesi seçen origin, ve şekil hareket ettiğinde yolun nasıl hareket ettiğini kontrol eden path_edit_mode parametresinden ayrı bir şeydir.

Düz Bir Yol Oluşturma

Başlangıç noktası, bir düz segment ve bir bitiş komutu içeren bir hareket davranışı oluşturun. MotionPath.add komut tipini, noktalarını, nokta tipini ve göreceli koordinat bayrağını alır.

Başlangıç komutu (0,0) konumunu belirler ve çizgi (0.25,0) noktasında sona erer, bu da rotaya slayt genişliğinin çeyrek büyüklüğünde bir yatay kayma verir. Bitiş komutunun koordinat noktası yoktur. Yol atandıktan sonra, hareket davranışını efekt’e eklemek bu rotayı dikdörtgene bağlar.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 160, 80)

    effect = slide.timeline.main_sequence.add_effect(shape, slides.animation.EffectType.PATH_RIGHT, slides.animation.EffectSubtype.NONE, slides.animation.EffectTriggerType.ON_CLICK)
    effect.behaviors.clear()

    factory = slides.animation.BehaviorFactory()
    motion = factory.create_motion_effect()
    motion.origin = slides.animation.MotionOriginType.LAYOUT
    motion.timing.duration = 2

    path = slides.animation.MotionPath()
    path.add(slides.animation.MotionCommandPathType.MOVE_TO, [draw.PointF(0, 0)], slides.animation.MotionPathPointsType.AUTO, False)
    path.add(slides.animation.MotionCommandPathType.LINE_TO, [draw.PointF(0.25, 0)], slides.animation.MotionPathPointsType.CORNER, False)
    path.add(slides.animation.MotionCommandPathType.END, [], slides.animation.MotionPathPointsType.NONE, False)

    motion.path = path
    effect.behaviors.add(motion)

    presentation.save("motion.pptx", slides.export.SaveFormat.PPTX)

motion.pptx bir hareket davranışı ve üç yol komutu içerir. Aşağıdaki dosya düzenleme örnekleri bu bilinen yapıyı kullanır.

Mutlak ve Göreceli Koordinatları Karşılaştırma

Bu iki yol nesnesi aynı rotayı tanımlar. Mutlak komut (0.3,0.1) noktasında biter; göreceli komut mevcut konuma (0.1,0.1) ekler, yani (0.2,0).

Her iki yol da aynı konumda başlar. Göreceli çizgi için, X ve Y ofsetlerini mevcut konuma ekleyerek son noktayı elde edin; mutlak çizgi için, son noktayı doğrudan okuyun. Koordinatları dönüştürmeden bayrağı değiştirirseniz farklı bir rota tanımlanır.

import aspose.pydrawing as draw
import aspose.slides as slides

absolute_path = slides.animation.MotionPath()
absolute_path.add(slides.animation.MotionCommandPathType.MOVE_TO, [draw.PointF(0.2, 0)], slides.animation.MotionPathPointsType.AUTO, False)
absolute_path.add(slides.animation.MotionCommandPathType.LINE_TO, [draw.PointF(0.3, 0.1)], slides.animation.MotionPathPointsType.CORNER, False)

relative_path = slides.animation.MotionPath()
relative_path.add(slides.animation.MotionCommandPathType.MOVE_TO, [draw.PointF(0.2, 0)], slides.animation.MotionPathPointsType.AUTO, False)
relative_path.add(slides.animation.MotionCommandPathType.LINE_TO, [draw.PointF(0.1, 0.1)], slides.animation.MotionPathPointsType.CORNER, True)

Sunumda kullanmak için herhangi bir yolu hareket davranışına atayın. Son Boolean argüman, o komut için göreceli koordinatları seçer.

Bir Çizgiyi Eğriyle Değiştirme

motion.pptx dosyasını açın ve çizgi komutunu bir kübik eğriyle değiştirin. İlk olarak iki denetim noktasını, ardından bitiş noktasını sağlayın.

Başlangıç konumu önceki komut tarafından sağlanır. İlk iki nokta eğriyi şekillendirir, üçüncüsü ise hedefidir; bunlar üç ardışık hedef değildir. Komut tipini, nokta düzenleme tipini ve nokta dizisini birlikte güncellemek, segmenti yeni geometrisiyle tutarlı tutar.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("motion.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]
    motion = effect.behaviors[0]

    path = motion.path
    path[1].command_type = slides.animation.MotionCommandPathType.CURVE_TO
    path[1].points_type = slides.animation.MotionPathPointsType.CURVE_SMOOTH
    path[1].points = [draw.PointF(0.1, 0), draw.PointF(0.2, 0.1), draw.PointF(0.3, 0.1)]

    presentation.save("curve.pptx", slides.export.SaveFormat.PPTX)

curve.pptx içindeki yol hâlâ üç komuta sahiptir; orta komutu artık bir eğri tanımlar.

Kaydedilmiş Bir Yolu İnceleme ve Düzenleme

Her bir MotionCmdPath [points], [command_type], [points_type] ve [is_relative] bilgilerini ortaya çıkarır. Aşağıdaki örnekler motion.pptx içindeki bilinen üç komutlu yolu kullanır. Rastgele bir giriş için, öncelikle hedef efekti bulun ve indeksle düzenlemeden önce komut tiplerini ve nokta sayılarını kontrol edin.

Komutları ve Koordinatları Okuma

Yolu değiştirmeden okuyun. Bitiş ve döngüyü kapatma komutlarının noktalara ihtiyacı yoktur, bu yüzden None bir nokta dizisine izin verin.

Çıktı, her komutu noktalarını listelemeden önce göreceli koordinat bayrağıyla eşleştirir. Bu, yolu değiştirmeden önce bir son noktayı bir ofsetten ayırmanıza olanak tanır. Bir eğri üç nokta listelerken, bu dosyadaki düz çizgi yalnızca bir nokta listeler.

import aspose.slides as slides

with slides.Presentation("motion.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]
    motion = effect.behaviors[0]

    for segment in motion.path:
        print(f"{segment.command_type}, relative: {segment.is_relative}")
        if segment.points is not None:
            for point in segment.points:
                print(f"X={point.x}, Y={point.y}")

Liste, bir başlangıç noktası, (0.25,0) noktasında biten mutlak bir çizgi ve bir bitiş komutu içerir.

Bir Son Noktayı Değiştirme

motion.pptx dosyasını açın ve çizginin nokta dizisini değiştirerek son noktasını taşıyın.

Girdi dosyasında, indeks 0 başlangıç komutudur ve indeks 1 çizgidir. Çizginin tek noktasını değiştirmek, komut tipini, zamanlamasını veya koleksiyondaki konumunu değiştirmeden hedefini değiştirir. Komut mutlak koordinatlar kullandığı için yeni çift bir konumu tanımlar, ek bir ofset değil.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("motion.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]

    motion = effect.behaviors[0]
    motion.path[1].points = [draw.PointF(0.4, 0.1)]

    presentation.save("motion-endpoint.pptx", slides.export.SaveFormat.PPTX)

motion-endpoint.pptx içindeki çizgi (0.4,0.1) noktasında biter; orijinal dosya değişmemiştir.

Bir Segmenti Değiştirme

Çizgiyi motion.pptx içinde değiştirmek için insert ve remove_at kullanın. Ekleme, eski çizgiyi indeks 2’ye kaydırır.

Bu, mevcut koordinatlarını düzenlemek yerine bir komut nesnesini değiştirmeyi gösterir. Eklemeden sonra, koleksiyon geçici olarak başlangıç komutu, yeni çizgi, eski çizgi ve bitiş komutunu içerir. İndeks 2’yi kaldırmak eski çizgiyi siler ve yeni rotayı yerinde bırakır.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("motion.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]
    motion = effect.behaviors[0]

    path = motion.path
    path.insert(1, slides.animation.MotionCommandPathType.LINE_TO, [draw.PointF(0.2, 0.1)], slides.animation.MotionPathPointsType.CORNER, False)
    path.remove_at(2)

    presentation.save("motion-edited.pptx", slides.export.SaveFormat.PPTX)

Kaydedilen yol hâlâ üç komuta sahiptir; yeni çizgi (0.2,0.1) noktasında biter ve bitiş komutu en sonda yer alır.

Mevcut Bir Davranışı Değiştirme ve Doğrulama

Davranışın indeksi bilinmiyorsa, türüne göre seçin. Bu örnek rotation.pptx dosyasını açar, onun RotationEffect bulur, açıyı değiştirir ve yeniden açtıktan sonra kaydedilen değeri kontrol eder.

Tür kontrolü, döndürme olmayan davranışların döngüde atlanmasını sağlar. İkinci yükleme, kaydedilen dosyayı ayrı bir sunum nesnesine okur; böylece karşılaştırma bellekte hâlâ tutulan değeri değil, kalıcı veriyi kontrol eder. Bu örnek hâlâ bilinen etkinin ana sekansın ilkinde olduğunu varsayar; türüne göre bir davranış seçmek, rastgele bir sunumda doğru efekti bulmayabilir.

import aspose.slides as slides

with slides.Presentation("rotation.pptx") as presentation:
    effect = presentation.slides[0].timeline.main_sequence[0]

    for behavior in effect.behaviors:
        if isinstance(behavior, slides.animation.RotationEffect):
            behavior.by = 180

    presentation.save("rotation-edited.pptx", slides.export.SaveFormat.PPTX)

with slides.Presentation("rotation-edited.pptx") as reopened:
    saved_effect = reopened.slides[0].timeline.main_sequence[0]

    for behavior in saved_effect.behaviors:
        if isinstance(behavior, slides.animation.RotationEffect):
            print(f"Rotation preserved: {abs(behavior.by - 180) < 0.001}")

Çıktı Rotation preserved: True olur. Aynı tür kontrol desenini diğer davranışlara da uygulayın. Tam bir koruma kontrolü için hedef şekli, efekti, davranış türlerini ve sırasını, zamanlamayı ve yol komutlarını karşılaştırın. Ondalıklı sayılar için sayısal bir tolerans kullanın. Bilinmeyen bir animasyon düzenine sahip bir sunum için, ana ve etkileşimli sekansların dolaşımı hakkında Şekil Animasyonlarını Oku sayfasına bakın.

Davranış Sırası, Ön Ayarlar ve Oynatma

BehaviorCollection içindeki sıra, bir efektin işlemlerinin depolanmış sırasıdır. Bu, her davranışın otomatik olarak bir öncekinin bitmesini beklediği bir çalma listesi değildir. Zamanlama ve kapsayıcı efekt zamanlamayı belirler. Davranışlar çakışabilir ve aynı özelliğe yapılan işlemler additive ve accumulate aracılığıyla etkileşebilir. Sadece koleksiyon sırasını değiştirerek “hareket, ardından döndür” zamanlamasını planlamaya çalışmayın; açık zamanlamalar veya ayrı etkiler kullanın; bu, Şekil Animasyonu bölümünde açıklanmıştır.

Efektin type ve subtype ön ayarını tanımlar. Bunlar düzenlenmiş bir davranış ağacının tam bir açıklaması değildir. Davranışları özelleştirmeden önce ön ayarı ve alt türü seçin: ön ayarı değiştirmek koleksiyonu yeniden oluşturabilir ve özel işlemlerinizi silebilir. Örneğin, özelleştirilmiş bir Spin efektini Fade’e değiştirmek, döndürme davranışını ayar ve filtre davranışlarıyla değiştirebilir. Ön ayar veya alt tür değiştirildikten sonra koleksiyonu tekrar inceleyin. Ön ayar davranışlarını temizlemek, ön ayarın ihtiyaç duyduğu görünürlük veya başlatma işlemlerini de kaldırabilir. Örnekler bilerek görünür şekiller kullanır ve davranışları değiştirir; her ön ayarın uygulamasını yeniden oluşturmazlar.

Biçim Uyumluluğu

Korunan bir davranış ağacı, her görüntüleyicide veya dışa aktarma motorunda aynı oynatımı garanti etmez. Kaydedilen veriyi ve üretilen çıktıyı ayrı ayrı kontrol edin.

Format veya çıktı Ne kontrol edilmeli
PPTX Bu örnekler için birincil format olarak kullanın. Düzenlenebilir davranış ağacını doğrulamak için yeniden açın, ardından hedef PowerPoint sürümünde oynatmayı kontrol edin.
PPT Eski ikili temsil PPTX’ten farklı olabilir. Ayrı bir kaydet‑ve‑yeniden‑aç döngüsü ve oynatma testi yapın; başarılı PPTX çıktısından tüm özel kombinasyonların desteklendiğini varsaymayın.
PDF, PNG, JPEG, ve diğer statik slayt görüntüleri Statik bir slayt temsili içerir, oynatılabilir bir davranış zaman çizelgesi veya garantili bir son animasyon çerçevesi değildir.
HTML5 Dışa aktarma seçeneklerinde şekil animasyonu etkinleştirildiğinde desteklenen animasyonları oynatabilir. Tarayıcıda özel kombinasyonları test edin.
Animated GIF Render edilmiş kareleri depolar, düzenlenebilir davranışları veya tıklama‑tetiklenen etkileşimi içermez. Gerçek render edilmiş hareketi kontrol edin.
Video Animasyon karelerini render eder ve video olarak kodlar. Destek, renderlayıcının desteklenen animasyonlar ve efektler ile sınırlıdır; komutlar ve etkileşimli olaylar düzenlenebilir bir zaman çizelgesine dönüşmez.

SSS

Neden efektimde herhangi bir şey eklemeden önce davranışlar var?

Önceden tanımlı bir efekt oluşturmak, altında yatan işlemleri yaratabilir. Ön ayarı genişletmek mi yoksa davranışlarını değiştirmek mi istediğinize karar vermeden önce bunları inceleyin.

Bir davranışı başa taşımak onu önce oynatır mı?

Zorunlu değildir. Koleksiyon sırası, zamanlamanın yerini tutmaz. Gecikmeleri, süreleri ve aynı özellik üzerindeki işlemlerin etkileşimlerini kontrol edin.

Neden bir bitiş komutunun noktaları yok?

Yolun sonunu işaret eder ve koordinatlara gerek duymaz. Dosyadan okunan bir yolu incelerken None nokta dizisi olup olmadığını kontrol edin.

Başarılı bir dönüş dolaşımı oynatımı doğrulamak için yeterli mi?

Hayır. Yeniden açmak, kontrol ettiğiniz özelliklerin korunmasını teyit eder. Görsel davranışı onaylamak için slayt gösterisi oynatıcıyı veya animasyonlu dışa aktarmayı ayrı ayrı test edin.