Trasformare le operazioni

L'API Presentazioni Google consente di modificare 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 dritte e mantenendo punti e linee parallele. In questi casi, si parla di trasformazioni affine. Gli esempi qui mostrano alcune operazioni comuni di trasformazione degli elementi di pagina utilizzando il metodo presentations.batchUpdate.

In questi esempi vengono utilizzate le seguenti variabili:

  • PRESENTATION_ID: indica dove fornisci l'ID presentazione. Puoi trovare il valore di questo ID nell'URL della presentazione.
  • PAGE_ID: indica dove fornisci l'ID dell'oggetto pagina. Puoi recuperare il valore dall'URL o utilizzando una richiesta di lettura API.
  • PAGE_ELEMENT_ID: indica dove fornisci l'ID oggetto dell'elemento della pagina. Puoi specificare questo ID per gli elementi che crei (con alcune limitazioni) o consentire all'API Presentazioni 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 dal linguaggio. Per scoprire come implementare un aggiornamento batch in diversi linguaggi utilizzando le librerie client dell'API di Google, consulta Aggiungere forme e testo.

Esempio di forma di freccia

Per gli esempi riportati di seguito, supponiamo che esista un esempio di elemento di pagina con forma di freccia con le seguenti dimensioni e trasforma i dati (che puoi trovare con una richiesta di metodo presentations.pages.get). La forma di esempio utilizza la misurazione unit EMU (Unità metrica inglese) 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 per presentations.batchUpdate mostra come utilizzare il metodo CreateShapeRequest per creare nuove forme nelle posizioni corrette allineate alla forma di esempio della freccia sulla pagina. In entrambi i casi, è necessario calcolare le coordinate X e Y dell'angolo superiore sinistro della nuova forma.

La prima richiesta crea un rettangolo di 100 x 50 punti 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 uguale alla 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 è misurata dalla parte superiore della freccia. Le coordinate del rettangolo sono:

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

La seconda richiesta crea un cerchio largo 40 pt che ha la stessa linea centrale orizzontale della freccia di esempio, ma è posizionata 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 punti. L'applicazione di un allineamento linea centrale per il nuovo cerchio richiede di prendere in considerazione l'altezza sia della freccia che del cerchio. La coordinata Y del cerchio è la coordinata Y della freccia più metà dell'altezza della freccia meno l'altezza del cerchio. In entrambi i casi, è necessario prendere in considerazione anche i fattori di scalabilità associati alla freccia, perché influiscono sulla larghezza e sull'altezza di rendering 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 esempio di codice presentations.batchUpdate mostra come utilizzare il metodo UpdatePageElementTransformRequest per tradurre l'elemento di pagina di esempio a forma di freccia in due modi diversi.

La prima richiesta del batch sposta la freccia verso (X,Y) = (2000000, 150000) Coordinata EMU (utilizzando una traslazione assoluta applyMode). La seconda richiesta nel batch sposta la freccia da lì, questa volta 40.000 EMU a destra e 35.000 EMU per evitare la traslazione delle dimensioni relative verso l'alto 1applyMode.

Dopo aver eseguito entrambe le richieste, l'angolo superiore sinistro della freccia si trova in corrispondenza della 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 presentations.batchUpdate mostra come utilizzare il metodo UpdatePageElementTransformRequest per riflettere l'elemento di pagina di esempio a forma di freccia orizzontalmente lungo il suo centro, senza modificarne la posizione sulla pagina o il ridimensionamento.

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

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

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

Per le trasformazioni della traslazione, il centro della forma della freccia viene spostato da e verso l'origine. I valori dei parametri vengono 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 attorno al centro

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

Per farlo, usa una trasformazione della rotazione di base nel frame di riferimento dell'elemento. Per chiarezza, lo spostamento e la rotazione del frame di riferimento vengono mostrate con tre chiamate separate al metodo UpdatePageElementTransformRequest, ma è più efficiente precalcolare il prodotto di queste matrici di trasformazione e applicare il prodotto come una singola richiesta

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

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