Partilhar via


Single-Finger Rotação

Esta seção explica como girar um objeto usando um ponto de pivô.

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

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

No exemplo A, o objeto é girado em torno 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 de pivô e raio de pivô. A imagem a seguir ilustra os componentes da rotação de um único dedo.

ilustração mostrando os componentes da rotação de um único dedo: Pivotpointx, Pivotpointy e PivotRadius

Depois de definir o PivotPointX , PivotPointY e valores de PivotRadius, as mensagens de conversão subsequentes incorporarão rotação. Quanto maior o raio de pivô, maior deve ser a mudança 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 raio de pivô. 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 de pivô cresce. Esse valor e os valores x e y do centro do objeto são passados para o processador de manipulação para girar o objeto em torno do ponto de pivô.

Observação

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

 

Manipulações

PivotRadius

PivotPointX

PivotPointY