Dönüşüm işlemleri

Google Slaytlar API'si, bir sayfadaki PageElement öğesinin (metin kutuları, resimler, tablolar ve temel şekiller) konumunu, boyutunu ve yönünü değiştirirken çizgileri düz tutup noktalar ile paralel çizgileri korur. Bunlar afin dönüşümler olarak bilinir. Buradaki örneklerde, presentations.batchUpdate yöntemini kullanan bazı yaygın sayfa öğesi dönüştürme işlemleri gösterilmektedir.

Bu örneklerde aşağıdaki değişkenler kullanılmaktadır:

  • PRESENTATION_ID: Sunu kimliğini nereden sağladığınızı belirtir. Bu kimliğin değerini sunu URL'sinden bulabilirsiniz.
  • PAGE_ID - Sayfa nesne kimliğini nereden sağladığınızı belirtir. Bunun değerini URL'den veya bir API okuma isteği kullanarak alabilirsiniz.
  • PAGE_ELEMENT_ID - Sayfa öğesi nesne kimliğini nereden sağladığınızı belirtir. Oluşturduğunuz öğeler için bu kimliği belirtebilir (bazı kısıtlamalarla) veya Slaytlar API'nin otomatik olarak kimlik oluşturmasına izin verebilirsiniz. Öğe Kimlikleri, API okuma isteği aracılığıyla alınabilir.

Bu örnekler, dilden bağımsız olmaları için HTTP istekleri olarak sunulur. Google API istemci kitaplıklarını kullanarak toplu güncellemenin farklı dillerde nasıl uygulanacağını öğrenmek için Şekil ve metin ekleme bölümüne bakın.

Ok şekli örneği

Aşağıdaki örnekler için aşağıdaki boyut ve dönüşüm verilerine sahip örnek bir ok şekli sayfa öğesinin (presentations.pages.get yöntemi isteğiyle bulunabilir) mevcut olduğunu varsayalım. Örnek şekilde kullanılan ölçüm unit EMU (İngiliz Metrik Birimi) ve pt (puan).

{
  "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"
  }
}

Bir öğeyi başka bir öğeyle hizalama

Aşağıdaki presentations.batchUpdate kod örneğinde, sayfadaki örnek ok şekliyle hizalanan doğru konumlarda yeni şekiller oluşturmak için CreateShapeRequest yönteminin nasıl kullanılacağı gösterilmektedir. Her iki durumda da yeni şeklin sol üst köşesinin X ve Y koordinatları hesaplanmalıdır.

İlk istek, ok şeklinin sol kenarına hizalı ancak okun üst kenarının altında 50 pt (50 * 12.700 = 635.000 EMU) konumlandırılmış 100x50 pt'lik bir dikdörtgen oluşturur. Sol kenarlığının hizalı kalması için yeni dikdörtgenin X koordinatı, okun X koordinatıyla aynı olmalıdır. Y koordinatı, okun Y koordinatı artı 50 puntodur. Çünkü uzaklık, okun üst kısmından itibaren ölçülür. Dolayısıyla, dikdörtgenin koordinatları şu şekildedir:

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

İkinci istek, örnek okla aynı yatay merkez çizgisine sahip, ancak okun sağ kenarının sağ tarafında 100 pt (1.270.000 EMU) konumlandırılmış 40 punto genişliğinde bir daire oluşturur. Çemberin X koordinatı, okun X koordinatının, ok genişliğinin ve 100 punto'nun toplamıdır. Yeni daire için ortaya bir hizalama uygulamak için hem okun hem de dairenin yüksekliğini dikkate almanız gerekir. Çemberin Y koordinatı, okun Y koordinatı artı yarı ok yüksekliğinin eksi daire yüksekliğinin yarısıdır. Her iki durumda da okla ilişkili ölçeklendirme faktörleri de dikkate alınmalıdır. Çünkü bunlar okunun oluşturulan genişliğini ve yüksekliğini etkiler. Dolayısıyla çemberin koordinatları şu şekildedir:

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

Bir öğeyi başka bir öğeyle uyumlu hale getirmek için gereken istek protokolü aşağıda verilmiştir:

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"
          }
        }
      }
    }
  ]
}

Öğeleri taşıma

Aşağıdaki presentations.batchUpdate kod örneğinde, örnek ok şekli sayfa öğesini iki farklı şekilde çevirmek için UpdatePageElementTransformRequest yönteminin nasıl kullanılacağı gösterilmektedir.

