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 之间。
相关主题