Rozmiar i pozycjonowanie elementów strony

W tym przewodniku opisujemy, jak ustawiać rozmiar i pozycjonować elementy strony za pomocą przekształceń afinicznych. Teoretyczne wprowadzenie do przekształceń afinicznych znajdziesz w przewodniku po koncepcjach Przekształceń.

Przekształcanie elementów

Interfejs Prezentacje umożliwia zmianę położenia i skalowanie elementów na stronie. W tym celu trzeba najpierw określić rodzaj przekształcenia, który należy zastosować, a potem zastosować go za pomocą metody presentations.batchUpdate z co najmniej jednym elementem UpdatePageElementTransformRequest.

Przekształcenia można przeprowadzać w jednym z dwóch trybów applyModes:

  • ABSOLUTE przekształca zastępuje istniejącą macierz przekształceń elementu. Wszystkie parametry pominięte w żądaniu aktualizacji przekształcenia zostaną ustawione na zero.

  • Przekształcenia RELATIVEmnożone przez istniejącą macierz przekształceń elementu (kolejność mnożenia ma znaczenie):

$$A' = BA$$

Transformacje względne powodują przesuwanie lub skalowanie elementu strony względem obecnego miejsca, np. przesunięcie kształtu o 100 punktów w lewo lub obrócenie go o 40 stopni. Transformacje bezwzględne odrzucają informacje o położeniu i skali, np. przenosząc kształt do środka strony lub skalując go do określonej szerokości.

Złożone przekształcenia mogą być zwykle wyrażone w postaci sekwencji prostych przekształceń. Wstępne obliczenie przekształcenia – połączenie kilku przekształceń za pomocą mnożenia macierzy – często pozwala zmniejszyć nakład pracy.

W przypadku niektórych operacji musisz znać istniejące parametry przekształcenia elementu. Jeśli nie masz tych wartości, możesz je pobrać, używając żądania presentations.pages.get.

Tłumaczenie

Tłumaczenie to po prostu przeniesienie elementu strony w nowe miejsce na tej samej stronie. Tłumaczenia bezwzględne przenoszą element w określony punkt, a tłumaczenia względne – o określoną odległość.

Podstawowa macierz przekształceń ma postać:

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

Gdy do przetłumaczenia elementu używasz obiektu UpdatePageElementTransformRequest (bez zmiany jego rozmiaru, wycięcia ani orientacji), możesz użyć jednej z tych struktur AffineTransform:

// 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'
  }
}

Skalowanie

Skalowanie to rozciąganie lub ściskanie elementu wzdłuż wymiarów X lub Y w celu zmiany jego rozmiaru. Podstawowa macierz przekształceń skalowania ma postać:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Możesz użyć tego formularza macierzy bezpośrednio jako przekształcenia RELATIVE, aby zmienić rozmiar elementu, ale może to też wpłynąć na wyrenderowane wycięcie i przesunięcie elementu. Aby skalować element bez wpływu na jego ściśnięcie ani przesunięcie, przesuń do jego ramki referencyjnej.

Rotacja

Obrót przekształca element strony wokół punktu przy użyciu parametrów skalowania i ścinania. Podstawowa macierz przekształcenia obrotu ma taką postać, w której kąt obrotu (w radianach) jest mierzony od osi X zgodnie z ruchem w lewo:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Tak jak w przypadku skalowania, tego formularza macierzy możesz używać bezpośrednio jako przekształcenia RELATIVE do obracania elementu. Powoduje to jednak obrócenie go wokół źródła strony. Aby obrócić element wokół jego środka lub do innego punktu, przesuń widok do tej ramki referencyjnej.

Komentarze

Odbicie jest odbiciem odbicia lustrzanego elementu wzdłuż określonej linii lub osi. Podstawowa macierz przekształcenia osi X i Y ma następujące postaci:

$$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}$$

Podobnie jak w przypadku skalowania, tego formularza macierzy możesz używać bezpośrednio jako przekształcenia RELATIVE do odzwierciedlenia elementu, ale powoduje to również jego przesunięcie. Aby odzwierciedlić element bez przesunięcia, przesuń do jego ramki referencyjnej.

Ramki referencyjne elementów

Zastosowanie podstawowej skali, odbicia lub obrócenia bezpośrednio do elementu strony powoduje przekształcenie w ramce referencyjnej strony. Na przykład rotacja podstawowa powoduje obrócenie elementu względem źródła strony (w lewym górnym rogu). Możesz jednak wykonywać działania w ramce referencyjnej samego elementu, na przykład obracać go wokół jego punktu środkowego.

Aby przekształcić element we własnej ramce referencyjnej, umieść go między 2 innymi tłumaczeniami: tłumaczeniem poprzedzającym T1, które przenosi środek elementu do źródła strony, i tłumaczeniem T2, które cofa element do jego pierwotnej pozycji. Pełna operacja może być wyrażona w postaci iloczynu macierzy:

$$A' = T2 \times B \times T1 \times A$$

Możesz też przełączyć się na inne ramki referencyjne, tłumacząc różne punkty na punkt początkowy. Punkty te stają się środkiem nowej ramki referencyjnej.

Każdą z tych przekształceń możesz wykonać osobno jako sekwencyjne żądania przekształcenia RELATIVE. Najlepiej będzie wcześniej wykonać obliczenia A' z wykorzystaniem mnożenia macierzy i zastosować wynik jako pojedynczą przekształcenie ABSOLUTE. Możesz też wstępnie obliczyć produkt T2 * B * T1 i zastosować go jako pojedynczą przekształcenie RELATIVE. Są one bardziej efektywne pod względem operacji związanych z interfejsami API, a także wysyłania żądań przekształcenia pojedynczo.

Ograniczenia

Niektóre pola określania rozmiaru i pozycjonowania są niezgodne z niektórymi typami elementów strony. Tabela poniżej zawiera podsumowanie zgodności niektórych elementów strony z polami rozmiaru i pozycjonowania.

Pole Kształt Wideo Tabela
Tłumaczenie
Skala Nie**
Ścięcie Nie Nie

** Aby zaktualizować wymiary wierszy i kolumn tabeli, użyj UpdateTableRowPropertiesRequest i UpdateTableColumnPropertiesRequest.

Wszystkie pola rozmiarów i pozycjonowania mogą dawać nieoczekiwane wyniki, jeśli w elemencie strony występują ścinięcia. Wszystkie ograniczenia mogą ulec zmianie. Aktualne informacje znajdziesz w artykule o interfejsie API Prezentacji Google.

Interfejs Prezentacji Google może refaktoryzować wartości

Podczas tworzenia elementu strony możesz określić jego rozmiar i przekształcenie, aby uzyskać określony wynik wizualny. Interfejs API może jednak zastąpić podane wartości innymi, o takim samym wyglądzie. Jeśli napiszesz rozmiar za pomocą interfejsu API, nie ma gwarancji, że zostanie zwrócony ten sam rozmiar. Po uwzględnieniu przekształcenia uzyskasz te same wyniki.