שינוי פעולות

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

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

  • PRESENTATION_ID – מציין איפה מספקים את מזהה המצגת. אפשר לגלות את הערך של המזהה הזה בכתובת ה-URL של המצגת.
  • PAGE_ID – מציין איפה מספקים את מזהה האובייקט של הדף. אפשר לאחזר את הערך הזה מכתובת ה-URL או באמצעות בקשת קריאה ל-API.
  • PAGE_ELEMENT_ID – מציין איפה מספקים את מזהה האובייקט של רכיב הדף. תוכלו לציין את המזהה הזה לרכיבים שאתם יוצרים (עם הגבלות מסוימות) או לאפשר ל-Slides API ליצור אותו באופן אוטומטי. אפשר לאחזר את מזהי הרכיבים באמצעות בקשת קריאה ל-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"
  }
}

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

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

הבקשה הראשונה יוצרת מלבן בגודל 100 על 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 נק'. כדי לאכוף יישור קו אמצע למעגל החדש, צריך להביא בחשבון גם את הגובה של החץ וגם של המעגל. קואורדינטת ה-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"
          }
        }
      }
    }
  ]
}

העברת רכיב

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

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

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

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

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

השתקפות של יסוד

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

כדי לעשות את זה, משתמשים בטרנספורמציית השתקפות בסיסית במסגרת העזר של האלמנט. לשם הבהרה, שינוי הפריים וההשתקפות מוצגים באמצעות שלוש קריאות נפרדות ל-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"
        }
      }
    }
  ]
}

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

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

כדי לעשות זאת, משתמשים בטרנספורמציה בסיסית של קנה מידה במסגרת העזר של הרכיב. לשם הבהרה, שינוי הפריים וההתאמה לעומס מוצגים באמצעות שלוש קריאות נפרדות ל-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"
        }
      }
    }
  ]
}

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

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

לשם כך, משתמשים בטרנספורמציה של רוטציה בסיסית במסגרת העזר של האלמנט. לשם הבהרה, שינוי הפריים והסיבוב מוצגים באמצעות שלוש קריאות נפרדות ל-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"
        }
      }
    }
  ]
}