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

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

Chuyển đổi các phần tử

API Trang trình bày cho phép bạn đặt lại vị trí và điều chỉnh tỷ lệ các phần tử trên một 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 cách sử dụ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 chuyển đổi bằng một trong hai applyModes:

  • ABSOLUTE biến đổi thay thế ma trận biến đổi hiện có của phần tử. Mọi tham số mà bạn bỏ qua trong 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ự của các phép nhân):

$$A' = BA$$

Các biến đổi tương đối sẽ di chuyển hoặc điều chỉnh tỷ lệ phần tử trang so với vị trí hiện tại; ví dụ: di chuyển một hình dạng sang trái 100 điểm hoặc xoay hình dạng 40 độ. Phép 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 theo chiều rộng cụ thể.

Các phép biến đổi phức tạp thường có thể được biểu diễn dưới dạng một chuỗi gồm 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 mức 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 chúng bằng yêu cầu presentations.pages.get.

Dịch thuật

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

Ma trận biến đổi bản 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, độ cắt 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ệ

Chuyển tỷ lệ là hành động kéo giãn hoặc ép một phần tử theo chiều 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 như sau:

$$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 biểu mẫu ma trận này dưới dạng 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 độ cắt và bản dịch được 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 khả năng cắt 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ử đó.

Chế độ xoay

Biến đổi xoay sẽ xoay phần tử trang xung quanh một điểm bằng cách sử dụng tham số điều chỉnh theo tỷ lệ và cắt. Ma trận biến đổi xoay cơ bản có dạng như sau, trong đó góc quay (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}$$

Tương tự 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 để xoay một phần tử, nhưng điều này sẽ khiến phần tử bị xoay về nguồn gốc trang. Để xoay phần tử quanh tâm hoặc một điểm khác, hãy di chuyển đến khung tham chiếu đó.

Reflection

Hình ảnh phản chiếu phản chiếu một phần tử qua một đường hoặc trục cụ thể. Ma trận biến đổi phản xạ trục x và 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}$$

Tương tự như việc điều chỉnh theo 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. Để 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 trực tiếp biến đổi tỷ lệ, phản chiếu hoặc xoay cơ bản cho phần tử trang sẽ tạo ra sự biến đổi trong khung tham chiếu của trang. Ví dụ: chế độ xoay cơ bản sẽ xoay phần tử gần nguồn 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ử đó, chẳng hạn như để xoay một phần tử xung quanh điểm giữa của phần tử đó.

Để chuyển đổi một phần tử trong khung tham chiếu riêng, hãy đặt phần tử đó vào giữa 2 bản dịch khác: bản dịch T1 ở trước di chuyển trung tâm phần tử đến điểm gốc của trang và bản dịch T2 sau di chuyển phần tử về vị trí ban đầu. Thao tác đầy đủ có thể được biểu thị dưới dạng một sản phẩm 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 sang gốc. Các điểm này sẽ 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 dưới dạng 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 các 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 trước sản phẩm T2 * B * T1 và áp dụng sản phẩm đó dưới dạng một phép biến đổi RELATIVE. Về mặt hoạt động API, cả hai đều hiệu quả hơn, sau đó gửi từng yêu cầu biến đổi riêng lẻ.

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

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

Kỹ thuật Hình dạng Video Bảng
Bản dịch
Điều chỉnh theo tỷ lệ Không**
Cắt Không Không

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

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

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ị mà bạn cung cấp bằng các giá trị khác có cùng giao diện. Nhìn chung, nếu viết một kích thước bằng API, bạn không thể đảm bảo sẽ 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 việc chuyển đổi.