שינוי גודל ומיקום הרכיבים בדף

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

טרנספורמציה של אלמנטים

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

ניתן לבצע טרנספורמציות באחת משתי השיטות הבאות: applyModes:

  • ABSOLUTE מבצעת טרנספורמציה להחליף את הטרנספורמציה הקיימת של הרכיב במטריצה. כל הפרמטרים שמשמיטים מבקשת עדכון הטרנספורמציה מוגדרים אפס.

  • התמרות של RELATIVE מוכפלות ברכיב הקיים מטריצת הטרנספורמציה (סדר הכפל חשוב):

$$A' = BA$$

טרנספורמציות יחסיות מעבירות או מגדילות את קנה המידה של רכיב הדף מהמקום שבו הוא נמצא כרגע; לדוגמה, הזזה של צורה 100 נקודות שמאלה או סיבוב של 40 מעלות. טרנספורמציות מוחלטות מוחקות מידע קיים על מיקום וקנה מידה; עבור לדוגמה, העברת צורה למרכז הדף או שינוי קנה המידה שלה רוחב ספציפי.

בדרך כלל אפשר לבטא טרנספורמציות מורכבות כרצף של טרנספורמציות פשוטות יותר. חישוב מראש של טרנספורמציה – שילוב של טרנספורמציות מרובות באמצעות הכפלת מטריצות - יכול בדרך כלל לצמצם את התקורה.

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

תרגום

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

מטריצת טרנספורמציה בסיסית של תרגום נראית כך:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

כשמשתמשים ב-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 כדי לשנות את הגודל שלו. מטריצה בסיסית של טרנספורמציה לעומס (scaling) נראית כך:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

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

סיבוב

התכונה 'סיבוב' מבצעת טרנספורמציה של רכיב דף מסביב לנקודה, באמצעות שינוי קנה המידה ו של גזירה. מטריצת הטרנספורמציה הבסיסית של הסיבוב מופיעה בצורה הבאה, כאשר זווית הסיבוב (ברדיאנים) נמדדת מציר ה-X, נגד כיוון השעון:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

בדומה להתאמה לעומס (scaling), ניתן להשתמש בצורת המטריצה הזו ישירות בתור RELATIVE הופכים כדי לסובב אלמנט, אבל הם גורמים לסיבוב של הרכיב לגבי מקור הדף. כדי לסובב את הרכיב על המרכז שלו או על לנקודה אחרת, Shift למסגרת העזר.

איך המרגש?

השתקפות משקפת רכיב על קו או ציר מסוים. התוכנית הבסיסית מטריצת ההשתקפות בציר ה-x וציר ה-Y מופיעות בצורות הבאות:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

בדומה להתאמה לעומס (scaling), ניתן להשתמש בצורת המטריצה הזו ישירות בתור RELATIVE טרנספורמציה כדי לשקף רכיב, אבל זה גורם לאלמנט לתרגם נו. כדי לשקף את הרכיב ללא תרגום, Shift למסגרת העזר שלו.

מסגרות עזר לרכיבים

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

כדי לבצע טרנספורמציה של רכיב בתוך מסגרת העזר שלו, תוחמים אותו בין תרגומים אחרים: תרגום קודם T1 שמעביר את מרכז הרכיבים אל מקור הדף, והתרגום הבא, T2, שמעביר את הרכיב בחזרה למיקום המקורי שלו. הפעולה המלאה יכולה לבוא לידי ביטוי כמטריצה product:

$$A' = T2 \times B \times T1 \times A$$

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

אפשר לבצע כל אחת מהטרנספורמציות האלה בנפרד בקשות טרנספורמציה של RELATIVE עוקבות. במצב אידיאלי, צריך לבצע חישוב מראש A' למעלה עם הכפלה של מטריצות ומחילים את התוצאה כיחידה ABSOLUTE משתנים. לחלופין, אפשר לחשב מראש את המכפלה T2 * B * T1 ולהחיל אותה כטרנספורמציה אחת של RELATIVE. שתי האפשרויות האלה יעילות יותר, במונחים של פעולות API, ואז לשלוח את בקשות הטרנספורמציה בנפרד.

מגבלות

חלק משדות הגודל והמיקום לא תואמים לסוגים מסוימים של דפים רכיבים. הטבלה הבאה מסכמת את התאימות של אלמנטים מסוימים בדף לשדות של גודל ומיקום.

שדה צורה וידאו טבלה
תרגום
קנה מידה לא**
השמיעה לא לא

** כדי לעדכן את המאפיינים של השורות והעמודות בטבלה, צריך להשתמש בכלי UpdateTableRowPropertiesRequest וגם UpdateTableColumnPropertiesRequest.

כל שדות הגודל והמיקום עשויים לספק תוצאות בלתי צפויות אם לרכיב הדף יש גזירה. כל המגבלות כפופות לשינויים. למידע עדכני, ראו Google Slides API.

יכול להיות ש-Slides API יעצב מחדש את הערכים

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