Dönüşüm işlemleri

Google Slaytlar API, bir sayfadaki PageElement (metin kutuları, resimler, tablolar ve temel şekiller) öğesinin konumunu, boyutunu ve yönünü değiştirmenize olanak tanır. Bu işlem sırasında çizgiler düz kalır, noktalar ve paralel çizgiler korunur. Bunlara doğrusal dönüşümler denir. Buradaki örneklerde, presentations.batchUpdate yönteminin kullanıldığı 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 nerede sağladığınızı belirtir. Bu kimliğin değerini sunuş URL'sinden öğrenebilirsiniz.
  • PAGE_ID: Sayfa nesnesi kimliğini nerede sağladığınızı belirtir. Bunun değerini URL'den veya API okuma isteği kullanarak alabilirsiniz.
  • PAGE_ELEMENT_ID: Sayfa öğesi nesne kimliğini nerede sağladığınızı gösterir. Oluşturduğunuz öğeler için bu kimliği belirtebilir (bazı kısıtlamalarla) veya Slaytlar API'nin otomatik olarak bir kimlik oluşturmasına izin verebilirsiniz. Öğe kimlikleri, API okuma isteği aracılığıyla alınabilir.

Bu örnekler, dil açısından tarafsız olması için HTTP istekleri olarak sunulur. Google API istemci kitaplıklarını kullanarak farklı dillerde toplu güncelleme yapmayı öğrenmek için Şekil ve metin ekleme başlıklı makaleyi inceleyin.

Örnek ok şekli

Aşağıdaki örneklerde, aşağıdaki boyut ve dönüştürme verilerine (presentations.pages.get yöntem isteğiyle bulunabilir) sahip örnek bir ok şeklinde sayfa öğesi olduğunu varsayalım. Örnek şekil, unit EMU (İngiliz Metrik Birimi) ve pt (nokta) ölçümünü kullanır.

{
  "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 hizalanmış 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 hizalanmış ancak okun üst kenarının 50 piksel (50 * 12.700 = 635.000 EMU) altında konumlandırılmış 100x50 piksel boyutunda bir dikdörtgen oluşturur. Yeni dikdörtgenin X koordinatı, sol kenarının hizalı kalması için okun X koordinatıyla aynı olmalıdır. Mesafe, okun üst kısmından ölçüldüğünden Y koordinatı, okun Y koordinatı artı 50 pt ile aynıdır. 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 100 piksel (1.270.000 EMU) sağında konumlandırılmış 40 piksel genişliğinde bir daire oluşturur. Dairenin X koordinatı, okun X koordinatının, ok genişliğinin ve 100 pt'nin toplamıdır. Yeni daire için merkez çizgisi hizalamasını zorunlu kılmak, hem okun hem de dairenin yüksekliğinin dikkate alınmasını gerektirir. Dairenin Y koordinatı, okun Y koordinatı artı okun yüksekliğinin yarısı eksi dairenin yüksekliğinin yarısıdır. Her iki durumda da, okun oluşturulan genişliğini ve yüksekliğini etkiledikleri için okla ilişkili ölçeklendirme faktörleri de dikkate alınmalıdır. Bu nedenle dairenin 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 hizalamak için 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"
          }
        }
      }
    }
  ]
}

Öğe 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 (mutlak bir kaydırma applyMode kullanılarak) taşır. Gruptaki ikinci istek, oku bu noktadan, bu kez 40.000 EMU sağa ve 35.000 EMU yukarı (göreceli kaydırma applyMode kullanılarak) taşır. Kullanılan transformation1 matrisleri, öğenin boyutunu ve yönünü değiştirmemek için oluşturulur.

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

Bir öğeyi taşımak için 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ıtma

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

Bu işlem, öğenin referans çerçevesinde temel bir yansıma dönüştürme kullanılarak yapılır. Daha net bir açıklama için referans çerçevesi kaydırma ve yansıma, UpdatePageElementTransformRequest yöntemine üç ayrı çağrıyla gösterilmiştir. Ancak bu dönüşüm matrislerinin çarpımını önceden hesaplayıp ardından bu çarpımı tek bir istek olarak uygulamak daha verimlidir.

Taşıma dönüştürmelerinde ok şeklinin merkezi, orijine doğru ve orijinden taşınır. Parametre değerleri, anlaşılır olması için hesaplama olarak ifade edilir.

Bir öğeyi yansıtan istek protokolü aşağıda 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 mevcut yüksekliğinin yalnızca% 80'i olacak şekilde ölçeklendirmek için UpdatePageElementTransformRequest yönteminin nasıl kullanılacağı gösterilmektedir. Bu işlem sırasında okun merkezi aynı konumda kalır ve yönü korunur.

Bu işlem, öğenin referans çerçevesinde temel ölçeklendirme dönüşümü kullanılarak yapılır. Daha net bir açıklama için referans çerçevesi kaydırma ve ölçeklendirme, UpdatePageElementTransformRequest yöntemine yapılan üç ayrı çağrıyla gösterilmiştir. Ancak bu dönüşüm matrislerinin çarpımını önceden hesaplayıp ardından bu çarpımı tek bir istek olarak uygulamak daha verimlidir.

Taşıma dönüştürmelerinde ok şeklinin merkezi, orijine doğru ve orijinden taşınır. Parametre değerleri, anlaşılır olması için hesaplama olarak ifade edilir.

Bir öğeyi yeniden boyutlandırmak için istek protokolü aşağıda 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.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 ortasına göre döndürme

Aşağıdaki presentations.batchUpdate kod örneğinde, örnek ok şekli sayfa öğesini 35 derece saat yönünün tersine döndürmek için UpdatePageElementTransformRequest yönteminin nasıl kullanılacağı gösterilmektedir. Bu işlem sırasında okun merkezi aynı konumda kalır ve boyutu korunur.

Bu işlem, öğenin referans çerçevesinde temel bir dönme dönüşümü kullanılarak yapılır. Daha net bir açıklama için referans çerçevesi kaydırma ve döndürme işlemi, UpdatePageElementTransformRequest yöntemine yapılan üç ayrı çağrıyla gösterilmiştir. Ancak bu dönüşüm matrislerinin çarpımını önceden hesaplayıp ardından bu çarpımı tek bir istek olarak uygulamak daha verimlidir.

Taşıma dönüştürmelerinde ok şeklinin merkezi, orijine doğru ve orijinden taşınır. Parametre değerleri, anlaşılır olması için hesaplama olarak ifade edilir.

Bir öğeyi merkezi etrafında döndürmek için istek protokolü aşağıda 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"
        }
      }
    }
  ]
}