Operasi transformasi

Google Slides API memungkinkan Anda memanipulasi lokasi, ukuran, dan orientasi PageElement (kotak teks, gambar, tabel, dan bentuk dasar) pada halaman, dengan tetap mempertahankan garis garis lurus dan mempertahankan serta garis sejajar. Ini dikenal sebagai affine transformasi. Contoh di sini menunjukkan beberapa transformasi elemen halaman umum menggunakan presentations.batchUpdate .

Contoh ini menggunakan variabel berikut:

  • PRESENTATION_ID—Menunjukkan tempat Anda menyediakan presentasi ID. Anda dapat temukan nilai untuk ID ini dari URL presentasi.
  • PAGE_ID—Menunjukkan tempat Anda memberikan objek halaman ID. Anda dapat mengambil nilai untuk ini dari URL atau dengan menggunakan permintaan baca API.
  • PAGE_ELEMENT_ID—Menunjukkan tempat Anda menyediakan halaman ID objek elemen. Anda dapat menentukan ID ini untuk elemen yang Anda buat (dengan beberapa pembatasan) atau mengizinkan Slides API untuk otomatis membuatnya. ID Elemen dapat diambil melalui permintaan baca API.

Contoh ini disajikan sebagai permintaan HTTP agar tidak menggunakan bahasa yang netral. Untuk mempelajari cara mengimplementasikan update secara batch dalam berbagai bahasa menggunakan Google API library klien, lihat Menambahkan bentuk dan teks.

Contoh bentuk panah

Untuk contoh-contoh di bawah ini, asumsikan bahwa ada sebuah contoh halaman bentuk panah dengan data ukuran dan transformasi berikut (yang dapat ditemukan dengan presentations.pages.get permintaan metode). Contoh bentuk menggunakan ukuran unit EMU (Bahasa Inggris Unit Metrik) dan pt (titik).

{
  "objectId": PAGE_ELEMENT_ID,
  "size": {
    "width": {
      "magnitude": 3000000,
      "unit": "EMU"
    },
    "height": {
      "magnitude": 3000000,
      "unit": "EMU"
    }
  },
  "transform": {
    "scaleX": 0.3,
    "scaleY": 0.12,
    "shearX": 0,
    "shearY": 0,
    "translateX": 2000000,
    "translateY":  550000,
    "unit": "EMU"
  },
  "shape": {
    "shapeType": "RIGHT_ARROW"
  }
}

Menyejajarkan elemen dengan elemen lain

Hal berikut presentations.batchUpdate contoh kode menunjukkan cara menggunakan CreateShapeRequest untuk membuat bentuk baru di posisi yang tepat yang sejajar dengan contoh bentuk panah di halaman. Dalam kedua kasus tersebut, X dan Y koordinat sudut kiri atas bentuk baru harus dihitung.

Permintaan pertama membuat persegi panjang berukuran 100 x 50 pt yang sejajar dengan bagian kiri batas bentuk panah, tetapi diposisikan 50 pt (50 * 12.700 = 635.000 EMU) di bawah tepi atas panah. Koordinat X dari persegi panjang baru harus berupa sama dengan koordinat X panah untuk menjaga batas kirinya tetap rata. Y sama dengan koordinat Y panah ditambah 50 pt, karena jarak diukur dari atas panah. Koordinat persegi panjang adalah sehingga:

x" = 2000000 EMU
y" = 550000 + (50 * 12700) = 1185000 EMU

Permintaan kedua membuat lingkaran selebar 40 pt yang memiliki garis sebagai contoh panah, tetapi diposisikan 100 pt (1.270.000 EMU) ke di sebelah kanan tepi kanan panah. Koordinat X lingkaran adalah jumlah dari koordinat X panah, lebar panah, dan 100 pt. Menerapkan garis tengah penyelarasan untuk lingkaran baru membutuhkan perhitungan tinggi kedua lingkaran tanda panah dan lingkaran. Koordinat Y lingkaran adalah koordinat Y panah ditambah setengah tinggi panah dikurangi setengah tinggi lingkaran. Dalam kedua kasus tersebut, faktor penskalaan yang terkait dengan tanda panah juga harus diperhitungkan, karena memengaruhi lebar dan tinggi panah yang dirender. Lingkaran koordinatnya menjadi:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU
y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

Berikut adalah protokol permintaan untuk menyelaraskan elemen dengan elemen lain:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "createShape": {
        "shapeType": "RECTANGLE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 100,
              "unit": "PT"
            },
            "height": {
              "magnitude": 50,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 2000000,
            "translateY": 1185000,
            "unit": "EMU"
          }
        }
      }
    },
    {
      "createShape": {
        "shapeType": "ELLIPSE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 40,
              "unit": "PT"
            },
            "height": {
              "magnitude": 40,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 4170000,
            "translateY":  476000,
            "unit": "EMU"
          }
        }
      }
    }
  ]
}

