Single-Finger 旋转
本部分介绍如何使用透视点旋转对象。
下图演示了单指旋转。
显示两种类型的单指旋转的插图
在示例 A 中,该对象通过使用旋转手势围绕对象的中心点旋转。 在示例 B 中,通过移动对象边缘的一根手指来旋转对象。 作处理器使用透视点和透视半径值启用此旋转。 下图说明了单指旋转的组件。
显示单指旋转组件的
设置 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 之间。
相关主题