عملیات تبدیل

API اسلایدهای گوگل به شما امکان می‌دهد مکان، اندازه و جهت یک PageElement (جعبه‌های متن، تصاویر، جداول و اشکال پایه) را در یک صفحه دستکاری کنید، در حالی که خطوط را صاف نگه دارید و نقاط و خطوط موازی را حفظ کنید. این‌ها به عنوان تبدیل‌های وابسته شناخته می‌شوند. مثال‌های اینجا برخی از عملیات تبدیل عنصر صفحه رایج را با استفاده از متد presentations.batchUpdate نشان می‌دهند.

این مثال‌ها از متغیرهای زیر استفاده می‌کنند:

  • PRESENTATION_ID — نشان می‌دهد که شناسه ارائه را کجا ارائه می‌دهید. می‌توانید مقدار این شناسه را از URL ارائه پیدا کنید.
  • PAGE_ID — نشان می‌دهد که شناسه شیء صفحه را کجا ارائه می‌دهید. می‌توانید مقدار این شناسه را از URL یا با استفاده از درخواست خواندن API بازیابی کنید.
  • PAGE_ELEMENT_ID — نشان می‌دهد که شناسه شیء عنصر صفحه را کجا ارائه می‌دهید. می‌توانید این شناسه را برای عناصری که ایجاد می‌کنید (با برخی محدودیت‌ها ) مشخص کنید یا به API اسلایدها اجازه دهید که به طور خودکار یکی ایجاد کند. شناسه‌های عنصر را می‌توان از طریق درخواست خواندن API بازیابی کرد.

این مثال‌ها به عنوان درخواست‌های HTTP ارائه شده‌اند تا از نظر زبانی بی‌طرف باشند. برای یادگیری نحوه پیاده‌سازی به‌روزرسانی دسته‌ای در زبان‌های مختلف با استفاده از کتابخانه‌های کلاینت API گوگل، به بخش افزودن شکل‌ها و متن مراجعه کنید.

شکل پیکان مثال

برای مثال‌های زیر، فرض کنید یک عنصر صفحه به شکل پیکان با اندازه و داده‌های تبدیل زیر وجود دارد (که می‌توان آن را با درخواست متد presentations.pages.get پیدا کرد). شکل نمونه از unit اندازه‌گیری EMU (واحد متریک انگلیسی) و pt (نقطه) استفاده می‌کند.

{
  "objectId": PAGE_ELEMENT_ID,
  "size": {
    "width": {
      "magnitude": 3000000,
      "unit": "EMU"
    },
    "height": {
      "magnitude": 3000000,
      "unit": "EMU"
    }
  },
  "transform": {
    "scaleX": 0.3,
    "scaleY": 0.12,
    "shearX": 0,
    "shearY": 0,
    "translateX": 2000000,
    "translateY":  550000,
    "unit": "EMU"
  },
  "shape": {
    "shapeType": "RIGHT_ARROW"
  }
}

تراز کردن یک عنصر با عنصر دیگر

نمونه کد presentations.batchUpdate زیر نحوه استفاده از متد CreateShapeRequest را برای ایجاد اشکال جدید در موقعیت‌های صحیح که با شکل فلش نمونه در صفحه هم‌تراز هستند، نشان می‌دهد. در هر دو مورد، مختصات X و Y گوشه بالا سمت چپ شکل جدید باید محاسبه شود.

درخواست اول یک مستطیل ۱۰۰ در ۵۰ پوینت ایجاد می‌کند که با مرز سمت چپ شکل فلش تراز شده است، اما ۵۰ پوینت (۵۰ * ۱۲۷۰۰ = ۶۳۵۰۰۰ EMU) پایین‌تر از لبه بالایی فلش قرار گرفته است. مختصات X مستطیل جدید باید با مختصات X فلش یکسان باشد تا مرز چپ آن تراز بماند. مختصات Y نیز با مختصات Y فلش به علاوه ۵۰ پوینت برابر است، زیرا فاصله از بالای فلش اندازه‌گیری می‌شود. بنابراین مختصات مستطیل به صورت زیر است:

x" = 2000000 EMU
y" = 550000 + (50 * 12700) = 1185000 EMU

درخواست دوم یک دایره با عرض ۴۰ پوینت ایجاد می‌کند که خط مرکزی افقی آن مشابه پیکان نمونه است، اما ۱۰۰ پوینت (۱,۲۷۰,۰۰۰ EMU) در سمت راست لبه راست پیکان قرار دارد. مختصات X دایره مجموع مختصات X پیکان، عرض پیکان و ۱۰۰ پوینت است. اعمال ترازبندی خط مرکزی برای دایره جدید مستلزم در نظر گرفتن ارتفاع پیکان و دایره است. مختصات Y دایره برابر است با مختصات Y پیکان به علاوه نصف ارتفاع پیکان منهای نصف ارتفاع دایره. در هر دو مورد، عوامل مقیاس‌بندی مرتبط با پیکان نیز باید در نظر گرفته شوند، زیرا بر عرض و ارتفاع رندر شده پیکان تأثیر می‌گذارند. بنابراین مختصات دایره عبارتند از:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU
y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

