Định cỡ và định vị phần tử trang

Hướng dẫn này mô tả cách bạn định cỡ và định vị các thành phần trên trang bằng phép biến đổi affine. Để tìm hiểu khái niệm về phép biến đổi affine, hãy xem hướng dẫn về khái niệm Biến đổi.

Biến đổi phần tử

API Trang trình bày cho phép bạn định vị lại và điều chỉnh tỷ lệ các thành phần trên trang. Để thực hiện việc này, trước tiên, hãy xác định loại phép biến đổi cần áp dụng, sau đó áp dụng phép biến đổi đó bằng phương thức presentations.batchUpdate chứa một hoặc nhiều phần tử UpdatePageElementTransformRequest.

Bạn có thể thực hiện phép biến đổi theo một trong hai applyModes:

  • ABSOLUTE chuyển đổi thay thế ma trận chuyển đổi hiện có của phần tử. Mọi tham số mà bạn bỏ qua khỏi yêu cầu cập nhật biến đổi sẽ được đặt thành 0.

  • Các phép biến đổi RELATIVE được nhân với ma trận biến đổi hiện có của phần tử (thứ tự nhân là quan trọng):

$$A' = BA$$

Biến đổi tương đối di chuyển hoặc điều chỉnh tỷ lệ phần tử trang từ vị trí hiện tại; ví dụ: di chuyển một hình dạng 100 điểm sang trái hoặc xoay hình dạng đó 40 độ. Biến đổi tuyệt đối sẽ loại bỏ thông tin về vị trí và tỷ lệ hiện có; ví dụ: di chuyển một hình dạng vào giữa trang hoặc điều chỉnh tỷ lệ hình dạng đó thành một chiều rộng cụ thể.

Các phép biến đổi phức tạp thường có thể được biểu thị dưới dạng một chuỗi các phép biến đổi đơn giản hơn. Việc tính toán trước một phép biến đổi (kết hợp nhiều phép biến đổi bằng cách nhân ma trận) thường có thể làm giảm hao tổn.

Đối với một số thao tác, bạn phải biết các tham số biến đổi hiện có của một phần tử. Nếu không có các giá trị này, bạn có thể truy xuất các giá trị đó bằng yêu cầu presentations.pages.get.

Dịch thuật

Di chuyển đơn giản là hành động di chuyển một phần tử trang sang vị trí mới trên cùng một trang. Các bản dịch tuyệt đối sẽ di chuyển phần tử đến một điểm cụ thể, trong khi các bản dịch tương đối sẽ di chuyển phần tử một khoảng cách cụ thể.

Ma trận biến đổi dịch cơ bản có dạng:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

Khi sử dụng UpdatePageElementTransformRequest để dịch một phần tử (mà không thay đổi kích thước, độ lệch hoặc hướng của phần tử đó), bạn có thể sử dụng một trong các cấu trúc AffineTransform sau:

// 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'
  }
}

Chuyển tỷ lệ

Điều chỉnh tỷ lệ là hành động kéo giãn hoặc nén một phần tử dọc theo phương diện X và/hoặc Y để thay đổi kích thước của phần tử đó. Ma trận biến đổi tỷ lệ cơ bản có dạng:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Bạn có thể sử dụng trực tiếp dạng ma trận này làm phép biến đổi RELATIVE để đổi kích thước một phần tử, nhưng điều này cũng có thể ảnh hưởng đến việc cắt và dịch đã kết xuất của phần tử. Để điều chỉnh tỷ lệ phần tử mà không ảnh hưởng đến độ lệch hoặc dịch chuyển của phần tử, hãy chuyển sang khung tham chiếu của phần tử đó.

Xoay

Biến đổi xoay xoay một phần tử trang xung quanh một điểm, sử dụng các tham số tỷ lệ và cắt. Ma trận biến đổi xoay cơ bản có dạng sau, trong đó góc xoay (tính bằng radian) được đo từ trục X, di chuyển ngược chiều kim đồng hồ:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

