Transformationsvorgänge

Mit der Google Slides API können Sie die Position, Größe und Ausrichtung eines PageElement (Textfelder, Bilder, Tabellen und einfache Formen) auf einer Seite ändern, wobei Linien gerade bleiben und Punkte und parallele Linien beibehalten werden. Diese Änderungen werden als affine Transformationen bezeichnet. In den Beispielen hier werden einige gängige Transformationsvorgänge für Seitenelemente mit der presentations.batchUpdate Methode gezeigt.

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 Präsentations-URL.
  • PAGE_ID—Gibt an, wo Sie die Objekt-ID der Seite angeben. Sie können den Wert aus der URL abrufen oder eine API-Leseanfrage verwenden.
  • PAGE_ELEMENT_ID: Gibt an, wo Sie die Objekt-ID des Seiten elements angeben. Sie können diese ID für von Ihnen erstellte Elemente angeben (mit einigen Einschränkungen) oder die Slides API automatisch eine erstellen lassen. Element-IDs können über eine API-Leseanfrage abgerufen werden.

Diese Beispiele werden als HTTP-Anfragen dargestellt, um sprachneutral zu sein. Informationen zum Implementieren eines Batch-Updates in verschiedenen Sprachen mit den Google API-Clientbibliotheken finden Sie unter Formen und Text hinzufügen.

Beispiel für eine Pfeilform

Für die folgenden Beispiele wird davon ausgegangen, dass ein Seitenelement mit einer Pfeilform vorhanden ist, das die folgenden Größen- und Transformationsdaten hat (die mit einer presentations.pages.get Methodenanfrage gefunden werden können). Für die Beispielform werden die Maßeinheiten unit EMU (English Metric Unit) 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"
  }
}

Element an einem anderen ausrichten

Das folgende presentations.batchUpdate -Codebeispiel zeigt, wie Sie mit der CreateShapeRequest -Methode 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 oberen linken Ecke der neuen Form berechnet werden.

Mit der ersten Anfrage wird ein Rechteck mit den Maßen 100 × 50 pt erstellt, das an der linken Seite der Pfeilform ausgerichtet ist, aber 50 pt (50 * 12.700 = 635.000 EMU) unter der oberen Kante des Pfeils positioniert ist. Die X-Koordinate des neuen Rechtecks sollte mit der X-Koordinate des Pfeils übereinstimmen, damit die linke Seite ausgerichtet bleibt. Die Y-Koordinate ist dieselbe wie die Y-Koordinate des Pfeils plus 50 pt, da der Abstand von der Oberseite 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 einem Durchmesser von 40 pt erstellt, der dieselbe horizontale Mittellinie wie der Beispielpfeil hat, aber 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 Ausrichtung an der Mittellinie 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 die Hälfte der Pfeilhöhe minus die Hälfte der Kreishöhe. In beiden Fällen müssen auch die Skalierungsfaktoren des Pfeils 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 Protokoll zeigt, wie Sie eine Anfrage senden, um ein Element an einem anderen auszurichten:

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

Das folgende presentations.batchUpdate Codebeispiel zeigt, wie Sie mit der UpdatePageElementTransformRequest Methode das Seitenelement mit der Beispielpfeilform auf zwei verschiedene Arten verschieben.

Mit der ersten Anfrage im Batch wird der Pfeil mit einer absoluten Verschiebung applyMode zur Koordinate (X, Y) = (2.000.000, 150.000) EMU verschoben. Mit der zweiten Anfrage im Batch wird der Pfeil von dort aus verschoben, diesmal 40.000 EMU nach rechts und 35.000 EMU nach oben (mit einer relativen Verschiebung applyMode). Die verwendeten Transformationsmatrizen1 sind so konstruiert, dass die Größe und Ausrichtung des Elements nicht geändert werden.

Nach Ausführung beider Anfragen befindet sich die obere linke Ecke des Pfeils an der Koordinate (X, Y) = (2.040.000, 115.000) EMU.

Das folgende Protokoll zeigt, wie Sie eine Anfrage senden, um ein Element zu verschieben:

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

Das folgende presentations.batchUpdate Codebeispiel zeigt, wie Sie mit der UpdatePageElementTransformRequest Methode das Seitenelement mit der Beispielpfeilform horizontal an seiner Mitte spiegeln, ohne seine Position auf der Seite oder seine Skalierung zu ändern.

Dazu wird eine einfache Spiegelungstransformation im Referenzrahmen des Elements verwendet. Zur besseren Übersicht werden die Verschiebung und Spiegelung des Referenzrahmens mit drei separaten Aufrufen der UpdatePageElementTransformRequest Methode dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformations matrizen vorzuberechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den Verschiebungstransformationen wird die Mitte der Pfeilform zum Ursprung und vom Ursprung weg verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Das folgende Protokoll zeigt, wie Sie eine Anfrage senden, um ein Element zu spiegeln:

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

Das folgende presentations.batchUpdate Codebeispiel zeigt, wie Sie mit der UpdatePageElementTransformRequest Methode das Seitenelement mit der Beispielpfeilform so skalieren, dass es 50% breiter und nur 80% so hoch wie bisher ist, wobei die Mitte des Pfeils an derselben Position bleibt und seine Ausrichtung beibehalten wird.

Dazu wird eine einfache Skalierungstransformation im Referenzrahmen des Elements verwendet. Zur besseren Übersicht werden die Verschiebung und Skalierung des Referenzrahmens mit drei separaten Aufrufen der UpdatePageElementTransformRequest Methode dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformations matrizen vorzuberechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den Verschiebungstransformationen wird die Mitte der Pfeilform zum Ursprung und vom Ursprung weg verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Das folgende Protokoll zeigt, wie Sie eine Anfrage senden, um die Größe eines Elements zu ä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 seine Mitte drehen

Das folgende presentations.batchUpdate Codebeispiel zeigt, wie Sie mit der UpdatePageElementTransformRequest Methode das Seitenelement mit der 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 Drehung stransformation im Referenz rahmen des Elements verwendet. Zur besseren Übersicht werden die Verschiebung und Drehung des Referenzrahmens mit drei separaten Aufrufen der UpdatePageElementTransformRequest Methode dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformations matrizen vorzuberechnen und dieses Produkt dann als einzelne Anfrage anzuwenden.

Bei den Verschiebungstransformationen wird die Mitte der Pfeilform zum Ursprung und vom Ursprung weg verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Das folgende Protokoll zeigt, wie Sie eine Anfrage senden, um ein Element um seine Mitte zu drehen:

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