Rozmiary i położenie elementów strony

Istnieją 2 sposoby pobierania i zmieniania rozmiaru oraz pozycji elementu strony:

  1. Użycie funkcji pobierania i ustalania do określania rozmiaru i pozycji.
  2. Manipulowanie przekształceniem afinicznym za pomocą funkcji getTransform() i setTransform() przy zachowaniu rozmiaru wewnętrznego.

Odczytywanie właściwości elementu strony

Dobieranie i obracanie

Jak widać na ilustracji, rozmiar i położenie są mierzone w odniesieniu do ramki ograniczającej renderowanego elementu strony, gdy nie jest on obracany:

  • Lewo i Góra: mierzone od lewego górnego rogu strony do lewego górnego rogu nieobróconej ramki ograniczającej. Użyj getLeft() i getTop(), aby odczytać wartości.
  • Szerokość i Wysokość: szerokość i wysokość nieobróconej ramki ograniczającej. Użyj getWidth() i getHeight(), aby odczytać wartości.
  • Obrót: obrót w prawo względem pionowej linii wokół środka ramki ograniczającej. Użyj getRotation(), aby odczytać wartość.

Wszystkie długości są mierzone w punktach (pkt). Obrót jest mierzony w stopniach (°).

Ustawianie właściwości elementu strony

Rozmiar i pozycję elementu strony możesz ustawić podczas jego tworzenia za pomocą metody wstawiania, takiej jak insertShape(). W przypadku istniejącego kształtu możesz ustawić rozmiar, położenie i obrót, a także ustawić skalowanie elementu, aby zmienić jego rozmiar lub odzwierciedlić go wzdłuż jednej z jego krawędzi.

W momencie utworzenia

Podczas tworzenia elementu strony możesz podać informacje o pozycji i rozmiarze.

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.');

Powyższy skrypt tworzy kształt na pierwszym slajdzie aktywnej prezentacji o określonym położeniu i rozmiarze oraz odczytuje informacje o położeniu i rozmiarze kształtu. Oczekiwany dziennik:

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

Rozmiar, położenie i obrót

Rozmiar i pozycję elementu strony możesz zmienić po jego utworzeniu:

  • Użyj elementów setLeft() i setTop(), by ustawić położenie lewego górnego rogu nieobróconej ramki ograniczającej.
  • Użyj właściwości setWidth() i setHeight(), aby ustawić renderowaną szerokość i wysokość ramki ograniczającej.
  • Użyj właściwości setRotation(), aby ustawić obrót ramki ograniczającej w prawo wokół jej środka.

Poniższy skrypt tworzy kształt na pierwszym slajdzie aktywnej prezentacji, używa elementów ustawiających, aby zaktualizować jego pozycję, rozmiar i obrót, a także odczytuje informacje o położeniu i rozmiarze kształtu.

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.');

Oczekiwane dane wyjściowe tego skryptu w dzienniku:

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

Ustawienia rozmiaru, pozycji i rotacji mogą być używane w dowolnej kolejności i w dowolnej kombinacji. Zastąpienie trzeciego wiersza powyżej poniższym skryptem spowoduje taki sam efekt:

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

Skalowanie

Zamiast używać właściwości setWidth() i setHeight() powyżej, aby ustawić rozmiar kształtu na wartość bezwzględną, możesz używać właściwości scaleWidth() i scaleHeight() do rozciągania lub ściśnięcia elementu strony ze względnym współczynnikiem skalowania.

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

Poniższy rysunek pokazuje, jak działa powyższy kod na kwadratowym kształcie obróconym pod kątem 45°. Pamiętaj, że lewy górny róg ramki ograniczającej jest stały podczas skalowania.

Skalowanie slajdów

Odbicie wzdłuż krawędzi

Argumenty w funkcjach scaleWidth() i scaleHeight() mogą być ujemne, więc można ich użyć do odwrócenia elementu strony w pionie lub poziomie.

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.

Ilustracja poniżej pokazuje, jak działa kod w przypadku kształtu ustawionego pod kątem 45°. Zauważ, że element strony jest obrócony wzdłuż jednej z krawędzi ramki ograniczającej, ale nie do środka.

Odczucia w Prezentacjach

Obrót linii

Podobnie jak w przypadku innych elementów strony obrót linii nie wyznacza jej pionowego kąta, ale obrót ramki ograniczającej. Gdy utworzysz linię z określonym punktem początkowym i końcowym, jej obrót wynosi zawsze 0°. Przeciąganie punktów końcowych linii w interfejsie Prezentacji Google zmienia jej kąt pionowy, a także rozmiar i położenie ramki ograniczającej, ale nie zmienia jej obrotu. Użycie funkcji setRotation() powoduje obrócenie ramki ograniczającej linii, co w praktyce zmienia jej kąt pionowy. Oznacza to, że 2 linie mogą mieć ten sam wizualny kąt pionowy, ale różne ramki ograniczające, a tym samym różne wartości rozmiaru, położenia i obrotu.

Ograniczenia

Niektóre metody określania rozmiaru i pozycjonowania są niezgodne z niektórymi typami elementów strony. W tabeli poniżej znajdziesz zestawienie metod, które są niezgodne z określonymi typami elementów strony.

Metody Kształt Wideo Tabela
getHeight(), getWidth() NO (zwraca wartość null)
setHeight(), setWidth() NIE
setRotation() NIE NIE
scaleHeight(), scaleWidth() NIE

Wszystkie metody dobierania rozmiaru i pozycjonowania mogą dawać nieoczekiwane rezultaty, jeśli element strony jest ścięty. Wszystkie ograniczenia mogą ulec zmianie. Aktualne informacje znajdziesz w dokumentacji.

Korzystanie z przekształceń afinicznych

W przypadku zaawansowanej kontroli rozmiar i położenie elementu strony można też obliczać i dostosowywać na podstawie jego rozmiaru (natywnego) i przekształcenia afinansowego.

Skrypt Google Apps Script ma podobny interfejs, w którym można korzystać z przekształcania afinansowego w interfejsie API Prezentacji Google.

  • W tym artykule wyjaśniamy koncepcje przekształcenia afinacyjnego oraz wnioskowanie o wyrenderowany rozmiar na podstawie rozmiaru wewnętrznego i przekształcenia elementów strony. W Apps Script użyj polecenia:
    • getInherentWidth() i getInherentHeight() dla natywnego rozmiaru elementów strony;
    • getTransform() dla przekształcenia afinacyjnego elementów strony.
  • W tym artykule opisujemy, jak dopasować rozmiar i położenie elementów strony za pomocą przekształcenia afinacyjnego, aby uzyskać skalowanie, obrót, odbicie itp. W Apps Script użyj polecenia
    • setTransform(), aby ustawić przekształcenie afiniczne elementów strony (podobnie do trybu ABSOLUTE),
    • preconcatenateTransform(), aby wstępnie połączyć przekształcenie afiniczne do bieżącego przekształcenia elementów strony (podobnie do trybu RELATIVE).

Poniższy skrypt tworzy kształt, ustawia jego przekształcenie, odczytuje jego rozmiar i odczytuje przekształcenie afiniczne.

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.');

Oczekiwane dane wyjściowe tego skryptu w dzienniku:

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

Powstały kształt będzie miał następujące przekształcenie oraz wyrenderowany rozmiar i pozycję:

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°.