В этом руководстве объясняется, как изменять размер и положение элементов страницы с помощью аффинных преобразований в API Google Slides. Для более подробного ознакомления с аффинными преобразованиями см. руководство по концепции «Преобразования и элементы страницы» .
Преобразовать элементы
API Slides позволяет изменять положение и масштаб элементов на странице. Для этого сначала определите, какой тип преобразования необходимо применить, а затем примените это преобразование, используя метод presentations.batchUpdate() содержащий один или несколько элементов UpdatePageElementTransformRequest .
Преобразования можно выполнять с помощью параметра ApplyMode :
ABSOLUTEпреобразования заменяют существующую матрицу преобразования элемента. Любые параметры, которые вы не указываете в запросе на обновление преобразования, устанавливаются равными нулю.RELATIVEпреобразования умножаются на существующую матрицу преобразования элемента (порядок умножения имеет значение):
Относительные преобразования перемещают или масштабируют элемент страницы относительно его текущего положения. Например, перемещение фигуры на 100 точек влево или поворот на 40 градусов. Абсолютные преобразования отбрасывают существующую информацию о положении и масштабе; например, перемещение фигуры в центр страницы или масштабирование её до определённой ширины.
Сложные преобразования обычно можно выразить в виде последовательности более простых. Предварительное вычисление преобразования — объединение нескольких преобразований с помощью матричного умножения — часто позволяет уменьшить накладные расходы.
Для некоторых операций необходимо знать существующие параметры преобразования элемента. Если эти значения отсутствуют, их можно получить с помощью метода presentations.pages.get() .
Перевод
Абсолютное перемещение — это действие по перемещению элемента страницы в новое положение на той же странице. Абсолютное перемещение перемещает элемент в определенную точку, а относительное перемещение — на определенное расстояние.
Базовая матрица преобразования сдвига имеет следующий вид:
При использовании 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 для изменения его размера. Базовая матрица преобразования масштабирования имеет следующий вид:
Вы можете использовать эту матричную форму непосредственно в качестве RELATIVE преобразования для изменения размера элемента, но это также может повлиять на отображаемые сдвиг и перемещение элемента. Чтобы масштабировать элемент без изменения его сдвига или перемещения, перейдите в его опорную систему координат .
Вращение
Преобразования вращения поворачивают элемент страницы вокруг точки, используя параметры масштабирования и сдвига. Базовая матрица преобразования вращения имеет следующий вид, где угол поворота (в радианах) измеряется от оси X, двигаясь против часовой стрелки:
Как и в случае масштабирования, вы можете использовать эту матричную форму непосредственно как RELATIVE преобразование для поворота элемента, но это приведет к повороту элемента вокруг начала координат страницы . Чтобы повернуть элемент вокруг его центра или другой точки, перейдите в систему координат этого элемента .
Отражение
Отражение — это зеркальное отображение элемента относительно определенной линии или оси. Базовая матрица преобразования отражения по осям x и y имеет следующие формы:
Как и в случае масштабирования, вы можете использовать эту матричную форму непосредственно в качестве RELATIVE преобразования для отражения элемента, но это также приведет к перемещению элемента. Чтобы отразить элемент без перемещения, перейдите в его систему координат .
Системы координат элементов
Применение базовых преобразований масштабирования , вращения или отражения непосредственно к элементу страницы приводит к преобразованию в системе координат страницы. Например, базовое вращение поворачивает элемент вокруг начала координат страницы (верхнего левого угла). Однако вы можете работать и в системе координат элемента, например, вращать элемент вокруг его центральной точки.
Для преобразования элемента в его собственной системе координат необходимо заключить его между двумя другими преобразованиями: предшествующим преобразованием T1 , перемещающим центр элемента в начало координат страницы, и последующим преобразованием T2 , возвращающим элемент в исходное положение. Полная операция может быть выражена в виде матричного произведения:
Вы также можете переключиться на другие системы отсчета, переместив вместо этого другие точки в начало координат. Эти точки станут центром новой системы отсчета.
Каждое из этих преобразований можно выполнить по отдельности в виде последовательных запросов на RELATIVE преобразование. В идеале следует предварительно вычислить A' , используя матричные умножения, и применить результат как единое ABSOLUTE преобразование. В качестве альтернативы можно предварительно вычислить произведение T2 * B * T1 и применить его как единое RELATIVE преобразование. Оба варианта более эффективны с точки зрения операций API, чем отправка запросов на преобразование по отдельности.
Ограничения
Некоторые поля для задания размеров и позиционирования несовместимы с некоторыми типами элементов страницы. В следующей таблице приведена сводная информация о совместимости определенных элементов страницы с полями для задания размеров и позиционирования:
| Поле | Форма | Видео | Стол |
|---|---|---|---|
| Перевод | ✔ | ✔ | ✔ |
| Шкала | ✔ | ✔ | Нет** |
| Срез | ✔ | Нет | Нет |
Для обновления размеров строк и столбцов таблицы используйте UpdateTableRowPropertiesRequest и UpdateTableColumnPropertiesRequest .
Если элемент страницы имеет свойство «сдвиг», все поля для настройки размеров и позиционирования могут давать неожиданные результаты. Все ограничения могут быть изменены. Актуальную информацию см. в документации Google Slides API .
Переработанные значения
При создании элемента страницы вы можете указать размер и преобразование, которые обеспечат определенный визуальный результат. Однако API Slides может заменить предоставленные вами значения другими, дающими тот же визуальный эффект. В целом, если вы указываете размер с помощью API, нет гарантии, что вам будет возвращен тот же размер. Однако вы должны получить тот же результат, если учтете преобразование.