Mengubah ukuran dan posisi elemen halaman

Panduan ini menjelaskan cara mengubah ukuran dan memosisikan elemen halaman menggunakan transformasi afine dengan Google Slides API. Untuk pengantar konseptual tentang transformasi afine, lihat panduan konsep Transformasi dan elemen halaman.

Mengubah elemen

Slides API memungkinkan Anda memosisikan ulang dan menskalakan elemen di halaman. Untuk melakukannya, tentukan terlebih dahulu jenis transformasi yang perlu diterapkan, lalu terapkan transformasi tersebut menggunakan metode presentations.batchUpdate() yang berisi satu atau beberapa elemen UpdatePageElementTransformRequest.

Transformasi dapat dilakukan menggunakan ApplyMode:

  • ABSOLUTE transformasi menggantikan matriks transformasi elemen yang ada. Parameter apa pun yang Anda hilangkan dari permintaan update transformasi akan ditetapkan ke nol.

  • Transformasi RELATIVE dikalikan dengan matriks transformasi elemen yang ada (urutan perkalian penting):

$$A' = BA$$

Transformasi relatif memindahkan atau menskalakan elemen halaman dari tempatnya berada. Misalnya, memindahkan bentuk 100 poin ke kiri, atau memutarnya 40 derajat. Transformasi absolut menghapus informasi posisi dan skala yang ada; misalnya, memindahkan bentuk ke tengah halaman, atau menskalakannya agar memiliki lebar tertentu.

Transformasi yang kompleks biasanya dapat dinyatakan sebagai urutan transformasi yang lebih sederhana. Menghitung terlebih dahulu transformasi—menggabungkan beberapa transformasi menggunakan perkalian matriks—sering kali dapat mengurangi overhead.

Untuk beberapa operasi, Anda harus mengetahui parameter transformasi elemen yang ada. Jika tidak memiliki nilai ini, Anda dapat mengambilnya menggunakan metode presentations.pages.get().

Terjemahan

Terjemahan adalah tindakan memindahkan elemen halaman ke posisi baru di halaman yang sama. Terjemahan absolut memindahkan elemen ke titik tertentu, sedangkan terjemahan relatif memindahkan elemen sejauh jarak tertentu.

Matriks transformasi terjemahan dasar memiliki bentuk:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

Saat Anda menggunakan UpdatePageElementTransformRequest untuk menerjemahkan elemen (tanpa mengubah ukuran, kemiringan, atau orientasinya), Anda dapat menggunakan salah satu struktur AffineTransform berikut:

// Absolute translation:
{
  'transform': {
    'scaleX':  current scaleX value,
    'scaleY':  current scaleY value,
    'shearX':  current shearX value,
    'shearY':  current shearY value,
    'translateX': X coordinate to move to,
    'translateY': Y coordinate to move to,
    'unit': 'EMU' // or 'PT'
  }
}

// Relative translation (scaling must also be provided to avoid a matrix multiplication error):
{
  'transform': {
    'scaleX':  1,
    'scaleY':  1,
    'translateX': X coordinate to move by,
    'translateY': Y coordinate to move by,
    'unit': 'EMU' // or 'PT'
  }
}

Skala

Penskalaan adalah tindakan meregangkan atau memadatkan elemen di sepanjang dimensi X atau Y untuk mengubah ukurannya. Matriks transformasi penskalaan dasar memiliki bentuk:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Anda dapat menggunakan bentuk matriks ini secara langsung sebagai transformasi RELATIVE untuk mengubah ukuran elemen, tetapi hal ini juga dapat memengaruhi kemiringan dan terjemahan elemen yang dirender. Untuk menskalakan elemen tanpa memengaruhi geseran atau translasi, beralihlah ke frame referensi elemennya.

Rotasi

