Condividi tramite


Traduzione avanzata

La figura seguente mostra due interpretazioni della traduzione.

figura che mostra prima la traduzione semplice, in cui un oggetto viene spostato senza rotazione e quindi mostra la traduzione avanzata, che comporta lo spostamento con rotazione

Nell'esempio A, l'esempio di traduzione semplice, l'oggetto viene spostato senza rotazione. Nell'esempio B, l'oggetto viene ruotato durante la traduzione, a seconda della posizione in cui è il punto di contatto dell'oggetto. Se si abilita la rotazione a dito singolo come descritto in Rotazione a dito singolo, è possibile abilitare la traduzione complessa. Il diagramma seguente illustra i vari componenti della rotazione a dito singolo quando si esegue la traduzione.

figura che mostra i componenti della rotazione a dito singolo: pivotpointx, pivotpointy e pivotradius

Quando l'oggetto viene spostato, il raggio viene ricalcolato e il punto pivot viene spostato.

Il codice seguente illustra un modo per eseguire questa operazione in un'implementazione di ManipulationDelta che consente la traduzione complessa.

    //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);       
   

Nota

Le trasformazioni degli oggetti si verificano prima che vengano calcolati i punti pivot e il raggio. In questo modo l'oggetto verrà spostato correttamente se l'utente esegue l'espansione sull'oggetto durante lo spostamento.

 

Modifiche