حجم عناصر الصفحة وموضعها

يوضّح هذا الدليل كيفية تغيير حجم عناصر الصفحة وتحديد موضعها باستخدام عمليات التحويل الأفيني من خلال Google Slides API. للحصول على مقدّمة مفاهيمية عن عمليات التحويل الأفيني ، يُرجى الاطّلاع على دليل المفاهيم عمليات التحويل وعناصر الصفحة.

تحويل العناصر

يتيح لك Slides API تغيير موضع العناصر وتغيير حجمها على الصفحة. لإجراء ذلك، عليك أولاً تحديد نوع التحويل الذي يجب تطبيقه، ثم تطبيق هذا التحويل باستخدام presentations.batchUpdate() التي تحتوي على عنصر واحد أو أكثر من UpdatePageElementTransformRequest عناصر.

يمكن إجراء عمليات التحويل باستخدام an 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 لعكس عنصر، ولكن يؤدي ذلك إلى نقل العنصر أيضًا. لعكس العنصر بدون أي نقل، انتقِل إلى إطار مرجع العنصر frame.

إطارات مرجع العناصر

يؤدي تطبيق تحويل أساسي لتغيير الحجم، أو التدوير، أو الانعكاس مباشرةً على عنصر صفحة إلى إجراء تحويل في إطار مرجع الصفحة. على سبيل المثال، يؤدي التدوير الأساسي إلى تدوير العنصر حول نقطة الأصل في الصفحة (الزاوية العلوية اليمنى). ومع ذلك، يمكنك العمل في إطار مرجع العنصر، على سبيل المثال، لتدوير عنصر حول نقطة مركزه.

لتحويل عنصر ضمن إطار المرجع الخاص به، عليك وضعه بين عمليتَي نقل أخريَين: عملية نقل سابقة T1 تنقل مركز العنصر إلى نقطة الأصل في الصفحة، وعملية نقل لاحقة T2 تنقل العنصر مرة أخرى إلى موضعه الأصلي. يمكن التعبير عن العملية الكاملة كناتج مصفوفة:

$$A' = T2 \times B \times T1 \times A$$

يمكنك أيضًا التبديل إلى إطارات مرجع أخرى عن طريق نقل نقاط مختلفة إلى نقطة الأصل بدلاً من ذلك. وتصبح هذه النقاط مركز إطار المرجع الجديد.

من الممكن إجراء كل عملية من عمليات التحويل هذه بشكل فردي كطلبات تحويل RELATIVE متسلسلة. في الحالة المثالية، يجب حساب A' أعلاه مسبقًا باستخدام عمليات ضرب المصفوفات وتطبيق النتيجة كتحويل ABSOLUTE واحد. بدلاً من ذلك، يمكنك حساب ناتج T2 * B * T1 مسبقًا وتطبيق ذلك كتحويل RELATIVE واحد. كلا الطريقتَين أكثر كفاءة من حيث عمليات واجهة برمجة التطبيقات من إرسال طلبات التحويل بشكل فردي.

القيود

لا تتوافق بعض حقول تغيير الحجم وتحديد الموضع مع بعض أنواع عناصر الصفحة. يلخّص الجدول التالي مدى توافق بعض عناصر الصفحة مع حقول تغيير الحجم وتحديد الموضع:

الحقل الشكل فيديو جدول
النقل
مقياس لا**
الإمالة لا لا

لتعديل أبعاد صف الجدول وعموده، استخدِم UpdateTableRowPropertiesRequest و UpdateTableColumnPropertiesRequest.

قد تؤدي جميع حقول تغيير الحجم وتحديد الموضع إلى نتائج غير متوقّعة إذا كان عنصر الصفحة مائلاً. ويمكن تغيير جميع القيود. للاطّلاع على المعلومات الحالية، يُرجى مراجعة Google Slides API.

القيم التي تم تغييرها

عند إنشاء عنصر صفحة، يمكنك تحديد حجم وتحويل يوفّران نتيجة مرئية معيّنة. ومع ذلك، قد يستبدل Slides API القيم التي تقدّمها بقيم أخرى تؤدي إلى المظهر المرئي نفسه. بوجه عام، إذا كتبت حجمًا باستخدام واجهة برمجة التطبيقات، لا نضمن لك عرض الحجم نفسه. ومع ذلك، يجب أن تحصل على النتائج نفسها إذا أخذت التحويل في الاعتبار.