Transformationsvorgänge

Mit der Google Slides API können Sie Position, Größe und Ausrichtung eines Elements ändern: PageElement (Textfelder, Bilder, Tabellen und Grundformen) auf einer Seite, während die Linien gerade und erhaltende Punkte und parallele Linien. Diese werden als affine Transformationen. Die folgenden Beispiele zeigen einige gängige Transformationen für Seitenelemente. Operationen mithilfe der presentations.batchUpdate .

In diesen Beispielen werden die folgenden Variablen verwendet:

  • PRESENTATION_ID: Gibt an, wo Sie die Präsentation ID fest. Sie können finden Sie den Wert für diese ID in der Präsentations-URL.
  • PAGE_ID: Gibt an, wo Sie das Seitenobjekt bereitstellen. ID fest. Sie können die Daten abrufen, den Wert hierfür aus der URL oder mithilfe einer API-Leseanfrage.
  • PAGE_ELEMENT_ID: Gibt an, wo Sie die Seite bereitstellen. Objekt-ID des Elements. Ich kann diese ID für von Ihnen erstellte Elemente angeben (mit einigen Einschränkungen) oder über die Slides API automatisch eine erstellen lassen. Element-IDs kann über eine API-Leseanfrage abgerufen werden.

Diese Beispiele werden als HTTP-Anfragen dargestellt, damit sie sprachneutral sind. Weitere Informationen Wie eine Batch-Aktualisierung in verschiedenen Sprachen mithilfe der Google API implementiert wird finden Sie unter Formen und Text.

Beispiel für Pfeilform

In den folgenden Beispielen wird davon ausgegangen, dass es eine Seite mit Beispielpfeilen gibt. mit den folgenden Größen- und Transformationsdaten (die mit einem presentations.pages.get Methodenanfrage). Für die Beispielform wird die Messung unit EMU (englische Einheit) und pt (Punkt).

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

Ein Element an einem anderen ausrichten

Die folgenden presentations.batchUpdate wird in einem Codebeispiel gezeigt, wie Sie CreateShapeRequest um neue Formen an den richtigen Positionen zu erstellen, die mit dem Beispiel für einen Pfeil auf der Seite. In beiden Fällen sind X und Y müssen die Koordinaten der oberen linken Ecke der neuen Form berechnet werden.

In der ersten Anfrage wird ein Rechteck mit einer Größe von 100 x 50 pt erstellt, das linksbündig ausgerichtet ist. Rahmen der Pfeilform, aber 50 pt (50 x 12.700 = 635.000 EMU) unterhalb des oberen Rands des Pfeils. Die X-Koordinate des neuen Rechtecks sollte die entspricht der X-Koordinate des Pfeils, damit seine linke Rahmenlinie ausgerichtet bleibt. Das Y ist mit der Y-Koordinate des Pfeils plus 50 pt identisch, da die Die Entfernung wird vom oberen Rand des Pfeils aus gemessen. Die Koordinaten des Rechtecks sind daher:

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

Die zweite Anforderung erstellt einen 40 pt breiten Kreis mit der gleichen horizontalen als Beispielpfeil verwendet, aber 100 pt (1.270.000 EMU) bis zum rechts von der rechten Kante des Pfeils. Die x-Koordinate des Kreises ist die Summe aus die X-Koordinate, die Pfeilbreite und 100 pt. Mittellinie erzwingen muss bei der Ausrichtung des neuen Kreises die Höhe der Pfeil und Kreis. Die Y-Koordinate des Kreises ist die Y-Koordinate des Pfeils. plus halben Pfeilhöhe minus halber Kreishöhe. In beiden Fällen Skalierungsfaktoren, die mit dem Pfeil verknüpft sind, müssen ebenfalls berücksichtigt werden. da sie sich auf die Breite und Höhe des Pfeils auswirken. Die Koordinaten sind daher:

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

Das folgende Anfrageprotokoll dient zum Ausrichten eines Elements an ein anderes:

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

Elemente verschieben

Die folgenden presentations.batchUpdate wird in einem Codebeispiel gezeigt, wie Sie UpdatePageElementTransformRequest um das Seitenelement mit Beispielpfeilform in auf zwei verschiedene Arten.

