Mengubah Ukuran dan Posisi Elemen Halaman

Panduan ini menjelaskan cara menentukan ukuran dan posisi elemen halaman menggunakan transformasi affine. Untuk pengantar konseptual transformasi affine, lihat panduan konsep Transformasi.

Mentransformasi elemen

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

Transformasi dapat dibuat dengan salah satu dari dua applyModes:

  • Transformasi ABSOLUTE menggantikan matriks transformasi elemen yang ada. Setiap parameter yang Anda hapus dari permintaan update transformasi akan ditetapkan ke nol.

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

$$A' = BA$$

Transformasi relatif memindahkan atau menskalakan elemen halaman dari tempatnya saat ini; 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 ke lebar tertentu.

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

Untuk beberapa operasi, Anda harus mengetahui apa saja parameter transformasi elemen yang ada. Jika tidak memiliki nilai ini, Anda dapat mengambilnya dengan permintaan presentations.pages.get.

Penerjemahan

Penerjemahan adalah tindakan memindahkan elemen halaman ke posisi baru di halaman yang sama. Terjemahan absolut memindahkan elemen ke titik tertentu, sedangkan terjemahan relatif memindahkan elemen dengan 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 menggunakan UpdatePageElementTransformRequest untuk menerjemahkan elemen (tanpa mengubah ukuran, potongan, 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'
  }
}

Penskalaan

Penskalaan adalah tindakan merentangkan atau menekan elemen di sepanjang dimensi X dan/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 pemotongan dan terjemahan elemen yang dirender. Untuk menskalakan elemen tanpa memengaruhi pemotongan atau terjemahannya, beralihlah ke frame referensinya.

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, yang 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 ini menyebabkan elemen diputar di sekitar asal halaman. Untuk memutar elemen di sekitar pusatnya atau titik yang berbeda, pindahkan ke frame referensi tersebut.

Refleksi

Refleksi mencerminkan suatu elemen di sepanjang 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 suatu elemen, tetapi ini menyebabkan elemen juga diterjemahkan. Untuk mencerminkan elemen tanpa terjemahan apa pun, beralihlah ke frame referensinya.

Frame referensi elemen

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

Untuk mengubah elemen dalam frame referensinya sendiri, tempatkan elemen tersebut di antara dua terjemahan lainnya: T1 terjemahan sebelumnya yang memindahkan pusat elemen ke asal halaman, dan T2 terjemahan berikut yang memindahkan elemen kembali ke posisi aslinya. Operasi penuh dapat dinyatakan sebagai perkalian 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 referensi baru.

Setiap transformasi ini dapat dilakukan satu per satu sebagai permintaan transformasi RELATIVE berurutan. Idealnya, Anda harus melakukan prakomputasi A' di atas dengan perkalian matriks dan menerapkan hasilnya sebagai transformasi ABSOLUTE tunggal. Atau, hitung terlebih dahulu produk T2 * B * T1 dan terapkan sebagai transformasi RELATIVE tunggal. 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 di bawah ini merangkum kompatibilitas elemen halaman tertentu dengan bidang penentuan ukuran dan pemosisian.

Kolom Bentuk Video Tabel
Terjemahan
Skala Tidak**
Gunting Tidak Tidak

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

Semua bidang perubahan ukuran dan pemosisian dapat memberikan hasil yang tidak diharapkan jika elemen halaman mengalami geser. Semua batasan dapat berubah sewaktu-waktu. Untuk mengetahui informasi terbaru, lihat Google Slides API.

Slides API dapat memfaktorkan ulang nilai Anda

Saat membuat elemen halaman, Anda dapat menentukan ukuran dan transformasi yang memberikan hasil visual tertentu. Namun, API dapat mengganti nilai yang Anda berikan dengan nilai lain yang menghasilkan tampilan visual yang sama. Umumnya, jika Anda menulis ukuran menggunakan API, tidak ada jaminan bahwa Anda akan mendapatkan ukuran yang sama. Namun, Anda akan mendapatkan hasil yang sama jika mempertimbangkan transformasi ini.