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 Transformationsoperationen 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 Wert dafür über die 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 die Slides API eine automatisch erstellen lassen. 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 eine Pfeilform

Angenommen, es gibt ein Beispielseitenelement in Form eines Pfeils mit den folgenden Größen- und Transformationsdaten (die mit einer presentations.pages.get-Methodeanfrage 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 wird gezeigt, wie Sie mit der Methode CreateShapeRequest neue Formen an den richtigen Positionen erstellen, die mit der Beispielform des Pfeils 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 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

Mit der zweiten Anfrage wird ein 40 pt breiter Kreis erstellt, der dieselbe horizontale Mittellinie wie der Beispielpfeil hat, aber 100 pt (1.270.000 EMU) rechts vom rechten Rand 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 die Hälfte der Pfeilhöhe minus die Hälfte der 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 wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für eine Pfeilform auf zwei verschiedene Arten übersetzen.

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).

Im Folgenden ist das Anfrageprotokoll zum Verschieben eines Elements aufgeführt:

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 im Referenzframe des Elements eine einfache Reflexionstransformation 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.

Im Folgenden ist das Anfrageprotokoll für ein Element aufgeführt:

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 anpassen

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 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 mit presentations.batchUpdate wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für Pfeilform um 35 Grad gegen den Uhrzeigersinn drehen, während die Mitte des Pfeils an derselben Position bleibt und seine Größe unverändert bleibt.

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