Es gibt zwei Möglichkeiten, die Größe und Position eines Seitenelements abzurufen und zu ändern:
- Mithilfe der Getter- und Setter-Funktionen für Größe und Position
- Die affine Transformation mithilfe der Funktionen
getTransform()
undsetTransform()
manipulieren, während die ursprüngliche Größe beibehalten wird.
Seitenelementeigenschaften werden gelesen
Wie in der Abbildung dargestellt, werden Größe und Position in Bezug auf den Begrenzungsrahmen eines gerenderten Seitenelements gemessen, wenn es nicht gedreht wird:
- Links und Oben: gemessen von der oberen linken Ecke der Seite bis zur oberen linken Ecke des nicht gedrehten Begrenzungsrahmens. Verwenden Sie
getLeft()
undgetTop()
, um die Werte abzulesen. - Breite und Höhe: die Breite und Höhe des nicht gedrehten Begrenzungsrahmens
Verwenden Sie
getWidth()
undgetHeight()
, um die Werte zu lesen. - Drehung: Drehung im Uhrzeigersinn relativ zur vertikalen Linie um den Mittelpunkt des Begrenzungsrahmens. Verwenden Sie
getRotation()
, um den Wert abzurufen.
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 einer Einfügemethode wie insertShape()
erstellen. Bei einer vorhandenen Form können Sie die Größe, Position und Drehung festlegen. Außerdem können Sie die Skalierung eines Elements so einstellen, dass es verkleinert oder entlang einer seiner Kanten gespiegelt wird.
Bei Erstellung
Beim Erstellen eines Seitenelements können Sie 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.');
Das obige Skript erstellt auf der ersten Folie der aktiven Präsentation eine Form mit der angegebenen Position und Größe und liest die Positions- und Größeninformationen der Form. Das erwartete Protokoll ist:
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()
undsetTop()
, um die Position der oberen linken Ecke des nicht gedrehten Begrenzungsrahmens festzulegen. - Mit
setWidth()
undsetHeight()
können Sie die gerenderte Breite und Höhe des Begrenzungsrahmens festlegen. - Mit
setRotation()
können Sie den Begrenzungsrahmen im Uhrzeigersinn um seine Mitte drehen.
Das folgende Script erstellt eine Form auf der ersten Folie der aktiven Präsentation, aktualisiert ihre Position, Größe und Drehung mithilfe von Settern und liest die Informationen zur Position und Größe 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 dieses Scripts sieht unten so aus:
Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.
Die Setter 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 auf einen absoluten Wert festzulegen, können scaleWidth()
und scaleHeight()
verwendet werden, um ein Seitenelement mit einem relativen Skalierungsfaktor zu strecken oder zu verkleinern.
shape.scaleHeight(0.5).scaleWidth(2);
Die folgende Abbildung zeigt, wie der Code oben auf einem um 45 Grad gedrehten Quadrat funktioniert. Die linke obere Ecke des Begrenzungsrahmens bleibt beim Skalieren unverändert.
Reflexion entlang der Kante
Das Argument in scaleWidth()
und scaleHeight()
kann negativ sein, damit sich ein Seitenelement horizontal oder vertikal drehen lässt.
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. Das Seitenelement wird an einer der Ränder des Begrenzungsrahmens gedreht, aber nicht an seiner Mitte.
Zeilenrotation
Wie bei anderen Seitenelementen ist die Drehung einer Linie nicht der vertikale Winkel der Linie, sondern die Drehung ihres Begrenzungsrahmens. Wenn Sie eine Linie mit festgelegten Anfangs- und Endpunkten erstellen, beträgt ihre Drehung immer 0 Grad. Wenn Sie die Endpunkte der Linie in Google Präsentationen ziehen, ändert sich der vertikale Winkel sowie die Größe und Position des Begrenzungsrahmens, aber nicht die Drehung. Mit setRotation()
wird der Begrenzungsrahmen der Linie gedreht, wodurch sich der vertikale Winkel ändert. Zwei Linien können also denselben vertikalen visuellen Winkel, aber unterschiedliche Begrenzungsrahmen und daher unterschiedliche Größe, Position und Drehungswerte haben.
Beschränkungen
Einige Größen- und Positionierungsmethoden sind mit bestimmten Seitenelementen nicht kompatibel. In der folgenden Tabelle sind die Methoden zusammengefasst, die mit bestimmten Arten von Seitenelementen nicht kompatibel sind.
Methoden | Form | Video | Tabelle |
---|---|---|---|
getHeight(), getWidth() | ✔ | ✔ | NEIN (liefert „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 das Seitenelement Scherungen aufweist. Alle Einschränkungen können sich ändern. Aktuelle Informationen finden Sie in der Referenz.
Affine Transformationen verwenden
Für eine erweiterte Steuerung können Größe und Position eines Seitenelements auch anhand seiner ursprünglichen (nativen) Größe und affinen Transformation berechnet und angepasst werden.
Google Apps Script bietet eine ähnliche Benutzeroberfläche für die Verwendung der affinen Transformation wie die Google Präsentationen API.
- In diesem Artikel werden die Konzepte der affinen Transformation und die Ableitung der gerenderten Größe aus der ursprünglichen Größe und Transformation für Seitenelemente erläutert. Verwenden Sie in Apps Script den Befehl
getInherentWidth()
undgetInherentHeight()
für die native Größe von Seitenelementen;getTransform()
für die affine Transformation der Seitenelemente.
- In diesem Artikel wird beschrieben, wie Seitenelemente mithilfe von affiner Transformation skaliert und positioniert werden, um Skalierung, Rotation, Reflexion usw. zu erreichen. Verwenden Sie in Apps Script
setTransform()
, um die affine Transformation von Seitenelementen festzulegen (ähnlich wie im ABSOLUTE-Modus);preconcatenateTransform()
, um eine affine Transformation mit der aktuellen Transformation von Seitenelementen zu verketten (ähnlich wie im RELATIVEN Modus).
Im folgenden Script wird eine Form erstellt, die Transformation festgelegt, die eigene Größe gelesen und die affine Transformation gelesen.
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 dieses Scripts sieht unten so aus:
Inherent width: 236.2pt; Inherent height: 236.2pt.
Die resultierende Form hat die folgende Transformation sowie die 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°.