Operacje przekształcania

Interfejs API Prezentacji Google umożliwia zmianę lokalizacji, rozmiaru i orientacji elementu PageElement (pola tekstowego, obrazów, tabel i podstawowych kształtów) na stronie z zachowaniem linii prostej, a jej punkty i równoległe elementy. Są to tzw. przekształcenia afiniczne. Poniższe przykłady pokazują kilka typowych operacji przekształcania elementów strony za pomocą metody presentations.batchUpdate.

W poniższych przykładach używane są te zmienne:

  • PRESENTATION_ID – wskazuje, gdzie podajesz identyfikator prezentacji. Wartość tego identyfikatora można poznać w adresie URL prezentacji.
  • PAGE_ID – wskazuje miejsce, w którym podajesz identyfikator obiektu strony. Wartość tę można 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 Prezentacji API na jego automatyczne tworzenie. Identyfikatory elementów można pobierać za pomocą żądania odczytu interfejsu API.

Te przykłady są prezentowane jako żądania HTTP bez względu na język. Aby dowiedzieć się, jak wdrożyć aktualizację zbiorczą w różnych językach za pomocą bibliotek klienta interfejsu API Google, przeczytaj sekcję Dodawanie kształtów i tekstu.

Przykładowy kształt strzałki

W przykładach poniżej załóżmy, że istnieje przykładowy element strony w kształcie strzałki o poniższym rozmiarze i przekształcaniu danych (który można znaleźć za pomocą żądania metody presentations.pages.get). Przykładowy kształt korzysta z pomiarów: unit EMU (angielska jednostka metryczna) 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 prawidłowych pozycjach wyrównanych do przykładowego kształtu 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 punktów wyrównany do lewej krawędzi strzałki, ale umieszczony 50 pkt (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, by jego lewa krawędź była wyrównana. Współrzędna Y jest taka sama jak współrzędna Y strzałki plus 50 punktów, bo odległość jest mierzona od górnej krawędzi strzałki. Oto współrzędne prostokąta:

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

Drugie żądanie tworzy okrąg o szerokości 40 punktów z tą samą poziomą linią środkową co przykładowa strzałka, ale umieszczony 100 pkt (1 270 000 EMU) po prawej stronie prawej krawędzi strzałki. Współrzędna X okręgu to suma współrzędnych X strzałki, szerokości strzałki i 100 pkt. Wymuszenie wyrównania linii środkowej 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ż wziąć pod uwagę 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

Protokół żądań do wyrównywania elementu do innego:

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ładowego kształtu strzałki na 2 różne sposoby.

Pierwsze żądanie w grupie przenosi strzałkę do współrzędnych (X,Y) = (2000000, 150000) (2000000, 150000) (przy użyciu przesunięcia bezwzględnego applyMode). Drugie żądanie w grupie przenosi strzałkę,tym razem o 40 000 EMU w prawo oraz o 40 000 EMU w prawo,a applyModeumożliwia zmianę orientacji elementu w górę o 35 000 (z użyciem przesunięcia względnego w górę.

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

Protokół żądania przenoszenia elementu wygląda tak:

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

Odbicie elementu

Ten przykładowy kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest, aby odzwierciedlić element strony przykładowy kształt strzałki w poziomie wzdłuż jego środka bez zmiany jego pozycji na stronie ani jej skalowania.

W tym celu używa się podstawowego przekształcenia w ramce referencyjnej elementu. Dla jasności: przesunięcie i odbicie wzorcowe są przedstawione z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale lepiej jest wstępnie obliczyć iloczyn tych macierzy przekształceń, a następnie zastosować ten iloczyn jako pojedyncze żądanie.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przesuwany do punktu początkowego i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.

Poniżej znajduje się 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

Ten przykładowy kod presentations.batchUpdate pokazuje, jak za pomocą metody UpdatePageElementTransformRequest przeskalować element strony przykładowy kształt strzałki tak, by był o 50% szerszy i miał tylko 80% bieżącej wysokości, pozostawiając środek strzałki w tej samej pozycji i zachowując orientację.

W tym celu należy użyć podstawowego przekształcenia skalowania w ramce referencyjnej elementu. Dla jasności: przesunięcie ramki referencyjnej i skalowanie są wyświetlane z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale lepiej jest wstępnie obliczyć iloczyn tych macierzy przekształceń, a następnie zastosować je jako pojedyncze żądanie.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przesuwany do punktu początkowego i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.

Protokół żądania zmiany rozmiaru elementu wygląda tak:

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

Ten przykładowy kod presentations.batchUpdate pokazuje, jak użyć metody UpdatePageElementTransformRequest, aby obrócić element strony przykładowy kształt strzałki o 35 stopni w lewo, pozostawiając środek strzałki w tej samej pozycji i zachowując jego rozmiar.

W tym celu korzysta się z podstawowego przekształcenia rotacji w ramce referencyjnej elementu. Dla jasności: przesunięcie ramki referencyjnej i rotacja są wyświetlane z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale lepiej jest wstępnie obliczyć iloczyn tych macierzy przekształceń, a następnie zastosować go jako pojedyncze żądanie.

W przypadku przekształceń tłumaczenia środek kształtu strzałki jest przesuwany do punktu początkowego i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.

Protokół żądania obracania 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"
        }
      }
    }
  ]
}