Transformationsvorgänge

Mit der Google Präsentationen API können Sie die Position, Größe und Ausrichtung von PageElement (Textfelder, Bilder, Tabellen und einfache Formen) auf einer Seite ändern, wobei Linien gerade bleiben und Punkte und parallele Linien erhalten bleiben. Diese werden 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 finden den Wert für diese ID in der URL der Präsentation.
  • PAGE_ID: Gibt an, wo Sie die Seitenobjekt-ID angeben. Sie können den entsprechenden Wert 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, um sprachenunabhängig zu sein. Weitere Informationen zum Implementieren eines Batch-Updates 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 der folgenden Größe und den folgenden Transformationsdaten gibt, die über die Methodenanfrage presentations.pages.get ermittelt werden können. Für die Beispielform werden die Maßeinheiten unit (englische metrische Einheit) und pt (Punkt) verwendet.

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

Elemente aneinander 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 einer Größe von 100 × 50 pt erstellt, das am linken Rand der Pfeilform ausgerichtet ist, aber 50 pt (50 × 12.700 = 635.000 EMU) unterhalb des oberen Rands des Pfeils positioniert ist. Die X-Koordinate des neuen Rechtecks sollte mit der X-Koordinate des Pfeils übereinstimmen, damit der linke Rand ausgerichtet bleibt. Die Y-Koordinate ist gleich der Y-Koordinate des Pfeils plus 50 pt, da der Abstand von der Spitze 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 der X-Koordinate des Pfeils, der Pfeilbreite und 100 pt. Wenn Sie die Mittellinie für den neuen Kreis erzwingen möchten, müssen Sie sowohl die Höhe des Pfeils als auch die des Kreises berücksichtigen. 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

Im Folgenden finden Sie das Anfrageprotokoll zum Ausrichten eines Elements an einem anderen:

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

Element verschieben

Im folgenden Codebeispiel für presentations.batchUpdate sehen Sie, wie das Seitenelement mit der Beispielpfeilform mit der Methode UpdatePageElementTransformRequest auf zwei verschiedene Arten übersetzt werden kann.

Mit der ersten Anfrage in der Batch-Datei wird der Pfeil an die Koordinaten (X,Y) = (2000000, 150000) EMU (mithilfe einer absoluten Verschiebung applyMode) verschoben. Mit der zweiten Anfrage in der Batch-Datei wird der Pfeil von dort aus verschoben, diesmal 40.000 EMU nach rechts und 35.000 EMU nach oben (mithilfe einer relativen Verschiebung applyMode). Die verwendeten transformation1-Matrizen sind so aufgebaut, dass sich Größe und Ausrichtung des Elements nicht ändern.

Nach dem Ausführen beider Anfragen befindet sich die linke obere Ecke des Pfeils bei der EMU-Koordinate (X,Y) = (2040000, 115000).

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

Element spiegeln

Im folgenden presentations.batchUpdate-Codebeispiel wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für Pfeilform horizontal entlang seiner Mitte spiegeln, ohne seine Position auf der Seite zu ändern oder es zu skalieren.

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

Bei Verschiebungen wird der Mittelpunkt des Pfeils zum Ursprung und vom Ursprung verschoben. Die Parameterwerte werden zugunsten der Übersichtlichkeit 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 wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für Pfeilform um 50 % breiter und nur 80% seiner aktuellen Höhe skalieren, während die Mitte des Pfeils an derselben Position bleibt und die Ausrichtung beibehalten wird.

Dazu wird im Referenzframe des Elements eine einfache Skalierungstransformation 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 dann als einzelne Anfrage anzuwenden.

Bei den Verschiebungen wird der Mittelpunkt des Pfeils zum Ursprung und vom Ursprung verschoben. Die Parameterwerte werden zugunsten der Übersichtlichkeit als Berechnungen ausgedrückt.

Im Folgenden findest du das Anfrageprotokoll zum Ändern der Größe eines Elements:

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 seine Mitte 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 im Referenzframe des Elements eine einfache Drehtransformation verwendet. Zur Verdeutlichung werden die Verschiebung und Drehung des Referenzframes mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann als einzelne Anfrage anzuwenden.

Bei den Verschiebungen wird der Mittelpunkt des Pfeils zum Ursprung und vom Ursprung verschoben. Die Parameterwerte werden zugunsten der Übersichtlichkeit als Berechnungen ausgedrückt.

Im Folgenden finden Sie das Anfrageprotokoll zum Drehen eines Elements um seine Mitte:

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