Tamaño y posicionamiento de los elementos de página

En esta guía, se describe la manera de ajustar el tamaño y la posición de elementos de página usando transformaciones afines. Para acceder a una introducción conceptual a las transformaciones afines, consulta la guía de conceptos de Transformaciones.

Transformación de elementos

La API de Presentaciones te permite cambiar la posición y el tamaño de los elementos de una página. Para ello, primero determina qué tipo de transformación se debe aplicar y, luego, aplícala con el método presentations.batchUpdate que contiene uno o más elementos UpdatePageElementTransformRequest.

Las transformaciones se pueden realizar en uno de los dos applyModes:

  • ABSOLUTE transforma reemplaza la matriz de transformación existente del elemento. Los parámetros que se omiten en la solicitud de actualización de transformación se fijan en cero.

  • Las transformaciones RELATIVE se multiplican con la matriz de transformación existente del elemento (el orden de multiplicación es importante):

$$A' = BA$$

Las transformaciones relativas permiten cambiar la posición o el tamaño del elemento de página respecto de su estado actual; por ejemplo, desplazar una forma 100 puntos hacia la izquierda o girarla 40 grados. En las transformaciones absolutas, se descarta la información de posición y ajuste existente; por ejemplo, mover una forma hacia el centro de la página o ajustar su tamaño para que tenga un ancho específico.

Las transformaciones complejas generalmente pueden expresarse como una secuencia de transformaciones más simples. A menudo, calcular previamente una transformación (combinando varias transformaciones mediante multiplicación de matrices) puede reducir sobrecargas.

Para algunas operaciones, debes conocer los parámetros de transformación existentes de un elemento. Si no dispones de estos valores, puedes obtenerlos con una solicitud presentations.pages.get.

Traducción

Las traslación es simplemente la acción de mover un elemento de página a una nueva posición en la misma página. Las traducciones absolutas mueven el elemento a un punto específico, mientras que las relativas lo desplazan una distancia específica.

Una matriz de transformación de traslación básica tiene la siguiente forma:

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

Cuando se usa una UpdatePageElementTransformRequest para trasladar un elemento (sin alterar su tamaño, distorsión u orientación), se puede usar una de las siguientes estructuras de 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'
  }
}

Escalamiento

El ajuste de tamaño implica estirar o contraer un elemento en la dimensión X o Y para modificar su tamaño. Una matriz de transformación de escalamiento básica tiene la siguiente forma:

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

Puedes usar esta estructura de matriz directamente como transformación RELATIVE para cambiar el tamaño de un elemento, pero esto también puede afectar la distorsión y traslación en la representación del elemento. Para modificar el tamaño del elemento sin afectar su distorsión o traslación, aplica un cambio a su marco de referencia.

Rotación

Las transformaciones de rotación hacen girar un elemento de página sobre un punto usando los parámetros de escala y distorsión. La matriz básica de transformación de rotación tiene la siguiente forma, en la cual el ángulo de rotación (en radianes) se mide a partir del eje X, en sentido antihorario:

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

Como en el caso del ajuste de tamaño, puedes usar esta forma de matriz directamente como transformación RELATIVE para girar un elemento, aunque esto lo hará girar en el origen de la página. Para girar el elemento sobre su centro o sobre un punto diferente, aplica un cambio a ese marco de referencia.

Comentarios

El reflejo duplica un elemento en una línea o un eje específicos. La matriz básica de transformación de reflexión en ejes X e Y tiene las siguientes formas:

$$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}$$

Como en el caso del ajuste de tamaño, puedes usar esta forma de matriz directamente como transformación RELATIVE para reflejar un elemento, aunque esto también lo trasladará. Para reflejar el elemento sin traslación, aplica un cambio a su marco de referencia.

Marcos de referencia de elementos

Aplicar una transformación básica de ajuste de tamaño, reflejo o rotación directamente a un elemento de página produce una transformación en el marco de referencia de la página. Por ejemplo, una rotación básica hace girar el elemento en el origen de la página (la esquina superior izquierda). Sin embargo, puedes realizar acciones en el marco de referencia del elemento en sí, por ejemplo, para hacerlo girar sobre su punto central.

Para transformar un elemento dentro de su propio marco de referencia, enciérralo entre otras dos traslaciones: una traslación T1 anterior que mueva el centro del elemento al origen de la página y una traslación T2 posterior que lo mueva a su posición original. La operación completa puede expresarse como producto de matriz:

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

También puedes aplicar cambios a otros marcos de referencia trasladando diferentes puntos al origen, como alternativa. Estos puntos pasan a ser el centro del nuevo marco de referencia.

Es posible realizar cada una de estas transformaciones de manera individual a modo de solicitudes de transformación RELATIVE secuenciales. Lo ideal es que calcules previamente el valor A' de arriba con multiplicaciones de matriz y apliques el resultado como una única transformación ABSOLUTE. De manera alternativa, calcula previamente el producto T2 * B * T1 y aplícalo como una única transformación RELATIVE. Estas dos operaciones son más eficaces, en términos de operaciones de API, que el envío de las solicitudes de transformación por separado.

Limitaciones

Algunos campos de tamaño y posicionamiento no son compatibles con algunos tipos de elementos de página. En la siguiente tabla, se resume la compatibilidad de ciertos elementos de página con los campos de tamaño y posicionamiento.

Campo Forma Video Tabla
Translation
Escala No**
Cizallamiento No No

** Para actualizar las dimensiones de las filas y columnas de la tabla, usa UpdateTableRowPropertiesRequest y UpdateTableColumnPropertiesRequest.

Todos los campos de tamaño y posicionamiento pueden generar resultados inesperados si el elemento de la página tiene corte. Todas las limitaciones están sujetas a cambios. Para obtener información actualizada, consulta la API de Google Slides.

La API de Presentaciones puede refactorizar tus valores

Cuando creas un elemento de página, puedes especificar un tamaño y una transformación que proporcionen un resultado visual determinado. Sin embargo, la API puede reemplazar los valores proporcionados por otros que brinden el mismo aspecto visual. En general, si escribes un tamaño con la API, no se garantiza que se te devuelva el mismo tamaño. Sin embargo, deberías obtener los mismos resultados si tienes en cuenta la transformación.