Rotação de Single-Finger
Esta seção explica como girar um objeto usando um ponto dinâmico.
A imagem a seguir ilustra a rotação de um dedo único.
No exemplo A, o objeto é girado ao redor do ponto central do objeto usando o gesto de rotação. No exemplo B, o objeto é girado movendo um único dedo ao redor da borda do objeto. O processador de manipulação permite essa rotação usando valores de ponto dinâmico e raio dinâmico. A imagem a seguir ilustra os componentes da rotação de dedo único.
Depois de definir os valores PivotPointX, PivotPointY e PivotRadius , as mensagens de tradução subsequentes incorporarão rotação. Quanto maior o raio dinâmico, maior será a alteração em x e y para girar o objeto. O código a seguir mostra como esses valores podem ser definidos no processador de manipulação.
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;
}
No exemplo anterior, a distância até a borda do objeto (dimensionada para 40%) é usada como o raio dinâmico. Como o tamanho do objeto é levado em consideração, esse cálculo é válido para cada delta de objeto. À medida que o objeto é dimensionado, o raio dinâmico cresce. Esse valor e os valores central x e y do objeto são passados para o processador de manipulação para girar o objeto em torno do ponto dinâmico.
Observação
O valor de PivotRadius nunca deve estar entre 0,0 e 1,0.
Tópicos relacionados