Traduzione avanzata
La figura seguente mostra due interpretazioni della traduzione.
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.
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.
Argomenti correlati