Rozmiar i położenie elementów strony

Ten przewodnik wyjaśnia, jak określać rozmiar i położenie elementów strony za pomocą przekształceń afinicznych w Google Slides API. Wprowadzenie do przekształceń afinicznych znajdziesz w przewodniku koncepcyjnym Przekształcenia i elementy strony.

Przekształcanie elementów

Interfejs Slides API umożliwia zmianę położenia i skalowanie elementów na stronie. Aby to zrobić, najpierw określ, jaki rodzaj przekształcenia należy zastosować, a następnie zastosuj to przekształcenie za pomocą metody presentations.batchUpdate() zawierającej co najmniej 1 element UpdatePageElementTransformRequest.

Przekształcenia można przeprowadzać za pomocą ApplyMode:

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

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

$$A' = BA$$

Przekształcenia względne przesuwają lub skalują element strony z jego bieżącego położenia. Na przykład przesuwają kształt o 100 punktów w lewo lub obracają go o 40 stopni. Przekształcenia bezwzględne odrzucają istniejące informacje o pozycji i skali, np. przenoszą kształt na środek strony lub skalują go do określonej szerokości.

Złożone przekształcenia można zwykle wyrazić jako sekwencję prostszych przekształceń. Wstępne obliczenie przekształcenia – połączenie wielu przekształceń za pomocą mnożenia macierzy – może często zmniejszyć narzut.

W przypadku niektórych operacji musisz znać istniejące parametry przekształcenia elementu. Jeśli nie masz tych wartości, możesz je pobrać za pomocą metody presentations.pages.get().

Tłumaczenie

Przesunięcie to przeniesienie elementu strony w nowe miejsce na tej samej stronie. Przesunięcia bezwzględne powodują przeniesienie elementu do określonego punktu, a przesunięcia względne – przesunięcie elementu o określoną odległość.

Podstawowa macierz przekształceń translacji ma postać:

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

Gdy używasz funkcji UpdatePageElementTransformRequest do przesunięcia elementu (bez zmiany jego rozmiaru, ścinania 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'
  }
}

Skaluj

Skalowanie to rozciąganie lub ściskanie elementu wzdłuż osi 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ć tej formy macierzy bezpośrednio jako RELATIVEtransformacji, aby zmienić rozmiar elementu, ale może to również wpłynąć na jego renderowane ścinanie i przesunięcie. Aby skalować element bez wpływu na jego ścinanie lub przesuwanie, przejdź do jego układu odniesienia.

Obrót

Przekształcenia obrotu obracają element strony wokół punktu przy użyciu parametrów skalowania i ścinania. Podstawowa macierz przekształcenia obrotu ma postać: gdzie kąt obrotu (w radianach) jest mierzony od osi X w kierunku przeciwnym do ruchu wskazówek zegara:

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

Podobnie jak w przypadku skalowania, możesz użyć tej postaci macierzy bezpośrednio jako RELATIVEtransformacji, aby obrócić element, ale spowoduje to obrót elementu wokół punktu początkowego strony. Aby obrócić element wokół jego środka lub innego punktu, przesuń go do ramki odniesienia.

Komentarze

Odbicie lustrzane to element odbity wzdłuż określonej linii lub osi. Podstawowa macierz przekształcenia odbicia względem osi X i Y ma te postacie:

$$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, możesz użyć tej postaci macierzy bezpośrednio jako RELATIVEtransformacjiRELATIVE, aby odbić element, ale spowoduje to również jego przesunięcie. Aby odzwierciedlić element bez tłumaczenia, przesuń go do ramki odniesienia elementu.

Ramki odniesienia elementu

Zastosowanie podstawowej transformacji skalowania, obrotu lub odbicia bezpośrednio do elementu strony powoduje transformację w układzie odniesienia strony. Na przykład podstawowe obracanie obraca element wokół punktu początkowego strony (lewego górnego rogu). Możesz jednak pracować w układzie odniesienia elementu, np. obracać go wokół jego środka.

Aby przekształcić element w jego własnym układzie odniesienia, umieść go między dwoma innymi przekształceniami: poprzedzającym przekształceniem T1, które przesuwa środek elementu do początku strony, i następującym przekształceniem T2, które przesuwa element z powrotem do jego pierwotnego położenia. Całą operację można wyrazić jako iloczyn macierzy:

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

Możesz też przełączyć się na inne układy odniesienia, przenosząc do początku inne punkty. Te punkty stają się środkiem nowego układu odniesienia.

Każdą z tych transformacji można wykonać osobno jako sekwencyjne żądania transformacji RELATIVE. Najlepiej wstępnie obliczyć A' powyższe wartości za pomocą mnożenia macierzy i zastosować wynik jako pojedynczą ABSOLUTE transformację. Możesz też wstępnie obliczyć iloczyn T2 * B * T1 i zastosować go jako pojedyncze przekształcenie RELATIVE. Obie te metody są bardziej wydajne pod względem operacji API niż wysyłanie żądań przekształcenia pojedynczo.

Ograniczenia

Niektóre pola rozmiaru i położenia są niezgodne z niektórymi typami elementów strony. W tabeli poniżej znajdziesz podsumowanie zgodności niektórych elementów strony z polami rozmiaru i położenia:

Pole Kształt Wideo Tabela
Tłumaczenie
Skala Nie**
Ścinanie Nie Nie

Aby zaktualizować wymiary wiersza i kolumny tabeli, użyj UpdateTableRowPropertiesRequest i UpdateTableColumnPropertiesRequest.

Wszystkie pola rozmiaru i położenia mogą dawać nieoczekiwane wyniki, jeśli element strony jest poddany ścinaniu. Wszystkie ograniczenia mogą ulec zmianie. Aktualne informacje znajdziesz w artykule Interfejs API Prezentacji Google.

Przekształcone wartości

Podczas tworzenia elementu strony możesz określić rozmiar i przekształcić go, aby uzyskać określony efekt wizualny. Jednak interfejs Slides API może zastąpić podane wartości innymi, które dają ten sam efekt wizualny. Ogólnie rzecz biorąc, jeśli zapiszesz rozmiar za pomocą interfejsu API, nie masz gwarancji, że otrzymasz ten sam rozmiar. Jeśli jednak weźmiesz pod uwagę przekształcenie, wyniki powinny być takie same.