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

Hướng dẫn này mô tả cách bạn đặt kích thước và định vị các phần tử trang bằng phép biến đổi affine. Để được giới thiệu khái niệm về phép biến đổi affin, vui lòng xem hướng dẫn về khái niệm 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 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 các thao tác chuyển đổi ở một trong 2 applyModes:

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

  • 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à rất quan trọng):

$$A' = BA$$

Phép biến đổi tương đối sẽ 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 hình dạng 100 điểm sang trái hoặc xoay 40 độ. Phép biến đổi tuyệt đối loại bỏ thông tin vị trí và tỷ lệ hiện có; ví dụ: di chuyển một hình dạng đến 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 diễn 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 sử dụng phép nhân ma trận – thường có thể giảm chi phí.

Đối với một số toán tử, bạn phải biết tham số biến đổi hiện có của một phần tử là gì. 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

Dị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ử đến 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, kiểu 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ệ

Điều chỉnh tỷ lệ là hành động kéo giãn hoặc ép một phần tử dọc 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:

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

Bạn có thể trực tiếp sử dụng dạng 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 khả năng cắt và dịch chuyển 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

Phép biến đổi xoay sẽ xoay phần tử trang xung quanh một điểm, sử dụng các tham số chia tỷ lệ và cắt. Ma trận biến đổi xoay cơ bản có dạng như 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}$$

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

Reflection

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

Tương tự như việc điều chỉnh theo tỷ lệ, bạn có thể sử dụng trực tiếp dạng ma trận này dưới dạng 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 bản dịch, hãy chuyển sang khung tham chiếu của phần tử đó.

Khung tham chiếu của phần tử

Việc áp dụng trực tiếp các phép biến đổi tỷ lệ, phản chiếu hoặc xoay cơ bản thành 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ụ: chế độ xoay cơ bản sẽ xoay phần tử về nguồn gốc của trang (góc trên bên trái). Tuy nhiên, bạn có thể thao tác trong khung tham chiếu của chính phần tử đó, chẳng hạn như để xoay phần tử xung quanh điểm giữa.

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

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

Một số trường định 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 nhất định với các trường định kích thước và định vị.

Trường Hình dạng Video Bảng
Bản dịch
Điều chỉnh quy mô Không**
Cắt Không Không

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

Tất cả các trường định kích thước và định vị có thể cho kết quả ngoài dự kiế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 cập 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 một kích thước và biến đổi để cung cấp một kết quả trực quan 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 mang lại cùng hình ảnh. Nhìn chung, nếu viết một kích thước bằng API, chúng tôi không đả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 biến đổi.