Transformationsvorgänge

Mit der Google Slides API können Sie die Position, Größe und Ausrichtung von PageElement (Textfelder, Bilder, Tabellen und Grundformen) auf einer Seite ändern. Dabei bleiben die Linien gerade und Punkte sowie parallele Linien werden beibehalten. Dies wird als affine Transformationen bezeichnet. Die folgenden Beispiele zeigen einige gängige Umwandlungsvorgänge für Seitenelemente mit der Methode presentations.batchUpdate.

In diesen Beispielen werden die folgenden Variablen verwendet:

  • PRESENTATION_ID: Gibt an, wo Sie die Präsentations-ID angeben. Sie können den Wert für diese ID der Präsentations-URL entnehmen.
  • PAGE_ID: Gibt an, wo Sie die Seitenobjekt-ID angeben. Sie können den Wert hierfür aus der URL oder über eine API-Leseanfrage abrufen.
  • PAGE_ELEMENT_ID: Gibt an, wo Sie die Objekt-ID des Seitenelements angeben. Sie können diese ID für von Ihnen erstellte Elemente angeben (mit einigen Einschränkungen) oder zulassen, dass die Slides API automatisch eines erstellt. Element-IDs können über eine API-Leseanfrage abgerufen werden.

Diese Beispiele werden als HTTP-Anfragen dargestellt, damit sie sprachneutral sind. Informationen zum Implementieren einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken finden Sie unter Formen und Text hinzufügen.

Beispiel für Pfeilform

In den folgenden Beispielen wird davon ausgegangen, dass es ein beispielhaftes Seitenelement in Form eines Pfeils mit den folgenden Größen- und Transformationsdaten gibt, das über die Methodenanfrage presentations.pages.get ermittelt werden kann. Die Beispielform verwendet die Messung unit EMU (englische Einheit) und 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"
  }
}

Ein Element an einem anderen ausrichten

Im folgenden Codebeispiel für presentations.batchUpdate sehen Sie, wie Sie mit der Methode CreateShapeRequest neue Formen an den richtigen Positionen erstellen, die mit der Beispielpfeilform auf der Seite ausgerichtet sind. In beiden Fällen müssen die X- und Y-Koordinaten der oberen linken Ecke der neuen Form berechnet werden.

Mit der ersten Anfrage wird ein Rechteck mit 100 x 50 pt erstellt, das am linken Rand der Pfeilform ausgerichtet ist, aber 50 pt (50 × 12.700 = 635.000 EMU) unterhalb der oberen Kante des Pfeils platziert ist. Die X-Koordinate des neuen Rechtecks sollte der X-Koordinate des Pfeils entsprechen, damit seine linke Rahmenlinie ausgerichtet bleibt. Die Y-Koordinate entspricht der Y-Koordinate des Pfeils plus 50 pt, da die Entfernung vom oberen Rand des Pfeils gemessen wird. Die Koordinaten des Rechtecks sind daher:

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

Die zweite Anfrage erstellt einen 40 pt breiten Kreis, der dieselbe horizontale Mittellinie wie der Beispielpfeil hat, aber 100 pt (1.270.000 EMU) rechts neben dem rechten Pfeil des Pfeils positioniert ist. Die X-Koordinate des Kreises ist die Summe aus x-Koordinate, Pfeilbreite und 100 pt. Um eine zentrierte Ausrichtung des neuen Kreises zu erzwingen, müssen die Höhe des Pfeils und des Kreises berücksichtigt werden. Die Y-Koordinate des Kreises ist die Y-Koordinate des Pfeils plus halbe Pfeilhöhe minus halbe Kreishöhe. In beiden Fällen müssen auch die mit dem Pfeil verknüpften Skalierungsfaktoren berücksichtigt werden, da sie sich auf die gerenderte Breite und Höhe des Pfeils auswirken. Die Koordinaten des Kreises sind daher:

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

Das folgende Anfrageprotokoll dient zum Ausrichten eines Elements an ein anderes:

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

Elemente verschieben

Im folgenden Codebeispiel für presentations.batchUpdate wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement mit der Beispielpfeilform auf zwei verschiedene Arten übersetzen können.

Bei der ersten Anfrage im Batch wird der Pfeil nach rechts verschoben: (X,Y) = (2000000, 150.000) EMU-Koordinate (mit einer absoluten Übersetzung applyMode). Bei der zweiten Anfrage im Batch wird der Pfeil von dort verschoben. Diesmal werden 40.000 EMU nach rechts und 35.000 EMU nach oben konstruiert, werden zur Vermeidung der Umwandlungsgröße 35.000 EMU nach oben verwendet.applyMode

Nachdem beide Anfragen ausgeführt wurden, liegt die obere linke Ecke des Pfeils bei der Koordinate (X,Y) = (2040000, 115.000).

Das folgende Anfrageprotokoll zum Verschieben von Elementen:

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

Ein Element reflektieren

Im folgenden Codebeispiel für presentations.batchUpdate sehen Sie, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement mit Beispielpfeilform horizontal entlang seiner Mitte darstellen, ohne seine Position auf der Seite zu ändern oder zu skalieren.

Dazu wird eine grundlegende Reflexionstransformation im Referenzframe des Elements verwendet. Zur Verdeutlichung werden die Verschiebung und Reflexion des Referenzframes mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den translation-Transformationen wird das Zentrum der Pfeilform vom Ursprung weg und zurück verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Das folgende Anfrageprotokoll spiegelt ein -Element wider:

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

Größe eines Elements ändern

Im folgenden Codebeispiel für presentations.batchUpdate sehen Sie, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispielpfeilform auf 50 % Breite und nur 80% seiner aktuellen Höhe skalieren, wobei die Mitte des Pfeils an derselben Position bleibt und seine Ausrichtung beibehalten wird.

Dazu wird eine einfache Skalierungstransformation im Referenzframe des Elements verwendet. Zur Verdeutlichung werden die Verschiebung und Skalierung des Referenzframes mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den translation-Transformationen wird das Zentrum der Pfeilform vom Ursprung weg und zurück verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Mit dem folgenden Anfrageprotokoll lässt sich die Größe eines Elements ändern:

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

Element um seinen Mittelpunkt drehen

Im folgenden Codebeispiel für presentations.batchUpdate sehen Sie, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement mit Beispielpfeilform um 35 Grad gegen den Uhrzeigersinn drehen, wobei die Mitte des Pfeils an derselben Position bleibt und seine Größe beibehalten wird.

Dazu wird eine einfache Rotationstransformation im Referenzframe des Elements verwendet. Zur Verdeutlichung werden die Verschiebung und Rotation des Referenzframes mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den translation-Transformationen wird das Zentrum der Pfeilform vom Ursprung weg und zurück verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Das folgende Anfrageprotokoll dient zum Drehen eines Elements um seinen Mittelpunkt:

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