Rozmiar i pozycjonowanie elementów strony

W tym przewodniku opisujemy rozmiar i położenie elementów strony za pomocą przekształceń afinacyjnych. Wprowadzenie do przekształceń afinicznych znajdziesz w przewodniku po przekształceniach.

Przekształcanie elementów

Interfejs Prezentacji API umożliwia zmianę położenia i skalowanie elementów na stronie. W tym celu musisz najpierw określić, jakiego rodzaju przekształcenie należy zastosować, a następnie zastosować je za pomocą metody presentations.batchUpdate zawierającej co najmniej 1 element UpdatePageElementTransformRequest.

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

  • Przekształcenia ABSOLUTE zastępują dotychczasową macierz przekształcenia elementu. Wszystkie parametry pominięte w żądaniu aktualizacji przekształcenia zostaną ustawione na 0.

  • 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 miejsca, w którym się obecnie znajduje. Może to być np. przesunięcie kształtu o 100 punktów w lewo lub o 40 stopni. Przekształcenia bezwzględne odrzucają istniejące informacje o położeniu i skali, np. przeniesienie kształtu na środek strony lub skalowanie 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 – łączenie wielu przekształceń za pomocą mnożenia macierzy – często pozwala zmniejszyć nakład pracy.

W przypadku niektórych operacji musisz wiedzieć, jakie są obecne parametry przekształcenia elementu. Jeśli nie masz tych wartości, możesz je pobrać za pomocą żądania presentations.pages.get.

Tłumaczenie

Tłumaczenie to po prostu przeniesienie elementu strony w nowe miejsce na tej samej stronie. Przesunięcie bezwzględne przenosi element w określone miejsce, a względne – 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 UpdatePageElementTransformRequest do przetłumaczenia elementu (bez zmiany jego rozmiaru, obcię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 działanie polegające na rozciąganiu lub ściśnięciu elementu wzdłuż wymiaru X lub 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ć tej postaci macierzy bezpośrednio jako przekształcenia RELATIVE, aby zmienić rozmiar elementu, ale może to też mieć wpływ na wyrenderowane wzdłuż i przesunięcie elementu. Aby przeskalować element bez wpływu na jego długość lub przesunięcie, przejdź do ramki referencyjnej.

Rotacja

Przekształcenia obrotowe obracają element strony wokół punktu z wykorzystaniem parametrów skalowania i ścięcia. Podstawowa macierz przekształceń obrotu ma taką postać, gdzie kąt obrotu (w radianach) jest mierzony od osi X, przesuwając w lewo:

$$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 przekształcenia RELATIVE, aby obrócić element, ale spowoduje to jego obrót wokół początku strony. Aby obrócić element wokół jego środka lub innego punktu, przesuń się na tę ramkę referencyjną.

Komentarze

Odbicie lustrzane jest odbiciem lustrzanym elementu wzdłuż określonej linii lub osi. Podstawowa matryca 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}$$

Podobnie jak w przypadku skalowania, możesz użyć tej postaci macierzy bezpośrednio jako przekształcenia RELATIVE, aby odzwierciedlić element, ale powoduje to również jego przesunięcie. Aby odzwierciedlić element bez żadnego przesunięcia, przesuń się do jego ramki referencyjnej.

Ramki referencyjne elementu

Zastosowanie podstawowej skali, odbicia lub obrotu bezpośrednio do elementu strony powoduje przekształcenie jej w ramce referencyjnej strony. Na przykład rotacja podstawowa powoduje obracanie elementu związanego z początkiem strony (lewym górny róg). Można jednak wykonywać operacje w ramce referencyjnej samego elementu, np. aby obracać element wokół jego punktu środkowego.

Aby przekształcić element we własnej ramce referencyjnej, umieść go między 2 innymi tłumaczeniami: poprzedzającym T1 przesunięciem, które przenosi środek elementu do początku strony, oraz następującym przesunięciem T2, które przenosi element z powrotem do jego pierwotnego położenia. Całą operację można przedstawić jako iloczyn 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 źródło. Stają się one centralnym punktem nowym punktem odniesienia.

Każdą z tych przekształceń można przeprowadzić z osobna jako sekwencyjne żądania przekształcenia RELATIVE. Najlepiej jest wstępnie obliczyć A' z mnożeniami macierzy i zastosować wynik jako jedną przekształcenie ABSOLUTE. Możesz też wstępnie obliczyć usługę T2 * B * T1 i zastosować ją jako pojedynczą przekształcenie RELATIVE. Oba te rozwiązania są bardziej wydajne pod względem operacji API, a każdy z nich wysyła osobne żądania przekształcenia.

Ograniczenia

Niektóre pola 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 poleceń UpdateTableRowPropertiesRequest i 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.

Podczas tworzenia elementu strony możesz określić rozmiar i przekształcenie, aby uzyskać określony wynik wizualny. Interfejs API może jednak zastępować podane przez Ciebie wartości innymi, które mają taki sam wygląd. Ogólnie rzecz biorąc, jeśli zapiszesz rozmiar za pomocą interfejsu API, nie gwarantujemy, że otrzymasz ten sam rozmiar. Jeśli jednak zastosujesz przekształcenie, uzyskasz te same wyniki.