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

คู่มือนี้อธิบายวิธีที่คุณปรับขนาดและตำแหน่งองค์ประกอบของหน้าโดยใช้การเปลี่ยนรูปแบบแบบ affine หากต้องการดูข้อมูลเบื้องต้นเกี่ยวกับการเปลี่ยนรูปแบบแบบสัมพันธ์ (affine) โปรดดูคู่มือแนวคิด Transforms

การเปลี่ยนแปลงองค์ประกอบ

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

การเปลี่ยนรูปแบบทําได้โดยใช้ 1 ใน 2 applyModes ดังนี้

  • 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 ซึ่งจะส่งคำขอเปลี่ยนรูปแบบทีละรายการ

ข้อจำกัด

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

ฟิลด์ รูปร่าง วิดีโอ ตาราง
คำแปล
Scale ไม่**
เฉือน ไม่ได้ ไม่ได้

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

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

Slides API อาจเปลี่ยนโครงสร้างค่าของคุณ

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