Rozmiary i położenie elementów strony

Rozmiar i położenie elementu strony możesz wyświetlać oraz zmieniać na 2 sposoby:

  1. Używając funkcji pobierania i ustawiania rozmiaru i pozycji.
  2. Manipulowanie przekształceniem afinicznym za pomocą funkcji getTransform() i setTransform() przy zachowaniu rozmiaru wewnętrznego.

Odczytywanie właściwości elementów strony

Rozmiar i obrót

Jak widać na rysunku, rozmiar i pozycję mierzy się względem ogranicznika elementu strony wyrenderowanej, gdy nie jest on obracany:

  • Lewo i góra: mierzone od lewego górnego rogu strony do lewego górnego rogu nieobrotowanego prostokąta ograniczającego. Użyj getLeft() i getTop(), aby odczytać wartości.
  • Szerokośćwysokość: szerokość i wysokość nieobrotowanego prostokąta ograniczającego. Aby odczytać wartości, użyj funkcji getWidth()getHeight().
  • Obrót: obrót zgodnie z kierunkiem wskazówek zegara wokół pionowej linii wokół środka ramki. Użyj getRotation(), aby odczytać wartość.

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

Ustawianie właściwości elementów 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ć jego rozmiar, położenie i obrót. Możesz też zmienić jego skalę lub odbicie lustrzane wzdłuż jednego z 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 na pierwszym slajdzie aktywnej prezentacji kształt o określonym położeniu i rozmiarze oraz odczytuje informacje o położeniu i rozmiarze tego 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 setLeft() i setTop(), aby ustawić położenie lewego górnego rogu nieobrotowanego prostokąta ograniczającego.
  • 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.

Ten skrypt tworzy kształt na pierwszym slajdzie aktywnej prezentacji, używa setterów do aktualizowania jego położenia, rozmiaru i obrotu oraz 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 to:

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

Ustawienia rozmiaru, położenia i rotacji można używać w dowolnej kolejności lub 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ć setWidth()setHeight(), aby ustawić rozmiar kształtu na wartość bezwzględną, możesz użyć scaleWidth()scaleHeight(), aby rozciągnąć lub ścisnąć element strony za pomocą współczynnika skalowania względnego.

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

Na rysunku poniżej widać, jak kod działa na kwadracie obróconym o 45°. Pamiętaj, że podczas skalowania lewy górny róg pola ograniczającego jest nieruchomy.

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.

Rysunek poniżej pokazuje, jak działa powyższy kod w przypadku kształtu obróconego o 45°. Zwróć uwagę, że element strony jest odwrócony wzdłuż jednego z krawędzi jego prostokąta ograniczającego, a nie wzdłuż jego środka.

Odbicie slajdów

Obrót linii

Podobnie jak w przypadku innych elementów strony, obrót linii nie jest kątem pionowym linii, ale obrotem jej prostokąta ograniczającego. Gdy tworzysz linię z określonymi punktami początkowym i końcowym, jej obrót zawsze wynosi 0°. Przeciąganie punktów końcowych linii w interfejsie Google Slides zmienia jej kąt pionowy, a także rozmiar i położenie jej prostokąta ograniczającego, 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 kąt wizualny w pionie, ale różne ramki ograniczające, a co za tym idzie różne wartości rozmiaru, położenia i obrotu.

Ograniczenia

Niektóre metody ustawiania rozmiaru i pozycji są niezgodne z niektórymi typami elementów strony. Tabela poniżej zawiera podsumowanie 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

Jeśli element strony jest przesunięty, wszystkie metody ustawiania rozmiaru i pozycji mogą dać nieoczekiwane wyniki. Wszystkie ograniczenia mogą ulec zmianie. Najnowsze informacje znajdziesz w dokumentacji.

Używanie przekształceń afinistycznych

Aby uzyskać większą kontrolę, rozmiar i pozycję elementu strony można też obliczyć i dostosować za pomocą jego wbudowanego (natywnego) rozmiaru i transformacji afinistycznej.

Google Apps Script udostępnia podobny interfejs do korzystania z transformacji afinicznej, co interfejs Google Slides API.

  • 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:
    • getInherentWidth()getInherentHeight() w przypadku natywnego rozmiaru elementów strony;
    • getTransform() dla transformacji afinicznej elementów strony.
  • W tym artykule znajdziesz informacje o tym, jak za pomocą transformacji afinicznej określać rozmiar i pozycję elementów strony, aby uzyskać efekt skalowania, obrotu, odbicia lustrzanego itp. W Google Apps Script użyj funkcji
    • setTransform(), aby ustawić transformację afiniczną elementów strony (podobną do trybu ABSOLUTE);
    • preconcatenateTransform() wstępnie konkatenować transformację afiniczną do bieżącej transformacji elementów strony (podobnie jak w przypadku 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 to:

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

Wygenerowany kształt będzie miał następującą transformację oraz renderowany rozmiar i położenie:

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