Seitenelemente anpassen und positionieren

Es gibt zwei Möglichkeiten, die Größe und Position ein Seitenelement:

  1. Getter- und Setter-Funktionen für Größe und Position verwenden
  2. Die affine Transformation mit den Funktionen getTransform() und setTransform() bearbeiten und dabei die inhärente Größe beibehalten

Seitenelementeigenschaften werden gelesen

Größe und Drehen

Wie in der Abbildung dargestellt, werden Größe und Position in Bezug auf den Markierungsrahmen eines gerenderten Seitenelements, wenn es keine Rotation aufweist:

  • Links und Oben: gemessen von der oberen linken Ecke der Seite bis zur obere linke Ecke des nicht gedrehten Begrenzungsrahmens. getLeft() und getTop() für Folgendes verwenden: die Werte lesen.
  • Breite und Höhe: die Breite und Höhe des nicht gedrehten Begrenzungsrahmens Verwenden Sie getWidth() und getHeight(), um die Werte zu lesen.
  • Drehung: die Drehung im Uhrzeigersinn, bezogen auf die vertikale Linie um Mitte des Begrenzungsrahmens. Verwenden Sie getRotation(), um den Wert zu lesen.

Alle Längen werden in Punkten (pt) gemessen. Die Drehung wird in Grad gemessen. (°)

Seitenelementeigenschaften festlegen

Sie können die Größe und Position eines Seitenelements festlegen, wenn Sie es mit und eine Einfügemethode wie insertShape(). Für eine vorhandene Form können Sie Folgendes festlegen: Größe, Position und Drehung, können Sie die Skalierung eines Elements um es an einer seiner Ränder zu reflektieren.

Bei Erstellung

Sie können beim Erstellen eines Seitenelements Informationen zur Position und Größe angeben.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
                    + shape.getTop() + 'pt; Width: '
                    + shape.getWidth() + 'pt; Height: '
                    + shape.getHeight() + 'pt; Rotation: '
                    + shape.getRotation() + ' degrees.');

Mit dem obigen Skript wird auf der ersten Folie der aktiven Präsentation eine Form erstellt. mit der angegebenen Position und Größe und liest die Positions- und Größeninformationen der Form. Das erwartete Log lautet:

Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.

Größe, Position und Drehung

Sie können die Größe und Position eines Seitenelements nach dem Erstellen aktualisieren:

  • Verwenden Sie setLeft() und setTop(), um die Position der oberen linken Ecke des nicht gedrehter Begrenzungsrahmen.
  • Mit setWidth() und setHeight() können Sie die Breite und Höhe der Begrenzung festlegen. .
  • Mit setRotation() können Sie die Drehung des Begrenzungsrahmens im Uhrzeigersinn um seinen in der Mitte.

Mit dem folgenden Skript wird auf der ersten Folie der aktiven Präsentation eine Form erstellt. verwendet Setter, um seine Position, Größe und Drehung zu aktualisieren, und liest die Position und Größeninformationen der Form.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
                    + 'pt; Top: ' + shape.getTop()
                    + 'pt; Width: ' + shape.getWidth()
                    + 'pt; Height: ' + shape.getHeight()
                    + 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');

Die erwartete Protokollausgabe von diesem Skript sieht wie folgt aus:

Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.

Die Festlegungen für Größe, Position und Drehung können in beliebiger Reihenfolge oder Kombination verwendet werden. Wenn Sie die dritte Zeile oben durch das folgende Skript ersetzen, erhalten Sie dasselbe Ergebnis:

shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);

Skalierung

Anstatt setWidth() und setHeight() oben zu verwenden, um die Größe der Form festzulegen auf einen Absolutwert setzen, können scaleWidth() und scaleHeight() verwendet werden, um ein Seitenelement mit einem relativen Skalierungsfaktor zusammendrücken.

shape.scaleHeight(0.5).scaleWidth(2);

Die folgende Abbildung zeigt, wie der obige Code bei einer um 45° gedrehten quadratischen Form funktioniert. Beachten Sie, dass die obere linke Ecke des Begrenzungsrahmens während der Skalierung unveränderlich bleibt.