Memindahkan elemen

Hal berikut presentations.batchUpdate contoh kode menunjukkan cara menggunakan UpdatePageElementTransformRequest metode untuk menerjemahkan elemen halaman contoh bentuk panah di dua cara yang berbeda.

Permintaan pertama dalam batch memindahkan panah ke (X,Y) = (2000000, 150000) Koordinat EMU (menggunakan terjemahan absolut applyMode) Permintaan kedua dalam batch memindahkan panah dari sana, kali ini 40.000 EMU ke kanan dan 35.000 EMU ke atas (menggunakan terjemahan relatif applyMode). Matriks transformasi1 yang digunakan dibangun untuk menghindari perubahan ukuran dan orientasi elemen.

Setelah menjalankan kedua permintaan, sudut kiri atas panah berada di (X,Y) = (2040000, 115000) Koordinat EMU.

Berikut adalah protokol permintaan untuk memindahkan elemen:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "ABSOLUTE",
        "transform": {
            "scaleX": 0.3,
            "scaleY": 0.12,
            "translateX": 2000000,
            "translateY":  150000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX":  40000,
            "translateY": -35000,
            "unit": "EMU"
        }
      }
    }
  ]
}

Mencerminkan elemen

Hal berikut presentations.batchUpdate contoh kode menunjukkan cara menggunakan UpdatePageElementTransformRequest metode untuk mencerminkan elemen halaman contoh bentuk panah secara horizontal di sepanjang bagian tengahnya, tanpa mengubah posisinya pada halaman atau penskalaan.

Hal ini dilakukan dengan menggunakan refleksi dasar transformasi dalam referensi elemen Bingkai. Agar lebih jelas, refleksi dan pergeseran frame referensi ditampilkan dengan tiga panggilan terpisah ke Metode UpdatePageElementTransformRequest, tetapi lebih efisien untuk melakukan pra-perhitungan produk dari transformasi ini matriks dan kemudian menerapkan produk tersebut sebagai satu permintaan.

Untuk transformasi terjemahan, tengah bentuk panah dipindahkan ke dan dari titik asal. Nilai parameter dinyatakan sebagai kalkulasi agar lebih jelas.

Berikut adalah protokol permintaan untuk mencerminkan elemen:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX": -2000000 - 0.5 * 0.3  * 3000000,
            "translateY":  -550000 - 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": -1,
            "scaleY":  1,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

Mengubah ukuran elemen

Hal berikut presentations.batchUpdate contoh kode menunjukkan cara menggunakan UpdatePageElementTransformRequest metode untuk menskalakan elemen halaman contoh bentuk panah menjadi 50% lebih lebar dan hanya 80% dari tinggi saat ini, dengan tetap berada di tengah panah di posisi yang sama dan mempertahankan orientasinya.

Hal ini dilakukan dengan menggunakan penskalaan dasar transformasi dalam referensi elemen Bingkai. Agar lebih jelas, pergeseran frame referensi dan penskalaan ditampilkan dengan tiga panggilan terpisah ke Metode UpdatePageElementTransformRequest, tetapi lebih efisien untuk melakukan pra-perhitungan produk dari transformasi ini matriks dan kemudian menerapkan produk tersebut sebagai satu permintaan.

Untuk transformasi terjemahan, tengah bentuk panah dipindahkan ke dan dari titik asal. Nilai parameter dinyatakan sebagai kalkulasi agar lebih jelas.

Berikut adalah protokol permintaan untuk mengubah ukuran elemen:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1.5,
            "scaleY": 0.8,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

Memutar elemen di sekitar bagian tengahnya

Hal berikut presentations.batchUpdate contoh kode menunjukkan cara menggunakan UpdatePageElementTransformRequest metode untuk memutar elemen halaman contoh bentuk panah 35 derajat berlawanan arah jarum jam, sambil menjaga pusat panah di posisi yang sama dan mempertahankan ukurannya.

Hal ini dilakukan dengan menggunakan rotasi dasar transformasi dalam referensi elemen Bingkai. Agar lebih jelas, pergeseran dan rotasi frame referensi ditampilkan dengan tiga panggilan terpisah ke Metode UpdatePageElementTransformRequest, tetapi lebih efisien untuk melakukan pra-perhitungan produk dari transformasi ini matriks, lalu menerapkan produk tersebut sebagai permintaan tunggal

Untuk transformasi terjemahan, tengah bentuk panah dipindahkan ke dan dari titik asal. Nilai parameter dinyatakan sebagai kalkulasi agar lebih jelas.

Berikut adalah protokol permintaan untuk merotasi elemen di seputar pusatnya:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  cos(35 * (pi/180)),
            "scaleY":  cos(35 * (pi/180)),
            "shearX":  sin(35 * (pi/180)),
            "shearY": -sin(35 * (pi/180)),
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}