У меня есть ModelVisual3D куба, и я хочу анимировать его для вращения вокруг его оси для 360 градусов. Я делаю RoationTransform3D, который я говорю для вращения 360, но он не вращается вообще, также если Вы говорите, что 270 градусов он поворачивает только 90 градусов, но в противоположном направлении. Я предполагаю его, компьютер вычисляет "кратчайший путь" вращения. Лучшее решение, которое я предложил, состоит в том, чтобы заставить одну анимацию повернуться 180 и после того, как это заканчивается, называют еще 180 для завершения полного вращения. Существует ли способ сделать это в одной анимации?
RotateTransform3D rotateTransform = new RotateTransform3D();
myCube.Model.Transform = rotateTransform;
AxisAngleRotation3D rotateAxis =
new AxisAngleRotation3D(new Vector3D(0, 1, 0), 180/*or 360*/);
Rotation3DAnimation rotateAnimation =
new Rotation3DAnimation(rotateAxis, TimeSpan.FromSeconds(2));
rotateTransform.BeginAnimation(RotateTransform3D.RotationProperty,
rotateAnimation);
Первое, что я бы попробовал, это перепрофилировать ваши единичные тесты, чтобы поделиться настроенным кодом между тестами с помощью рефакторинга на метод, который настраивает макеты и ожидания. Параметризуйте метод так, чтобы ваши ожидания были настраиваемыми. Может потребоваться один или, возможно, несколько из этих методов набора в зависимости от того, насколько аналогична набор от теста к тесту.
-121--1918204-Тесты слишком сложны.
Вы должны проверить аспекты вашего класса, а не писать unittest для каждого члена вашего класса. Неразборчивость не должна охватывать всю функциональность члена.
-121--1918208-Насколько я понимаю, Rotation3DAnimation использует сферическую линейную интерполяцию, поэтому он всегда найдет кратчайший путь.
Одним из обходных путей является использование Rotation3DAnimationUsingKeyFrames: установите ключевой кадр на 120, 240 и 360, и вы должны быть хороши.
Извините, что сейчас нет кода, у меня нет WPF на этой машине...
- Джасон
Я знаю, что на этот вопрос уже был дан ответ, но в поисках лучшего способа сделать это я нашел такую альтернативу:
Вы можете установить значение поворота на 180 (или половину того, что вы хотите повернуть), а затем установите для поведения повторения значение повторения дважды и для параметра IsCummulative значение true.