שינוי פעולות

Google Slides API מאפשר לשנות את המיקום, הגודל והכיוון של PageElement (תיבות טקסט, תמונות, טבלאות וצורות בסיסיות) בדף, תוך שמירה על קווים ישרים ושימור הנקודות והקווים המקבילים. מדובר בטרנספורמציות בעלות אפקט של זיקה. בדוגמאות כאן מוצגות כמה פעולות נפוצות של המרה של רכיבי דף באמצעות method presentations.batchUpdate.

בדוגמאות הבאות נעשה שימוש במשתנים הבאים:

  • PRESENTATION_ID – מציין איפה מספקים את מזהה המצגת. אפשר לאתר את הערך של המזהה הזה בכתובת ה-URL של המצגת.
  • PAGE_ID – מציין איפה מספקים את מזהה האובייקט של הדף. אפשר לאחזר את הערך מכתובת ה-URL או באמצעות בקשת קריאה ל-API.
  • PAGE_ELEMENT_ID – מציין איפה מספקים את מזהה האובייקט של רכיב הדף. תוכלו לציין את המזהה הזה לרכיבים שאתם יוצרים (עם הגבלות מסוימות), או לאפשר ל-Slides ליצור מזהה כזה באופן אוטומטי. אפשר לאחזר מזהי רכיב באמצעות בקשת קריאה של API.

הדוגמאות האלה מוצגות כבקשות HTTP כדי לא לשנות את השפה. במאמר הוספת צורות וטקסט מוסבר איך להטמיע עדכון בכמות גדולה בשפות שונות באמצעות ספריות הלקוח של Google API.

צורת חץ לדוגמה

בדוגמאות הבאות, נניח שיש רכיב לדוגמה של דף צורת חץ עם נתוני הגודל והטרנספורמציה הבאים (ניתן למצוא אותו באמצעות בקשת method presentations.pages.get). בצורה לדוגמה נעשה שימוש ביחידות המידה unit EMU (יחידת מידה מטרית באנגלית) ו-pt (נקודה).

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

יישור רכיב עם רכיב אחר

דוגמת הקוד הבאה ממחישה כיצד להשתמש ב-method presentations.batchUpdate כדי ליצור צורות חדשות במיקומים הנכונים, תוך יישור עם צורת החץ לדוגמה בדף.CreateShapeRequest בשני המקרים, יש לחשב את הקואורדינטות של ה-X וה-Y בפינה השמאלית העליונה של הצורה החדשה.

הבקשה הראשונה יוצרת מלבן בגודל 100 על 50 נקודות שעובר לגבול השמאלי של צורת החץ, אך הוא ממוקם 50 נקודות (50 * 12,700 = 635,000 EMU) מתחת לקצה העליון של החץ. קואורדינטת ה-X של המלבן החדש צריכה להיות זהה לקואורדינטת ה-X של החץ כדי לשמור על הגבול השמאלי שלו. קואורדינטת ה-Y זהה לקואורדינטת ה-Y של החץ בתוספת 50 נק', כי המרחק נמדד מהחלק העליון של החץ. הקואורדינטות של המלבן הן:

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

הבקשה השנייה יוצרת מעגל רחב של 40 נקודות עם אותו קו מרכזי אופקי כמו החץ לדוגמה, אבל המיקום של 100 נקודות (1,270,000 EMU) מימין לקצה הימני של החץ. קואורדינטת ה-X של המעגל היא הסכום של קואורדינטת ה-X של החץ, רוחב החץ ו-100 pt. כדי לאכוף יישור עם קו מרכז עבור המעגל החדש, צריך להביא בחשבון גם את הגובה של החץ וגם את הגובה של המעגל. קואורדינטת ה-Y של המעגל היא קואורדינטת Y של החץ ועוד חצי מגובה החץ פחות חצי מגובה המעגל. בשני המקרים צריך להתחשב בגורמי קנה המידה המשויכים לחץ, כי הם משפיעים על הרוחב והגובה של החץ שעברו רינדור. לכן הקואורדינטות של המעגל הן:

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

לפניכם פרוטוקול הבקשה ליישור רכיב עם רכיב אחר:

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

