ページ要素のサイズと配置

このガイドでは、アフィン変換を使用してページ要素のサイズと配置を行う方法について説明します。アフィン変換のコンセプトの概要については、変換のコンセプト ガイドをご覧ください。

要素の変換

スライド API を使用すると、ページ上の要素の位置やサイズを変更できます。これを行うには、まず適用する必要がある変換の種類を決定し、1 つ以上の UpdatePageElementTransformRequest 要素を含む presentations.batchUpdate メソッドを使用してその変換を適用します。

変換は、次の 2 つの applyModes のいずれかで行うことができます。

  • ABSOLUTE 変換は、要素の既存の変換行列を置き換えます。変換更新リクエストから省略したパラメータはゼロに設定されます。

  • 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 変換として直接使用できますが、要素のレンダリングされた傾斜と移動に影響する可能性もあります。傾斜や移動に影響を与えずに要素を拡大縮小するには、基準フレームにシフトします。

rotation

回転変換は、Scaling パラメータとせん断パラメータを使用して、ある地点の周囲にページ要素を回転させます。基本的な回転変換行列の形式は次のとおりです。ここで、回転角(ラジアン)は 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 変換として適用します。これらは API オペレーションの点でより効率的であり、変換リクエストを個別に送信します。

制限事項

一部のサイズ設定フィールドと配置フィールドは、一部の種類のページ要素と互換性がありません。次の表は、特定のページ要素とサイズフィールドと配置フィールドの互換性をまとめたものです。

項目 動画 Table
翻訳
選択肢 ×**
シェア × ×

** 表の行と列のディメンションを更新するには、UpdateTableRowPropertiesRequestUpdateTableColumnPropertiesRequest を使用します。

ページ要素に傾斜がある場合、すべてのサイズ設定と配置フィールドで予期しない結果が生じる可能性があります。すべての制限は変更される場合があります。最新情報については、Google スライド API をご覧ください。

スライド API は値をリファクタリングする場合があります。

ページ要素を作成するときに、特定の視覚的結果をもたらすサイズと変換を指定できます。ただし、API は指定された値を、同じ外観を持つ他の値に置き換える場合があります。一般に、API を使用してサイズを記述した場合、同じサイズが返される保証はありません。ただし、変換を考慮すると、同じ結果が得られます。