Sayfa öğelerini boyutlandırma ve konumlandırma

Bir sayfa öğesinin boyutunu ve konumunu almanın ve değiştirmenin iki farklı yolu vardır:

  1. Boyut ve konum için getter ve setter işlevlerini kullanma.
  2. Doğal boyutu korurken getTransform() ve setTransform() işlevlerini kullanarak afin dönüşümünü değiştirme.

Sayfa öğesi özelliklerini okuma

Boyutlandırma ve Döndürme

Şekilde gösterildiği gibi, boyut ve konum, rotasyon olmayan işlenmiş bir sayfa öğesinin sınırlayıcı kutusuna göre ölçülür:

  • Sol ve Üst: Sayfanın sol üst köşesinden döndürülmemiş sınırlayıcı kutunun sol üst köşesine kadar ölçülür. Değerleri okumak için getLeft() ve getTop() öğelerini kullanın.
  • Genişlik ve Yükseklik: Döndürülmemiş sınırlayıcı kutunun genişliği ve yüksekliğidir. Değerleri okumak için getWidth() ve getHeight() kullanın.
  • Döndürme: Sınırlayıcı kutunun merkezinin etrafındaki dikey çizgiye göre saat yönünde döndürme. Değeri okumak için getRotation() öğesini kullanın.

Tüm uzunluklar punto (pt) cinsinden ölçülür. Dönüş, derece (°) cinsinden ölçülür.

Sayfa öğesi özelliklerini ayarlama

insertShape() gibi bir ekleme yöntemi kullanarak oluşturduğunuz sayfa öğesinin boyutunu ve konumunu ayarlayabilirsiniz. Mevcut bir şekil için boyutu, konumu ve dönüşü ayarlayabilirsiniz. Ayrıca, bir öğenin ölçeklemesini yeniden boyutlandıracak veya kenarlarından biri boyunca yansıtacak şekilde ayarlayabilirsiniz.

Yapım aşamasında

Bir sayfa öğesi oluştururken konum ve boyut bilgilerini sağlayabilirsiniz.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
                    + shape.getTop() + 'pt; Width: '
                    + shape.getWidth() + 'pt; Height: '
                    + shape.getHeight() + 'pt; Rotation: '
                    + shape.getRotation() + ' degrees.');

Yukarıdaki komut dosyası, etkin sununun ilk slaytında belirtilen konum ve boyutla bir şekil oluşturur ve şeklin konum ve boyut bilgilerini okur. Beklenen günlük:

Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.

Boyut, konum ve döndürme

Oluşturulduktan sonra bir sayfa öğesinin boyutunu ve konumunu güncelleyebilirsiniz:

  • Döndürülmemiş sınırlayıcı kutunun sol üst köşesinin konumunu ayarlamak için setLeft() ve setTop() değerlerini kullanın.
  • Sınırlayıcı kutunun oluşturulma genişliğini ve yüksekliğini ayarlamak için setWidth() ve setHeight() öğelerini kullanın.
  • Sınırlayıcı kutunun merkezi çevresinde saat yönünde dönmesini ayarlamak için setRotation() işlevini kullanın.

Aşağıdaki komut dosyası, etkin sununun ilk slaytında bir şekil oluşturur, konumunu, boyutunu ve dönüşünü güncellemek için ayarlayıcıları kullanır ve şeklin konum ve boyut bilgilerini okur.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
                    + 'pt; Top: ' + shape.getTop()
                    + 'pt; Width: ' + shape.getWidth()
                    + 'pt; Height: ' + shape.getHeight()
                    + 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');

Bu komut dosyasından beklenen günlük çıktısı aşağıda gösterildiği gibidir:

Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.

Boyut, konum ve rotasyon ayarlayıcıları herhangi bir sırada veya kombinasyonda kullanılabilir. Yukarıdaki üçüncü satırı aşağıdaki komut dosyasıyla değiştirdiğinizde aynı sonucu elde edersiniz:

shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);

Ölçeklendirme

Şeklin boyutunu mutlak bir değere ayarlamak için yukarıda setWidth() ve setHeight() kullanmak yerine, göreli ölçeklendirme faktörüne sahip bir sayfa öğesini genişletmek veya sıkıştırmak için scaleWidth() ve scaleHeight() kullanılabilir.

shape.scaleHeight(0.5).scaleWidth(2);

Aşağıdaki şekilde, yukarıdaki kodun 45° döndürülmüş bir kare üzerinde nasıl çalıştığı gösterilmektedir. Sınırlayıcı kutunun sol üst köşesinin ölçeklendirme sırasında sabitlendiğini unutmayın.

