Partilhar via


Tradução Avançada

A ilustração a seguir mostra duas interpretações de tradução.

ilustração que primeiro mostra a tradução simples, na qual um objeto é movido sem rotação e, em seguida, mostra a tradução avançada, que envolve a movimentação com rotação

No exemplo A, o exemplo de tradução simples, o objeto é movido sem rotação. No exemplo B, o objeto é girado durante a tradução, dependendo de onde está o ponto de contato do objeto. Se você habilitar a rotação de dedo único, conforme descrito em Rotação de Dedo Único, poderá habilitar a tradução complexa. O diagrama a seguir mostra os vários componentes da rotação de dedo único quando você está executando a tradução.

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

Conforme o objeto é movido, o raio é recalculado e o ponto dinâmico é movido.

O código a seguir mostra uma maneira de fazer isso em uma implementação de ManipulationDelta que permite a tradução complexa.

    //Apply transformation based on rotationDelta (in radians)
    FLOAT rads = 180.0f / 3.14159f;
    m_dObj->Rotate(rotationDelta*rads, x, y);

    // Apply translation based on scaleDelta
    m_dObj->Scale(scaleDelta);

    // Apply translation based on translationDelta
    m_dObj->Translate(translationDeltaX, translationDeltaY);

    // Set values for one finger rotations
    FLOAT fPivotRadius = (FLOAT)(m_dObj->get_Width() + m_dObj->get_Height())/8.0f;
    FLOAT fPivotPtX = m_dObj->get_CenterX();
    FLOAT fPivotPtY = m_dObj->get_CenterY();
        
    m_manip->put_PivotPointX(fPivotPtX);
    m_manip->put_PivotPointY(fPivotPtY);
    m_manip->put_PivotRadius(fPivotRadius);       
   

Observação

As transformações de objeto ocorrem antes que os pontos dinâmicos e o raio sejam calculados. Dessa forma, o objeto será movido corretamente se o usuário executar a expansão no objeto enquanto ele estiver se movendo.

 

Manipulações