Seitenelemente in Größe und Position anpassen

In diesem Leitfaden wird erläutert, wie Sie Seitenelemente mithilfe von affinen Transformationen mit der Google Präsentationen API skalieren und positionieren. Eine konzeptionelle Einführung in affine Transformationen finden Sie im Konzeptleitfaden Transformationen und Seitenelemente.

Elemente transformieren

Mit der Präsentationen API können Sie Elemente auf einer Seite neu positionieren und skalieren. Dazu müssen Sie zuerst festlegen, welche Art von Transformation angewendet werden muss, und diese dann mit der presentations.batchUpdate() Methode anwenden, die ein oder mehrere UpdatePageElementTransformRequest Elemente enthält.

Transformationen können mit einem ApplyMode vorgenommen werden:

  • ABSOLUTE -Transformationen ersetzen die vorhandene Transformationsmatrix des Elements. Alle Parameter, die Sie in der Transformationsaktualisierungsanfrage 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 von seiner aktuellen Position aus verschoben oder skaliert. Beispiel: Eine Form wird um 100 Punkte nach links verschoben oder um 40 Grad gedreht. Bei absoluten Transformationen werden vorhandene Positions- und Skalierungsinformationen verworfen. Beispiel: Eine Form wird in die Mitte der Seite verschoben oder auf eine bestimmte Breite skaliert.

Komplexe Transformationen können in der Regel als eine Folge einfacherer Transformationen ausgedrückt werden. Durch die Vorberechnung einer Transformation – die Kombination mehrerer Transformationen mithilfe der Matrixmultiplikation – kann der Aufwand oft reduziert werden.

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 der presentations.pages.get() Methode abrufen.

Übersetzung

Die Übersetzung ist die Aktion, ein Seitenelement an eine neue Position auf derselben Seite zu verschieben. Bei absoluten Übersetzungen wird das Element an einen bestimmten Punkt verschoben, bei relativen Übersetzungen um eine bestimmte Entfernung.

Eine grundlegende Transformationsmatrix für die Übersetzung hat die Form:

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

Wenn Sie mit einer UpdatePageElementTransformRequest ein Element verschieben möchten, 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'
  }
}

Skalieren

Beim Skalieren wird ein Element entlang der X- oder Y-Achse gestreckt oder zusammengedrückt, um seine Größe zu ändern. Eine grundlegende Transformationsmatrix für die Skalierung 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 Übersetzung des Elements auswirken. Wenn Sie das Element skalieren möchten, ohne seine Scherung oder Übersetzung zu beeinflussen, wechseln Sie zum Elementreferenzrahmen.

Rotation

Bei Rotationstransformationen wird ein Seitenelement um einen Punkt gedreht, wobei die Skalierungs- und Scherungsparameter verwendet werden. Die grundlegende Transformationsmatrix für die Rotation hat die folgende Form, wobei der Drehwinkel (in 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 beim Skalieren können Sie diese Matrixform direkt als RELATIVE-Transformation verwenden, um ein Element zu drehen. Dadurch wird das Element jedoch um den Ursprung der Seite gedreht. Wenn Sie das Element um seine Mitte oder einen anderen Punkt drehen möchten, wechseln Sie zu diesem Elementreferenz rahmen.

Beurteilung

Bei der Beurteilung wird ein Element an einer bestimmten Linie oder Achse gespiegelt. Die grundlegenden Transformationsmatrizen für die Spiegelung an der X- und Y-Achse haben 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 beim Skalieren 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 Elementreferenzrahmen.

Elementreferenzrahmen

Wenn Sie eine grundlegende Skalierungs, Rotations- oder Spiegelungstransformation direkt auf ein Seiten element anwenden, wird eine Transformation im Referenzrahmen der Seite erzeugt. Bei einer grundlegenden Rotation wird das Element beispielsweise um den Ursprung der Seite (die obere linke Ecke) gedreht. Sie können jedoch auch im Referenzrahmen des Elements arbeiten, um ein Element beispielsweise um seinen Mittelpunkt zu drehen.

Wenn Sie ein Element in seinem eigenen Referenzrahmen transformieren möchten, schließen Sie es zwischen zwei anderen Übersetzungen ein: eine vorherige Übersetzung T1, die den Mittelpunkt des Elements zum Ursprung der Seite verschiebt, und eine nachfolgende Übersetzung T2, die das Element wieder an seine ursprüngliche Position verschiebt. Der gesamte 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 stattdessen andere Punkte zum Ursprung verschieben. Diese Punkte werden zum Mittelpunkt des neuen Referenzrahmens.

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

Beschränkungen

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

Feld Form Video Tabelle
Übersetzung
Skalieren Nein**
Scherung 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 Scherung aufweist. Alle Beschränkungen können sich ändern. Aktuelle Informationen finden Sie unter Google Präsentationen API.

Überarbeitete Werte

Wenn Sie ein Seitenelement erstellen, können Sie eine Größe und Transformation angeben, die ein bestimmtes visuelles Ergebnis liefern. Die Präsentationen API kann die von Ihnen angegebenen Werte jedoch durch andere ersetzen, die dasselbe visuelle Erscheinungsbild erzeugen. Wenn Sie mit der API eine Größe angeben, wird Ihnen nicht garantiert, dass Sie dieselbe Größe zurückerhalten. Sie sollten jedoch dieselben Ergebnisse erhalten, wenn Sie die Transformation berücksichtigen.