Mengubah Ukuran dan Posisi Elemen Halaman

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

Mentransformasi elemen

Slides API memungkinkan Anda mengubah posisi dan skala elemen di halaman. Untuk melakukannya: pertama menentukan jenis transformasi yang perlu diterapkan, lalu menerapkannya transformasi menggunakan presentations.batchUpdate berisi satu atau lebih UpdatePageElementTransformRequest yang kurang penting.

Transformasi dapat dilakukan dengan salah satu dari dua applyModes:

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

  • Transformasi RELATIVE dikalikan dengan elemen yang ada matriks transformasi (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; untuk misalnya, memindahkan bentuk ke bagian tengah halaman, atau menskalakannya menjadi dan 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 {i>overhead<i}.

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

Terjemahan

Terjemahan adalah tindakan memindahkan elemen halaman ke posisi baru pada laman yang sama. Terjemahan Absolute memindahkan elemen ke titik tertentu, sementara 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 Anda menggunakan UpdatePageElementTransformRequest untuk menerjemahkan elemen (tanpa mengubah ukuran, geser, atau orientasinya), Anda dapat menggunakan salah satu AffineTransform struktur:

// 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 X dan/atau dimensi 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 , namun ini juga bisa memengaruhi pemotongan dan terjemahan elemen yang dirender. Untuk menskalakan elemen tanpa memengaruhi pemotongan atau terjemahannya, geser ke frame referensi.

Rotasi

Transformasi rotasi memutar elemen halaman di sekitar titik, menggunakan penskalaan dan parameter geser. Matriks transformasi rotasi dasar memiliki bentuk berikut, di mana 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 halnya penskalaan, Anda dapat menggunakan bentuk matriks ini secara langsung sebagai RELATIVE mengubah untuk memutar elemen, tetapi ini menyebabkan elemen diputar tentang asal halaman. Untuk memutar elemen di seputar pusatnya atau titik yang berbeda, beralih ke frame referensi tersebut.

Refleksi

Refleksi mencerminkan suatu elemen di sepanjang garis atau sumbu tertentu. Dasar-dasar Matriks transformasi refleksi sumbu x dan y 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 halnya penskalaan, Anda dapat menggunakan bentuk matriks ini secara langsung sebagai RELATIVE untuk merefleksikan suatu elemen, tetapi ini menyebabkan elemen diterjemahkan sebagai ya. Untuk mencerminkan elemen ini tanpa terjemahan apa pun, beralih ke frame referensinya.

Frame referensi elemen

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

Untuk mengubah elemen dalam bingkai referensinya sendiri, apit elemen di antara dua terjemahan lain: terjemahan sebelumnya T1 yang memindahkan pusat elemen ke asal halaman, dan terjemahan berikut T2 yang memindahkan elemen kembali ke posisi semula. Operasi penuh dapat dinyatakan sebagai matriks produk:

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

Anda juga dapat beralih ke bingkai referensi lain, dengan menerjemahkan titik yang berbeda ke origin sebagai gantinya. Titik-titik ini menjadi pusat referensi baru {i>frame<i}.

Anda dapat melakukan setiap transformasi ini satu per satu sebagai permintaan transformasi RELATIVE berurutan. Idealnya, Anda harus melakukan prakomputasi A' di atas dengan perkalian matriks dan terapkan hasilnya sebagai satu Transformasi ABSOLUTE. Atau, hitung terlebih dahulu produk T2 * B * T1 dan terapkan sebagai transformasi RELATIVE tunggal. Keduanya lebih efisien, dalam hal operasi API, lalu mengirimkan permintaan transformasi satu per satu.

Batasan

Beberapa bidang ukuran dan penempatan tidak kompatibel dengan beberapa jenis laman yang kurang penting. Tabel di bawah ini merangkum kompatibilitas elemen halaman tertentu dengan bidang penentuan ukuran dan pemosisian.

Kolom Bentuk Video Tabel
Translation
Menskalakan 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 ini bisa menggantikan nilai dengan nilai lain yang menghasilkan tampilan visual yang sama. Secara umum, jika Anda menulis ukuran menggunakan API, Anda tidak dijamin akan mendapatkan hasil yang sama ukuran. Namun, Anda akan mendapatkan hasil yang sama jika Anda melakukan transformasi menggunakan akun layanan.