Tradução Avançada
A ilustração a seguir mostra duas interpretações de traduçã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.
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.
Tópicos relacionados