Операции преобразования

API Google Slides позволяет управлять положением, размером и ориентацией элементов PageElement (текстовых полей, изображений, таблиц и базовых фигур) на странице, сохраняя при этом прямолинейность линий и параллельность точек и прямых. Эти преобразования называются аффинными . В представленных примерах показаны некоторые распространённые операции преобразования элементов страницы с использованием метода presentations.batchUpdate .

В этих примерах используются следующие переменные:

Эти примеры представлены в виде HTTP-запросов, чтобы не зависеть от языка. Чтобы узнать, как реализовать пакетное обновление на разных языках с помощью клиентских библиотек API Google, см. раздел Добавление фигур и текста .

Пример формы стрелки

В приведенных ниже примерах предполагается, что существует элемент страницы в виде стрелки со следующими данными о размерах и преобразованиях (которые можно получить с помощью метода presentations.pages.get ). В качестве unit измерения в примере используется EMU (английская метрическая единица) и pt (пункт).

{   "objectId": PAGE_ELEMENT_ID,   "size": {     "width": {       "magnitude": 3000000,       "unit": "EMU"     },     "height": {       "magnitude": 3000000,       "unit": "EMU"     }   },   "transform": {     "scaleX": 0.3,     "scaleY": 0.12,     "shearX": 0,     "shearY": 0,     "translateX": 2000000,     "translateY":  550000,     "unit": "EMU"   },   "shape": {     "shapeType": "RIGHT_ARROW"   } }

Выровнять элемент с другим

В следующем примере кода presentations.batchUpdate показано, как использовать метод CreateShapeRequest для создания новых фигур в правильных позициях, выровненных с примером стрелки на странице. В обоих случаях необходимо рассчитать координаты X и Y верхнего левого угла новой фигуры.

Первый запрос создаёт прямоугольник размером 100 на 50 пунктов, выровненный по левому краю стрелки, но на 50 пунктов (50 * 12 700 = 635 000 EMU) ниже верхнего края стрелки. Координата X нового прямоугольника должна совпадать с координатой X стрелки, чтобы сохранить выравнивание по левому краю. Координата Y равна координате Y стрелки плюс 50 пунктов, поскольку расстояние измеряется от верхней точки стрелки. Таким образом, координаты прямоугольника следующие:

x" = 2000000 EMU y" = 550000 + (50 * 12700) = 1185000 EMU

Второй запрос создаёт окружность шириной 40 пунктов с той же горизонтальной центральной линией, что и у стрелки из примера, но смещенной на 100 пунктов (1 270 000 EMU) вправо от правого края стрелки. Координата X окружности представляет собой сумму координаты X стрелки, ширины стрелки и 100 пунктов. Для выравнивания по центральной линии новой окружности необходимо учитывать высоту как стрелки, так и окружности. Координата Y окружности представляет собой сумму координаты Y стрелки плюс половина высоты стрелки минус половина высоты окружности. В обоих случаях необходимо также учитывать масштабные коэффициенты, связанные со стрелкой, поскольку они влияют на визуализируемую ширину и высоту стрелки. Таким образом, координаты окружности следующие:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

Ниже приведен протокол запроса на выравнивание одного элемента с другим:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "createShape": {         "shapeType": "RECTANGLE",         "elementProperties": {           "pageObjectId": PAGE_ID,           "size": {             "width": {               "magnitude": 100,               "unit": "PT"             },             "height": {               "magnitude": 50,               "unit": "PT"             }           },           "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX": 2000000,             "translateY": 1185000,             "unit": "EMU"           }         }       }     },     {       "createShape": {         "shapeType": "ELLIPSE",         "elementProperties": {           "pageObjectId": PAGE_ID,           "size": {             "width": {               "magnitude": 40,               "unit": "PT"             },             "height": {               "magnitude": 40,               "unit": "PT"             }           },           "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX": 4170000,             "translateY":  476000,             "unit": "EMU"           }         }       }     }   ] }

Переместить элемент

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для перевода элемента страницы в виде стрелки двумя разными способами.

Первый запрос в пакете перемещает стрелку в точку с координатами (X,Y) = (2000000, 150000) EMU (используя режим абсолютного перемещения applyMode ). Второй запрос в пакете перемещает стрелку оттуда, на этот раз на 40 000 EMU вправо и на 35 000 EMU вверх (используя режим относительного перемещения applyMode ). Используемые матрицы transform1 построены таким образом, чтобы избежать изменения размера и ориентации элемента.

После выполнения обоих запросов верхний левый угол стрелки окажется в точке с координатами (X,Y) = (2040000, 115000) EMU.

