В этом руководстве объясняется, как изменять размер и положение элементов страницы с помощью аффинных преобразований в 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
.
Все поля размера и позиционирования могут давать неожиданные результаты, если элемент страницы имеет сдвиг. Все ограничения могут быть изменены. Актуальную информацию см. в API Google Slides .
Рефакторинг значений
При создании элемента страницы вы можете указать размер и преобразование, которые обеспечат определённый визуальный результат. Однако API слайдов может заменить предоставленные вами значения другими, которые обеспечат тот же визуальный эффект. В целом, если вы указываете размер с помощью API, нет гарантии, что получите тот же размер. Однако, если вы учтёте преобразование, вы получите те же результаты.