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

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

Cómo transformar elementos

La API de Presentaciones te permite cambiar la posición y el ajuste de los elementos de una página. Para ello, primero determina qué tipo de transformación debe aplicarse 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 dos applyModes:

  • Las transformaciones ABSOLUTE reemplazan la matriz de transformación existente del elemento. Todos los parámetros que omites en la solicitud de actualización de transformación se configuran en cero.

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

$$A' = BA$$

Las transformaciones relativas permiten mover o ajustar el tamaño del elemento de página desde su posición actual; por ejemplo, mover una forma 100 puntos hacia la izquierda o rotarla 40 grados. Las transformaciones absolutas descartan la información de posición y escala existente; por ejemplo, mover una forma al centro de la página o ajustarla para que tenga un ancho específico.

Por lo general, las transformaciones complejas pueden expresarse como una secuencia de transformaciones más simples. A menudo, calcular previamente una transformación, combinar varias transformaciones mediante la multiplicación de matrices, puede reducir la sobrecarga.

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

Traducción

La 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 traslaciones absolutas mueven el elemento hasta un punto específico, mientras que las relativas lo mueven 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 usas una UpdatePageElementTransformRequest para traducir un elemento (sin alterar su tamaño, distorsión u orientación), puedes 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 escalamiento es la acción de estirar o comprimir un elemento en la dimensión X o Y para cambiar 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 forma de matriz directamente como una transformación RELATIVE para cambiar el tamaño de un elemento, pero esto también puede afectar la distorsión y traslación renderizadas del elemento. Para ajustar el tamaño del elemento sin afectar su distorsión o traslación, cambia a su marco de referencia.

Rotación

Las transformaciones de rotación rotan un elemento de página sobre un punto mediante los parámetros de escalamiento y distorsión. La matriz básica de rotación tiene la siguiente forma, en la que 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}$$

Al igual que con el escalamiento, puedes usar esta forma de matriz directamente como una transformación RELATIVE para rotar un elemento, pero esto hace que este rote sobre el origen de la página. Para rotar el elemento sobre su centro o un punto diferente, cambia 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 reflejo 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}$$

Al igual que con el escalamiento, puedes usar esta forma de matriz directamente como una transformación RELATIVE para reflejar un elemento, pero esto también hace que el elemento se traduzca. Para reflejar el elemento sin traslación, cambia a su marco de referencia.

Marcos de referencia de elementos

Aplicar una transformación básica de escala, reflexión 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 rota 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, por ejemplo, para rotar un elemento sobre su punto central.

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

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

También puedes cambiar a otros marcos de referencia si traduces diferentes puntos al origen. Estos puntos se convierten en el centro del nuevo marco de referencia.

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

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 la página con los campos de tamaño y posicionamiento.

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

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

Todos los campos de tamaño y posicionamiento pueden dar resultados inesperados si el elemento de página presenta distorsión. 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 la misma apariencia visual. En general, si escribes un tamaño con la API, no se garantiza que obtendrás el mismo tamaño. Sin embargo, deberías obtener los mismos resultados si tienes en cuenta la transformación.