באמצעות Google Slides API אפשר לשנות את המיקום, הגודל והכיוון של PageElement
(תיבות טקסט, תמונות, טבלאות וצורות בסיסיות) בדף, תוך שמירה על קווים ישרים ועל נקודות וקווים מקבילים. הן נקראות טרנספורמציות אליפטיות. בדוגמאות הבאות מוצגות כמה פעולות נפוצות של טרנספורמציה של רכיבי דף באמצעות השיטה presentations.batchUpdate
.
בדוגמאות האלה נעשה שימוש במשתנים הבאים:
- PRESENTATION_ID – כאן מציינים את מזהה המצגת. אפשר למצוא את הערך של המזהה הזה מכתובת ה-URL של המצגת.
- PAGE_ID – מציין איפה מציינים את מזהה אובייקט הדף. אפשר לאחזר את הערך הזה מכתובת ה-URL או באמצעות בקשת קריאה ל-API.
- PAGE_ELEMENT_ID – מציין את המיקום שבו מציינים את מזהה האובייקט של רכיב הדף. אפשר לציין את המזהה הזה לאלמנטים שאתם יוצרים (עם מגבלות מסוימות) או לאפשר ל-Slides API ליצור אותו באופן אוטומטי. אפשר לאחזר את מזהי הרכיבים באמצעות בקשת קריאה ל-API.
הדוגמאות האלה מוצגות כבקשות HTTP כדי שיהיו ניטרליות מבחינת שפה. במאמר הוספת צורות וטקסט מוסבר איך מטמיעים עדכון באצווה בשפות שונות באמצעות ספריות הלקוח של Google API.
דוגמה לצורת חץ
בדוגמאות הבאות נניח שיש רכיב דף לדוגמה בצורת חץ עם נתוני הגודל והטרנספורמציה הבאים (אפשר למצוא אותם בבקשה של שיטת 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 נקודות (pt) שמיושר לקצה הימני של צורת החץ, אבל ממוקם 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
מוסבר איך להשתמש בשיטה UpdatePageElementTransformRequest
כדי לתרגם את רכיב הדף example arrow shape בשתי דרכים שונות.
הבקשה הראשונה בקבוצה מעבירה את החץ לקואורדינטה EMU (X,Y) = (2000000, 150000) (באמצעות תרגום יחסי
applyMode
). הבקשה השנייה בקבוצה מעבירה את החץ משם, הפעם 40,000 EMU שמאלה ו-35,000 EMU למעלה (באמצעות תרגום יחסי applyMode
). המטריצות של transformation1 שבהן נעשה שימוש נוצרות כדי למנוע שינוי בגודל ובכיוון של הרכיב.
אחרי ביצוע שתי הבקשות, הפינה הימנית העליונה של החץ נמצאת בקואורדינטה (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
מוסבר איך להשתמש בשיטה UpdatePageElementTransformRequest
כדי לשקף את רכיב הדף דוגמת החץ אופקית לאורך מרכזו, בלי לשנות את המיקום שלו בדף או את הגודל שלו.
כדי לעשות זאת, משתמשים בטרנספורמציה בסיסית של השתקפות במסגרת העזר של הרכיב. לצורך הבהרה, ההזזה וההשתקפות של מסגרת העזר מוצגות בשלוש קריאות נפרדות ל-method UpdatePageElementTransformRequest
, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ואז להחיל את המכפלה הזו כבקשה אחת.
בטרנספורמציות translation, מרכז הצורה של החץ מועבר אל המקור וממנו. ערכי הפרמטרים מפורטים כחישובים לשם הבהירות.
זהו פרוטוקול הבקשה לשיקוף רכיב:
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% ויהיה רק 80% מהגובה הנוכחי שלו, תוך שמירה על מיקום מרכז החץ ועל הכיוון שלו.
כדי לעשות זאת, משתמשים בטרנספורמציה בסיסית של שינוי קנה מידה בפריים העזר של הרכיב. לצורך הבהרה, ההזזה והשינוי של מסגרת העזר מוצגים בשלוש קריאות נפרדות ל-method UpdatePageElementTransformRequest
, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ואז להחיל את המכפלה הזו כבקשה אחת.
בטרנספורמציות translation, מרכז הצורה של החץ מועבר אל המקור וממנו. ערכי הפרמטרים מפורטים כחישובים לשם הבהירות.
זהו פרוטוקול הבקשה לשינוי הגודל של אלמנט:
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
מוסבר איך להשתמש ב-method UpdatePageElementTransformRequest
כדי לסובב את רכיב הדף דוגמת החץ ב-35 מעלות נגד כיוון השעון, תוך שמירה על מיקום מרכז החץ ועל הגודל שלו.
כדי לעשות זאת, משתמשים בטרנספורמציה בסיסית של סיבוב במסגרת העזר של הרכיב. לצורך הבהרה, ההזזה והסיבוב של מסגרת העזר מוצגים בשלושה קריאות נפרדות ל-method UpdatePageElementTransformRequest
, אבל יעיל יותר לחשב מראש את המכפלה של מטריצות הטרנספורמציה האלה ואז להחיל את המכפלה הזו כבקשה אחת.
בטרנספורמציות translation, מרכז הצורה של החץ מועבר אל המקור וממנו. ערכי הפרמטרים מפורטים כחישובים לשם הבהירות.
זהו פרוטוקול הבקשה לסיבוב רכיב סביב מרכזו:
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" } } } ] }