هناك طريقتان مختلفتان يمكنك من خلالهما الحصول على حجم عنصر الصفحة وموضعه وتغييرهما:
- باستخدام وظيفتَي الحصول على القيمة وضبطها للحجم والموضع
- التلاعب بالتحويل الأفيني باستخدام الدالتَين
getTransform()
وsetTransform()
مع الحفاظ على الحجم الأساسي
قراءة خصائص عناصر الصفحة
كما هو موضّح في الشكل، يتم قياس الحجم والموضع بالنسبة إلى المربّع الحدودي لعنصر الصفحة المعروض عندما لا يكون هناك أيّ دوران:
- اليسار وأعلى: يتم قياسهما من الزاوية العلوية اليسرى للصفحة إلى
الزاوية العلوية اليسرى للإطار المحيط الذي لم يتم تدويره. استخدِم
getLeft()
وgetTop()
لقراءة القيم. - Width وHeight: عرض وارتفاع مربّع الحدود غير المُدار
استخدِم
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);
يوضّح الشكل أدناه طريقة عمل الرمز أعلاه على شكل مربّع تم تدويره بزاوية 45 درجة. يُرجى العلم أنّه يتم تثبيت أعلى يمين المربّع الحدودي أثناء التصغير أو التكبير.
الانعكاس على الحافة
يمكن أن تكون الوسيطة في scaleWidth()
وscaleHeight()
سالبة لكي يمكن
استخدامها لقلب عنصر الصفحة أفقيًا أو عموديًا.
shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.
يوضّح الشكل أدناه طريقة عمل الرمز أعلاه على شكل تم تدويره بزاوية 45 درجة. يُرجى العِلم أنّه تتم قلب عنصر الصفحة على طول إحدى حواف مربّع الحدود وليس في منتصفه.
تدوير السطر
مثل عناصر الصفحة الأخرى، لا يشير دوران الخط إلى الزاوية العمودية
للخط، بل إلى دوران مربّع الحدود. عند إنشاء خط يتضمن
نقطة بداية ونقطة نهاية محدّدتين، يكون زاويته دائمًا 0 درجة. يؤدي سحب
نقاط نهاية الخط في واجهة مستخدم "العروض التقديمية من Google" إلى تغيير زاويته العمودية وكذلك
حجم مربّع الحدود وموضعه، ولكنّه لا يؤدي إلى تغيير
زاوية دورانه. يؤدي استخدام setRotation()
إلى تدوير مربّع الحدود للخط، ما يؤدي بدوره إلى تغيير زاويته العمودية بفعالية. وبالتالي، يمكن أن يتضمّن خطان
الزاوية العمودية المرئية نفسها، ولكن مع مربّعات حدود مختلفة، وبالتالي
قيم مختلفة للحجم والموقع والدوران.
القيود
لا تتوافق بعض طرق تحديد الحجم والموضع مع بعض أنواع عناصر الصفحة. يلخّص الجدول التالي الطرق غير المتوافقة مع أنواع معيّنة من عناصر الصفحة.
الطُرق | شكل | فيديو | جدول |
---|---|---|---|
getHeight(), getWidth() | ✔ | ✔ | لا (يعرض القيمة null) |
setHeight(), setWidth() | ✔ | ✔ | لا |
setRotation() | ✔ | لا | لا |
scaleHeight(), scaleWidth() | ✔ | ✔ | لا |
قد تؤدي جميع طرق تحديد الحجم والموضع إلى نتائج غير متوقّعة إذا كان عنصر الصفحة يتضمّن تمويهًا. وتخضع جميع القيود للتغيير. يُرجى الرجوع إلى المرجع للحصول على معلومات محدّثة.
استخدام عمليات التحويل الأفيني
للتحكّم المتقدّم، يمكن أيضًا حساب حجم عنصر الصفحة وموضعه وتعديلهما من خلال حجمه (الأصلي) والتحويل التناسبي.
توفّر برمجة تطبيقات Google واجهة مشابهة لاستخدام التحويل الأفيني مثل Google Slides API.
- لقراءة هذه الكلمات، توضّح هذه
المقالة
مفاهيم التحويل الأفيني وكيفية استنتاج الحجم المعروض من الحجم المضمّن
(الأصلي) والتحويل لعناصر الصفحة. في Apps Script، استخدِم
-
getInherentWidth()
وgetInherentHeight()
للحجم الأصلي لعناصر الصفحة -
getTransform()
لدالة التحويل الأفيني لعناصر الصفحة
-
- لكتابة المحتوى، توضّح هذه
المقالة
كيفية تحديد حجم عناصر الصفحة ووضعها باستخدام التحويل الأفيني لتحقيق
التكبير أو التصغير أو الدوران أو الانعكاس أو غير ذلك. في Apps Script، استخدِم
-
setTransform()
لضبط التحويل الأفيني لعناصر الصفحة (يشبه وضع ABSOLUTE) -
preconcatenateTransform()
لتسلسل تحويل خطي مسبقًا مع التحويل الحالي لعناصر الصفحة (على غرار الوضع 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°.