Traduction avancée
L’illustration suivante montre deux interprétations de la traduction.

Dans l’exemple A, l’exemple de traduction simple, l’objet est déplacé sans rotation. Dans l’exemple B, l’objet est pivoté pendant la traduction, en fonction de l’emplacement du point de contact de l’objet. Si vous activez la rotation à un seul doigt comme décrit dans rotation à un seul doigt, vous pouvez activer la traduction complexe. Le diagramme suivant montre les différents composants de la rotation à un seul doigt lorsque vous effectuez une traduction.

Lorsque l’objet est déplacé, le rayon est recalculé et le point pivot est déplacé.
Le code suivant illustre une méthode permettant d’effectuer cette opération dans une implémentation de ManipulationDelta qui permet une traduction complexe.
//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);
Notes
Les transformations d’objet se produisent avant le calcul des points pivot et du rayon. De cette façon, l’objet se déplace correctement si l’utilisateur effectue une expansion sur l’objet pendant son déplacement.