Freigeben über


Erweiterte Übersetzung

Die folgende Abbildung zeigt zwei Interpretationen der Übersetzung.

Abbildung, die zuerst die einfache Übersetzung zeigt, in der ein Objekt ohne Drehung verschoben wird, und dann die erweiterte Übersetzung zeigt, die das Verschieben mit Drehung beinhaltet.

In Beispiel A, dem einfachen Übersetzungsbeispiel, wird das Objekt ohne Drehung verschoben. In Beispiel B wird das Objekt während der Übersetzung gedreht, je nachdem, wo sich der Objektkontaktpunkt befindet. Wenn Sie die Einzelfingerrotation aktivieren, wie unter Einzelfingerrotation beschrieben, können Sie die komplexe Übersetzung aktivieren. Das folgende Diagramm zeigt die verschiedenen Komponenten der Einzelfingerrotation bei der Übersetzung.

Abbildung, die die Komponenten der Einzelfingerrotation zeigt: pivotpointx, pivotpointy und pivotradius

Beim Verschieben des Objekts wird der Radius neu berechnet und der Pivotpunkt verschoben.

Der folgende Code zeigt eine Möglichkeit, dies in einer Implementierung von ManipulationDelta zu tun, die eine komplexe Übersetzung ermöglicht.

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

Hinweis

Objekttransformationen treten auf, bevor die Pivotpunkte und der Radius berechnet werden. Auf diese Weise wird das Objekt ordnungsgemäß verschoben, wenn der Benutzer eine Erweiterung für das Objekt ausführt, während es sich bewegt.

 

Manipulationen