Bei der ersten Anfrage im Batch wird der Pfeil nach unten verschoben: (X,Y) = (2000000, 150000) EMU-Koordinate (mithilfe einer absoluten Übersetzung applyMode) Die zweite Anfrage im Batch verschiebt den Pfeil von dort, diesmal 40.000 EMU nach rechts und 35.000 EMU nach oben (mit einer relativen Übersetzung applyMode). Die verwendeten Transformation1-Matrizen sind so konzipiert, dass Größe und Ausrichtung des Elements nicht geändert werden.

Nachdem beide Anfragen ausgeführt wurden, befindet sich die linke obere Ecke des Pfeils bei (X,Y) = (2040000, 115000) EMU-Koordinate.

Das folgende Anfrageprotokoll zum Verschieben von Elementen:

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

Ein Element reflektieren

Die folgenden presentations.batchUpdate wird in einem Codebeispiel gezeigt, wie Sie UpdatePageElementTransformRequest Methode zur Darstellung des Seitenelements Beispiel für Pfeilform horizontal an der Mitte entlang, ohne die Position auf der Seite oder Skalierung.

Dies geschieht mithilfe einer grundlegenden Reflexion. transform in der Referenz des Elements Frame dargestellt wird. Zur Klarstellung sei erwähnt, Verschiebung und Reflexion des Referenzrahmens werden mit drei separaten Aufrufen der UpdatePageElementTransformRequest-Methode, aber es ist effizienter, das Produkt dieser Transformation im Voraus zu berechnen. und das Produkt dann in einer einzigen Anfrage anwenden.

Bei der Umwandlung von translation wird der Parameter Mitte des Pfeils in Richtung Startpunkt und umgekehrt. Die Parameterwerte werden zur Verdeutlichung als Berechnungen dargestellt.

Das folgende Anfrageprotokoll spiegelt ein -Element wider:

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

Größe eines Elements ändern

Die folgenden presentations.batchUpdate wird in einem Codebeispiel gezeigt, wie Sie UpdatePageElementTransformRequest um das Seitenelement mit Beispielpfeilform auf 50 % zu skalieren breiter und nur 80% seiner aktuellen Höhe haben, während der Mittelpunkt des Pfeils in derselben Position und beibehalten der Ausrichtung.

Dies erfolgt mithilfe einer einfachen Skalierung transform in der Referenz des Elements Frame dargestellt wird. Zur Klarstellung sei erwähnt, Verschiebung und Skalierung des Referenzframes werden mit drei separaten Aufrufen der UpdatePageElementTransformRequest-Methode, aber es ist effizienter, das Produkt dieser Transformation im Voraus zu berechnen. und das Produkt dann in einer einzigen Anfrage anwenden.

Bei der Umwandlung von translation wird der Parameter Mitte des Pfeils in Richtung Startpunkt und umgekehrt. Die Parameterwerte werden zur Verdeutlichung als Berechnungen dargestellt.

Mit dem folgenden Anfrageprotokoll lässt sich die Größe eines Elements ändern:

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

Element um seinen Mittelpunkt drehen

Die folgenden presentations.batchUpdate wird in einem Codebeispiel gezeigt, wie Sie UpdatePageElementTransformRequest um das Seitenelement Beispiel eines Pfeils in 35 Grad zu drehen Grad gegen den Uhrzeigersinn, während die Mitte des Pfeils an derselben Position bleibt und ihre Größe beibehalten.

Dies geschieht mithilfe einer grundlegenden Rotation transform in der Referenz des Elements Frame dargestellt wird. Zur Klarstellung sei erwähnt, Die Verschiebung und Drehung des Referenzframes werden mit drei separaten Aufrufen der UpdatePageElementTransformRequest-Methode, aber es ist effizienter, das Produkt dieser Transformation im Voraus zu berechnen. und das Produkt dann als einzelne Anfrage anwenden,

Bei der Umwandlung von translation wird der Parameter Mitte des Pfeils in Richtung Startpunkt und umgekehrt. Die Parameterwerte werden zur Verdeutlichung als Berechnungen dargestellt.

Das folgende Anfrageprotokoll dient zum Drehen eines Elements um seinen Mittelpunkt:

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