Transformationsvorgänge

Mit der Slides API können Sie die Position, Größe und Ausrichtung von Seitenelementen (Text, Bilder, Tabellen und Formen) auf einer Seite ändern, während die Linien gerade und Punkte und parallele Linien beibehalten werden. Diese werden als affine Transformationen bezeichnet. Die Beispiele hier zeigen einige gängige Seitenelementtransformationsvorgänge, die mit der API erreicht werden können.

In diesen Beispielen werden die folgenden Variablen verwendet:

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

Beispiel für eine Pfeilform

Nehmen wir für diese Beispiele an, dass ein Beispielseitenelement in Form eines Pfeils mit den folgenden Größen- und Transformationsdaten vorhanden ist (in der presentations.pages.get-Anfrage zu finden ist):

{
  "objectId": pageElementId,
  "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 Beispiel werden mit der Anfrage presentations.batchUpdate neue Formen erstellt, die an 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 im Batch presentations.batchUpdate wird ein 100 x 50 pt großes Rechteck 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 Rahmen 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 der rechten Kante des Pfeils positioniert ist. Die X-Koordinate des Kreises ist die Summe der X-Koordinate des Pfeils, der Pfeilbreite und 100 pt. Um eine Mittellinienausrichtung für den neuen Kreis zu erzwingen, müssen sowohl die Höhe des Pfeils als auch des Kreises berücksichtigt werden. Die Y-Koordinate des Kreises ist die Y-Koordinate des Pfeils plus die halbe Pfeilhöhe minus die halbe Kreishöhe. In beiden Fällen müssen auch die mit dem Pfeil verbundenen Skalierungsfaktoren berücksichtigt werden, da sie die gerenderte Breite und Höhe des Pfeils beeinflussen. Die Koordinaten des Kreises sind also:

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

Diese berechneten Koordinaten werden in der folgenden presentations.batchUpdate-Anfrage verwendet, um die Formen an den richtigen Positionen hinzuzufügen.

Das Anfrageprotokoll ist unten dargestellt. Im Leitfaden Text und Formen hinzufügen finden Sie ein Beispiel für die Implementierung einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken.

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "createShape": {
        "shapeType": "RECTANGLE",
        "elementProperties": {
          "pageObjectId": pageId,
          "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": pageId,
          "size": {
            "width": {
              "magnitude": 40,
              "unit": "PT"
            },
            "height": {
              "magnitude": 40,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 4170000,
            "translateY":  476000,
            "unit": "EMU"
          }
        }
      }
    }
  ]
}

Elemente verschieben

In diesem Beispiel wird die Anfrage presentations.batchUpdate verwendet, um das Seitenelement Beispielpfeilform auf zwei verschiedene Arten zu übersetzen. Bei der ersten Anfrage im Batch wird der Pfeil in die EMU-Koordinate (absolute Übersetzung) verschoben (X,Y) = (2000000, 150.000). Eine zweite Anfrage im Batch verschiebt den Pfeil von dort aus um 40.000 EMU nach rechts und 35.000 EMU nach oben (relative Übersetzung). Die verwendeten Transformationsmatrizen werden so erstellt, dass eine Änderung der Größe und Ausrichtung des Elements vermieden wird.

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

Das Anfrageprotokoll ist unten dargestellt. Im Leitfaden Text und Formen hinzufügen finden Sie ein Beispiel für die Implementierung einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken.

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": pageElementId,
        "applyMode": "ABSOLUTE",
        "transform": {
            "scaleX": 0.3,
            "scaleY": 0.12,
            "translateX": 2000000,
            "translateY":  150000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": pageElementId,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX":  40000,
            "translateY": -35000,
            "unit": "EMU"
        }
      }
    }
  ]
}

Elemente reflektieren

Im folgenden Beispiel wird eine presentations.batchUpdate-Anfrage verwendet, um das Element Beispielpfeilform horizontal entlang seiner Mitte darzustellen, ohne seine Position auf der Seite oder Skalierung zu ändern. Dazu wird eine grundlegende Reflexionstransformation im Referenzframe des Elements verwendet. Zur Verdeutlichung wird hier die Verschiebung und Reflexion des Referenzframes mit drei separaten updatePageElementTransform-Anfragen verarbeitet. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann dieses Produkt als einzelne Anfrage anzuwenden.

Für die translation-Transformationen hier wird die Mitte der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden der Übersichtlichkeit halber als Berechnungen ausgedrückt.

Das Anfrageprotokoll ist unten dargestellt. Im Leitfaden Text und Formen hinzufügen finden Sie ein Beispiel für die Implementierung einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken.

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": pageElementId,
        "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": pageElementId,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": -1,
            "scaleY":  1,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": pageElementId,
        "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 Beispiel wird eine presentations.batchUpdate-Anfrage verwendet, um das Element Beispielpfeilform so zu skalieren, dass es 50% breiter und nur 80% seiner aktuellen Höhe beträgt. Der Mittelpunkt des Pfeils bleibt dabei an derselben Position und seine Ausrichtung wird beibehalten. Dazu wird im Referenzframe des Elements eine einfache Skalierungstransformation verwendet. Zur Verdeutlichung werden die Verschiebung und Skalierung des Referenzframes hier mit drei separaten updatePageElementTransform-Anfragen verarbeitet. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann dieses Produkt als einzelne Anfrage anzuwenden.

Für die translation-Transformationen hier wird die Mitte der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden der Übersichtlichkeit halber als Berechnungen ausgedrückt.

Das Anfrageprotokoll ist unten dargestellt. Im Leitfaden Text und Formen hinzufügen finden Sie ein Beispiel für die Implementierung einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken.

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": pageElementId,
          "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": pageElementId,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1.5,
            "scaleY": 0.8,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": pageElementId,
        "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 den Mittelpunkt drehen

Im folgenden Beispiel wird mit einer presentations.batchUpdate-Anfrage das Element Beispielpfeilform um 35 Grad gegen den Uhrzeigersinn gedreht, wobei die Mitte des Pfeils an derselben Position bleibt und seine Größe beibehalten wird. Dazu wird eine grundlegende Rotationstransformation im Referenzframe des Elements verwendet. Zur Verdeutlichung werden die Verschiebung und Rotation des Referenzframes hier mit drei separaten updatePageElementTransform-Anfragen verarbeitet. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann dieses Produkt als einzelne Anfrage anzuwenden.

Für die translation-Transformationen hier wird die Mitte der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden der Übersichtlichkeit halber als Berechnungen ausgedrückt.

Das Anfrageprotokoll ist unten dargestellt. Im Leitfaden Text und Formen hinzufügen finden Sie ein Beispiel für die Implementierung einer Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API-Clientbibliotheken.

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": pageElementId,
          "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": pageElementId,
        "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": pageElementId,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}