Größe und Positionierung von Seitenelementen

In diesem Leitfaden wird beschrieben, wie Sie Seitenelemente mithilfe von affinen Transformationen skalieren und positionieren. Eine konzeptionelle Einführung in affine Transformationen finden Sie im Leitfaden zu Transformationen.

Elemente transformieren

Mit der Google Präsentationen API können Sie Elemente auf einer Seite neu positionieren und skalieren. Dazu müssen Sie zuerst die Art der Transformation ermitteln und sie dann mit der Methode presentations.batchUpdate anwenden, die ein oder mehrere Elemente vom Typ UpdatePageElementTransformRequest enthält.

Transformationen können in einem von zwei applyModes erfolgen:

  • ABSOLUTE ersetzt die vorhandene Transformationsmatrix des Elements. Alle Parameter, die Sie aus der Anfrage zum Aktualisieren der Transformation weglassen, werden auf null gesetzt.

  • RELATIVE-Transformationen werden mit der vorhandenen Transformationsmatrix des Elements multipliziert. Die Reihenfolge der Multiplikation ist wichtig:

$$A' = BA$$

Bei relativen Transformationen wird das Seitenelement an eine andere Position verschoben oder skaliert. So können Sie beispielsweise eine Form um 100 Pixel nach links verschieben oder um 40 Grad drehen. Bei absoluten Transformationen werden vorhandene Informationen zu Position und Skalierung verworfen. So können Sie beispielsweise eine Form in die Mitte der Seite verschieben oder auf eine bestimmte Breite skalieren.

Komplexe Transformationen können in der Regel als Abfolge einfacherer Transformationen ausgedrückt werden. Wenn Sie eine Transformation vorab berechnen und mehrere Transformationen mithilfe der Matrixmultiplikation kombinieren, lässt sich der Overhead oft reduzieren.

Für einige Vorgänge müssen Sie die vorhandenen Transformationsparameter eines Elements kennen. Wenn Sie diese Werte nicht haben, können Sie sie mit einer presentations.pages.get abrufen.

Übersetzung

Bei der Verschiebung wird ein Seitenelement einfach an eine neue Position auf derselben Seite verschoben. Bei absoluten Verschiebungen wird das Element an einen bestimmten Punkt verschoben, während es bei relativen Verschiebungen um eine bestimmte Entfernung verschoben wird.

Eine einfache Matrix für die Translationstransformation hat die Form:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

Wenn Sie ein Element mit einer UpdatePageElementTransformRequest verschieben möchten (ohne Größe, Neigung oder Ausrichtung zu ändern), können Sie eine der folgenden AffineTransform-Strukturen verwenden:

// Absolute translation:
{
  'transform': {
    'scaleX':  current scaleX value,
    'scaleY':  current scaleY value,
    'shearX':  current shearX value,
    'shearY':  current shearY value,
    'translateX': X coordinate to move to,
    'translateY': Y coordinate to move to,
    'unit': 'EMU' // or 'PT'
  }
}

// Relative translation (scaling must also be provided to avoid a matrix multiplication error):
{
  'transform': {
    'scaleX':  1,
    'scaleY':  1,
    'translateX': X coordinate to move by,
    'translateY': Y coordinate to move by,
    'unit': 'EMU' // or 'PT'
  }
}

Skalierung

Beim Skalieren wird ein Element entlang der X‑ und/oder Y‑Achse gedehnt oder verkleinert, um die Größe zu ändern. Eine einfache Skalierungstransformationsmatrix hat die Form:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Sie können diese Matrixform direkt als RELATIVE-Transformation verwenden, um die Größe eines Elements zu ändern. Dies kann sich jedoch auch auf die gerenderte Scherung und Verschiebung des Elements auswirken. Wenn Sie das Element skalieren möchten, ohne seine Scherung oder Translation zu beeinflussen, wechseln Sie zum Referenzrahmen.

Rotation

