Partager via


Traduction avancée

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

illustration qui montre d’abord une traduction simple, dans laquelle un objet est déplacé sans rotation, puis montre la traduction avancée, ce 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 où se trouve le point de contact de l’objet. Si vous activez la rotation à doigt unique comme décrit dans Rotation à doigt unique, vous pouvez activer la traduction complexe. Le diagramme suivant montre les différents composants de la rotation à doigt unique lorsque vous effectuez une traduction.

illustration montrant les composants de la rotation à doigt unique : pivotpointx, pivotpointy et pivotradius

Lorsque l’objet est déplacé, le rayon est recalculé et le point de pivot est déplacé.

Le code suivant montre une façon de procéder 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 que les points de pivot et le rayon ne soient calculés. De cette façon, l’objet se déplace correctement si l’utilisateur effectue une expansion sur l’objet pendant son déplacement.

 

Manipulations