В этом руководстве описывается, как определять размер и расположение элементов страницы с помощью аффинных преобразований. Концептуальное введение в аффинные преобразования см. в руководстве по концепциям преобразований .
Трансформирующиеся элементы
API Slides позволяет изменять положение и масштабировать элементы на странице. Для этого сначала определите, какой тип преобразования необходимо применить, а затем примените это преобразование с помощью методаpresents.batchUpdate , содержащего один или несколько элементов UpdatePageElementTransformRequest .
Преобразования могут быть выполнены в одном из двух режимов применения :
Преобразования
ABSOLUTE
заменяют существующую матрицу преобразования элемента. Любые параметры, которые вы опускаете в запросе на обновление преобразования, устанавливаются в ноль.RELATIVE
преобразования умножаются на существующую матрицу преобразования элемента (порядок умножения имеет значение):
Относительные преобразования перемещают или масштабируют элемент страницы с того места, где он находится в данный момент; например, перемещение фигуры на 100 пунктов влево или поворот ее на 40 градусов. Абсолютные преобразования отбрасывают существующую информацию о положении и масштабе; например, перемещение фигуры в центр страницы или масштабирование ее до определенной ширины.
Сложные преобразования обычно можно выразить как последовательность более простых. Предварительный расчет преобразования — объединение нескольких преобразований с использованием матричного умножения — часто позволяет снизить накладные расходы.
Для некоторых операций необходимо знать существующие параметры преобразования элемента. Если у вас нет этих значений, вы можете получить их с помощью запросаpresents.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 может заменить предоставленные вами значения другими, которые будут иметь такой же внешний вид. В общем, если вы пишете размер с помощью API, вам не гарантировано, что вы получите тот же размер. Однако вы должны получить те же результаты, если принять во внимание преобразование.