Operações de transformação

A API Google Slides permite manipular o local, o tamanho e a orientação de um PageElement (caixas de texto, imagens, tabelas e formas básicas) em uma página, mantendo as linhas pontos retos e retas e retas paralelas. Elas são conhecidas como pessoas transformações de linguagem. Estes exemplos mostram algumas transformações comuns de elementos de página operações usando o presentations.batchUpdate .

Esses exemplos usam as seguintes variáveis:

  • PRESENTATION_ID: indica onde você fornece apresentação ID. Você pode descobrir o valor desse ID no URL da apresentação.
  • PAGE_ID: indica onde você fornece o objeto de página ID. Você pode recuperar o valor dele no URL ou usando uma solicitação de leitura da API.
  • PAGE_ELEMENT_ID: indica onde você fornece a página ID de objeto do elemento. Você você pode especificar esse ID para os elementos que criar (com alguns restrições). ou permitir que a API Slides crie um automaticamente. IDs de elementos podem ser recuperados por meio de uma solicitação de leitura da API.

Esses exemplos são apresentados como solicitações HTTP para serem neutros em relação à linguagem. Para saber como implementar uma atualização em lote em idiomas diferentes usando a API do Google bibliotecas de clientes, consulte Adicionar formas e ou texto.

Exemplo de forma de seta

Para os exemplos abaixo, suponha que exista um exemplo de página de forma de seta. com o seguinte tamanho e dados de transformação (que podem ser encontrados com uma presentations.pages.get solicitação do método). O exemplo de forma usa o modelo unit EMU (English Metric Unit) e pt (ponto).

{
  "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"
  }
}

Alinhar um elemento a outro

O seguinte presentations.batchUpdate um exemplo de código mostra como usar a CreateShapeRequest para criar novas formas nas posições corretas que estejam alinhadas com o exemplo de forma de seta na página. Em ambos os casos, X e Y coordenadas do canto superior esquerdo da nova forma devem ser calculadas.

A primeira solicitação cria um retângulo de 100 x 50 pt alinhado à esquerda borda em forma de seta, mas posicionada 50 pt (50 * 12.700 = 635.000 EMUs) abaixo da borda superior da seta. A coordenada X do novo retângulo deve ser o igual à coordenada X da seta para manter a borda esquerda alinhada. O Y coordenada é igual à coordenada Y da seta mais 50 pontos, já que a a distância é medida a partir do topo da seta. As coordenadas do retângulo são Portanto:

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

A segunda solicitação cria um círculo largo de 40 pontos que tem a mesma linha linha central como seta de exemplo, mas está posicionada 100 pt (1.270.000 EMUs) para à direita da borda direita da seta. A coordenada X do círculo é a soma da coordenada X da seta, a largura da seta e 100 pontos. Aplicar uma linha central o alinhamento do novo círculo requer considerar a altura dos dois seta e o círculo. A coordenada Y do círculo é a coordenada Y da seta mais metade da altura da seta menos metade da altura do círculo. Em ambos os casos, fatores de escala associados à seta também devem ser levados em consideração, porque afetam a largura e a altura renderizadas da seta. A coordenadas são, portanto:

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

Confira a seguir o protocolo de solicitação para alinhar um elemento a outro:

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"
          }
        }
      }
    }
  ]
}

Mover um elemento

O seguinte presentations.batchUpdate um exemplo de código mostra como usar a UpdatePageElementTransformRequest para traduzir o elemento de página exemplo de forma de seta para de duas maneiras diferentes.

A primeira solicitação do lote move a seta para (X,Y) = (2000000, 150000) Coordenada da EMU (usando uma tradução absoluta) applyMode). A segunda solicitação do lote move a seta de lá, desta vez para 40.000 EMUs. à direita e 35.000 EMUs acima (usando um applyMode de tradução relativa). As matrizes transformation1 usadas são construídos para evitar a alteração do tamanho e da orientação do elemento.

Depois de executar as duas solicitações, o canto superior esquerdo da seta fica posicionado no (X,Y) = (2040000, 115000) coordenada EMU.

Veja a seguir o protocolo de solicitação para mover um elemento:

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"
        }
      }
    }
  ]
}

Refletir um elemento

O seguinte presentations.batchUpdate um exemplo de código mostra como usar a UpdatePageElementTransformRequest para refletir o elemento de página exemplo de forma de seta horizontalmente ao longo de seu centro, sem alterar sua posição na página ou escalonamento.

Isso é feito usando uma reflexão básica transform na reference do elemento frame. Para fins de esclarecimento, o a mudança do frame de referência e a reflexão são mostradas com três chamadas separadas ao método UpdatePageElementTransformRequest, mas é mais eficiente pré-calcular o produto dessas transformações matrizes e, em seguida, aplicar esse produto como uma única solicitação.

Para as transformações translation, a centro da forma de seta é movido para e da origem. Os valores de parâmetro são expressos como cálculos para maior clareza.

Veja a seguir o protocolo de solicitação para refletir um elemento:

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"
        }
      }
    }
  ]
}

Redimensionar um elemento

O seguinte presentations.batchUpdate um exemplo de código mostra como usar a UpdatePageElementTransformRequest para dimensionar o elemento da página exemplo de forma de seta para 50% mais larga e que tenham apenas 80% da altura atual, mantendo o centro da seta na mesma posição e mantendo a orientação.

Isso é feito usando um escalonamento básico transform na reference do elemento frame. Para fins de esclarecimento, o a mudança do frame de referência e o dimensionamento são mostrados com três chamadas separadas para o método UpdatePageElementTransformRequest, mas é mais eficiente pré-calcular o produto dessas transformações matrizes e, em seguida, aplicar esse produto como uma única solicitação.

Para as transformações translation, a centro da forma de seta é movido para e da origem. Os valores de parâmetro são expressos como cálculos para maior clareza.

Veja a seguir o protocolo de solicitação para redimensionar um elemento:

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"
        }
      }
    }
  ]
}

Girar um elemento em torno do seu centro

O seguinte presentations.batchUpdate um exemplo de código mostra como usar a UpdatePageElementTransformRequest método para girar o elemento de página exemplo de forma de seta 35 graus no sentido anti-horário, mantendo o centro da seta na mesma posição e manter o tamanho dele.

Isso é feito com uma rotação básica transform na reference do elemento frame. Para fins de esclarecimento, o a mudança do frame de referência e a rotação são mostradas com três chamadas separadas para o método UpdatePageElementTransformRequest, mas é mais eficiente pré-calcular o produto dessas transformações matrizes e, em seguida, aplicar esse produto como uma única solicitação

Para as transformações translation, a centro da forma de seta é movido para e da origem. Os valores de parâmetro são expressos como cálculos para maior clareza.

Veja a seguir o protocolo de solicitação para girar um elemento em torno de seu centro:

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"
        }
      }
    }
  ]
}