高级翻译
下图显示了翻译的两种解释。
在示例 A 中,简单转换示例将移动对象而不旋转。 在示例 B 中,对象在转换期间旋转,具体取决于对象接触点的位置。 如果按 Single-Finger 旋转中所述启用单指旋转,则可以启用复杂的翻译。 下图显示了执行翻译时单指旋转的各种组件。
显示单指旋转组件的
移动对象时,将重新计算半径,并移动透视点。
以下代码演示了在实现 ManipulationDelta 中可实现复杂翻译的一种方法。
//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);
注意
在计算透视点和半径之前发生对象转换。 这样,如果用户在移动对象时对对象执行扩展,则对象将正确移动。
相关主题