Rozmiar i pozycjonowanie elementów strony

W tym przewodniku opisano rozmiar i pozycję elementów strony za pomocą afinansów przekształcenia. Wprowadzenie do transformacji afinacyjnej znajdziesz w przewodniku po zagadnieniach dotyczących przekształceń.

Przekształcanie elementów

Interfejs Prezentacji API umożliwia zmianę położenia i skalowanie elementów na stronie. Aby to zrobić: najpierw określ, jakiego rodzaju przekształcenie należy zastosować, a potem je zastosuj przekształcić za pomocą funkcji presentations.batchUpdate zawierające co najmniej jedną UpdatePageElementTransformRequest .

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

  • Przekształcenia ABSOLUTE zastępują istniejące przekształcenie elementu lub macierz. Wszystkie parametry pominięte w żądaniu aktualizacji przekształcenia mają wartość zero.

  • Przekształcenia RELATIVEmnożone przez dotychczasowe elementy macierz przekształceń (kolejność mnożenia ma znaczenie):

$$A' = BA$$

Przekształcenia względne przesuwają lub skalują element strony z miejsca, w którym się obecnie znajduje. na przykład przesunięcie kształtu o 100 punktów w lewo lub obrócenie go o 40 stopni. Przekształcenia bezwzględne odrzucają istniejące informacje o pozycji i skali. w przypadku na przykład przesunięcie kształtu na środek strony lub skalowanie go o określonej szerokości.

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

W przypadku niektórych operacji musisz wiedzieć, jakie jest istniejące przekształcenie elementu . Jeśli nie masz tych wartości, możesz je pobrać za pomocą polecenia presentations.pages.get użytkownika.

Tłumaczenie

Tłumaczenie to po prostu przeniesienie elementu strony w nowe miejsce tę samą stronę. Tłumaczenia bezwzględne przenoszą element w określony punkt, a przesunięcia względne przesuwają element 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 żądania UpdatePageElementTransformRequest aby przesunąć element (bez zmiany jego rozmiaru, ścinania czy orientacji), mogą użyć jednego z następujących elementów AffineTransform struktury:

// 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 działanie polegające na rozciąganiu lub ściśnięciu elementu wzdłuż osi X lub wymiar Y, aby zmienić jego rozmiar. 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 ale może też wpływać na renderowane ściskanie i przesunięcie elementu. Aby skalować element bez wpływu na jego długość lub przesunięcie, zmień pozycję ramki referencyjnej.

Obrót

Obrót przekształca obrót elementu strony wokół określonego punktu za pomocą skalowania i parametry ścinania. Podstawowa macierz przekształceń rotacji ma taką postać: gdzie kąt obrotu (w radianach) jest mierzony od osi X. 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, możesz użyć tej postaci macierzy bezpośrednio jako funkcji RELATIVE „transform”, aby obrócić element, ale spowoduje to jego obrót na temat pochodzenia strony. Aby obrócić element wokół jego środka lub inny punkt. przejściu do tego punktu odniesienia.

Komentarze

Odbicie lustrzane jest odbiciem lustrzanym elementu wzdłuż określonej linii lub osi. Podstawowe Macierz przekształcania odbicia na osi x i Y ma następujące formy:

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

Tak jak w przypadku skalowania, możesz użyć tej postaci macierzy bezpośrednio jako funkcji RELATIVE „transform”, by odzwierciedlić element, ale powoduje to jego przetłumaczenie jako cóż. Aby odzwierciedlić element bez tłumaczenia, przesunięcie do jego ramki odniesienia.

Ramki referencyjne elementu

zastosować podstawową skalę, refleksja, obrót – przekształcanie bezpośrednio w stronę powoduje przekształcenie w ramce referencyjnej strony. Przykład: rotacja podstawowa powoduje rotację elementu związanego z początkiem strony (parametr w lewym górnym rogu). Możesz jednak działać w ramce referencyjnej np. aby obrócić element wokół jego punktu środkowego.

Aby przekształcić element w jego własnej ramce referencyjnej, umieść go między dwoma inne tłumaczenia: poprzednie przesunięcie T1, które przesuwa środek elementu na początek strony oraz kolejne tłumaczenie T2, które przenosi element do pierwotnego położenia. Pełną operację można przedstawić w postaci macierzy produkt:

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

Można również przejść na inne ramki referencyjne, tłumacząc różne punkty do punktu początkowego. Te punkty będą centralnym punktem odniesienia ramki.

Każdą z tych przekształceń można przeprowadzić z osobna, tak aby: sekwencyjnych żądań przekształcenia RELATIVE. Najlepiej jest wstępnie obliczyć A' powyżej z mnożeniami macierzy i zastosowanie wyniku jako pojedynczej wartości ABSOLUTE – przekształcenie. Możesz też wstępnie obliczyć usługę T2 * B * T1 i zastosuj je jako pojedyncze przekształcenie RELATIVE. Oba te rozwiązania są skuteczniejsze, w kontekście operacji interfejsu API, a potem wysyłać żądania przekształcenia pojedynczo.

Ograniczenia

Niektóre pola rozmiaru i pozycjonowania są niezgodne z niektórymi typami stron . 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, należy użyć funkcji UpdateTableRowPropertiesRequest oraz UpdateTableColumnPropertiesRequest

Jeśli w elemencie strony występuje obcięcie, wszystkie pola dotyczące rozmiaru i pozycjonowania mogą dawać nieoczekiwane wyniki. Wszystkie ograniczenia mogą ulec zmianie. Aktualne informacje znajdziesz na stronie Interfejs API Prezentacji Google.

Interfejs Prezentacji API może refaktoryzować wartości.

Przy tworzeniu elementu strony możesz określić rozmiar i przekształcenie, w celu uzyskania konkretnego wyniku wizualnego. Interfejs API może jednak zastąpić z innymi, które dają taki sam wygląd. Ogólnie, jeśli napiszesz rozmiar przy użyciu interfejsu API, nie ma gwarancji, że wynik będzie taki sam rozmiaru. Takie same rezultaty uzyskasz jednak, jeśli zastosujesz przekształcenie do koncie.