Operacje przekształcania

Interfejs Google Slides API umożliwia manipulowanie położeniem, 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ą one nazywane transformacjami afinicznymi. 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 pozycjach, 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 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 tę samą poziomą linię środkową co 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 strzałki 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 jej renderowaną szerokość i wysokość. 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.

Pierwsza prośba w partii przesuwa strzałkę do współrzędnych (X,Y) = (2000000, 150000) jednostki EMU (za pomocą przesunięcia bezwzględnego applyMode). Druga prośba 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ę we współrzędnych 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 odzwierciedlić element strony przykładu kształtu strzałki 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. Dla jasności przesunięcie i odbicie układu odniesienia są pokazane w 3 oddzielnych wywołaniach 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ń, w celu uniknięcia wątpliwości.

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 za pomocą metody UpdatePageElementTransformRequest zmienić rozmiar elementu strony example arrow shape, aby był o 50% szerszy i miał tylko 80% obecnej wysokości, przy jednoczesnym zachowaniu położenia środka strzałki i jej orientacji.

Odbywa się to za pomocą podstawowej transformacji skalowaniaramce odniesienia elementu. W celu uniknięcia wątpliwości, 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ń, w celu uniknięcia wątpliwości.

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 kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest, aby obrócić element strony example arrow shape o 35 stopni w kierunku przeciwnym do ruchu wskazówek zegara, zachowując jego środek w tym samym miejscu i nie zmieniając jego rozmiaru.

Odbywa się to za pomocą podstawowej transformacji obrotuukładzie odniesienia elementu. W celu uniknięcia wątpliwości, przesunięcie i obrót układu odniesienia są przedstawione za pomocą 3 osobnych wywołań metody UpdatePageElementTransformRequest. Bardziej efektywne jest jednak wstępne obliczenie iloczynu tych macierzy przekształceń, a następnie zastosowanie go w ramach jednego żą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ń, w celu uniknięcia wątpliwości.

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