Rotação de Single-Finger

Esta seção explica como girar um objeto usando um ponto dinâmico.

A imagem a seguir ilustra a rotação de um dedo único.

ilustração mostrando dois tipos de rotação de dedo único: ao redor do centro ou ao redor da borda

No exemplo A, o objeto é girado ao redor do ponto central do objeto usando o gesto de rotação. No exemplo B, o objeto é girado movendo um único dedo ao redor da borda do objeto. O processador de manipulação permite essa rotação usando valores de ponto dinâmico e raio dinâmico. A imagem a seguir ilustra os componentes da rotação de dedo único.

ilustração mostrando os componentes da rotação de dedo único: pivotpointx, pivotpointy e pivotradius

Depois de definir os valores PivotPointX, PivotPointY e PivotRadius , as mensagens de tradução subsequentes incorporarão rotação. Quanto maior o raio dinâmico, maior será a alteração em x e y para girar o objeto. O código a seguir mostra como esses valores podem ser definidos no processador de manipulação.

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;
}    
     

No exemplo anterior, a distância até a borda do objeto (dimensionada para 40%) é usada como o raio dinâmico. Como o tamanho do objeto é levado em consideração, esse cálculo é válido para cada delta de objeto. À medida que o objeto é dimensionado, o raio dinâmico cresce. Esse valor e os valores central x e y do objeto são passados para o processador de manipulação para girar o objeto em torno do ponto dinâmico.

Observação

O valor de PivotRadius nunca deve estar entre 0,0 e 1,0.

 

Manipulações

PivotRadius

PivotPointX

PivotPointY