Размер и расположение элементов страницы

В этом руководстве описывается, как определять размер и расположение элементов страницы с помощью аффинных преобразований. Концептуальное введение в аффинные преобразования см. в руководстве по концепциям преобразований .

Трансформирующиеся элементы

API Slides позволяет изменять положение и масштабировать элементы на странице. Для этого сначала определите, какой тип преобразования необходимо применить, а затем примените это преобразование с помощью методаpresents.batchUpdate , содержащего один или несколько элементов UpdatePageElementTransformRequest .

Преобразования могут быть выполнены в одном из двух режимов применения :

  • Преобразования ABSOLUTE заменяют существующую матрицу преобразования элемента. Любые параметры, которые вы опускаете в запросе на обновление преобразования, устанавливаются в ноль.

  • RELATIVE преобразования умножаются на существующую матрицу преобразования элемента (порядок умножения имеет значение):

$$A' = BA$$

Относительные преобразования перемещают или масштабируют элемент страницы с того места, где он находится в данный момент; например, перемещение фигуры на 100 пунктов влево или поворот ее на 40 градусов. Абсолютные преобразования отбрасывают существующую информацию о положении и масштабе; например, перемещение фигуры в центр страницы или масштабирование ее до определенной ширины.

Сложные преобразования обычно можно выразить как последовательность более простых. Предварительный расчет преобразования — объединение нескольких преобразований с использованием матричного умножения — часто позволяет снизить накладные расходы.

Для некоторых операций необходимо знать существующие параметры преобразования элемента. Если у вас нет этих значений, вы можете получить их с помощью запросаpresents.pages.get .

Перевод

Перевод — это просто действие по перемещению элемента страницы в новое положение на той же странице. Абсолютные перемещения перемещают элемент в определенную точку, а относительные перемещения перемещают элемент на определенное расстояние.

Базовая матрица преобразования перевода имеет форму:

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

Когда вы используете UpdatePageElementTransformRequest для перевода элемента (без изменения его размера, сдвига или ориентации), вы можете использовать одну из следующих структур 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'
  }
}

Масштабирование

Масштабирование — это действие по растяжению или сжатию элемента по координатам X и/или Y для изменения его размера. Базовая матрица преобразования масштабирования имеет вид:

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

Вы можете использовать эту матричную форму непосредственно в качестве RELATIVE преобразования для изменения размера элемента, но это также может повлиять на визуализируемый сдвиг и перемещение элемента. Чтобы масштабировать элемент, не затрагивая его сдвиг или перемещение, перейдите к его системе отсчета .

Вращение

Преобразования вращения вращают элемент страницы вокруг точки, используя параметры масштабирования и сдвига. Базовая матрица преобразования вращения имеет следующую форму, где угол поворота (в радианах) измеряется от оси X, движущейся против часовой стрелки:

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

Как и в случае с масштабированием, вы можете использовать эту матричную форму непосредственно в качестве RELATIVE преобразования для поворота элемента, но это приведет к повороту элемента вокруг начала координат страницы . Чтобы повернуть элемент вокруг его центра или другой точки, перейдите к этой системе отсчета .

Отражение

Отражение отражает элемент по определенной линии или оси. Базовая матрица преобразования отражения по осям X и Y имеет следующие формы:

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

Как и в случае с масштабированием, вы можете использовать эту матричную форму непосредственно как RELATIVE преобразование для отражения элемента, но это также приведет к перемещению элемента. Чтобы отразить элемент без какого-либо перевода, перейдите к его системе отсчета .

Системы отсчета элементов

Применение базового преобразования масштаба , отражения или вращения непосредственно к элементу страницы приводит к преобразованию в опорной рамке страницы. Например, базовое вращение поворачивает элемент вокруг начала координат страницы (верхний левый угол). Однако вы можете работать в системе отсчета самого элемента, например, вращать элемент вокруг его центральной точки.

Чтобы преобразовать элемент в его собственной системе отсчета, заключите его между двумя другими перемещениями: предыдущим переводом T1 , который перемещает центр элемента в начало координат страницы, и последующим переводом T2 , который перемещает элемент обратно в исходное положение. Полную операцию можно выразить как матричное произведение:

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

Вы также можете переключиться на другие системы отсчета, вместо этого переведя разные точки в начало координат. Эти точки станут центром новой системы отсчета.

Каждое из этих преобразований можно выполнять индивидуально как последовательные RELATIVE запросы на преобразование. В идеале вам следует предварительно вычислить A' указанное выше, с помощью матричного умножения и применить результат как одно ABSOLUTE преобразование. Альтернативно, предварительно вычислите произведение T2 * B * T1 и примените его как одно RELATIVE преобразование. Оба метода более эффективны с точки зрения операций API, чем отправка запросов на преобразование по отдельности.

Ограничения

Некоторые поля размера и положения несовместимы с некоторыми типами элементов страницы. В таблице ниже представлена ​​информация о совместимости определенных элементов страницы с полями размеров и расположения.

Поле Форма Видео Стол
Перевод
Шкала Нет**
сдвиг Нет Нет

** Чтобы обновить измерения строк и столбцов таблицы, используйте UpdateTableRowPropertiesRequest и UpdateTableColumnPropertiesRequest .

Все поля размера и положения могут дать неожиданные результаты, если элемент страницы имеет сдвиг. Все ограничения могут быть изменены. Актуальную информацию см. в разделе Google Slides API .

API Slides может провести рефакторинг ваших значений.

Когда вы создаете элемент страницы, вы можете указать размер и преобразование, обеспечивающие определенный визуальный результат. Однако API может заменить предоставленные вами значения другими, которые будут иметь такой же внешний вид. В общем, если вы пишете размер с помощью API, вам не гарантировано, что вы получите тот же размер. Однако вы должны получить те же результаты, если принять во внимание преобразование.