Traducción avanzada
En la ilustración siguiente se muestran dos interpretaciones de la traducción.
En el ejemplo A, el ejemplo de traducción simple, el objeto se mueve sin rotación. En el ejemplo B, el objeto se gira durante la traducción, dependiendo de dónde esté el punto de contacto del objeto. Si habilita la rotación de un solo dedo como se describe en Single-Finger Rotación, puede habilitar la traducción compleja. En el diagrama siguiente se muestran los distintos componentes de la rotación de un solo dedo al realizar la traducción.
A medida que se mueve el objeto, se vuelve a calcular el radio y se mueve el punto de pivote.
El código siguiente muestra una manera de hacerlo en una implementación de ManipulationDelta que habilita la traducción compleja.
//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
Las transformaciones de objeto se producen antes de que se calculen los puntos dinámicos y el radio. De esta manera, el objeto se moverá correctamente si el usuario realiza la expansión en el objeto mientras se mueve.
Temas relacionados