پروتکل درخواست برای تراز کردن یک عنصر با عنصر دیگر به صورت زیر است:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "createShape": {
        "shapeType": "RECTANGLE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 100,
              "unit": "PT"
            },
            "height": {
              "magnitude": 50,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 2000000,
            "translateY": 1185000,
            "unit": "EMU"
          }
        }
      }
    },
    {
      "createShape": {
        "shapeType": "ELLIPSE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 40,
              "unit": "PT"
            },
            "height": {
              "magnitude": 40,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 4170000,
            "translateY":  476000,
            "unit": "EMU"
          }
        }
      }
    }
  ]
}

جابجایی یک عنصر

نمونه کد presentations.batchUpdate زیر نحوه استفاده از متد UpdatePageElementTransformRequest را برای ترجمه عنصر صفحه پیکان شکل مثال به دو روش مختلف نشان می‌دهد.

اولین درخواست در دسته، پیکان را به مختصات EMU (X,Y) = (2000000, 150000) منتقل می‌کند (با استفاده از یک انتقال مطلق applyMode ). درخواست دوم در دسته، پیکان را از آنجا حرکت می‌دهد، این بار 40000 EMU به سمت راست و 35000 EMU به سمت بالا (با استفاده از یک انتقال نسبی applyMode ). ماتریس‌های transform1 مورد استفاده برای جلوگیری از تغییر اندازه و جهت عنصر ساخته شده‌اند.

پس از اجرای هر دو درخواست، گوشه بالا سمت چپ فلش در مختصات EMU (X,Y) = (2040000, 115000) قرار می‌گیرد.

پروتکل درخواست برای جابجایی یک عنصر به صورت زیر است:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "ABSOLUTE",
        "transform": {
            "scaleX": 0.3,
            "scaleY": 0.12,
            "translateX": 2000000,
            "translateY":  150000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX":  40000,
            "translateY": -35000,
            "unit": "EMU"
        }
      }
    }
  ]
}

بازتاب یک عنصر

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

این کار با استفاده از یک تبدیل بازتاب پایه در چارچوب مرجع عنصر انجام می‌شود. برای وضوح، تغییر چارچوب مرجع و بازتاب با سه فراخوانی جداگانه به متد UpdatePageElementTransformRequest نشان داده شده‌اند، اما محاسبه اولیه حاصلضرب این ماتریس‌های تبدیل و سپس اعمال آن حاصلضرب به عنوان یک درخواست واحد، کارآمدتر است.

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

پروتکل درخواست برای بازتاب یک عنصر به صورت زیر است:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX": -2000000 - 0.5 * 0.3  * 3000000,
            "translateY":  -550000 - 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": -1,
            "scaleY":  1,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

تغییر اندازه یک عنصر

نمونه کد presentations.batchUpdate زیر نحوه استفاده از متد UpdatePageElementTransformRequest را برای مقیاس‌بندی عنصر صفحه نمونه به شکل پیکان به اندازه ۵۰٪ پهن‌تر و تنها ۸۰٪ ارتفاع فعلی آن نشان می‌دهد، در حالی که مرکز پیکان در همان موقعیت و جهت‌گیری آن حفظ می‌شود.

این کار با استفاده از یک تبدیل مقیاس‌بندی پایه در چارچوب مرجع عنصر انجام می‌شود. برای وضوح، تغییر چارچوب مرجع و مقیاس‌بندی با سه فراخوانی جداگانه به متد UpdatePageElementTransformRequest نشان داده شده‌اند، اما محاسبه اولیه حاصلضرب این ماتریس‌های تبدیل و سپس اعمال آن حاصلضرب به عنوان یک درخواست واحد، کارآمدتر است.

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

پروتکل درخواست برای تغییر اندازه یک عنصر به صورت زیر است:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1.5,
            "scaleY": 0.8,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

چرخش یک عنصر حول مرکز آن

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

این کار با استفاده از یک تبدیل چرخش پایه در چارچوب مرجع عنصر انجام می‌شود. برای وضوح، تغییر چارچوب مرجع و چرخش با سه فراخوانی جداگانه به متد UpdatePageElementTransformRequest نشان داده شده‌اند، اما محاسبه اولیه حاصلضرب این ماتریس‌های تبدیل و سپس اعمال آن حاصلضرب به عنوان یک درخواست واحد، کارآمدتر است.

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

پروتکل درخواست برای چرخش یک عنصر حول مرکز آن به صورت زیر است:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  cos(35 * (pi/180)),
            "scaleY":  cos(35 * (pi/180)),
            "shearX":  sin(35 * (pi/180)),
            "shearY": -sin(35 * (pi/180)),
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}