Trasformare le operazioni

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

Questi esempi utilizzano le seguenti variabili:

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

Questi esempi sono presentati come richieste HTTP per essere neutrali di lingua. Per informazioni su come implementare un aggiornamento batch in lingue diverse utilizzando le librerie client dell'API di Google, consulta Aggiungere forme e testo.

Esempio di forma di freccia

Per questi esempi riportati di seguito, supponiamo che esista un elemento di pagina a forma di freccia di esempio con le seguenti dimensioni e dati di trasformazione (disponibili con una richiesta del metodo presentations.pages.get). La forma di esempio utilizza la misurazione 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 esempio di codice di presentations.batchUpdate mostra come utilizzare il metodo CreateShapeRequest per creare nuove forme nelle posizioni corrette allineate alla forma di freccia di esempio sulla pagina. In entrambi i casi, devono essere calcolate le coordinate X e Y dell'angolo superiore sinistro della nuova forma.

La prima richiesta crea un rettangolo di 100 x 50 pt allineato al bordo sinistro della forma della freccia, ma posizionato a 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 corrisponde alla coordinata Y della freccia più 50 pt, poiché la distanza è 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 largo 40 pt con la stessa linea centrale orizzontale della freccia di esempio, ma posizionato a 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 100 pt. Per applicare un allineamento al centro del nuovo cerchio, è necessario tenere conto dell'altezza della freccia e del cerchio. La coordinata Y del cerchio è la coordinata Y della freccia più metà dell'altezza della freccia meno la metà dell'altezza del cerchio. In entrambi i casi, devono essere presi in considerazione anche i fattori di scalabilità associati alla freccia, poiché influiscono sulla larghezza e sull'altezza della freccia visualizzata. 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 esempio di codice di presentations.batchUpdate mostra come utilizzare il metodo UpdatePageElementTransformRequest per tradurre l'elemento della pagina ad esempio a forma di freccia in due modi diversi.

La prima richiesta nel batch sposta la freccia sulla 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 e di 35.000 EMU verso l'alto (utilizzando le dimensioni di trasformazione relative).applyMode

Dopo aver eseguito 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 esempio di codice di presentations.batchUpdate mostra come utilizzare il metodo UpdatePageElementTransformRequest per riflettere l'elemento della pagina a forma di freccia di esempio orizzontalmente lungo il suo centro, senza modificarne la posizione nella pagina o la scalabilità.

A questo scopo, utilizza una trasformazione di base della riflessione nel frame di riferimento dell'elemento. Per chiarezza, lo spostamento e la riflessione del frame di riferimento sono mostrati con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e quindi applicare quel prodotto come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma della freccia viene spostato da e verso l'origine. I valori dei parametri vengono espressi come calcoli per maggiore 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 esempio di codice di presentations.batchUpdate mostra come utilizzare il metodo UpdatePageElementTransformRequest per ridimensionare l'elemento della pagina a forma di freccia di esempio in modo che sia più largo del 50% e abbia solo l'80% dell'altezza attuale, mantenendo il centro della freccia nella stessa posizione e mantenendo il suo orientamento.

A questo scopo, utilizza una trasformazione della scalabilità di base nel frame di riferimento dell'elemento. Per chiarezza, lo spostamento e la scalabilità del frame di riferimento sono mostrate con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e quindi applicare quel prodotto come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma della freccia viene spostato da e verso l'origine. I valori dei parametri vengono espressi come calcoli per maggiore 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 esempio di codice di presentations.batchUpdate 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 mantenendone le dimensioni.

A questo scopo, utilizza una trasformazione di rotazione di base nel frame di riferimento dell'elemento. Per chiarezza, lo spostamento e la rotazione del frame di riferimento sono mostrati con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e quindi applicare quel prodotto come singola richiesta.

Per le trasformazioni di traslazione, il centro della forma della freccia viene spostato da e verso l'origine. I valori dei parametri vengono espressi come calcoli per maggiore chiarezza.

Di seguito è riportato il protocollo di richiesta per ruotare un elemento intorno 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"
        }
      }
    }
  ]
}