Dimensionnement et positionnement des éléments d'une page

Ce guide explique comment dimensionner et positionner des éléments de page à l'aide de transformations affines. Pour une introduction aux concepts liés aux transformations affines, consultez le guide conceptuel Transformations.

Transformer des éléments

L'API Slides vous permet de repositionner et de mettre à l'échelle des éléments sur une page. Pour ce faire, déterminez d'abord le type de transformation à appliquer, puis appliquez cette transformation à l'aide de la méthode presentations.batchUpdate contenant un ou plusieurs éléments UpdatePageElementTransformRequest.

Les transformations peuvent être effectuées dans l'un des deux applyModes suivants:

  • Les transformations ABSOLUTE remplacent la matrice de transformation existante de l'élément. Tous les paramètres que vous omettez dans la requête de mise à jour de transformation sont définis sur zéro.

  • Les transformations RELATIVE sont multipliées avec la matrice de transformation existante de l'élément (l'ordre de multiplication est important):

$$A' = BA$$

Les transformations relatives déplacent ou mettent à l'échelle l'élément de page à partir de son emplacement actuel ; par exemple, déplacer une forme de 100 points vers la gauche ou la faire pivoter de 40 degrés. Les transformations absolues suppriment les informations de position et d'échelle existantes (par exemple, déplacement d'une forme au centre de la page ou mise à l'échelle pour une largeur spécifique).

Les transformations complexes peuvent généralement être exprimées sous la forme d'une séquence de transformations complexes. Le précalcul d'une transformation, c'est-à-dire la combinaison de plusieurs transformations à l'aide de la multiplication de matrices, permet souvent de réduire les frais généraux.

Pour certaines opérations, vous devez connaître les paramètres de transformation existants d'un élément. Si vous ne disposez pas de ces valeurs, vous pouvez les récupérer à l'aide d'une requête presentations.pages.get.

Traduction

La traduction consiste simplement à déplacer un élément de la page vers une nouvelle position sur la même page. Les traductions absolues déplacent l'élément vers un point spécifique, tandis que les traductions relatives déplacent l'élément à une distance spécifique.

Une matrice de transformation de traduction de base se présente comme suit:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

Lorsque vous utilisez une UpdatePageElementTransformRequest pour traduire un élément (sans modifier sa taille, son cisaillement ni son orientation), vous pouvez utiliser l'une des structures AffineTransform suivantes:

// 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'
  }
}

Scaling

La mise à l'échelle est l'action qui consiste à étirer ou à presser un élément le long de la dimension X et/ou Y pour modifier sa taille. Une matrice de transformation avec scaling de base se présente comme suit:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Vous pouvez utiliser cette forme matricielle directement en tant que transformation RELATIVE pour redimensionner un élément, mais cela peut également affecter le cisaillement et la traduction de rendu de l'élément. Pour mettre à l'échelle l'élément sans affecter son cisaillement ni sa traduction, déplacez le curseur vers son image de référence.

Rotation

Les transformations de rotation font pivoter un élément de page autour d'un point à l'aide des paramètres de mise à l'échelle et de cisaillement. La matrice de transformation par rotation de base se présente sous la forme suivante, où l'angle de rotation (en radians) est mesuré à partir de l'axe X, en se déplaçant dans le sens inverse des aiguilles d'une montre:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Comme pour le scaling, vous pouvez utiliser cette forme matricielle directement en tant que transformation RELATIVE pour faire pivoter un élément, mais cela entraîne une rotation de l'élément par rapport à l'origine de la page. Pour faire pivoter l'élément autour de son centre ou d'un autre point, déplacez le curseur vers cette image de référence.

Commentaire

Le reflet reflète un élément sur une ligne ou un axe spécifique. La matrice de transformation de la réflexion des axes x et y de base se présente sous les formes suivantes:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

Comme pour le scaling, vous pouvez utiliser cette forme matricielle directement en tant que transformation RELATIVE pour refléter un élément, mais cela entraîne la traduction de l'élément. Pour refléter l'élément sans aucune traduction, déplacez le curseur vers son cadre de référence.

Trames de référence d'éléments

L'application d'une transformation d'échelle, de réflexion ou de rotation de base directement à un élément de page produit une transformation dans le cadre de référence de la page. Par exemple, une rotation de base fait pivoter l'élément par rapport à l'origine de la page (coin supérieur gauche). Toutefois, vous pouvez opérer dans le cadre de référence de l'élément lui-même, par exemple pour faire pivoter un élément autour de son point central.

Pour transformer un élément dans son propre cadre de référence, placez-le entre deux autres traductions: une T1 de traduction précédente qui déplace l'élément au centre vers l'origine de la page, et une traduction T2 suivante qui remet l'élément à sa position d'origine. L'opération complète peut être exprimée sous la forme d'un produit matriciel:

$$A' = T2 \times B \times T1 \times A$$

Vous pouvez également passer à d'autres cadres de référence en traduisant différents points vers l'origine. Ces points deviennent le centre du nouveau cadre de référence.

Il est possible d'effectuer chacune de ces transformations individuellement en tant que requêtes de transformation RELATIVE séquentielles. Idéalement, vous devez précalculer la fonction A' ci-dessus avec des multiplications matricielles et appliquer le résultat sous la forme d'une seule transformation ABSOLUTE. Vous pouvez également précalculer le produit T2 * B * T1 et l'appliquer en tant que transformation RELATIVE unique. Elles sont à la fois plus efficaces en termes d'opérations d'API, puis d'envoi des requêtes de transformation individuellement.

Limites

Certains champs de dimensionnement et de positionnement ne sont pas compatibles avec certains types d'éléments de page. Le tableau ci-dessous récapitule la compatibilité de certains éléments de page avec les champs de dimensionnement et de positionnement.

Champ Forme Vidéo Table
Translation
Scale Non**
Cier Non Non

** Pour mettre à jour les dimensions des lignes et des colonnes d'un tableau, utilisez UpdateTableRowPropertiesRequest et UpdateTableColumnPropertiesRequest.

Tous les champs de dimensionnement et de positionnement peuvent donner des résultats inattendus si l'élément de page présente des cisailles. Toutes ces limites sont susceptibles d'être modifiées. Pour obtenir les informations les plus récentes, consultez API Google Slides.

L'API Slides peut refactoriser vos valeurs

Lorsque vous créez un élément de page, vous pouvez spécifier une taille et une transformation qui fournissent un certain résultat visuel. Toutefois, l'API peut remplacer les valeurs fournies par d'autres qui génèrent la même apparence visuelle. En général, si vous écrivez une taille à l'aide de l'API, il n'est pas garanti que vous obteniez la même taille. Toutefois, vous devriez obtenir les mêmes résultats si vous prenez la transformation en compte.