rotation Single-Finger
Cette section explique comment faire pivoter un objet à l’aide d’un point croisé dynamique.
L’image suivante illustre la rotation d’un doigt unique.
Dans l’exemple A, l’objet est pivoté autour du point central de l’objet à l’aide du mouvement de rotation. Dans l’exemple B, l’objet est pivoté en déplaçant un seul doigt autour du bord de l’objet. Le processeur de manipulation permet cette rotation à l’aide de valeurs de point croisé dynamique et de rayon de tableau croisé dynamique. L’image suivante illustre les composants de la rotation d’un doigt.
Une fois que vous avez défini les valeurs PivotPointX, PivotPointY et PivotRadius , les messages de traduction suivants incorporent une rotation. Plus le rayon du tableau croisé dynamique est grand, plus la modification de x et y doit être importante pour faire pivoter l’objet. Le code suivant montre comment ces valeurs peuvent être définies dans le processeur de manipulation.
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;
}
Dans l’exemple précédent, la distance jusqu’au bord de l’objet (mise à l’échelle à 40 pour cent) est utilisée comme rayon de tableau croisé dynamique. Étant donné que la taille de l’objet est prise en considération, ce calcul est valide pour chaque delta d’objet. À mesure que l’objet est mis à l’échelle, le rayon du tableau croisé dynamique augmente. Cette valeur et les valeurs x et y au centre de l’objet sont passées au processeur de manipulation pour faire pivoter l’objet autour du point croisé dynamique.
Notes
La valeur PivotRadius ne doit jamais être comprise entre 0,0 et 1,0.
Rubriques connexes