عملیات تبدیل

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

این نمونه ها از متغیرهای زیر استفاده می کنند:

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

این نمونه ها به عنوان درخواست های HTTP برای خنثی بودن زبان ارائه می شوند. برای یادگیری نحوه اجرای یک به‌روزرسانی دسته‌ای به زبان‌های مختلف با استفاده از کتابخانه‌های سرویس گیرنده Google 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 گوشه سمت چپ بالای شکل جدید باید محاسبه شود.

درخواست اول یک مستطیل 100 در 50 pt ایجاد می کند که با مرز سمت چپ شکل فلش تراز شده است، اما 50 pt (50 * 12700 = 635000 EMU) در زیر لبه بالای فلش قرار دارد. مختصات X مستطیل جدید باید با مختصات X فلش یکسان باشد تا مرز چپ آن تراز باشد. مختصات Y همان مختصات Y فلش به اضافه 50 pt است، زیرا فاصله از بالای فلش اندازه گیری می شود. بنابراین مختصات مستطیل عبارتند از:

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

درخواست دوم یک دایره عریض 40 pt ایجاد می کند که همان خط مرکزی افقی فلش نمونه را دارد، اما 100 pt (1,270,000 EMU) در سمت راست لبه سمت راست فلش قرار دارد. مختصات X دایره مجموع مختصات X فلش، عرض فلش و 100 pt است. اجرای یک تراز خط مرکزی برای دایره جدید مستلزم در نظر گرفتن ارتفاع فلش و دایره است. مختصات 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 ). ماتریس های transformation1 استفاده شده برای جلوگیری از تغییر اندازه و جهت عنصر ساخته شده اند.

پس از اجرای هر دو درخواست، گوشه سمت چپ بالای فلش در مختصات 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 را نشان می‌دهد تا عنصر صفحه شکل فلش نمونه را 50 درصد پهن‌تر کنید و فقط 80 درصد از ارتفاع فعلی‌اش را داشته باشد، در حالی که مرکز فلش را در همان موقعیت نگه می‌دارد و جهت آن را حفظ می‌کند. .

این کار با استفاده از یک تبدیل مقیاس بندی اولیه در قاب مرجع عنصر انجام می شود. برای وضوح، تغییر قاب مرجع و مقیاس‌بندی با سه فراخوانی جداگانه به روش 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 را برای چرخاندن عنصر صفحه شکل فلش نمونه 35 درجه در خلاف جهت عقربه‌های ساعت نشان می‌دهد، در حالی که مرکز فلش را در همان موقعیت نگه می‌دارد و اندازه آن را حفظ می‌کند.

این کار با استفاده از یک تبدیل چرخش پایه در قاب مرجع عنصر انجام می شود. برای وضوح، تغییر و چرخش فریم مرجع با سه فراخوانی جداگانه به روش 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"
        }
      }
    }
  ]
}