اندازه و موقعیت عناصر صفحه، اندازه و موقعیت عناصر صفحه

این راهنما توضیح می‌دهد که چگونه می‌توانید با استفاده از تبدیل‌های آفین و با استفاده از API گوگل اسلاید، اندازه و موقعیت عناصر صفحه را تغییر دهید. برای آشنایی مفهومی با تبدیل‌های آفین، به راهنمای مفهوم تبدیل‌ها و عناصر صفحه مراجعه کنید.

عناصر را تغییر شکل دهید

API اسلایدها به شما امکان می‌دهد عناصر را در یک صفحه تغییر مکان و مقیاس دهید. برای انجام این کار، ابتدا تعیین کنید که چه نوع تبدیلی باید اعمال شود و سپس آن تبدیل را با استفاده از متد presentations.batchUpdate() که حاوی یک یا چند عنصر UpdatePageElementTransformRequest است، اعمال کنید.

تبدیل‌ها را می‌توان با استفاده از ApplyMode انجام داد:

  • تبدیل‌های ABSOLUTE ماتریس تبدیل موجود عنصر را جایگزین می‌کنند . هر پارامتری که از درخواست به‌روزرسانی تبدیل حذف کنید، برابر با صفر قرار می‌گیرد.

  • تبدیل‌های RELATIVE در ماتریس تبدیل موجود عنصر ضرب می‌شوند (ترتیب ضرب مهم است):

$$A' = BA$$

تبدیل‌های نسبی، عنصر صفحه را از جایی که هست حرکت می‌دهند یا مقیاس آن را تغییر می‌دهند. برای مثال، حرکت دادن یک شکل به اندازه ۱۰۰ نقطه به سمت چپ یا چرخاندن آن به اندازه ۴۰ درجه. تبدیل‌های مطلق، اطلاعات موقعیت و مقیاس موجود را نادیده می‌گیرند؛ برای مثال، حرکت دادن یک شکل به مرکز صفحه یا مقیاس دادن آن به اندازه یک عرض خاص.

تبدیل‌های پیچیده معمولاً می‌توانند به صورت دنباله‌ای از تبدیل‌های ساده‌تر بیان شوند. پیش‌محاسبه یک تبدیل - ترکیب چندین تبدیل با استفاده از ضرب ماتریسی - اغلب می‌تواند سربار را کاهش دهد.

برای برخی از عملیات، باید بدانید پارامترهای تبدیل موجود یک عنصر چیستند. اگر این مقادیر را ندارید، می‌توانید آنها را با استفاده از متد presentations.pages.get() بازیابی کنید.

ترجمه

انتقال، عمل جابجایی یک عنصر صفحه به موقعیت جدید در همان صفحه است. انتقال‌های مطلق ، عنصر را به یک نقطه خاص منتقل می‌کنند، در حالی که انتقال‌های نسبی ، عنصر را به فاصله مشخصی منتقل می‌کنند.

یک ماتریس تبدیل انتقال پایه به شکل زیر است:

$$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 برای تغییر اندازه آن است. یک ماتریس تبدیل مقیاس‌بندی پایه به شکل زیر است:

$$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}$$

همانند مقیاس‌بندی، می‌توانید از این فرم ماتریسی مستقیماً به عنوان یک تبدیل RELATIVE برای چرخش یک عنصر استفاده کنید، اما این باعث می‌شود که عنصر حول مبدأ صفحه بچرخد. برای چرخش عنصر حول مرکز آن یا یک نقطه دیگر، به چارچوب مرجع آن عنصر تغییر مکان دهید .

بازتاب

بازتاب، یک عنصر را در امتداد یک خط یا محور خاص منعکس می‌کند. ماتریس تبدیل بازتاب محورهای 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}$$

همانند مقیاس‌بندی، می‌توانید از این فرم ماتریسی مستقیماً به عنوان یک تبدیل RELATIVE برای انعکاس یک عنصر استفاده کنید، اما این باعث می‌شود که عنصر نیز جابجا شود. برای انعکاس عنصر بدون هیچ جابجایی، به چارچوب مرجع عنصر آن جابجا شوید .

چارچوب‌های مرجع عنصر

اعمال مستقیم یک تبدیل مقیاس ، چرخش یا بازتاب پایه به یک عنصر صفحه، یک تبدیل در چارچوب مرجع صفحه ایجاد می‌کند. برای مثال، یک چرخش پایه، عنصر را حول مبدأ صفحه (گوشه بالا سمت چپ) می‌چرخاند. با این حال، می‌توانید در چارچوب مرجع عنصر عمل کنید، برای مثال، یک عنصر را حول نقطه مرکزی آن بچرخانید.

برای تبدیل یک عنصر در چارچوب مرجع خودش، آن را بین دو انتقال دیگر محصور کنید: یک انتقال قبلی T1 که مرکز عنصر را به مبدا صفحه منتقل می‌کند، و یک انتقال بعدی T2 که عنصر را به موقعیت اصلی خود برمی‌گرداند. کل عملیات را می‌توان به صورت یک حاصلضرب ماتریسی بیان کرد:

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

همچنین می‌توانید با انتقال نقاط مختلف به مبدا، به چارچوب‌های مرجع دیگری تغییر دهید. این نقاط مرکز چارچوب مرجع جدید می‌شوند.

می‌توان هر یک از این تبدیل‌ها را به‌صورت جداگانه و به صورت درخواست‌های تبدیل RELATIVE متوالی انجام داد. در حالت ایده‌آل، باید A' بالا را با ضرب ماتریس‌ها پیش‌محاسبه کنید و نتیجه را به عنوان یک تبدیل ABSOLUTE واحد اعمال کنید. روش دیگر، محاسبه اولیه حاصلضرب T2 * B * T1 و اعمال آن به عنوان یک تبدیل RELATIVE واحد است. هر دوی این روش‌ها، از نظر عملیات API، نسبت به ارسال درخواست‌های تبدیل به‌صورت جداگانه، کارآمدتر هستند.

محدودیت‌ها

برخی از فیلدهای اندازه‌گذاری و موقعیت‌یابی با برخی از انواع عناصر صفحه سازگار نیستند. جدول زیر سازگاری عناصر صفحه خاص با فیلدهای اندازه‌گذاری و موقعیت‌یابی را خلاصه می‌کند:

میدان شکل ویدئو میز
ترجمه
مقیاس خیر**
برشی خیر خیر

برای به‌روزرسانی ابعاد سطر و ستون جدول، از UpdateTableRowPropertiesRequest و UpdateTableColumnPropertiesRequest استفاده کنید.

اگر عنصر صفحه دارای برش باشد، ممکن است تمام فیلدهای اندازه‌گذاری و موقعیت‌یابی نتایج غیرمنتظره‌ای ارائه دهند. همه محدودیت‌ها قابل تغییر هستند. برای اطلاعات به‌روز، به Google Slides API مراجعه کنید.

مقادیر بازسازی‌شده

وقتی یک عنصر صفحه ایجاد می‌کنید، می‌توانید اندازه و تبدیلی را مشخص کنید که نتیجه بصری خاصی را ارائه می‌دهد. با این حال، API اسلایدها ممکن است مقادیر ارائه شده شما را با مقادیر دیگری که ظاهر بصری یکسانی دارند جایگزین کند. به طور کلی، اگر با استفاده از API اندازه‌ای بنویسید، تضمینی وجود ندارد که همان اندازه را به شما برگرداند. با این حال، اگر تبدیل را در نظر بگیرید، باید نتایج مشابهی بگیرید.