Opérations de transformation

L'API Google Slides vous permet de manipuler l'emplacement, la taille et l'orientation d'une PageElement (zones de texte, images, tableaux et formes de base) sur une page, tout en gardant des lignes tout en préservant les points et les lignes parallèles. Ceux-ci sont appelés affinités de transformation. Les exemples présentés ici illustrent certaines transformations d'éléments de page courantes des opérations à l'aide du presentations.batchUpdate .

Ces exemples utilisent les variables suivantes:

  • PRESENTATION_ID : indique où vous fournissez le présentation ID. Vous pouvez découvrir la valeur de cet ID à partir de l'URL de la présentation.
  • PAGE_ID : indique où vous fournissez l'objet Page ID. Vous pouvez récupérer la valeur à partir de l'URL ou à l'aide d'une requête de lecture d'API.
  • PAGE_ELEMENT_ID : indique où vous fournissez la page ID d'objet d'élément. Toi spécifiez cet identifiant pour les éléments que vous créez (avec des restrictions) ou autoriser l'API Slides à en créer une automatiquement. ID des éléments peuvent être récupérées via une requête de lecture API.

Ces exemples sont présentés comme des requêtes HTTP afin de ne pas tenir compte du langage. Pour apprendre comment implémenter une mise à jour groupée dans différents langages à l'aide de l'API Google ; bibliothèques clientes, consultez la section Ajouter des formes texte.

Exemple de forme de flèche

Pour les exemples ci-dessous, supposons qu'il existe un exemple de page en forme de flèche avec les données de taille et de transformation suivantes (que l'on peut trouver à l'aide d'un presentations.pages.get . L'exemple de forme utilise les mesures unit EMU (English Metric Unit) et points (point).

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

Aligner un élément avec un autre

Les éléments suivants : presentations.batchUpdate exemple de code montre comment utiliser CreateShapeRequest pour créer de nouvelles formes aux positions correctes et alignées avec la exemple de forme de flèche sur la page. Dans les deux cas, X et Y les coordonnées de l'angle supérieur gauche de la nouvelle forme doivent être calculées.

La première demande crée un rectangle de 100 x 50 pts aligné à gauche bordure de la forme en forme de flèche, mais positionnée à 50 points (50 * 12 700 = 635 000 EMU) sous le bord supérieur de la flèche. La coordonnée X du nouveau rectangle doit être la identique à la coordonnée X de la flèche pour que sa bordure gauche reste alignée. Y est identique à la coordonnée Y de la flèche, plus 50 pt, car le la distance est mesurée à partir du haut de la flèche. Les coordonnées du rectangle sont Par conséquent:

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

La deuxième demande crée un cercle de 40 points avec le même texte comme la flèche centrale, mais elle est positionnée de 100 points (1 270 000 EMU) à droite du bord droit de la flèche. La coordonnée X du cercle est la somme des la coordonnée X de la flèche, la largeur de la flèche et 100 pt. Appliquer une ligne centrale pour le nouveau cercle nécessite de prendre en compte la hauteur flèche et le cercle. La coordonnée Y du cercle est la coordonnée Y de la flèche plus la hauteur de la flèche moins la moitié de la hauteur du cercle. Dans les deux cas, le les facteurs de scaling associés à la flèche doivent également être pris en compte, car ils affectent la largeur et la hauteur affichées de la flèche. Le cercle sont donc:

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

Voici le protocole de requête permettant d'aligner un élément sur un autre:

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

Déplacer un élément

Les éléments suivants : presentations.batchUpdate exemple de code montre comment utiliser UpdatePageElementTransformRequest pour traduire l'exemple d'élément de page en forme de flèche dans de deux manières différentes.

La première requête du lot déplace la flèche vers (X,Y) = (2000000, 150000). Coordonnée de l'EMU (en utilisant une traduction absolue) applyMode). La deuxième requête du lot déplace la flèche à partir de là, cette fois 40 000 EMU vers la droite et 35 000 EMU vers le haut (avec une traduction relative applyMode). Les matrices transformation1 utilisées sont construites pour éviter de modifier la taille et l’orientation de l’élément.

Une fois les deux requêtes exécutées, l'angle supérieur gauche de la flèche se trouve aux coordonnées (X,Y) = (2040000, 115 000) coordonnées de l'EMU.

Voici le protocole de requête permettant de déplacer un élément:

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

Reflète un élément

Les éléments suivants : presentations.batchUpdate exemple de code montre comment utiliser UpdatePageElementTransformRequest pour refléter l'exemple d'élément de page en forme de flèche horizontalement le long de son centre, sans modifier sa position sur la page ni et le scaling.

Pour ce faire, nous utilisons une réflexion de base transform dans la référence de l'élément frame. Par souci de clarté, le décalage de l'image de référence et la réflexion sont indiqués par trois appels distincts à la fonction la méthode UpdatePageElementTransformRequest, mais il est plus efficace de précalculer le produit de ces transformations matrices, puis appliquer ce produit en tant que requête unique.

Pour les transformations translation, la valeur centre de la forme de la flèche est déplacé vers et depuis l'origine. Les valeurs des paramètres sont exprimées sous forme de calculs par souci de clarté.

Voici le protocole de requête permettant de refléter un élément:

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

Redimensionner un élément

Les éléments suivants : presentations.batchUpdate exemple de code montre comment utiliser UpdatePageElementTransformRequest pour mettre à l'échelle l'exemple d'élément de page en forme de flèche de sorte qu'il corresponde à 50% est plus large et ne dépasse pas 80% de sa hauteur actuelle, tout en gardant le centre de la flèche. dans la même position et en conservant son orientation.

Pour ce faire, vous allez utiliser un scaling de base transform dans la référence de l'élément frame. Par souci de clarté, le décalage du frame et la mise à l'échelle de référence sont représentés par trois appels distincts à la fonction la méthode UpdatePageElementTransformRequest, mais il est plus efficace de précalculer le produit de ces transformations matrices, puis appliquer ce produit en tant que requête unique.

Pour les transformations translation, la valeur centre de la forme de la flèche est déplacé vers et depuis l'origine. Les valeurs des paramètres sont exprimées sous forme de calculs par souci de clarté.

Voici le protocole de requête permettant de redimensionner un élément:

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

Faire pivoter un élément autour de son centre

Les éléments suivants : presentations.batchUpdate exemple de code montre comment utiliser UpdatePageElementTransformRequest Méthode de rotation de l'exemple d'élément de page en forme de flèche 35 degrés dans le sens inverse des aiguilles d'une montre, tout en gardant le centre de la flèche dans la même position et maintenir sa taille.

Pour ce faire, vous allez utiliser une rotation de base transform dans la référence de l'élément frame. Par souci de clarté, le décalage et la rotation de l'image de référence sont illustrés par trois appels distincts à la fonction la méthode UpdatePageElementTransformRequest, mais il est plus efficace de précalculer le produit de ces transformations de matrices, puis appliquer ce produit en tant que requête unique

Pour les transformations translation, la valeur centre de la forme de la flèche est déplacé vers et depuis l'origine. Les valeurs des paramètres sont exprimées sous forme de calculs par souci de clarté.

Voici le protocole de requête permettant de faire pivoter un élément autour de son centre:

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