Trasformare le operazioni

L'API Presentazioni Google 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 drizzate e preservando punti e linee parallele. Si tratta delle cosiddette trasformazioni affine. Gli esempi riportati di seguito mostrano alcune operazioni comuni di trasformazione degli elementi della pagina che utilizzano 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 fornire l'ID oggetto pagina. Puoi recuperare il valore dall'URL o utilizzando una richiesta di lettura dell'API.
  • PAGE_ELEMENT_ID: indica dove fornire 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 sono presentati come richieste HTTP per essere indipendenti dalla lingua. Per scoprire come implementare un aggiornamento collettivo in lingue diverse utilizzando le librerie client dell'API Google, consulta Aggiungere forme e testo.

Forma della freccia di esempio

Per gli esempi riportati di seguito, supponiamo che esista un elemento di pagina con forma a freccia di esempio con le seguenti dimensioni e dati di trasformazione (che è possibile trovare con una richiesta del metodo presentations.pages.get). La forma di esempio utilizza la misura unit EMU (unità di misura imperiale 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 presentations.batchUpdate codice di esempio mostra come utilizzare il metodo CreateShapeRequest per creare nuove forme nelle posizioni corrette e allineate con la 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 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 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 largo 40 punti con la stessa linea di centro orizzontale della freccia di esempio, ma posizionato a 100 punti (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 alla linea mediana per il nuovo cerchio richiede di prendere in considerazione l'altezza sia della freccia sia 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, 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 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 alle coordinate 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 a destra e 35.000 EMU verso l'alto (utilizzando una traslazione relativa applyMode). Le matrici di trasformazione1 utilizzate vengono costruite per evitare di alterare le dimensioni e l'orientamento dell'elemento.

Dopo aver eseguito entrambe le richieste, l'angolo in alto a sinistra della freccia si trova alle coordinate 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 la scala.

Ciò viene fatto utilizzando una trasformazione di riflessione di base nel frame di riferimento dell'elemento. Per maggiore chiarezza, lo spostamento e la riflessione 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 una singola richiesta.

Per le trasformazioni di traduzione, il centro della forma a freccia viene spostato verso e dall'origine. Per maggiore chiarezza, i valori dei parametri vengono espressi come calcoli.

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 codice di esempio mostra come utilizzare il metodo UpdatePageElementTransformRequest per ridimensionare l'elemento della pagina forma a freccia di esempio in modo che sia più largo del 50% e abbia solo l'80% dell'altezza corrente, mantenendo il centro della freccia nella stessa posizione e mantenendone l'orientamento.

Ciò viene fatto utilizzando una trasformazione di scala di base nel frame di riferimento dell'elemento. Per maggiore chiarezza, lo spostamento e la scala 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 poi applicarlo come una singola richiesta.

Per le trasformazioni di traduzione, il centro della forma a freccia viene spostato verso e dall'origine. Per maggiore chiarezza, i valori dei parametri vengono espressi come calcoli.

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 suo centro

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

Ciò viene fatto utilizzando una trasformazione di rotazione di base nel frame di riferimento dell'elemento. Per maggiore 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 una singola richiesta.

Per le trasformazioni di traduzione, il centro della forma a freccia viene spostato verso e dall'origine. Per maggiore chiarezza, i valori dei parametri vengono espressi come calcoli.

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