Traduction avancée

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

Illustration montrant tout d’abord une traduction simple, dans laquelle un objet est déplacé sans rotation, puis affiche une traduction avancée, qui implique le déplacement avec la rotation

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.

Illustration montrant les composants de rotation à un seul doigt : pivotpointx, pivotpointy et pivotradius

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.

Manipulations