У меня есть простой 3D-куб, который я могу вращать, используя следующий код:
void mui3D_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
RotateTransform3D rotation = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0), mui.Model.Bounds.Location);
DoubleAnimation rotateAnim = new DoubleAnimation(0, 130d TimeSpan.FromMilliseconds(3000));
rotateAnim.Completed += new EventHandler(rotateAnim_Completed);
mui.Transform = rotation;
rotation.Rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnim);
}
Каждый раз, когда он выполняется, этот код поворачивает куб с помощью анимации вокруг оси Y на угол от 0 до 130 градусов.
Однако я хотел бы применить вращение «кумулятивно», чтобы любое предыдущее вращение учитывалось, и куб начинал каждое вращение с угла, который он завершил предыдущее вращение.
Например: конструктор анимации вместо того, чтобы требовать значения угла «от» и «до» для угла, просто поворачивает куб еще на 130 градусов в зависимости от текущего угла поворота.
Я мог бы легко использовать переменную-член, которая содержит текущий угол, передать ее анимации, а затем обновить ее после завершения анимации. Но мне интересно, существует ли стандартный подход, использующий WPF для достижения этой цели.