Transformationsvorgänge

Mit der Google Slides API können Sie Position, Größe und Ausrichtung eines PageElement (Textfelder, Bilder, Tabellen und einfache Formen) auf einer Seite ändern. Dabei bleiben Linien gerade und Punkte und parallele Linien erhalten. Diese werden als affine Transformationen bezeichnet. Die Beispiele hier zeigen einige gängige Transformationsvorgä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 dafür aus der URL oder mithilfe einer 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 eine ID erstellt. Element-IDs können über eine API-Leseanfrage abgerufen werden.

Diese Beispiele werden als HTTP-Anfragen dargestellt, um sprachneutral zu sein. Informationen zum Implementieren einer Batchaktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken finden Sie unter Formen und Text hinzufügen.

Beispiel für eine Pfeilform

Nehmen wir für die folgenden Beispiele an, dass es ein Beispielseitenelement in Form eines Pfeils mit den folgenden Größen- und Transformationsdaten gibt, das Sie über die Methodenanfrage presentations.pages.get ermitteln können. Für die Beispielform werden die Maßeinheit unit EMU (englische Messwerteinheit) 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"
  }
}

Ein Element an einem anderen ausrichten

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

Mit der ersten Anfrage wird ein Rechteck mit 100 × 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 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 entspricht der Y-Koordinate des Pfeils plus 50 pt, da die Entfernung von der Spitze des Pfeils gemessen wird. Die Koordinaten des Rechtecks sind daher:

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

Mit der zweiten Anfrage wird ein Kreis mit einer Breite von 40 pt erstellt, der dieselbe horizontale Mittellinie wie der Beispielpfeil hat, aber um 100 pt (1.270.000 EMU) rechts von der rechten Kante des Pfeils positioniert ist. Die X-Koordinate des Kreises ist die Summe aus der X-Koordinate des Pfeils, der Pfeilbreite und 100 pt. Um eine Mittellinienausrichtung für den neuen Kreis zu erzwingen, muss die Höhe des Pfeils und des Kreises berücksichtigt werden. Die Y-Koordinate des Kreises ist die Y-Koordinate des Pfeils plus der halben Pfeilhöhe abzüglich der halben Kreishöhe. In beiden Fällen müssen auch die mit dem Pfeil verknüpften Skalierungsfaktoren berücksichtigt werden, da sie die gerenderte Breite und Höhe des Pfeils beeinflussen. 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 für die Ausrichtung 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"
          }
        }
      }
    }
  ]
}

Elemente verschieben

Das folgende Codebeispiel presentations.batchUpdate zeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispielpfeilform auf zwei verschiedene Arten übersetzen können.

Die erste Anfrage im Batch verschiebt den Pfeil in die (X,Y) = (2000000, 150000) EMU-Koordinate (mithilfe einer absoluten Übersetzung applyMode). Die zweite Anfrage im Batch verschiebt den Pfeil von dort, diesmal 40.000 EMU nach rechts und 35.000 EMU nach rechts und 35.000 EMU nach oben und 35.000 EMUs nach oben. Verwenden Sie eine relative Ausrichtung nach oben, die eine Änderung der Größe mit der relativen Ausrichtung nach oben konstruiert (mit einer relativen Ausrichtung nach oben. Verwenden Sie dabei eine relative Ausrichtung nach oben. Verwenden Sie dabei eine relative Ausrichtung nach oben. Verwenden Sie dabei eine relative Ausrichtung nach oben).applyMode

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

Im Folgenden finden Sie das Anfrageprotokoll zum Verschieben eines Elements:

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

Elemente reflektieren

Das folgende Codebeispiel presentations.batchUpdate zeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispielpfeil 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 Referenzframeverschiebung und -reflexion mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann das Produkt als einzelne Anfrage anzuwenden.

Bei den translation-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Im Folgenden finden Sie das Anfrageprotokoll, mit dem ein -Element wiedergegeben werden soll:

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 von Elementen ändern

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

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

Bei den translation-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Mit dem folgenden Anfrageprotokoll können Sie die Größe eines Elements anpassen:

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

Ein Element um seinen Mittelpunkt drehen

Im folgenden Codebeispiel presentations.batchUpdate wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispielpfeilform um 35 Grad gegen den Uhrzeigersinn drehen und dabei die Mitte des Pfeils und seine Größe beibehalten.

Dies geschieht mithilfe einer grundlegenden Rotationstransformation im Referenzframe des Elements. Zur Verdeutlichung werden die Referenzframeverschiebung und -rotation mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann das Produkt als einzelne Anfrage anzuwenden.

Bei den translation-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur Verdeutlichung als Berechnungen ausgedrückt.

Im Folgenden finden Sie das Anfrageprotokoll zum Rotieren eines Elements um sein Zentrum:

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