ট্রান্সফর্ম অপারেশন

গুগল স্লাইডস এপিআই আপনাকে একটি পৃষ্ঠার PageElement (টেক্সট বক্স, ছবি, টেবিল এবং সাধারণ আকার)-এর অবস্থান, আকার এবং অভিমুখ পরিবর্তন করার সুযোগ দেয়, যেখানে রেখা সোজা থাকে এবং বিন্দু ও সমান্তরাল রেখা সংরক্ষিত থাকে। এগুলো অ্যাফাইন ট্রান্সফরমেশন নামে পরিচিত। এখানকার উদাহরণগুলোতে presentations.batchUpdate পদ্ধতি ব্যবহার করে কিছু সাধারণ পেজ এলিমেন্ট ট্রান্সফর্ম অপারেশন দেখানো হয়েছে।

এই উদাহরণগুলিতে নিম্নলিখিত ভেরিয়েবলগুলি ব্যবহার করা হয়েছে:

  • PRESENTATION_ID — এটি নির্দেশ করে যে আপনি প্রেজেন্টেশন আইডিটি কোথায় প্রদান করবেন। আপনি প্রেজেন্টেশন ইউআরএল (URL) থেকে এই আইডিটির মান জানতে পারবেন।
  • PAGE_ID — এটি নির্দেশ করে যে আপনি কোথায় পেজ অবজেক্ট আইডি প্রদান করবেন। আপনি URL থেকে অথবা একটি API রিড রিকোয়েস্ট ব্যবহার করে এর মান পেতে পারেন।
  • PAGE_ELEMENT_ID — এটি নির্দেশ করে যে আপনি কোথায় পেজ এলিমেন্ট অবজেক্ট আইডি প্রদান করবেন। আপনি আপনার তৈরি করা এলিমেন্টগুলোর জন্য ( কিছু সীমাবদ্ধতা সহ) এই আইডি নির্দিষ্ট করে দিতে পারেন অথবা স্লাইডস এপিআই-কে স্বয়ংক্রিয়ভাবে একটি তৈরি করার অনুমতি দিতে পারেন। একটি এপিআই রিড রিকোয়েস্টের মাধ্যমে এলিমেন্ট আইডিগুলো পুনরুদ্ধার করা যায়।

ভাষা নিরপেক্ষতার জন্য এই উদাহরণগুলো HTTP অনুরোধ হিসেবে উপস্থাপন করা হয়েছে। গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করে কীভাবে বিভিন্ন ভাষায় ব্যাচ আপডেট বাস্তবায়ন করতে হয় তা জানতে, ‘আকৃতি এবং টেক্সট যোগ করুন’ দেখুন।

তীরের আকৃতির উদাহরণ

নীচের উদাহরণগুলির জন্য, ধরে নিন যে নিম্নলিখিত আকার এবং রূপান্তর ডেটা সহ একটি উদাহরণ তীর আকৃতির পৃষ্ঠা উপাদান বিদ্যমান (যা একটি presentations.pages.get পদ্ধতি অনুরোধের মাধ্যমে পাওয়া যেতে পারে)। উদাহরণ আকৃতিটি EMU (ইংলিশ মেট্রিক ইউনিট) এবং pt (পয়েন্ট) পরিমাপের unit ব্যবহার করে।

{
  "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

দ্বিতীয় অনুরোধটি একটি ৪০ pt চওড়া বৃত্ত তৈরি করে, যার আনুভূমিক কেন্দ্ররেখা উদাহরণ তীরটির কেন্দ্ররেখার মতোই, কিন্তু এটি তীরটির ডান প্রান্ত থেকে ১০০ pt (১,২৭০,০০০ EMU) ডানদিকে অবস্থিত। বৃত্তটির X স্থানাঙ্ক হলো তীরটির X স্থানাঙ্ক, তীরটির প্রস্থ এবং ১০০ 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 পদ্ধতি ব্যবহার করে উদাহরণস্বরূপ তীর আকৃতির পেজ এলিমেন্টটিকে দুটি ভিন্ন উপায়ে অনুবাদ করা যায়।

ব্যাচের প্রথম অনুরোধটি তীরটিকে (X,Y) = (2000000, 150000) EMU স্থানাঙ্কে নিয়ে যায় (একটি অ্যাবসোলিউট ট্রান্সলেশন applyMode ব্যবহার করে)। ব্যাচের দ্বিতীয় অনুরোধটি তীরটিকে সেখান থেকে, এবার 40,000 EMU ডানে এবং 35,000 EMU উপরে নিয়ে যায় (একটি রিলেটিভ ট্রান্সলেশন applyMode ব্যবহার করে)। ব্যবহৃত transformation1 ম্যাট্রিক্সগুলো এমনভাবে তৈরি করা হয়েছে যাতে এলিমেন্টের আকার এবং অভিমুখের কোনো পরিবর্তন না হয়।

উভয় অনুরোধ কার্যকর করার পর, তীরটির উপরের-বাম কোণাটি (X,Y) = (2040000, 115000) EMU স্থানাঙ্কে স্থির হয়।

একটি এলিমেন্ট সরানোর জন্য অনুরোধ প্রোটোকলটি নিম্নরূপ:

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"
        }
      }
    }
  ]
}