Use shortest rotation delta for animation
This commit is contained in:
+5
-1
@@ -15,6 +15,7 @@ goog.require('ol.extent');
|
|||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
goog.require('ol.geom.Polygon');
|
goog.require('ol.geom.Polygon');
|
||||||
goog.require('ol.geom.SimpleGeometry');
|
goog.require('ol.geom.SimpleGeometry');
|
||||||
|
goog.require('ol.math');
|
||||||
goog.require('ol.obj');
|
goog.require('ol.obj');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.proj.Units');
|
goog.require('ol.proj.Units');
|
||||||
@@ -295,7 +296,10 @@ ol.View.prototype.animate = function(var_args) {
|
|||||||
|
|
||||||
if (options.rotation !== undefined) {
|
if (options.rotation !== undefined) {
|
||||||
animation.sourceRotation = rotation;
|
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;
|
rotation = animation.targetRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
it('calls a callback when animation completes', function(done) {
|
||||||
var view = new ol.View({
|
var view = new ol.View({
|
||||||
center: [0, 0],
|
center: [0, 0],
|
||||||
|
|||||||
Reference in New Issue
Block a user