Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Na poniższej ilustracji przedstawiono dwie interpretacje tłumaczenia.
Na przykład A, prosty przykład tłumaczenia, obiekt jest przenoszony bez obrotu. Na przykład B obiekt jest obracany podczas tłumaczenia, w zależności od tego, gdzie znajduje się punkt kontaktu obiektu. Jeśli włączysz obrót jednym palcem zgodnie z opisem w Single-Finger Rotacja, możesz włączyć złożone tłumaczenie. Na poniższym diagramie przedstawiono różne składniki obrotu jednym palcem podczas wykonywania tłumaczenia.
W miarę przenoszenia obiektu promień jest obliczany ponownie, a punkt przestawny jest przenoszony.
Poniższy kod pokazuje jeden ze sposobów, w jaki można to zrobić w implementacji ManipulationDelta, która umożliwia złożone tłumaczenie.
//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);
Nuta
Przekształcenia obiektów są wykonywane przed obliczeniu punktów przestawnych i promienia. W ten sposób obiekt zostanie przeniesiony poprawnie, jeśli użytkownik wykonuje rozszerzenie obiektu podczas jego przenoszenia.
Tematy pokrewne