במדריך הזה מוסבר איך משנים את הגודל והמיקום של רכיבי דף באמצעות העתקות אפיניות עם Google Slides API. למידע על טרנספורמציות אפיניות, אפשר לקרוא את המאמר טרנספורמציות ורכיבי דף.
שינוי הצורה של אלמנטים
Slides API מאפשר לכם לשנות את המיקום והגודל של רכיבים בדף. כדי לעשות את זה, קודם קובעים איזה סוג של טרנספורמציה צריך להחיל, ואז מחילים את הטרנספורמציה באמצעות השיטה presentations.batchUpdate() שמכילה רכיב אחד או יותר של UpdatePageElementTransformRequest.
אפשר לבצע טרנספורמציות באמצעות ApplyMode:
ABSOLUTEtransforms replace the element's existing transformation matrix. כל הפרמטרים שלא נכללים בבקשת העדכון של הטרנספורמציה מוגדרים לאפס.טרנספורמציות
RELATIVEמוכפלות במטריצת הטרנספורמציה הקיימת של הרכיב (סדר הכפל חשוב):
טרנספורמציות יחסיות מזיזות או משנות את גודל הרכיב בדף מהמקום שבו הוא נמצא. לדוגמה, הזזה של צורה ב-100 נקודות שמאלה או סיבוב שלה ב-40 מעלות. טרנספורמציות אבסולוטיות מבטלות את המידע הקיים על המיקום והגודל. לדוגמה, העברת צורה למרכז הדף או שינוי הגודל שלה לרוחב מסוים.
בדרך כלל אפשר לבטא טרנספורמציות מורכבות כרצף של טרנספורמציות פשוטות יותר. חישוב מראש של טרנספורמציה – שילוב של כמה טרנספורמציות באמצעות כפל מטריצות – יכול לעתים קרובות להפחית את התקורה.
כדי לבצע פעולות מסוימות, צריך לדעת מהם פרמטרי השינוי הקיימים של רכיב. אם אין לכם את הערכים האלה, תוכלו לאחזר אותם באמצעות השיטה presentations.pages.get().
תרגום
הזזה היא פעולה של העברת רכיב בדף למיקום חדש באותו דף. בתרגומים מוחלטים, הרכיב מועבר לנקודה ספציפית, ואילו בתרגומים יחסיים, הרכיב מועבר למרחק ספציפי.
מטריצת טרנספורמציה בסיסית של תרגום היא מהצורה:
כשמשתמשים ב-UpdatePageElementTransformRequest כדי לתרגם רכיב (בלי לשנות את הגודל, הגזירה או הכיוון שלו), אפשר להשתמש באחת מהמבנים הבאים של AffineTransform:
// Absolute translation: { 'transform': { 'scaleX': current scaleX value, 'scaleY': current scaleY value, 'shearX': current shearX value, 'shearY': current shearY value, 'translateX': X coordinate to move to, 'translateY': Y coordinate to move to, 'unit': 'EMU' // or 'PT' } } // Relative translation (scaling must also be provided to avoid a matrix multiplication error): { 'transform': { 'scaleX': 1, 'scaleY': 1, 'translateX': X coordinate to move by, 'translateY': Y coordinate to move by, 'unit': 'EMU' // or 'PT' } }
קנה מידה
שינוי גודל הוא פעולה של מתיחה או כיווץ של רכיב לאורך המימד X או Y כדי לשנות את הגודל שלו. מטריצת שינוי קנה מידה בסיסית היא מהצורה:
אפשר להשתמש בטופס המטריצה הזה ישירות כRELATIVEטרנספורמציה לשינוי הגודל של רכיב, אבל זה יכול להשפיע גם על הגזירה והתרגום של הרכיב.
כדי לשנות את גודל הרכיב בלי להשפיע על הגזירה או על ההזזה שלו, עוברים למערכת הייחוס של הרכיב.
סיבוב
טרנספורמציות של סיבוב מסובבות רכיב בדף סביב נקודה, באמצעות פרמטרים של שינוי גודל וגזירה. מטריצת הטרנספורמציה הבסיסית של הסיבוב היא מהצורה הבאה, כאשר זווית הסיבוב (ברדיאנים) נמדדת מציר ה-X, בתנועה נגד כיוון השעון:
בדומה לשינוי גודל, אפשר להשתמש ישירות בטופס המטריצה הזה כRELATIVEטרנספורמציה
לסיבוב אלמנט, אבל זה גורם לסיבוב האלמנט סביב נקודת המוצא של הדף. כדי לסובב את הרכיב סביב המרכז שלו או סביב נקודה אחרת, מעבירים את המיקוד למסגרת ההפניה של הרכיב.
הרהורים
השתקפות משקפת רכיב לאורך קו או ציר מסוימים. מטריצת ההשתקפות הבסיסית של ציר ה-x וציר ה-y היא מהסוגים הבאים:
בדומה לשינוי גודל, אפשר להשתמש בטופס המטריצה הזה ישירות כRELATIVEטרנספורמציה
כדי לשקף רכיב, אבל זה גורם גם לתרגום של הרכיב. כדי להציג את הרכיב בלי תרגום, מזיזים אותו למסגרת ההפניה של הרכיב.
מסגרות הפניה לרכיבים
החלת טרנספורמציה בסיסית של שינוי גודל, סיבוב או שיקוף ישירות על רכיב בדף יוצרת טרנספורמציה במערכת הייחוס של הדף. לדוגמה, סיבוב בסיסי מסובב את הרכיב סביב נקודת המוצא של הדף (הפינה השמאלית העליונה). עם זאת, אפשר לפעול במסגרת ההפניה של הרכיב, למשל כדי לסובב רכיב סביב נקודת המרכז שלו.
כדי לבצע טרנספורמציה של רכיב בתוך מסגרת ההתייחסות שלו, צריך להקיף אותו בשתי תרגומים אחרים: תרגום קודם T1 שמזיז את מרכז הרכיב לנקודת המוצא של הדף, ותרגום עוקב T2 שמזיז את הרכיב בחזרה למיקום המקורי שלו. אפשר לבטא את הפעולה המלאה כמכפלת מטריצות:
אפשר גם לעבור למסגרות ייחוס אחרות, על ידי תרגום נקודות שונות למקור במקום זאת. הנקודות האלה הופכות למרכז של מסגרת ההתייחסות החדשה.
אפשר לבצע כל אחת מהטרנספורמציות האלה בנפרד כבקשות טרנספורמציה רציפות של RELATIVE. מומלץ לחשב מראש את A'
למעלה באמצעות כפל מטריצות ולהחיל את התוצאה כטרנספורמציה אחת של ABSOLUTE. אפשרות אחרת היא לחשב מראש את T2 * B * T1 ולהחיל אותו כשינוי RELATIVE יחיד. שתי השיטות האלה יעילות יותר מבחינת פעולות API מאשר שליחת בקשות ההמרה בנפרד.
מגבלות
חלק משדות הגודל והמיקום לא תואמים לחלק מסוגי הרכיבים בדף. בטבלה הבאה מפורטת התאימות של רכיבי דף מסוימים לשדות של גודל ומיקום:
| שדה | צורה | וידאו | טבלה |
|---|---|---|---|
| תרגום | ✔ | ✔ | ✔ |
| שינוי גודל | ✔ | ✔ | לא** |
| Shear | ✔ | לא | לא |
כדי לעדכן את המאפיינים של השורה והעמודה בטבלה, משתמשים בתגים
UpdateTableRowPropertiesRequest
ו-
UpdateTableColumnPropertiesRequest.
אם יש גזירה של רכיב הדף, יכול להיות שכל השדות שקשורים לגודל ולמיקום יחזירו תוצאות לא צפויות. יכול להיות שיהיו שינויים בכל המגבלות. מידע עדכני זמין במאמר בנושא Google Slides API.
ערכים שעברו רפקטורינג
כשיוצרים רכיב בדף, אפשר לציין גודל וטרנספורמציה שיוצרים תוצאה ויזואלית מסוימת. עם זאת, יכול להיות ש-Slides API יחליף את הערכים שסיפקתם בערכים אחרים שיוצרים את אותו מראה חזותי. באופן כללי, אם אתם מציינים גודל באמצעות ה-API, לא מובטח שתקבלו בחזרה את אותו גודל. עם זאת, אם לוקחים בחשבון את השינוי, אמורים לקבל את אותן תוצאות.