Transformasi rotasi memutar elemen halaman di sekitar titik, menggunakan parameter penskalaan dan geser. Matriks transformasi rotasi dasar memiliki bentuk berikut, dengan sudut rotasi (dalam radian) diukur dari sumbu X, bergerak berlawanan arah jarum jam:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Seperti penskalaan, Anda dapat menggunakan bentuk matriks ini secara langsung sebagai transformasi RELATIVE untuk memutar elemen, tetapi hal ini menyebabkan elemen diputar di sekitar asal halaman. Untuk memutar elemen di sekitar pusatnya atau titik yang berbeda, pindahkan ke frame referensi elemen tersebut.

Refleksi

Refleksi mencerminkan elemen di seluruh garis atau sumbu tertentu. Matriks transformasi refleksi sumbu x dan y dasar memiliki bentuk berikut:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

Seperti penskalaan, Anda dapat menggunakan bentuk matriks ini secara langsung sebagai transformasi RELATIVE untuk mencerminkan elemen, tetapi hal ini juga menyebabkan elemen diterjemahkan. Untuk mencerminkan elemen tanpa terjemahan apa pun, beralihlah ke frame referensi elemennya.

Bingkai referensi elemen

Menerapkan transformasi skala, rotasi, atau refleksi dasar langsung ke elemen halaman akan menghasilkan transformasi dalam frame referensi halaman. Misalnya, rotasi dasar memutar elemen di sekitar origin halaman (sudut kiri atas). Namun, Anda dapat beroperasi dalam frame referensi elemen, misalnya untuk memutar elemen di sekitar titik tengahnya.

Untuk mengubah elemen dalam frame referensinya sendiri, sertakan di antara dua terjemahan lainnya: terjemahan sebelumnya T1 yang memindahkan pusat elemen ke asal halaman, dan terjemahan berikutnya T2 yang memindahkan elemen kembali ke posisi aslinya. Operasi lengkap dapat dinyatakan sebagai produk matriks:

$$A' = T2 \times B \times T1 \times A$$

Anda juga dapat beralih ke frame referensi lain, dengan menerjemahkan titik yang berbeda ke asal. Titik-titik ini menjadi pusat frame rujukan baru.

Setiap transformasi ini dapat dilakukan satu per satu sebagai permintaan transformasi RELATIVE berurutan. Idealnya, Anda harus melakukan pra-penghitungan A' di atas dengan perkalian matriks dan menerapkan hasilnya sebagai satu transformasi ABSOLUTE. Atau, lakukan pra-penghitungan produk T2 * B * T1 dan terapkan sebagai satu transformasi RELATIVE. Keduanya lebih efisien, dalam hal operasi API, daripada mengirim permintaan transformasi satu per satu.

Batasan

Beberapa kolom ukuran dan penempatan tidak kompatibel dengan beberapa jenis elemen halaman. Tabel berikut meringkas kompatibilitas elemen halaman tertentu dengan kolom ukuran dan posisi:

Kolom Bentuk Video Tabel
Translation
Menskalakan Tidak**
Miringkan Tidak Tidak

Untuk memperbarui dimensi baris dan kolom tabel, gunakan UpdateTableRowPropertiesRequest dan UpdateTableColumnPropertiesRequest.

Semua kolom penentuan ukuran dan pemosisian dapat memberikan hasil yang tidak terduga jika elemen halaman memiliki geseran. Semua batasan dapat berubah sewaktu-waktu. Untuk informasi terkini, lihat Google Slides API.

Nilai yang difaktorkan ulang

Saat membuat elemen halaman, Anda dapat menentukan ukuran dan transformasi yang memberikan hasil visual tertentu. Namun, Slides API dapat mengganti nilai yang Anda berikan dengan nilai lain yang menghasilkan tampilan visual yang sama. Secara umum, jika Anda menulis ukuran menggunakan API, Anda tidak dijamin akan mendapatkan ukuran yang sama. Namun, Anda akan mendapatkan hasil yang sama jika memperhitungkan transformasi.