Erweiterte Übersetzung
Die folgende Abbildung zeigt zwei Interpretationen der Übersetzung.
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.
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.
Zugehörige Themen