Compartir a través de


Traducción avanzada

En la ilustración siguiente se muestran dos interpretaciones de la traducción.

ilustración que muestra primero la traducción simple, en la que se mueve un objeto sin rotación y, a continuación, muestra la traducción avanzada, lo que implica mover con rotació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.

ilustración que muestra los componentes de la rotación de un solo dedo: pivotpointx, pivotpointy y pivotradius

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.

 

manipulaciones de