Ниже приведен протокол запроса на перемещение элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "ABSOLUTE",         "transform": {             "scaleX": 0.3,             "scaleY": 0.12,             "translateX": 2000000,             "translateY":  150000,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX":  40000,             "translateY": -35000,             "unit": "EMU"         }       }     }   ] }

Отразить элемент

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для отражения элемента страницы в форме стрелки горизонтально по ее центру, не изменяя его положения на странице и не масштабируя.

Это делается с помощью базового преобразования отражения в системе отсчета элемента. Для ясности сдвиг и отражение в системе отсчета показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже приведен протокол запроса на отражение элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX": -2000000 - 0.5 * 0.3  * 3000000,             "translateY":  -550000 - 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": -1,             "scaleY":  1,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }

Изменить размер элемента

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для масштабирования элемента страницы в виде стрелки, чтобы он стал на 50% шире и имел только 80% от его текущей высоты, сохраняя при этом центр стрелки в том же положении и ее ориентацию.

Это достигается с помощью базового масштабирующего преобразования в системе отсчета элемента. Для ясности сдвиг и масштабирование системы отсчета показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже представлен протокол запроса на изменение размера элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {           "objectId": PAGE_ELEMENT_ID,           "applyMode": "RELATIVE",           "transform": {               "scaleX":  1,               "scaleY":  1,               "translateX": -2000000 - 0.5 * 0.3  * 3000000,               "translateY":  -550000 - 0.5 * 0.12 * 3000000,               "unit": "EMU"           }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": 1.5,             "scaleY": 0.8,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }

Повернуть элемент вокруг его центра

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

Это достигается с помощью базового преобразования поворота в системе отсчёта элемента. Для ясности сдвиг и поворот системы отсчёта показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже представлен протокол запроса на поворот элемента вокруг его центра:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {           "objectId": PAGE_ELEMENT_ID,           "applyMode": "RELATIVE",           "transform": {               "scaleX":  1,               "scaleY":  1,               "translateX": -2000000 - 0.5 * 0.3  * 3000000,               "translateY":  -550000 - 0.5 * 0.12 * 3000000,               "unit": "EMU"           }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  cos(35 * (pi/180)),             "scaleY":  cos(35 * (pi/180)),             "shearX":  sin(35 * (pi/180)),             "shearY": -sin(35 * (pi/180)),             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }
,

API Google Slides позволяет управлять положением, размером и ориентацией элементов PageElement (текстовых полей, изображений, таблиц и базовых фигур) на странице, сохраняя при этом прямолинейность линий и параллельность точек и прямых. Эти преобразования называются аффинными . В представленных примерах показаны некоторые распространённые операции преобразования элементов страницы с использованием метода presentations.batchUpdate .

В этих примерах используются следующие переменные:

Эти примеры представлены в виде HTTP-запросов, чтобы не зависеть от языка. Чтобы узнать, как реализовать пакетное обновление на разных языках с помощью клиентских библиотек API Google, см. раздел Добавление фигур и текста .

Пример формы стрелки

В приведенных ниже примерах предполагается, что существует элемент страницы в виде стрелки со следующими данными о размерах и преобразованиях (которые можно получить с помощью метода presentations.pages.get ). В качестве unit измерения в примере используется EMU (английская метрическая единица) и pt (пункт).

{   "objectId": PAGE_ELEMENT_ID,   "size": {     "width": {       "magnitude": 3000000,       "unit": "EMU"     },     "height": {       "magnitude": 3000000,       "unit": "EMU"     }   },   "transform": {     "scaleX": 0.3,     "scaleY": 0.12,     "shearX": 0,     "shearY": 0,     "translateX": 2000000,     "translateY":  550000,     "unit": "EMU"   },   "shape": {     "shapeType": "RIGHT_ARROW"   } }

Выровнять элемент с другим

В следующем примере кода presentations.batchUpdate показано, как использовать метод CreateShapeRequest для создания новых фигур в правильных позициях, выровненных с примером стрелки на странице. В обоих случаях необходимо рассчитать координаты X и Y верхнего левого угла новой фигуры.

Первый запрос создаёт прямоугольник размером 100 на 50 пунктов, выровненный по левому краю стрелки, но на 50 пунктов (50 * 12 700 = 635 000 EMU) ниже верхнего края стрелки. Координата X нового прямоугольника должна совпадать с координатой X стрелки, чтобы сохранить выравнивание по левому краю. Координата Y равна координате Y стрелки плюс 50 пунктов, поскольку расстояние измеряется от верхней точки стрелки. Таким образом, координаты прямоугольника следующие:

x" = 2000000 EMU y" = 550000 + (50 * 12700) = 1185000 EMU

Второй запрос создаёт окружность шириной 40 пунктов с той же горизонтальной центральной линией, что и у стрелки из примера, но смещенной на 100 пунктов (1 270 000 EMU) вправо от правого края стрелки. Координата X окружности представляет собой сумму координаты X стрелки, ширины стрелки и 100 пунктов. Для выравнивания по центральной линии новой окружности необходимо учитывать высоту как стрелки, так и окружности. Координата Y окружности представляет собой сумму координаты Y стрелки плюс половина высоты стрелки минус половина высоты окружности. В обоих случаях необходимо также учитывать масштабные коэффициенты, связанные со стрелкой, поскольку они влияют на визуализируемую ширину и высоту стрелки. Таким образом, координаты окружности следующие:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

Ниже приведен протокол запроса на выравнивание одного элемента с другим:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "createShape": {         "shapeType": "RECTANGLE",         "elementProperties": {           "pageObjectId": PAGE_ID,           "size": {             "width": {               "magnitude": 100,               "unit": "PT"             },             "height": {               "magnitude": 50,               "unit": "PT"             }           },           "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX": 2000000,             "translateY": 1185000,             "unit": "EMU"           }         }       }     },     {       "createShape": {         "shapeType": "ELLIPSE",         "elementProperties": {           "pageObjectId": PAGE_ID,           "size": {             "width": {               "magnitude": 40,               "unit": "PT"             },             "height": {               "magnitude": 40,               "unit": "PT"             }           },           "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX": 4170000,             "translateY":  476000,             "unit": "EMU"           }         }       }     }   ] }

