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

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

تبدیل عناصر

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

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

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

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

$$A' = BA$$

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

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

برای برخی از عملیات، باید بدانید که پارامترهای تبدیل موجود یک عنصر چیست. اگر این مقادیر را ندارید، می توانید آنها را با استفاده از متد 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 را ببینید.

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

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