Ada dua cara untuk memperoleh dan mengubah ukuran dan posisi elemen halaman:
- Menggunakan fungsi pengambil dan penyetel untuk ukuran dan posisi.
- Memanipulasi transformasi affine-nya, menggunakan fungsi
getTransform()
dansetTransform()
-nya sambil mempertahankan ukuran yang melekat.
Membaca properti elemen halaman
Seperti yang ditunjukkan dalam gambar, ukuran dan posisi diukur dalam kaitannya dengan kotak pembatas dari elemen halaman yang dirender saat tidak memiliki rotasi:
- Kiri dan Atas: diukur dari sudut kiri atas halaman hingga
sudut kiri atas kotak pembatas yang tidak dirotasi. Gunakan
getLeft()
dangetTop()
untuk membaca nilainya. - Width dan Height: lebar dan tinggi kotak pembatas yang tidak diputar.
Gunakan
getWidth()
dangetHeight()
untuk membaca nilai. - Rotasi: rotasi searah jarum jam terhadap garis vertikal di sekitar
bagian tengah
kotak pembatas. Gunakan
getRotation()
untuk membaca nilai.
Semua panjang diukur dalam poin (pt). Rotasi diukur dalam derajat (°).
Menetapkan properti elemen halaman
Anda dapat mengatur ukuran dan posisi elemen halaman saat Anda membuatnya menggunakan
metode penyisipan seperti insertShape()
. Untuk bentuk yang sudah ada, Anda dapat menyetel
ukuran, posisi, dan rotasi; Anda juga dapat mengatur penskalaan elemen ke
mengubah ukuran atau untuk mencerminkannya di sepanjang salah satu tepinya.
Saat pembuatan
Anda dapat memberikan informasi posisi dan ukuran saat membuat elemen halaman.
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.');
Skrip di atas membuat bentuk pada {i>slide<i} pertama presentasi yang aktif dengan posisi dan ukuran yang ditentukan serta membaca informasi posisi dan ukuran dari bentuk tersebut. Log yang diharapkan adalah:
Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.
Ukuran, posisi, dan rotasi
Anda dapat memperbarui ukuran dan posisi elemen halaman setelah pembuatan:
- Gunakan
setLeft()
dansetTop()
untuk menetapkan posisi sudut kiri atas kotak pembatas yang tidak dirotasi. - Gunakan
setWidth()
dansetHeight()
untuk menetapkan lebar dan tinggi pembatas yang dirender . - Gunakan
setRotation()
untuk mengatur rotasi kotak pembatas searah jarum jam di sekelilingnya tengah.
Skrip berikut membuat bentuk pada {i>slide<i} pertama dalam presentasi yang aktif, menggunakan penyetel untuk memperbarui posisi, ukuran, dan rotasinya, serta membaca posisi dan ukuran bentuk.
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.');
Output log yang diharapkan dari skrip ini adalah seperti yang ditunjukkan di bawah:
Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.
Penyetel ukuran, posisi, dan rotasi dapat digunakan dalam urutan atau kombinasi apa pun. Mengganti baris ketiga di atas dengan skrip berikut akan memberikan hasil yang sama:
shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);
Penskalaan
Sebagai ganti menggunakan setWidth()
dan setHeight()
di atas untuk menyetel ukuran bentuk
ke nilai absolut, scaleWidth()
dan scaleHeight()
dapat digunakan untuk meregangkan atau
menekan elemen halaman dengan faktor penskalaan relatif.
shape.scaleHeight(0.5).scaleWidth(2);
Gambar di bawah ini menunjukkan cara kerja kode di atas pada bentuk persegi yang diputar 45°. Perhatikan bahwa sudut kiri atas kotak pembatas bersifat tetap selama penskalaan.
Refleksi di sepanjang tepi
Argumen di scaleWidth()
dan scaleHeight()
bisa negatif sehingga bisa
digunakan untuk membalik elemen halaman secara horizontal atau vertikal.
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.
Gambar di bawah ini menunjukkan cara kerja kode di atas pada bentuk yang diputar 45°. Perlu diketahui bahwa elemen halaman dibalik di sepanjang salah satu tepi kotak pembatasnya, tetapi tidak pusatnya.
Rotasi garis
Seperti elemen halaman lainnya, rotasi garis bukanlah sudut vertikal dari
garis, tetapi rotasi kotak pembatasnya. Saat Anda membuat
garis dengan
titik awal dan akhir yang ditentukan, rotasinya selalu 0°. Menarik
ujung garis di UI Google Slides juga mengubah sudut vertikalnya
sesuai dengan ukuran dan posisi kotak pembatasnya, tetapi tidak berubah
rotasinya. Menggunakan setRotation()
akan memutar kotak pembatas garis, yang
secara efektif mengubah sudut vertikalnya. Jadi dua baris bisa
memiliki sudut vertikal visual yang sama, tetapi kotak pembatas berbeda, dan karenanya
ukuran, posisi, dan
nilai rotasi yang berbeda.
Batasan
Beberapa metode penentuan ukuran dan penempatan tidak kompatibel dengan beberapa jenis halaman yang kurang penting. Tabel di bawah meringkas metode yang tidak kompatibel dengan jenis elemen halaman tertentu.
Metode | Bentuk | Video | Tabel |
---|---|---|---|
getHeight(), getWidth() | ✔ | ✔ | NO (menampilkan null) |
setHeight(), setWidth() | ✔ | ✔ | TIDAK |
setRotation() | ✔ | TIDAK | TIDAK |
scaleHeight(), scaleWidth() | ✔ | ✔ | TIDAK |
Semua metode penentuan ukuran dan penempatan dapat memberikan hasil yang tidak diharapkan jika memiliki {i>shear<i}. Semua batasan dapat berubah sewaktu-waktu. Lihat referensi untuk tetap mendapatkan informasi yang terbaru.
Menggunakan transformasi affine
Untuk kontrol lanjutan, ukuran dan posisi elemen halaman juga dapat dihitung dan disesuaikan melalui ukuran inheren (native) dan transformasi affine.
Google Apps Script menyediakan antarmuka yang mirip untuk menggunakan transformasi affine seperti Google Slides API.
- Untuk membacanya,
artikel menjelaskan
konsep transformasi affine dan cara menyimpulkan ukuran hasil render dari
(native) ukuran dan transformasi untuk elemen halaman. Di Apps Script, gunakan
getInherentWidth()
dangetInherentHeight()
untuk ukuran native halaman elemen;getTransform()
untuk transformasi affine pada elemen halaman.
- Untuk menulis,
artikel menjelaskan
cara menentukan ukuran dan posisi elemen halaman menggunakan transformasi affine untuk mencapai
penskalaan, rotasi, refleksi, dll. Di Apps Script, gunakan
setTransform()
untuk menetapkan transformasi affine elemen halaman (mirip dengan Mode ABSOLUT);preconcatenateTransform()
untuk melakukan pra-penyambungan transformasi affine ke transformasi elemen halaman saat ini (mirip dengan mode RELATIVE).
Skrip berikut membuat bentuk, menyetel transformasinya, membaca ukuran yang melekat padanya, dan membaca transformasi affine-nya.
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.');
Output log yang diharapkan dari skrip ini adalah seperti yang ditunjukkan di bawah:
Inherent width: 236.2pt; Inherent height: 236.2pt.
Bentuk yang dihasilkan akan memiliki transformasi berikut, serta ukuran dan posisi yang dirender:
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°.