Поворот Single-Finger
В этом разделе объясняется, как повернуть объект с помощью точки сводных данных.
На следующем рисунке показан поворот одним пальцем.
В примере A объект поворачивается вокруг центральной точки объекта с помощью жеста поворота. В примере B объект поворачивается путем перемещения одним пальцем по краю объекта. Обработчик манипуляций обеспечивает такой поворот с помощью значений точки вращения и радиуса вращения. На следующем рисунке показаны компоненты поворота одним пальцем.
После установки значений 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.
Связанные темы