העברת רכיב

דוגמת הקוד הבאה ממחישה כיצד להשתמש ב-method UpdatePageElementTransformRequest כדי לתרגם את רכיב הדף דוגמת צורת החץ בשתי דרכים שונות.presentations.batchUpdate

הבקשה הראשונה באצווה מעבירה את החץ אל קואורדינטת ה-(X,Y) = (2000000, 150000) = (2000000, 150000) (באמצעות תרגום מוחלט applyMode). הבקשה השנייה באצווה מעבירה את החץ משם, והפעם 40,000 EMU (EMU) ימינה ו-35,000 EMU, ו-35,000 שינוי הכיוון (שהמערכת משתמשת בגודלי EMU כלפי מעלה, ו-35,000 הופכת את שינוי הכיוון של EMU כלפי מעלה).applyMode

לאחר ביצוע שתי הבקשות, הפינה השמאלית העליונה של החץ נמצאת בקואורדינטת ה-EMU (X,Y) = (2040000, 115000).

זה פרוטוקול הבקשה להעברת רכיב:

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

שיקוף רכיב

דוגמת הקוד הבאה ממחישה כיצד להשתמש ב-method UpdatePageElementTransformRequest כדי לשקף את רכיב הדף דוגמה בצורת חץ לרוחב במרכזו, בלי לשנות את המיקום שלו בדף או לשנות את קנה המידה שלו.presentations.batchUpdate

לשם כך משתמשים בטרנספורמציה בסיסית של השתקפות במסגרת העזר של הרכיב. לשם הבהרה, שינוי הפריים של קובץ העזר וההשתקפות מוצגים בשלוש קריאות נפרדות ל-method UpdatePageElementTransformRequest, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ולאחר מכן להחיל את המוצר כבקשה יחידה.

בטרנספורמציות תרגום, מרכז צורת החץ מועבר למקור וממנה. ערכי הפרמטרים מבוטאים כחישובים לצורך הבהרה.

זה פרוטוקול הבקשה שמשקף רכיב:

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

שינוי גודל של רכיב

דוגמת הקוד הבאה ממחישה כיצד להשתמש ב-method UpdatePageElementTransformRequest כדי שרכיב הדף צורת החץ לדוגמה יהיה רחב יותר ב-50%, עם רק 80% מהגובה הנוכחי, ובמקביל להשאיר את מרכז החץ באותו מיקום ולשמור על הכיוון שלו.presentations.batchUpdate

לשם כך משתמשים בטרנספורמציה בסיסית של קנה מידה במסגרת העזר של הרכיב. לשם הבהרה, שינוי הפריים של קובץ העזר וקנה המידה מוצגים בשלוש קריאות נפרדות ל-method UpdatePageElementTransformRequest, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ולאחר מכן להחיל את המוצר כבקשה יחידה.

בטרנספורמציות תרגום, מרכז צורת החץ מועבר למקור וממנה. ערכי הפרמטרים מבוטאים כחישובים לצורך הבהרה.

לפניכם פרוטוקול הבקשה לשינוי גודל של רכיב:

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

סיבוב של רכיב סביב המרכז שלו

דוגמת הקוד הבאה ממחישה איך משתמשים בשיטה UpdatePageElementTransformRequest כדי לסובב את רכיב הדף בצורת החץ לדוגמה ב-35 מעלות נגד כיוון השעון, תוך שמירה על מרכז החץ באותו מיקום ושמירה על הגודל שלו.presentations.batchUpdate

לשם כך משתמשים בטרנספורמציה של סיבוב בסיסי במסגרת ההפניה של הרכיב. לשם הבהרה, שינוי הפריים של קובץ העזר והסיבוב מוצגים עם שלוש קריאות נפרדות ל-method UpdatePageElementTransformRequest, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ולאחר מכן להחיל את המוצר כבקשה יחידה

בטרנספורמציות תרגום, מרכז צורת החץ מועבר למקור וממנה. ערכי הפרמטרים מבוטאים כחישובים לצורך הבהרה.

לפניכם פרוטוקול הבקשה לסיבוב רכיב לגבי המרכז שלו:

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