Gruptaki ilk istek,oku (X, Y) = (2000000, 150000) EMU koordinatına taşır (mutlak çeviri applyMode kullanarak). Gruptaki ikinci istek,oku oradan sağa taşır. Bu kez 40.000 EMU,sağa doğru 40.000 EMU ve yukarı doğru 35.000 EMU kullanılarak applyMode döndürülür ve applyMode öğenin yönünün değiştirilmesinden kaçınılır.applyMode

Her iki istek de yürütüldükten sonra okun sol üst köşesi (X,Y) = (2040000, 115000) EMU koordinatında yer alır.

Bir öğeyi taşımak için gereken istek protokolü aşağıda verilmiştir:

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"
        }
      }
    }
  ]
}

Bir öğeyi yansıtın

Aşağıdaki presentations.batchUpdate kod örneğinde, örnek ok şekli sayfa öğesini sayfadaki konumunu değiştirmeden veya ölçeklendirme yapmadan yatay olarak yansıtmak için UpdatePageElementTransformRequest yönteminin nasıl kullanılacağı gösterilmektedir.

Bu, öğenin referans çerçevesinde temel yansıma dönüşümü kullanılarak yapılır. Daha net bir ifadeyle, referans kare kayması ve yansıması UpdatePageElementTransformRequest yöntemine yapılan üç ayrı çağrıyla gösterilmektedir ancak bu dönüşüm matrislerinin çarpımının önceden hesaplanması ve ardından bu ürünün tek bir istek olarak uygulanması daha verimlidir.

Çeviri dönüşümlerinde ok şeklinin merkezi, kaynağa ve oridan taşınır. Parametre değerleri, anlaşılırlık amacıyla hesaplamalar olarak ifade edilir.

Aşağıda, bir öğeyi yansıtacak istek protokolü verilmiştir:

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"
        }
      }
    }
  ]
}

Öğeleri yeniden boyutlandırma

Aşağıdaki presentations.batchUpdate kod örneğinde, örnek ok şekli sayfa öğesini %50 daha geniş ve geçerli yüksekliğinin yalnızca% 80'ine uyacak şekilde ölçeklendirmek için UpdatePageElementTransformRequest yönteminin nasıl kullanılacağı gösterilmektedir. Bu sırada okun merkezini aynı konumda tutup yönünü korur.

Bu, öğenin referans çerçevesinde temel ölçeklendirme dönüşümü kullanılarak yapılır. Daha net bir ifadeyle, referans kare kayması ve ölçeklendirme, UpdatePageElementTransformRequest yöntemine yapılan üç ayrı çağrıyla gösterilmektedir ancak bu dönüşüm matrislerinin çarpımının önceden hesaplanması ve ardından bu ürünün tek bir istek olarak uygulanması daha verimlidir.

Çeviri dönüşümlerinde ok şeklinin merkezi, kaynağa ve oridan taşınır. Parametre değerleri, anlaşılırlık amacıyla hesaplamalar olarak ifade edilir.

Bir öğeyi yeniden boyutlandırmak için aşağıdaki istek protokolü kullanılır:

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"
        }
      }
    }
  ]
}

Bir öğeyi merkezi etrafında döndürme

Aşağıdaki presentations.batchUpdate kod örneğinde, örnek ok şekli sayfa öğesini saat yönünün tersine 35 derece döndürmek için UpdatePageElementTransformRequest yönteminin aynı konumda ve boyutunu koruyarak nasıl kullanılacağı gösterilmektedir.

Bu, öğenin referans çerçevesinde bir temel döndürme dönüşümü kullanılarak yapılır. Daha net bir ifadeyle, referans kare kayması ve döndürme, UpdatePageElementTransformRequest yöntemine yapılan üç ayrı çağrıyla gösterilmektedir ancak bu dönüşüm matrislerinin çarpımının önceden hesaplanması ve ardından bu ürünün tek bir istek olarak uygulanması daha verimlidir.

Çeviri dönüşümlerinde ok şeklinin merkezi, kaynağa ve oridan taşınır. Parametre değerleri, anlaşılırlık amacıyla hesaplamalar olarak ifade edilir.

Aşağıda, bir öğeyi merkezi etrafında döndürmek için kullanılan istek protokolü verilmiştir:

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"
        }
      }
    }
  ]
}