Operacje przekształcania

Interfejs Prezentacje Google umożliwia sterowanie lokalizacją, rozmiarem i orientacją elementu PageElement (polami tekstowymi, obrazami, tabelami i podstawowymi kształtami) na stronie przy zachowaniu linii prostych i zachowania punktów oraz linii równoległych. Są to tzw. przekształcenia afiniczne. W tym przykładzie pokazano kilka typowych operacji przekształcania elementów strony za pomocą metody presentations.batchUpdate.

W tych przykładach używane są następujące zmienne:

  • PRESENTATION_ID – wskazuje, gdzie należy podać identyfikator prezentacji. Wartość tego identyfikatora można znaleźć w adresie URL prezentacji.
  • PAGE_ID – wskazuje, gdzie należy podać identyfikator obiektu strony. Wartość tę możesz pobrać z adresu URL lub za pomocą żądania odczytu interfejsu API.
  • PAGE_ELEMENT_ID – wskazuje, gdzie należy podać identyfikator obiektu pageelement. Możesz określić ten identyfikator dla tworzonych przez siebie 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

Zakładamy, że w poniższych przykładach istnieje przykładowy element strony w postaci strzałki o podanym rozmiarze i danych przekształcenia (można je znaleźć za pomocą żądania metody presentations.pages.get). W przykładowym kształcie użyto pomiaru unit EMU (angielska jednostka wskaźników) i punktu (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 elementów

Poniższy przykładowy kod presentations.batchUpdate pokazuje, jak za pomocą metody CreateShapeRequest tworzyć nowe kształty w prawidłowych pozycjach, wyrównane do przykładowej 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 powoduje utworzenie prostokąta o wymiarach 100 x 50 punktów, wyrównanego do lewej krawędzi kształtu strzałki, ale umieszczonego 50 punktów (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 pkt, ponieważ odległość jest mierzona od góry strzałki. 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 znajduje się 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, jej szerokości i 100 punktów. Aby wyrównać linię środkową nowego okręgu, weź pod uwagę wysokość zarówno strzałki, jak i okręgu. Współrzędna Y okręgu to współrzędna Y strzałki i połowa wysokości strzałki minus połowa wysokości okręgu. W obu przypadkach należy też brać pod uwagę współczynniki skalowania związane ze strzałką, ponieważ wpływają one na renderowaną szerokość i wysokość strzałki. Współrzędne okręgu to więc:

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 do wyrównywania elementu z innym:

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

Z przykładowego kodu presentations.batchUpdate poniżej dowiesz się, jak użyć metody UpdatePageElementTransformRequest do przetłumaczenia elementu strony z przykładowym kształtem strzałki na 2 różne sposoby.

Pierwsze żądanie w grupie przenosi strzałkę do (X,Y) = (2000000, 150000) współrzędnej EMU (przy użyciu przesunięcia bezwzględnego applyMode). Drugie żądanie w grupie przesuwa strzałkę stamtąd, tym razem o 40 000 EMU w prawo, a w celu unikania zmiany rozmiaru 35 000 rozmiaru względnego elementu EMU w przypadku przesuwania w górę.applyMode

Po wykonaniu obu żądań lewy górny róg strzałki znajduje się w współrzędnej EMU (X,Y) = (2040000, 115 000).

Oto protokół żądania do 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"
        }
      }
    }
  ]
}

Odbicie pierwiastków

Z przykładowego kodu presentations.batchUpdate poniżej dowiesz się, jak użyć metody UpdatePageElementTransformRequest, aby element strony o kształcie przykładowej strzałki był umieszczony poziomo wzdłuż jego środka bez zmiany jego pozycji na stronie i bez zmiany jego rozmiaru na stronie.

Można to zrobić za pomocą podstawowego przekształcenia odbicia w ramce referencyjnej elementu. Dla jasności: przesunięcie ramki i odbicie w przykładzie są przedstawione z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale wydajniejsze jest wstępne obliczenie iloczynu tych matryc przekształceń, a potem zastosowanie tego iloczynu jako pojedynczego żądania.

W przypadku przekształceń przekształcających środek kształtu strzałki jest przesuwany do punktu początkowego i z niego. Dla jasności wartości parametrów są wyrażone w formie obliczeń.

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

Z przykładowego kodu poniżej presentations.batchUpdate dowiesz się, jak za pomocą metody UpdatePageElementTransformRequest przeskalować element strony z przykładową strzałką w sposób szerszy o 50% i ustawiając tylko 80% bieżącej wysokości przy zachowaniu tej samej orientacji i utrzymania środka strzałki.

Można to zrobić za pomocą podstawowego przekształcenia skalowania w ramce referencyjnej elementu. Dla jasności: przesunięcie ramki i skalowanie odniesienia są przedstawione z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale wydajniejsze jest wstępne obliczenie iloczynu tych matryc przekształceń, a potem zastosowanie tego produktu jako pojedynczego żądania.

W przypadku przekształceń przekształcających środek kształtu strzałki jest przesuwany do punktu początkowego i z niego. Dla jasności wartości parametrów są wyrażone w formie obliczeń.

Oto protokół żądania do 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

Z tego przykładowego kodu presentations.batchUpdate dowiesz się, jak użyć metody UpdatePageElementTransformRequest do obrócenia elementu strony z przykładową strzałką o 35 stopni w lewo, jednocześnie utrzymując środek strzałki w tym samym położeniu i utrzymując jej rozmiar.

Można to zrobić za pomocą podstawowego przekształcenia rotacji w ramce referencyjnej elementu. Dla jasności: przesunięcie i obrót ramki referencyjnej są pokazywane z 3 osobnymi wywołaniami metody UpdatePageElementTransformRequest, ale lepiej wstępnie obliczyć iloczyn tych macierzy przekształceń, a potem zastosować ten iloczyn jako jedno żądanie

W przypadku przekształceń przekształcających środek kształtu strzałki jest przesuwany do punktu początkowego i z niego. Dla jasności wartości parametrów są wyrażone w formie obliczeń.

Oto protokół żądań 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"
        }
      }
    }
  ]
}