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

دو روش مختلف برای دریافت و تغییر اندازه و موقعیت یک عنصر صفحه وجود دارد:

  1. استفاده از توابع getter و setter آن برای اندازه و موقعیت.
  2. دستکاری تبدیل آفین آن، با استفاده از توابع getTransform() و setTransform() ضمن حفظ اندازه ذاتی.

خواندن ویژگی‌های عنصر صفحه

اندازه گذاری و چرخش

همانطور که در شکل نشان داده شده است، اندازه و موقعیت نسبت به کادر محصورکننده یک عنصر صفحه رندر شده، زمانی که چرخشی ندارد، اندازه‌گیری می‌شوند:

  • چپ و بالا : از گوشه بالا سمت چپ صفحه تا گوشه بالا سمت چپ کادر مرزی بدون چرخش اندازه‌گیری می‌شود. برای خواندن مقادیر getLeft() و getTop() استفاده کنید.
  • عرض و ارتفاع : عرض و ارتفاع کادر دورتادور بدون چرخش. برای خواندن مقادیر از getWidth() و getHeight() استفاده کنید.
  • چرخش : چرخش در جهت عقربه‌های ساعت نسبت به خط عمودی اطراف مرکز کادر محصورکننده. برای خواندن مقدار از getRotation() استفاده کنید.

تمام طول‌ها بر حسب نقطه (pt) و چرخش بر حسب درجه (°) اندازه‌گیری می‌شوند.

تنظیم ویژگی‌های عنصر صفحه

اندازه و موقعیت یک عنصر صفحه را هنگام ایجاد آن با استفاده از یک متد درج مانند insertShape() تنظیم کنید. برای یک شکل موجود، می‌توانید اندازه، موقعیت و چرخش را تنظیم کنید؛ همچنین می‌توانید مقیاس‌بندی یک عنصر را برای تغییر اندازه یا انعکاس آن در امتداد یکی از لبه‌های آن تنظیم کنید.

در خلقت

هنگام ایجاد یک عنصر صفحه، اطلاعات موقعیت و اندازه را ارائه دهید.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
                    + shape.getTop() + 'pt; Width: '
                    + shape.getWidth() + 'pt; Height: '
                    + shape.getHeight() + 'pt; Rotation: '
                    + shape.getRotation() + ' degrees.');

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

Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.

اندازه، موقعیت و چرخش

به‌روزرسانی اندازه و موقعیت یک عنصر صفحه پس از ایجاد:

  • setLeft() و setTop() برای تنظیم موقعیت گوشه بالا سمت چپ کادر دورتادور استفاده کنید.
  • setWidth() و setHeight() برای تنظیم عرض و ارتفاع رندر شده کادر اطراف استفاده کنید.
  • از setRotation() برای تنظیم چرخش ساعتگرد کادر پیرامونی حول مرکز آن استفاده کنید.

اسکریپت زیر یک شکل در اولین اسلاید ارائه فعال ایجاد می‌کند، از تنظیم‌کننده‌ها برای به‌روزرسانی موقعیت، اندازه و چرخش آن استفاده می‌کند و اطلاعات موقعیت و اندازه شکل را می‌خواند.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
                    + 'pt; Top: ' + shape.getTop()
                    + 'pt; Width: ' + shape.getWidth()
                    + 'pt; Height: ' + shape.getHeight()
                    + 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');

لاگ مورد انتظار عبارت است از:

Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.

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

shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);

مقیاس‌بندی یک عنصر صفحه

به جای استفاده از setWidth() و setHeight() برای تنظیم اندازه شکل به یک مقدار مطلق، می‌توان از scaleWidth() و scaleHeight() برای کشیدن یا فشردن یک عنصر صفحه با یک ضریب مقیاس‌بندی نسبی استفاده کرد.

shape.scaleHeight(0.5).scaleWidth(2);

