Merge pull request #6965 from ahocevar/shortest-rotation

Use shortest rotation delta for animation
This commit is contained in:
Andreas Hocevar
2017-06-28 13:01:33 +02:00
committed by GitHub
2 changed files with 20 additions and 1 deletions

View File

@@ -15,6 +15,7 @@ goog.require('ol.extent');
goog.require('ol.geom.GeometryType');
goog.require('ol.geom.Polygon');
goog.require('ol.geom.SimpleGeometry');
goog.require('ol.math');
goog.require('ol.obj');
goog.require('ol.proj');
goog.require('ol.proj.Units');
@@ -295,7 +296,10 @@ ol.View.prototype.animate = function(var_args) {
if (options.rotation !== undefined) {
animation.sourceRotation = rotation;
animation.targetRotation = options.rotation;
var delta =
ol.math.modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) -
Math.PI;
animation.targetRotation = rotation + delta;
rotation = animation.targetRotation;
}

View File

@@ -494,6 +494,21 @@ describe('ol.View', function() {
});
});
it('takes the shortest angle to the target rotation', function(done) {
var view = new ol.View({
center: [0, 0],
zoom: 0,
rotation: Math.PI / 180 * 1
});
view.animate({
rotation: Math.PI / 180 * 359,
duration: 0
}, function() {
expect(view.getRotation()).to.roughlyEqual(Math.PI / 180 * -1, 1e-12);
done();
});
});
it('calls a callback when animation completes', function(done) {
var view = new ol.View({
center: [0, 0],