Single-Finger回転
このセクションでは、ピボット ポイントを使用してオブジェクトを回転させる方法について説明します。
次の図は、1 本指での回転を示しています。
例 A では、オブジェクトは回転ジェスチャを使用して、オブジェクトの中心点を中心に回転します。 例 B では、オブジェクトの端を中心に 1 本の指を動かしてオブジェクトを回転させます。 操作プロセッサは、ピボット ポイントとピボット半径の値を使用して、この回転を有効にします。 次の図は、1 本指の回転のコンポーネントを示しています。
PivotPointX、PivotPointY、および PivotRadius の値を設定すると、後続の翻訳メッセージに回転が組み込まれます。 ピボット半径が大きいほど、オブジェクトを回転させるには、x と y の変化が大きくなります。 次のコードは、操作プロセッサでこれらの値を設定する方法を示しています。
HRESULT STDMETHODCALLTYPE CManipulationEventSink::ManipulationDelta(
/* [in] */ FLOAT x,
/* [in] */ FLOAT y)
{
m_cStartedEventCount ++;
// Set the pivot point to the object's center and then set the radius
// to the distance from the center to the edge of the object.
m_pManip->put_PivotPointX(m_objectRef->xPos);
m_pManip->put_PivotPointY(m_objectRef->yPos);
float fPivotRadius = (FLOAT)(sqrt(pow(m_dObj->get_Width()/2, 2) + pow(m_dObj->get_Height()/2, 2)))*0.4f;
m_pManip->put_PivotRadius(fPivotRadius);
return S_OK;
}
前の例では、オブジェクトの端までの距離 (40% にスケーリング) がピボット半径として使用されています。 オブジェクト サイズが考慮されるため、この計算はすべてのオブジェクトデルタに対して有効です。 オブジェクトが拡大すると、ピボット半径が大きくなります。 この値とオブジェクトの中心 x と y の値は、ピボット ポイントを中心にオブジェクトを回転させるために操作プロセッサに渡されます。
注意
PivotRadius 値は 0.0 ~ 1.0 の間にしないでください。
関連トピック