Поделиться через


Поворот Single-Finger

В этом разделе объясняется, как повернуть объект с помощью точки сводных данных.

На следующем рисунке показан поворот одним пальцем.

Иллюстрация, показывающая два типа поворота одним пальцем: по центру или по краю

В примере A объект поворачивается вокруг центральной точки объекта с помощью жеста поворота. В примере B объект поворачивается путем перемещения одним пальцем по краю объекта. Обработчик манипуляций обеспечивает такой поворот с помощью значений точки вращения и радиуса вращения. На следующем рисунке показаны компоненты поворота одним пальцем.

Иллюстрация, показывающая компоненты поворота одним пальцем: pivotpointx, pivotpointy и pivotradius

После установки значений PivotPointX, PivotPointY и PivotRadius последующие сообщения перевода будут включать ротацию. Чем больше радиус поворота, тем больше должно быть изменение в x и y для поворота объекта. В следующем коде показано, как эти значения можно задать в обработчике манипуляций.

HRESULT STDMETHODCALLTYPE CManipulationEventSink::ManipulationDelta( 
    /* [in] */ FLOAT x,
    /* [in] */ FLOAT y)
{
    m_cStartedEventCount ++;

    // Set the pivot point to the object's center and then set the radius 
    // to the distance from the center to the edge of the object.
    m_pManip->put_PivotPointX(m_objectRef->xPos);
    m_pManip->put_PivotPointY(m_objectRef->yPos);
    
    float fPivotRadius = (FLOAT)(sqrt(pow(m_dObj->get_Width()/2, 2) + pow(m_dObj->get_Height()/2, 2)))*0.4f;
    
    m_pManip->put_PivotRadius(fPivotRadius);
  

    return S_OK;
}    
     

В предыдущем примере расстояние до края объекта (масштабируемого до 40 процентов) используется в качестве радиуса вращения. Так как учитывается размер объекта, это вычисление допустимо для каждого разностного объекта. По мере масштабирования объекта радиус вращения увеличивается. Это значение и значения x и y в центре объекта передаются обработчику манипуляций для поворота объекта вокруг точки вращения.

Примечание

Значение PivotRadius никогда не должно находиться в диапазоне от 0,0 до 1,0.

 

Манипуляции

PivotRadius

PivotPointX

Сводная точка