Trasformare le operazioni

L'API Google Slides ti consente di manipolare la posizione, le dimensioni e l'orientamento di un PageElement (caselle di testo, immagini, tabelle e forme di base) su una pagina, mantenendo le linee diritte e preservando i punti e le linee parallele. Queste sono note come trasformazioni affini. Gli esempi riportati di seguito mostrano alcune operazioni di trasformazione comuni degli elementi della pagina utilizzando il metodo presentations.batchUpdate.

Questi esempi utilizzano le seguenti variabili:

  • PRESENTATION_ID: indica dove fornire l'ID presentazione. Puoi scoprire il valore di questo ID dall'URL della presentazione.
  • PAGE_ID: indica dove fornisci l'ID oggetto pagina. Puoi recuperare il valore da questo URL o utilizzando una richiesta di lettura dell'API.
  • PAGE_ELEMENT_ID: indica dove fornisci l'ID oggetto elemento pagina. Puoi specificare questo ID per gli elementi che crei (con alcune limitazioni) o consentire all'API Slides di crearne uno automaticamente. Gli ID elemento possono essere recuperati tramite una richiesta di lettura dell'API.

Questi esempi vengono presentati come richieste HTTP per essere indipendenti dalla lingua. Per scoprire come implementare un aggiornamento batch in lingue diverse utilizzando le librerie client dell'API Google, consulta Aggiungere forme e testo.

Esempio di forma della freccia

Per questi esempi di seguito, supponiamo che esista un elemento di pagina di esempio a forma di freccia con le seguenti dimensioni e dati di trasformazione (che possono essere trovati con una richiesta di metodo presentations.pages.get). La forma di esempio utilizza le unità di misura unit EMU (English Metric Unit) e pt (punto).

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

Allineare un elemento a un altro

Il seguente presentations.batchUpdate esempio di codice mostra come utilizzare il metodo CreateShapeRequest per creare nuove forme nelle posizioni corrette allineate alla forma a freccia di esempio nella pagina. In entrambi i casi, devono essere calcolate le coordinate X e Y dell'angolo in alto a sinistra della nuova forma.

La prima richiesta crea un rettangolo di 100 x 50 pt allineato al bordo sinistro della forma a freccia, ma posizionato 50 pt (50 * 12.700 = 635.000 EMU) sotto il bordo superiore della freccia. La coordinata X del nuovo rettangolo deve essere la stessa della coordinata X della freccia per mantenere allineato il bordo sinistro. La coordinata Y è uguale alla coordinata Y della freccia più 50 pt, poiché la distanza viene misurata dalla parte superiore della freccia. Le coordinate del rettangolo sono quindi:

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

La seconda richiesta crea un cerchio di 40 pt di larghezza che ha la stessa linea centrale orizzontale della freccia di esempio, ma è posizionato 100 pt (1.270.000 EMU) a destra del bordo destro della freccia. La coordinata X del cerchio è la somma della coordinata X della freccia, della larghezza della freccia e di 100 pt. L'applicazione di un allineamento sull'asse centrale per il nuovo cerchio richiede di tenere conto dell'altezza sia della freccia che del cerchio. La coordinata Y del cerchio è la coordinata Y della freccia più metà dell'altezza della freccia meno metà dell'altezza del cerchio. In entrambi i casi, devono essere presi in considerazione anche i fattori di scala associati alla freccia, perché influiscono sulla larghezza e sull'altezza renderizzate della freccia. Le coordinate del cerchio sono quindi:

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

Di seguito è riportato il protocollo di richiesta per allineare un elemento a un altro:

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

Spostare un elemento

Il seguente presentations.batchUpdate esempio di codice mostra come utilizzare il metodo UpdatePageElementTransformRequest per tradurre l'elemento della pagina forma a freccia di esempio in due modi diversi.

La prima richiesta nel batch sposta la freccia nella coordinata EMU (X,Y) = (2000000, 150000) (utilizzando una traslazione assoluta applyMode). La seconda richiesta nel batch sposta la freccia da lì, questa volta di 40.000 EMU verso destra e di 35.000 EMU verso l'alto (utilizzando una traslazione relativa applyMode). Le matrici di trasformazione1 utilizzate sono costruite per evitare di alterare le dimensioni e l'orientamento dell'elemento.

Dopo l'esecuzione di entrambe le richieste, l'angolo in alto a sinistra della freccia si trova nella coordinata EMU (X,Y) = (2040000, 115000).

Di seguito è riportato il protocollo di richiesta per spostare un elemento:

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

Riflettere un elemento

Il seguente presentations.batchUpdate esempio di codice mostra come utilizzare il metodo UpdatePageElementTransformRequest per riflettere l'elemento della pagina forma a freccia di esempio orizzontalmente lungo il suo centro, senza alterarne la posizione sulla pagina o il ridimensionamento.

A questo scopo, utilizza una trasformazione di riflessione di base nel sistema di riferimento dell'elemento. Per chiarezza, lo spostamento e il riflesso del sistema di riferimento vengono mostrati con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e poi applicarlo come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma a freccia viene spostato verso e dall'origine. I valori dei parametri sono espressi come calcoli per chiarezza.

Di seguito è riportato il protocollo di richiesta per riflettere un elemento:

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

Ridimensionare un elemento

Il seguente presentations.batchUpdate esempio di codice mostra come utilizzare il metodo UpdatePageElementTransformRequest per scalare l'elemento della pagina forma a freccia di esempio in modo che sia il 50% più largo e abbia solo l'80% dell'altezza attuale, mantenendo il centro della freccia nella stessa posizione e la sua orientamento.

A questo scopo, utilizza una trasformazione di scalabilità di base nel frame di riferimento dell'elemento. Per chiarezza, lo spostamento e il ridimensionamento del sistema di riferimento vengono mostrati con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e poi applicarlo come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma a freccia viene spostato verso e dall'origine. I valori dei parametri sono espressi come calcoli per chiarezza.

Di seguito è riportato il protocollo di richiesta per ridimensionare un elemento:

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

Ruotare un elemento intorno al suo centro

Il seguente presentations.batchUpdate esempio di codice mostra come utilizzare il metodo UpdatePageElementTransformRequest per ruotare l'elemento della pagina a forma di freccia di esempio di 35 gradi in senso antiorario, mantenendo il centro della freccia nella stessa posizione e le sue dimensioni.

A tale scopo, utilizza una trasformazione di rotazione di base nel sistema di riferimento dell'elemento. Per chiarezza, lo spostamento e la rotazione del sistema di riferimento vengono mostrati con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e poi applicarlo come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma a freccia viene spostato verso e dall'origine. I valori dei parametri sono espressi come calcoli per chiarezza.

Di seguito è riportato il protocollo di richiesta per ruotare un elemento attorno al suo centro:

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