Mit Drehtransformationen wird ein Seitenelement mithilfe der Skalierungs- und Scherparameter um einen Punkt gedreht. Die Matrix der einfachen Drehtransformation hat die folgende Form, wobei der Drehwinkel (in Radian) von der X-Achse aus gegen den Uhrzeigersinn gemessen wird:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Wie beim Skalieren können Sie diese Matrixform direkt als RELATIVE-Transformation verwenden, um ein Element zu drehen. Das Element wird dann jedoch um den Ursprung der Seite gedreht. Wenn Sie das Element um seinen Mittelpunkt oder einen anderen Punkt drehen möchten, wechseln Sie zu diesem Referenzrahmen.

Beurteilung

Bei der Spiegelung wird ein Element entlang einer bestimmten Linie oder Achse gespiegelt. Die grundlegende Transformationsmatrix für die Spiegelung entlang der X‑ und Y‑Achse hat die folgenden Formen:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

Wie bei der Skalierung können Sie diese Matrixform direkt als RELATIVE-Transformation verwenden, um ein Element zu spiegeln. Dadurch wird das Element jedoch auch verschoben. Wenn Sie das Element ohne Verschiebung spiegeln möchten, wechseln Sie zum Referenzrahmen.

Elementreferenzframes

Wenn Sie eine grundlegende Skalierung, Spiegelung oder Drehung direkt auf ein Seitenelement anwenden, wird eine Transformation im Referenzrahmen der Seite vorgenommen. Bei einer einfachen Drehung wird das Element beispielsweise um den Ursprung der Seite (das linke obere Eck) gedreht. Sie können jedoch im Referenzrahmen des Elements selbst arbeiten, um beispielsweise ein Element um seinen Mittelpunkt zu drehen.

Wenn Sie ein Element innerhalb seines eigenen Referenzrahmens transformieren möchten, setzen Sie es zwischen zwei andere Translationen: eine vorangehende Translation T1, die das Elementzentrum zum Ursprung der Seite verschiebt, und eine nachfolgende Translation T2, die das Element wieder an seine ursprüngliche Position verschiebt. Der vollständige Vorgang kann als Matrixprodukt ausgedrückt werden:

$$A' = T2 \times B \times T1 \times A$$

Sie können auch zu anderen Referenzrahmen wechseln, indem Sie verschiedene Punkte stattdessen zum Ursprung verschieben. Diese Punkte werden zum Mittelpunkt des neuen Referenzframes.

Jede dieser Transformationen kann einzeln als sequenzielle RELATIVE-Transformationsanfrage ausgeführt werden. Idealerweise sollten Sie A' oben mit Matrixmultiplikationen vorab berechnen und das Ergebnis als einzelne ABSOLUTE-Transformation anwenden. Alternativ können Sie das T2 * B * T1-Produkt vorab berechnen und als einzelne RELATIVE-Transformation anwenden. Beides ist in Bezug auf API-Vorgänge effizienter als das Senden der Transformationsanfragen einzeln.

Beschränkungen

Einige Felder für Größe und Positionierung sind mit bestimmten Seitenelementen nicht kompatibel. In der folgenden Tabelle wird die Kompatibilität bestimmter Seitenelemente mit Feldern für Größe und Position zusammengefasst.

Feld Form Video Tabelle
Translation
Scale Nein**
Verzerrung Nein Nein

** Verwenden Sie UpdateTableRowPropertiesRequest und UpdateTableColumnPropertiesRequest, um die Abmessungen von Tabellenzeilen und ‑spalten zu aktualisieren.

Alle Felder für Größe und Position können zu unerwarteten Ergebnissen führen, wenn das Seitenelement eine Verschiebung hat. Alle Einschränkungen können sich ändern. Aktuelle Informationen finden Sie unter Google Präsentationen API.

Die Slides API kann Ihre Werte umstrukturieren

Wenn Sie ein Seitenelement erstellen, können Sie eine Größe und eine Transformation angeben, die ein bestimmtes visuelles Ergebnis liefern. Die API kann Ihre angegebenen Werte jedoch durch andere ersetzen, die dieselbe visuelle Darstellung ergeben. Wenn Sie eine Größe mit der API schreiben, wird nicht garantiert, dass dieselbe Größe zurückgegeben wird. Die Ergebnisse sollten jedoch gleich sein, wenn Sie die Transformation berücksichtigen.