Slaytlar Ölçeklendirme

Kenar boyunca yansıma

scaleWidth() ve scaleHeight() bağımsız değişkeni, bir sayfa öğesini yatay veya dikey olarak çevirmek için kullanılabilmesi için negatif olabilir.

shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.

Aşağıdaki şekilde, yukarıdaki kodun 45° döndürülmüş bir şekilde nasıl çalıştığı gösterilmektedir. Sayfa öğesinin, sınırlayıcı kutusunun kenarlarından biri boyunca döndürüldüğünü ancak merkezi boyunca çevrilmediğini unutmayın.

Slaytlarla Yansıma

Çizgi döndürme

Diğer sayfa öğelerinde olduğu gibi bir çizginin dönüşü, çizginin dikey açısı değil, sınırlayıcı kutusunun döndürme şeklidir. Başlangıç ve bitiş noktaları belirtilmiş bir çizgi oluşturduğunuzda, çizginin dönüşü her zaman 0° olur. Google Slaytlar kullanıcı arayüzünde çizginin uç noktalarını sürüklemek dikey açısının yanı sıra sınırlayıcı kutusunun boyutunu ve konumunu değiştirir ancak dönüşünü değiştirmez. setRotation() kullanıldığında çizginin sınırlayıcı kutusu, dikey açısını etkili şekilde değiştiren sınırlayıcı kutusunu döndürür. Dolayısıyla, iki çizginin görsel dikey açısı aynı olabilir ancak sınırlayıcı kutular farklı olabilir. Bu nedenle de boyut, konum ve döndürme değerleri farklı olabilir.

Sınırlamalar

Bazı boyutlandırma ve konumlandırma yöntemleri bazı sayfa öğesi türleriyle uyumsuzdur. Aşağıdaki tabloda, belirli sayfa öğesi türleriyle uyumlu olmayan yöntemler özetlenmektedir.

Yöntemler Şekil Video Tablo
getHeight(), getWidth() HAYIR (null değerini döndürür)
setHeight(), setWidth() NO
setRotation() NO NO
scaleHeight(), scaleWidth() NO

Sayfa öğesinde kesme varsa tüm boyutlandırma ve konumlandırma yöntemleri beklenmedik sonuçlar verebilir. Tüm sınırlamalar değiştirilebilir. Güncel bilgiler için referansa bakın.

Afin dönüşümleri kullanma

Gelişmiş kontrol için bir sayfa öğesinin boyutu ve konumu, doğal (yerel) boyutu ve afin dönüşümü ile de hesaplanıp ayarlanabilir.

Google Apps Komut Dosyası, Google Slaytlar API'si olarak afin dönüşüm kullanmak için benzer bir arayüz sağlar.

  • Okumanız için bu makalede afin dönüşüm kavramlarının yanı sıra sayfa öğeleri için doğal (yerel) boyuttan ve dönüşümden elde edilen boyutun nasıl çıkarılacağı açıklanmaktadır. Apps Komut Dosyası'nda şunu kullanın:
    • Sayfa öğelerinin yerel boyutu için getInherentWidth() ve getInherentHeight();
    • Sayfa öğelerinin afin dönüşümü için getTransform().
  • Yazmak için bu makalede ölçeklendirme, döndürme, yansıma vb. işlemler için afin dönüşüm kullanılarak sayfa öğelerinin nasıl boyutlandırılacağı ve konumlandırılacağı açıklanmaktadır. Apps Komut Dosyası'nda
    • Sayfa öğelerinin afin dönüşümünü ayarlamak için setTransform() (MUTLAK moda benzer şekilde);
    • Sayfa öğelerinin geçerli dönüşümüne afin dönüşümü önceden bağlamak için preconcatenateTransform() (BAĞLAYICI moduna benzer).

Aşağıdaki komut dosyası bir şekil oluşturur, dönüşümünü ayarlar, doğal boyutunu okur ve afin dönüşümünü okur.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
                   .setScaleX(2)
                   .setScaleY(1)
                   .setTranslateX(100)
                   .setTranslateY(200)
                   .build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
                              + 'pt; Inherent height: '
                              + shape.getInherentHeight() + 'pt.');

Bu komut dosyasından beklenen günlük çıktısı aşağıda gösterildiği gibidir:

Inherent width: 236.2pt; Inherent height: 236.2pt.

Ortaya çıkan şekil aşağıdaki dönüşüme ve işlenmiş boyuta ve konuma sahip olur:

AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.