Folien skalieren

Reflexion am Rand

Das Argument in scaleWidth() und scaleHeight() kann negativ sein, sodass können Sie ein Seitenelement horizontal oder vertikal spiegeln.

shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.

Die folgende Abbildung zeigt, wie der obige Code bei einer um 45° gedrehten Form funktioniert. Beachten Sie, dass wird das Seitenelement an einer der Ränder des Begrenzungsrahmens gedreht, aber nicht in dessen Mittelpunkt.

Präsentationen – Reflexion

Linienrotation

Wie bei anderen Seitenelementen entspricht die Drehung einer Linie nicht dem vertikalen Winkel des sondern die Drehung des Begrenzungsrahmens. Wenn Sie eine Linie mit angegebenen Start- und Endpunkten liegt, ist die Drehung immer 0°. Ziehen An den Endpunkten der Linie in der Benutzeroberfläche von Google Präsentationen ändert sich auch der vertikale Winkel. als Größe und Position des Begrenzungsrahmens, ändert sich jedoch nicht ihre Rotation. Mit setRotation() wird der Begrenzungsrahmen der Linie gedreht, was seinen vertikalen Winkel effektiv ändert. Zwei Zeilen können also denselben vertikalen visuellen Winkel, aber unterschiedliche Begrenzungsrahmen. Größen-, Positions- und Rotationswerten.

Beschränkungen

Einige Methoden zur Größenanpassung und Positionierung sind mit einigen Seitentypen nicht kompatibel. Elemente. In der folgenden Tabelle sind die Methoden aufgeführt, die nicht kompatibel mit bestimmte Arten von Seitenelementen.

Methoden Form Video Tabelle
getHeight(), getWidth() NO (gibt Null zurück)
setHeight(), setWidth() NEIN
setRotation() NEIN NEIN
scaleHeight(), scaleWidth() NEIN

Alle Methoden zur Größenanpassung und Positionierung können zu unerwarteten Ergebnissen führen, wenn die Seite Element hat Scherung. Alle Einschränkungen können sich ändern. Referenz prüfen für aktuelle Informationen.

Affine Transformationen verwenden

Für eine erweiterte Steuerung können die Größe und Position eines Seitenelements auch werden über die inhärente (native) Größe und die affine Transformation berechnet und angepasst.

Google Apps Script bietet eine ähnliche Oberfläche zur Verwendung der affine Transformation wie die Google Slides API.

  • Zu lesen: Artikel erklärt die Konzepte der affinen Transformation und wie die gerenderte Größe aus inhärenten (native) Größe und Anpassung für Seitenelemente. Verwenden Sie in Apps Script <ph type="x-smartling-placeholder">
      </ph>
    • getInherentWidth() und getInherentHeight() für die native Größe der Seite Elemente;
    • getTransform() für die affine Transformation der Seitenelemente
  • Wenn Sie schreiben, Artikel beschreibt wie Sie die Größe und Position von Seitenelementen mithilfe von affine Transformation Skalierung, Drehung, Reflexion usw. verwenden. Verwenden Sie in Apps Script <ph type="x-smartling-placeholder">
      </ph>
    • setTransform(), um die affine Transformation von Seitenelementen festzulegen (ähnlich ABSOLUTE-Modus);
    • preconcatenateTransform(), um eine affine Transformation in die aktuelle Umwandlung von Seitenelementen (ähnlich wie der RELATIVE Modus).

Das folgende Skript erstellt eine Form, legt ihre Transformation fest, liest ihre inhärente Größe und liest seine affine Transformation.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
                   .setScaleX(2)
                   .setScaleY(1)
                   .setTranslateX(100)
                   .setTranslateY(200)
                   .build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
                              + 'pt; Inherent height: '
                              + shape.getInherentHeight() + 'pt.');

Die erwartete Protokollausgabe von diesem Skript sieht wie folgt aus:

Inherent width: 236.2pt; Inherent height: 236.2pt.

Die resultierende Form hat folgende Transformation sowie gerenderte Größe und Position:

AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.