هناك طريقتان مختلفتان يمكنك من خلالهما الحصول على حجم عنصر الصفحة وموضعه وتغييرهما:
- باستخدام وظيفتَي الحصول على القيمة وضبطها للحجم والموضع
- التلاعب بالتحويل الأفيني باستخدام الدالتَين
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°.