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, 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 sununun URL'sinden öğrenebilirsiniz.
- PAGE_ID: Sayfa nesnesi kimliğini nerede sağladığınızı belirtir. Bu değerini URL'den veya API okuma isteği kullanarak alabilirsiniz.
- PAGE_ELEMENT_ID: Sayfa öğesi nesne kimliğini nerede 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 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 çeviri
applyMode
kullanılarak) taşır. Gruptaki ikinci istek, oku bu noktadan, bu kez 40.000 EMU sağa ve 35.000 EMU yukarı taşır (göreceli çeviri applyMode
kullanılarak). 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 üç 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 üç 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" } } } ] }