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

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

عناصر تبدیل کننده

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

تبدیل ها را می توان در یکی از دو AppMode ایجاد کرد:

  • تبدیل های 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 ممکن است مقادیر ارائه شده شما را با مقادیر دیگری جایگزین کند که ظاهر بصری یکسانی دارند. به طور کلی، اگر اندازه ای را با استفاده از API بنویسید، تضمینی برای بازگرداندن همان اندازه نیست. با این حال، اگر تبدیل را در نظر بگیرید، باید همان نتایج را دریافت کنید.