ขนาดและตําแหน่งองค์ประกอบของหน้า

คู่มือนี้อธิบายวิธีปรับขนาดและจัดตำแหน่งองค์ประกอบของหน้าโดยใช้การแปลงแบบแอฟฟินด้วย Google Slides API หากต้องการดูข้อมูลเบื้องต้นเชิงแนวคิดเกี่ยวกับการแปลงแบบแอฟฟิน โปรดดูคู่มือแนวคิดเกี่ยวกับการแปลงและองค์ประกอบของหน้า

แปลงองค์ประกอบ

Slides API ช่วยให้คุณเปลี่ยนตำแหน่งและปรับขนาดองค์ประกอบในหน้าได้ หากต้องการทำ เช่นนี้ ให้กำหนดก่อนว่าต้องใช้การแปลงประเภทใด แล้ว ใช้การแปลงนั้นโดยใช้วิธี presentations.batchUpdate() ที่มีองค์ประกอบ UpdatePageElementTransformRequest อย่างน้อย 1 รายการ

คุณสามารถทำการแปลงได้โดยใช้ an ApplyMode ดังนี้

  • การแปลง ABSOLUTE จะ แทนที่ เมตริกซ์การแปลงที่มีอยู่ขององค์ประกอบ ระบบจะตั้งค่าพารามิเตอร์ที่คุณละเว้นจากคำขออัปเดตการแปลงเป็น 0

  • การแปลง 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 เพื่อสะท้อนองค์ประกอบ แต่การดำเนินการนี้จะทำให้องค์ประกอบเลื่อนด้วย หากต้องการ สะท้อนองค์ประกอบโดยไม่เลื่อน ให้เปลี่ยนไปใช้เฟรมอ้างอิงขององค์ประกอบ

เฟรมอ้างอิงขององค์ประกอบ

การใช้การแปลงการปรับขนาด การหมุน หรือ การสะท้อนพื้นฐานกับองค์ประกอบ ของหน้าโดยตรงจะสร้างการแปลงในเฟรมอ้างอิงของหน้า ตัวอย่างเช่น การหมุนพื้นฐานจะหมุนองค์ประกอบรอบจุดเริ่มต้นของหน้า (มุมซ้ายบน) อย่างไรก็ตาม คุณสามารถดำเนินการในเฟรมอ้างอิงขององค์ประกอบได้ เช่น หมุนองค์ประกอบรอบจุดศูนย์กลาง

หากต้องการแปลงองค์ประกอบภายในเฟรมอ้างอิงขององค์ประกอบเอง ให้ใส่ไว้ระหว่างการเลื่อนอื่นๆ 2 รายการ ได้แก่ การเลื่อน T1 ก่อนหน้าซึ่งจะย้ายจุดกึ่งกลางขององค์ประกอบไปยังจุดเริ่มต้นของหน้า และการเลื่อน T2 ที่ตามมาซึ่งจะย้ายองค์ประกอบกลับไปยังตำแหน่งเดิม การดำเนินการทั้งหมดสามารถแสดงเป็นผลคูณของเมตริกซ์ได้ดังนี้

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

นอกจากนี้ คุณยังเปลี่ยนไปใช้เฟรมอ้างอิงอื่นๆ ได้ด้วยการเลื่อนจุดต่างๆ ไปยังจุดเริ่มต้นแทน จุดเหล่านี้จะกลายเป็นจุดกึ่งกลางของเฟรมอ้างอิงใหม่

คุณสามารถทำการแปลงแต่ละรายการเหล่านี้แยกกันเป็นคำขอการแปลง RELATIVE ตามลำดับ ในอุดมคติ คุณควรคำนวณ A' ด้านบนล่วงหน้าด้วยการคูณเมตริกซ์ แล้วใช้ผลลัพธ์เป็นการแปลง ABSOLUTE รายการเดียว หรือคำนวณผลคูณ T2 * B * T1 ล่วงหน้า แล้วใช้ผลลัพธ์เป็นการแปลง RELATIVE รายการเดียว ทั้ง 2 วิธีนี้มีประสิทธิภาพมากกว่าในแง่ของการดำเนินการ API เมื่อเทียบกับการส่งคำขอการแปลงทีละรายการ

ข้อจำกัด

ช่องการปรับขนาดและการจัดตำแหน่งบางช่องไม่เข้ากันกับองค์ประกอบของหน้าบางประเภท ตารางต่อไปนี้สรุปความเข้ากันได้ขององค์ประกอบของหน้าบางรายการกับช่องการปรับขนาดและการจัดตำแหน่ง

ช่อง รูปร่าง วิดีโอ ตาราง
การเลื่อน
การปรับขนาด ไม่**
การเฉือน ไม่ ไม่

หากต้องการอัปเดตขนาดแถวและคอลัมน์ของตาราง ให้ใช้ UpdateTableRowPropertiesRequest และ UpdateTableColumnPropertiesRequest

ช่องการปรับขนาดและการจัดตำแหน่งทั้งหมดอาจให้ผลลัพธ์ที่ไม่คาดคิดหากองค์ประกอบของหน้ามีการเฉือน ข้อจำกัดทั้งหมดอาจมีการเปลี่ยนแปลง โปรดดูข้อมูลล่าสุดที่ Google Slides API

ค่าที่ปรับโครงสร้างใหม่

เมื่อสร้างองค์ประกอบของหน้า คุณสามารถระบุขนาดและการแปลงที่ให้ผลลัพธ์ภาพที่ต้องการได้ อย่างไรก็ตาม Slides API อาจแทนที่ค่าที่คุณระบุด้วยค่าอื่นๆ ที่ให้ลักษณะภาพเหมือนกัน โดยทั่วไป หากคุณเขียนขนาดโดยใช้ API ระบบจะไม่รับประกันว่าจะแสดงขนาดเดียวกันกลับมา อย่างไรก็ตาม คุณควรได้รับผลลัพธ์เดียวกันหากคำนึงถึงการแปลง