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 la página con transformaciones afines. Para obtener una introducción conceptual a las transformaciones afines, consulta la guía de conceptos de Transformaciones.

Transformación de elementos

La API de Slides te permite cambiar la posición y escalar elementos en 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 omitas de la solicitud de actualización de transformación se establecerán en cero.

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

$$A' = BA$$

Las transformaciones relativas mueven o escalan el elemento de página desde donde se encuentra actualmente; 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 existentes, por ejemplo, mover una forma al centro de la página o escalarla para que tenga un ancho específico.

Por lo general, las transformaciones complejas se pueden expresar como una secuencia de transformaciones más simples. El cálculo previo de una transformación (combinación de varias transformaciones con la multiplicación de matrices) a menudo puede reducir la sobrecarga.

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

Traducción

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

Una matriz de transformación de traducció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 un UpdatePageElementTransformRequest para traducir un elemento (sin alterar su tamaño, corte ni 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 a lo largo de 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 este formulario de matriz directamente como una transformación RELATIVE para cambiar el tamaño de un elemento, pero esto también puede afectar el corte y la traducción renderizados del elemento. Para escalar el elemento sin afectar su corte o traducción, cambia a su marco de referencia.

Rotación

Las transformaciones de rotación rotan un elemento de página alrededor de un punto con los parámetros de escalamiento y deslizamiento. La matriz de transformación de rotación básica tiene la siguiente forma, en la que el ángulo de rotación (en radianes) se mide desde el eje X y se mueve en sentido contrario a las manecillas del reloj:

$$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 este formulario de matriz directamente como una transformación RELATIVE para rotar un elemento, pero esto hace que el elemento se rote alrededor del origen de la página. Para rotar el elemento alrededor de su centro o un punto diferente, cambia a ese marco de referencia.

Comentarios

La reflexión refleja un elemento en una línea o un eje específicos. La matriz básica de transformación de reflexión de los 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 este formulario de matriz directamente como una transformación RELATIVE para reflejar un elemento, pero esto hace que el elemento también se traduzca. Para reflejar el elemento sin ninguna traducció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 alrededor del origen de la página (la esquina superior izquierda). Sin embargo, puedes operar en el marco de referencia del elemento en sí, por ejemplo, para rotar un elemento alrededor de su punto central.

Para transformar un elemento dentro de su propio marco de referencia, enciérralo entre dos otras traducciones: una traducción anterior T1 que mueve el centro del elemento al origen de la página y una traducción posterior T2 que lo devuelve a su posición original. La operación completa se puede expresar como un producto matricial:

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

También puedes cambiar a otros sistemas de referencia. Para ello, traduce 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 forma individual como solicitudes de transformación RELATIVE secuenciales. Idealmente, debes precalcular A' anterior con multiplicaciones de matrices y aplicar 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. Ambas son más eficientes, en términos de operaciones de API, que enviar las solicitudes de transformación de forma individual.

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 Slides podría refactorizar tus valores.

Cuando creas un elemento de página, puedes especificar un tamaño y una transformación que proporcionan un resultado visual determinado. Sin embargo, la API puede reemplazar los valores que proporcionas por otros que tengan la misma apariencia 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.