Operacje przekształcania

Interfejs Google Slides API umożliwia manipulowanie lokalizacją, rozmiarem i orientacją PageElement (pól tekstowych, obrazów, tabel i kształtów podstawowych) na stronie, przy jednoczesnym zachowaniu prostych linii oraz punktów i linii równoległych. Są to tzw. transformacje afiniczne. Przykłady pokazują typowe operacje przekształcania elementów strony za pomocą metody presentations.batchUpdate.

W tych przykładach używamy tych zmiennych:

  • PRESENTATION_ID– wskazuje, gdzie podajesz identyfikator prezentacji. Wartość tego identyfikatora znajdziesz w adresie URL prezentacji.
  • PAGE_ID– wskazuje, gdzie podajesz identyfikator obiektu strony. Wartość tego parametru możesz pobrać z adresu URL lub za pomocą żądania odczytu interfejsu API.
  • PAGE_ELEMENT_ID – wskazuje miejsce, w którym podajesz identyfikator obiektu elementu strony. Możesz określić ten identyfikator dla tworzonych elementów (z pewnymi ograniczeniami) lub zezwolić interfejsowi Slides API na jego automatyczne utworzenie. Identyfikatory elementów można pobrać za pomocą żądania odczytu interfejsu API.

Przykłady te są przedstawione jako żądania HTTP, aby były niezależne od języka. Aby dowiedzieć się, jak wdrożyć aktualizację zbiorczą w różnych językach za pomocą bibliotek klienta interfejsu Google API, przeczytaj artykuł Dodawanie kształtów i tekstu.

Przykładowy kształt strzałki

W przypadku poniższych przykładów załóżmy, że istnieje przykładowy element strony w kształcie strzałki o tych rozmiarach i danych przekształcenia (które można znaleźć za pomocą żądania metody presentations.pages.get). W przykładzie kształtu użyto jednostek miary unit EMU (English Metric Unit) i pt (punkt).

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

Wyrównywanie elementu z innym

Poniższy przykładowy kod presentations.batchUpdate pokazuje, jak za pomocą metody CreateShapeRequest tworzyć nowe kształty w odpowiednich miejscach, które są wyrównane z przykładowym kształtem strzałki na stronie. W obu przypadkach należy obliczyć współrzędne X i Y lewego górnego rogu nowego kształtu.

Pierwsze żądanie tworzy prostokąt o wymiarach 100 x 50 pt, który jest wyrównany do lewej krawędzi kształtu strzałki, ale znajduje się 50 pt (50 * 12 700 = 635 000 EMU) poniżej górnej krawędzi strzałki. Współrzędna X nowego prostokąta powinna być taka sama jak współrzędna X strzałki, aby zachować wyrównanie lewej krawędzi. Współrzędna Y jest taka sama jak współrzędna Y strzałki plus 50 pt, ponieważ odległość jest mierzona od góry strzałki. Współrzędne prostokąta to:

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

Drugie żądanie tworzy okrąg o szerokości 40 punktów, który ma taką samą poziomą linię środkową jak przykładowa strzałka, ale jest umieszczony 100 punktów (1 270 000 EMU) na prawo od prawej krawędzi strzałki. Współrzędna X okręgu to suma współrzędnej X strzałki, szerokości strzałki i 100 pt. Wymuszenie wyrównania do linii środkowej w przypadku nowego okręgu wymaga uwzględnienia wysokości zarówno strzałki, jak i okręgu. Współrzędna Y okręgu to współrzędna Y strzałki plus połowa wysokości strzałki minus połowa wysokości okręgu. W obu przypadkach należy też uwzględnić współczynniki skalowania powiązane ze strzałką, ponieważ wpływają one na renderowaną szerokość i wysokość strzałki. Współrzędne okręgu to:

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

Oto protokół żądania, który umożliwia wyrównanie elementu z innym elementem:

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

Przenoszenie elementu

Poniższy przykładowy kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest do przetłumaczenia elementu strony przykładu kształtu strzałki na 2 różne sposoby.

Pierwsze żądanie w partii przesuwa strzałkę do współrzędnych (X,Y) = (2000000, 150000) jednostki EMU (za pomocą przesunięcia bezwzględnego applyMode). Drugie żądanie w partii przesuwa strzałkę o 40 000 jednostek EMU w prawo i 35 000 jednostek EMU w górę (za pomocą przesunięcia względnego applyMode). Użyte macierze transformation1 są skonstruowane tak, aby nie zmieniać rozmiaru ani orientacji elementu.

Po wykonaniu obu żądań lewy górny róg strzałki będzie znajdować się na współrzędnej EMU (X,Y) = (2040000, 115000).

Oto protokół żądania przeniesienia elementu:

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

Odbijanie elementu

Poniższy przykładowy kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest, aby odbić element strony example arrow shape w poziomie wzdłuż jego środka bez zmiany jego położenia na stronie ani skalowania.

W tym celu w ramce odniesienia elementu używana jest podstawowa transformacja odbicia. Aby było jaśniej, przesunięcie i odbicie układu odniesienia są przedstawione za pomocą 3 oddzielnych wywołań metody UpdatePageElementTransformRequest, ale bardziej efektywne jest wstępne obliczenie iloczynu tych macierzy przekształceń, a następnie zastosowanie tego iloczynu jako pojedynczego żądania.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przenoszony do i z punktu początkowego. Wartości parametrów są podane w postaci obliczeń, aby były bardziej przejrzyste.

Oto protokół żądania odzwierciedlający element:

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

Zmienianie rozmiaru elementu

Poniższy przykładowy kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest, aby zmienić rozmiar elementu strony example arrow shape tak, aby był o 50% szerszy i miał tylko 80% obecnej wysokości, przy jednoczesnym zachowaniu środka strzałki w tej samej pozycji i utrzymaniu jej orientacji.

Odbywa się to za pomocą podstawowej transformacji skalowaniaramce odniesienia elementu. Aby było jaśniej, przesunięcie i skalowanie ramki odniesienia są przedstawione za pomocą 3 oddzielnych wywołań metody UpdatePageElementTransformRequest, ale bardziej efektywne jest wstępne obliczenie iloczynu tych macierzy przekształceń, a następnie zastosowanie tego iloczynu jako pojedynczego żądania.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przenoszony do i z punktu początkowego. Wartości parametrów są podane w postaci obliczeń, aby były bardziej przejrzyste.

Oto protokół żądania zmiany rozmiaru elementu:

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

Obracanie elementu wokół jego środka

Poniższy przykładowy kodpresentations.batchUpdate pokazuje, jak za pomocą metodyUpdatePageElementTransformRequestobrócić element strony w postaci przykładowej strzałki o 35 stopni w kierunku przeciwnym do ruchu wskazówek zegara, zachowując przy tym środek strzałki w tym samym miejscu i nie zmieniając jej rozmiaru.

Odbywa się to za pomocą podstawowej transformacji obroturamce odniesienia elementu. Aby było jaśniej, przesunięcie i obrót układu odniesienia są przedstawione za pomocą 3 oddzielnych wywołań metody UpdatePageElementTransformRequest, ale bardziej efektywne jest wstępne obliczenie iloczynu tych macierzy przekształceń, a następnie zastosowanie tego iloczynu jako pojedynczego żądania.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przenoszony do i z punktu początkowego. Wartości parametrów są podane w postaci obliczeń, aby były bardziej przejrzyste.

Oto protokół żądania, który umożliwia obracanie elementu wokół jego środka:

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