Single-Finger旋转

本部分介绍如何使用透视点旋转对象。

下图演示了单指旋转。

显示两种类型的单指旋转的插图:围绕中心或边缘周围

在示例 A 中,通过使用旋转手势围绕对象的中心点旋转对象。 在示例 B 中,通过在对象的边缘移动一根手指来旋转对象。 操作处理器使用透视点和透视半径值启用此旋转。 下图演示了单指旋转的组件。

显示单指旋转组件的插图:pivotpointx、pivotpointy 和 pivotradius

设置 PivotPointXPivotPointYPivotRadius 值后,后续转换消息将包含旋转。 透视半径越大,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 之间。

 

操作

PivotRadius

PivotPointX

PivotPointY