شکل زیر نحوه عملکرد کد قبلی را روی یک شکل مربعی با چرخش ۴۵ درجه نشان می‌دهد. توجه داشته باشید که گوشه بالا سمت چپ کادر محصورکننده در طول مقیاس‌بندی ثابت می‌شود.

مقیاس‌بندی اسلایدها

بازتاب یک عنصر صفحه

آرگومان‌های تابع‌های scaleWidth() و scaleHeight() می‌توانند منفی باشند، بنابراین می‌توان از آنها برای چرخاندن یک عنصر صفحه به صورت افقی یا عمودی استفاده کرد.

// Flip horizontally along the left edge of the bounding box.
shape.scaleWidth(-1);
// Flip vertically along the top edge of the bounding box.
shape.scaleHeight(-1);

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

بازتاب اسلایدها

چرخش خط

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

محدودیت‌ها

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

روش‌ها شکل ویدئو میز
تابع getHeight() و getWidth() خیر (مقدار تهی برمی‌گرداند)
تنظیم ارتفاع()، تنظیم عرض() خیر
تنظیم چرخش () خیر خیر
مقیاس ارتفاع()، مقیاس عرض() خیر

اگر عنصر صفحه دچار برش (shearing) شود، تمام روش‌های اندازه‌گیری و موقعیت‌یابی ممکن است نتایج غیرمنتظره‌ای داشته باشند. همه محدودیت‌ها قابل تغییر هستند. برای اطلاعات به‌روز، به مرجع مراجعه کنید.

استفاده از تبدیل‌های آفین

برای کنترل پیشرفته، اندازه و موقعیت یک عنصر صفحه را می‌توان از طریق اندازه ذاتی (بومی) و تبدیل آفین محاسبه و تنظیم کرد.

اسکریپت Google Apps رابطی مشابه API اسلایدهای Google برای استفاده از تبدیل‌های affine ارائه می‌دهد.

  • برای خواندن ویژگی‌ها، می‌توانید از تبدیل آفین استفاده کنید، که نحوه‌ی مقیاس‌بندی، چرخش، برش و موقعیت‌یابی یک عنصر را توصیف می‌کند. برای یادگیری نحوه‌ی استفاده از تبدیل و اندازه‌ی ذاتی (بومی) یک عنصر برای محاسبه‌ی اندازه‌ی بصری آن در یک اسلاید، به Transforms مراجعه کنید. در Apps Script، از موارد زیر استفاده کنید:
    • getInherentWidth() و getInherentHeight() برای اندازه ذاتی (بومی) عناصر صفحه؛
    • getTransform() برای تبدیل آفین عناصر صفحه.
  • برای تغییر ویژگی‌ها، می‌توانید از تبدیل‌های affine برای انجام مقیاس‌بندی، چرخش، انعکاس و موارد دیگر استفاده کنید. برای یادگیری نحوه‌ی اندازه‌گیری و موقعیت‌دهی عناصر صفحه با استفاده از تبدیل‌های affine، به بخش Sizing and Positioning مراجعه کنید. در Apps Script، از موارد زیر استفاده کنید:
    • setTransform() برای تنظیم تبدیل آفین عناصر صفحه (مشابه حالت ABSOLUTE)؛
    • preconcatenateTransform() برای پیش الحاق یک تبدیل affine به تبدیل فعلی عناصر صفحه استفاده می‌شود (مشابه حالت RELATIVE).

اسکریپت زیر یک شکل ایجاد می‌کند، تبدیل آن را تنظیم می‌کند، اندازه ذاتی آن را می‌خواند و تبدیل آفین آن را می‌خواند.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
                   .setScaleX(2)
                   .setScaleY(1)
                   .setTranslateX(100)
                   .setTranslateY(200)
                   .build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
                              + 'pt; Inherent height: '
                              + shape.getInherentHeight() + 'pt.');

خروجی مورد انتظار لاگ به صورت زیر است:

Inherent width: 236.2pt; Inherent height: 236.2pt.

شکل حاصل دارای تبدیل، اندازه رندر شده و موقعیت زیر است:

AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.