Größe und Positionierung von Seitenelementen

In diesem Leitfaden wird beschrieben, wie Sie Seitenelemente mithilfe von affinen Transformationen vergrößern und positionieren. Eine konzeptionelle Einführung in affine Transformationen finden Sie im Konzeptleitfaden Transformationen.

Elemente transformieren

Mit der Slides API können Sie Elemente auf einer Seite neu positionieren und skalieren. Bestimmen Sie dazu zuerst, welche Art von Transformation angewendet werden soll, und wenden Sie diese Transformation dann mithilfe der Methode presentations.batchUpdate an, die ein oder mehrere UpdatePageElementTransformRequest-Elemente enthält.

Transformationen können in einem von zwei applyModes vorgenommen werden:

  • ABSOLUTE-Transformationen ersetzen die vorhandene Transformationsmatrix des Elements. Alle Parameter, die Sie in der Anfrage zur Transformationsaktualisierung auslassen, werden auf null gesetzt.

  • RELATIVE-Transformationen werden mit der vorhandenen Transformationsmatrix des Elements multipliziert (die Reihenfolge der Multiplikation ist wichtig):

$$A' = BA$$

Mit relativen Transformationen wird das Seitenelement verschoben oder skaliert, z. B. durch Verschieben einer Form um 100 Punkte nach links oder um 40 Grad. Absolute Transformationen verwerfen vorhandene Positions- und Skalierungsinformationen, z. B. das Verschieben einer Form in die Seitenmitte oder das Skalieren auf eine bestimmte Breite.

Komplexe Transformationen können in der Regel als Folge einfacherer Transformationen ausgedrückt werden. Die Vorberechnung einer Transformation – das Kombinieren mehrerer Transformationen mithilfe der Matrixmultiplikation – kann häufig den Aufwand reduzieren.

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

Übersetzung

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

Eine einfache Übersetzungstransformationsmatrix hat die folgende Form:

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

Wenn Sie ein Element mithilfe einer UpdatePageElementTransformRequest verschieben, ohne seine Größe, Scherung 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-Dimension gestreckt oder gestaucht, um seine Größe zu ändern. Eine einfache Skalierungstransformationsmatrix hat die folgende 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 anzupassen. Dies kann sich aber auch auf die gerenderte Scherung und Übersetzung des Elements auswirken. Wenn Sie das Element ohne Auswirkung auf seine Scherung oder Übersetzung skalieren möchten, wechseln Sie zum Referenzframe.

Rotation

Rotationstransformationen drehen ein Seitenelement mithilfe der Skalierungs- und Scherparameter um einen Punkt. Die grundlegende Rotationstransformationsmatrix hat die folgende Form, wobei der Drehwinkel (im Bogenmaß) 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 bei der Skalierung können Sie diese Matrixform direkt als RELATIVE-Transformation verwenden, um ein Element zu drehen. Dadurch wird es aber um den Ursprung der Seite gedreht. Wenn Sie das Element um seinen Mittelpunkt oder einen anderen Punkt drehen möchten, wechseln Sie zum Referenzrahmen.

Beurteilung

Die Reflexion spiegelt ein Element entlang einer bestimmten Linie oder Achse wider. Die Basistransformationsmatrix für die Reflexion 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 widerzuspiegeln. Dies führt jedoch dazu, dass das Element ebenfalls verschoben wird. Wenn das Element ohne Übersetzung wiedergegeben werden soll, wechseln Sie zum Referenzframe.

Referenzframes für Elemente

Wenn Sie eine einfache Skalierungs-, Reflexions- oder Rotationstransformation direkt auf ein Seitenelement anwenden, wird eine Transformation im Referenzframe der Seite erzeugt. Bei einer einfachen Rotation wird das Element beispielsweise um den Ursprung der Seite (die obere linke Ecke) gedreht. Sie können jedoch im Referenzrahmen des Elements selbst arbeiten und beispielsweise ein Element um seinen Mittelpunkt drehen.

Um ein Element innerhalb seines eigenen Referenzframes zu transformieren, schließen Sie es in zwei andere Übersetzungen ein: eine vorherige Übersetzungs-T1, die die Mitte des Elements zum Seitenursprung verschiebt, und eine folgende Übersetzung (T2), mit der das Element zurück an seine ursprüngliche Position verschoben wird. Die vollständige Operation kann als Matrixprodukt ausgedrückt werden:

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

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

Es ist möglich, jede dieser Transformationen einzeln als sequenzielle RELATIVE-Transformationsanfragen auszuführen. Idealerweise sollten Sie A' oben mit Matrixmultiplikationen vorausberechnen 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. Beide sind in Bezug auf API-Vorgänge effizienter und senden die Transformationsanfragen dann einzeln.

Beschränkungen

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

Feld Form Video Tabelle
Übersetzung
Scale Nein**
Schere Nein Nein

** Verwenden Sie UpdateTableRowPropertiesRequest und UpdateTableColumnPropertiesRequest, um Dimensionen für Tabellenzeilen und -spalten zu aktualisieren.

Alle Felder für die Größe und Positionierung können unerwartete Ergebnisse liefern, wenn das Seitenelement Scherungen aufweist. Alle Einschränkungen können sich ändern. Aktuelle Informationen finden Sie unter Google Slides API.

In der Slides API werden Ihre Werte möglicherweise refaktoriert.

Wenn Sie ein Seitenelement erstellen, können Sie eine Größe und Transformation angeben, die ein bestimmtes visuelles Ergebnis liefern. Die API kann die von Ihnen bereitgestellten Werte jedoch durch andere ersetzen, die das gleiche optische Erscheinungsbild haben. Wenn Sie eine Größe mit der API schreiben, können Sie im Allgemeinen nicht garantieren, dass dieselbe Größe zurückgegeben wird. Wenn Sie die Transformation berücksichtigen, sollten Sie jedoch dieselben Ergebnisse erhalten.