Переместить элемент

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для перевода элемента страницы в виде стрелки двумя разными способами.

Первый запрос в пакете перемещает стрелку в точку с координатами (X,Y) = (2000000, 150000) EMU (используя режим абсолютного перемещения applyMode ). Второй запрос в пакете перемещает стрелку оттуда, на этот раз на 40 000 EMU вправо и на 35 000 EMU вверх (используя режим относительного перемещения applyMode ). Используемые матрицы transform1 построены таким образом, чтобы избежать изменения размера и ориентации элемента.

После выполнения обоих запросов верхний левый угол стрелки окажется в точке с координатами (X,Y) = (2040000, 115000) EMU.

Ниже приведен протокол запроса на перемещение элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "ABSOLUTE",         "transform": {             "scaleX": 0.3,             "scaleY": 0.12,             "translateX": 2000000,             "translateY":  150000,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": 1,             "scaleY": 1,             "translateX":  40000,             "translateY": -35000,             "unit": "EMU"         }       }     }   ] }

Отразить элемент

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для отражения элемента страницы в форме стрелки горизонтально по ее центру, не изменяя его положения на странице и не масштабируя.

Это делается с помощью базового преобразования отражения в системе отсчета элемента. Для ясности сдвиг и отражение в системе отсчета показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже приведен протокол запроса на отражение элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX": -2000000 - 0.5 * 0.3  * 3000000,             "translateY":  -550000 - 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": -1,             "scaleY":  1,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }

Изменить размер элемента

В следующем примере кода presentations.batchUpdate показано, как использовать метод UpdatePageElementTransformRequest для масштабирования элемента страницы в виде стрелки, чтобы он стал на 50% шире и имел только 80% от его текущей высоты, сохраняя при этом центр стрелки в том же положении и ее ориентацию.

Это достигается с помощью базового масштабирующего преобразования в системе отсчета элемента. Для ясности сдвиг и масштабирование системы отсчета показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже представлен протокол запроса на изменение размера элемента:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {           "objectId": PAGE_ELEMENT_ID,           "applyMode": "RELATIVE",           "transform": {               "scaleX":  1,               "scaleY":  1,               "translateX": -2000000 - 0.5 * 0.3  * 3000000,               "translateY":  -550000 - 0.5 * 0.12 * 3000000,               "unit": "EMU"           }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX": 1.5,             "scaleY": 0.8,             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }

Повернуть элемент вокруг его центра

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

Это достигается с помощью базового преобразования поворота в системе отсчёта элемента. Для ясности сдвиг и поворот системы отсчёта показаны тремя отдельными вызовами метода UpdatePageElementTransformRequest , но эффективнее предварительно вычислить произведение этих матриц преобразования, а затем применить его в одном запросе.

Для трансляционных преобразований центр стрелки перемещается к началу координат и обратно. Значения параметров для наглядности представлены в виде расчётов.

Ниже представлен протокол запроса на поворот элемента вокруг его центра:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{   "requests": [     {       "updatePageElementTransform": {           "objectId": PAGE_ELEMENT_ID,           "applyMode": "RELATIVE",           "transform": {               "scaleX":  1,               "scaleY":  1,               "translateX": -2000000 - 0.5 * 0.3  * 3000000,               "translateY":  -550000 - 0.5 * 0.12 * 3000000,               "unit": "EMU"           }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  cos(35 * (pi/180)),             "scaleY":  cos(35 * (pi/180)),             "shearX":  sin(35 * (pi/180)),             "shearY": -sin(35 * (pi/180)),             "unit": "EMU"         }       }     },     {       "updatePageElementTransform": {         "objectId": PAGE_ELEMENT_ID,         "applyMode": "RELATIVE",         "transform": {             "scaleX":  1,             "scaleY":  1,             "translateX":  2000000 + 0.5 * 0.3  * 3000000,             "translateY":   550000 + 0.5 * 0.12 * 3000000,             "unit": "EMU"         }       }     }   ] }