Udostępnij za pomocą


Tłumaczenie zaawansowane

Na poniższej ilustracji przedstawiono dwie interpretacje tłumaczenia.

ilustracja przedstawiająca najpierw proste tłumaczenie, w którym obiekt jest przenoszony bez obrotu, a następnie przedstawia zaawansowane tłumaczenie, które obejmuje przejście z rotacją

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.

ilustracja przedstawiająca składniki obrotu jednym palcem: punkty przestawne, punkty przestawne i pivotradius

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.

 

manipulacje