Cũng như khi điều chỉnh tỷ lệ, bạn có thể sử dụng trực tiếp biểu mẫu ma trận này làm phép biến đổi RELATIVE để xoay một phần tử, nhưng điều này sẽ khiến phần tử đó xoay quanh gốc của trang. Để xoay phần tử xung quanh tâm hoặc một điểm khác, hãy chuyển sang khung tham chiếu đó.

Phản chiếu

Tính năng phản chiếu phản ánh một phần tử trên một đường hoặc trục cụ thể. Ma trận biến đổi phản chiếu trục x và trục y cơ bản có các dạng sau:

$$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}$$

Cũng như việc điều chỉnh tỷ lệ, bạn có thể sử dụng trực tiếp biểu mẫu ma trận này dưới dạng phép biến đổi RELATIVE để phản ánh một phần tử, nhưng điều này cũng khiến phần tử đó dịch chuyển. Để phản ánh phần tử mà không cần dịch, hãy chuyển sang khung tham chiếu của phần tử đó.

Khung tham chiếu phần tử

Việc áp dụng phép biến đổi tỷ lệ, phản chiếu hoặc xoay cơ bản trực tiếp cho một phần tử trang sẽ tạo ra một phép biến đổi trong khung tham chiếu của trang. Ví dụ: một phép xoay cơ bản sẽ xoay phần tử xung quanh gốc của trang (góc trên bên trái). Tuy nhiên, bạn có thể hoạt động trong khung tham chiếu của chính phần tử, ví dụ: xoay một phần tử xung quanh điểm tâm của phần tử đó.

Để biến đổi một phần tử trong khung tham chiếu của chính phần tử đó, hãy bao bọc phần tử đó giữa hai bản dịch khác: bản dịch trước T1 di chuyển tâm phần tử đến gốc trang và bản dịch sau T2 di chuyển phần tử trở lại vị trí ban đầu. Bạn có thể biểu thị toàn bộ phép toán dưới dạng tích ma trận:

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

Bạn cũng có thể chuyển sang các khung tham chiếu khác bằng cách dịch các điểm khác nhau đến gốc. Các điểm này trở thành tâm của khung tham chiếu mới.

Bạn có thể thực hiện từng phép biến đổi này riêng lẻ dưới dạng các yêu cầu biến đổi RELATIVE tuần tự. Tốt nhất là bạn nên tính toán trước A' ở trên bằng phép nhân ma trận và áp dụng kết quả dưới dạng một phép biến đổi ABSOLUTE duy nhất. Ngoài ra, hãy tính toán trước tích T2 * B * T1 và áp dụng tích đó dưới dạng một phép biến đổi RELATIVE. Cả hai cách này đều hiệu quả hơn về các thao tác API so với việc gửi từng yêu cầu biến đổi.

Các điểm hạn chế

Một số trường định cỡ và định vị không tương thích với một số loại phần tử trang. Bảng bên dưới tóm tắt khả năng tương thích của một số thành phần trang nhất định với các trường định cỡ và định vị.

Trường Hình dạng Video Bảng
Bản dịch
Điều chỉnh theo tỷ lệ Không**
Cắt xén Không Không

** Để cập nhật kích thước hàng và cột của bảng, hãy sử dụng UpdateTableRowPropertiesRequestUpdateTableColumnPropertiesRequest.

Tất cả các trường định cỡ và định vị có thể cho ra kết quả không mong muốn nếu phần tử trang bị cắt bớt. Tất cả các giới hạn đều có thể thay đổi. Để biết thông tin mới nhất, hãy xem Google Slides API.

API Trang trình bày có thể tái cấu trúc các giá trị của bạn

Khi tạo một phần tử trang, bạn có thể chỉ định kích thước và biến đổi để cung cấp một kết quả hình ảnh nhất định. Tuy nhiên, API có thể thay thế các giá trị bạn cung cấp bằng các giá trị khác có cùng giao diện hiển thị. Nhìn chung, nếu ghi kích thước bằng API, bạn không được đảm bảo sẽ được trả về cùng một kích thước. Tuy nhiên, bạn sẽ nhận được kết quả tương tự nếu tính đến phép biến đổi này.