Skip to content
Browse files

Add a snapToZero rotation constraint

  • Loading branch information...
1 parent 8322591 commit f20cf83c9467c3dd890d699c51e5dab4452ce65e @elemoine elemoine committed with tschaub Mar 4, 2013
Showing with 67 additions and 1 deletion.
  1. +20 −0 src/ol/rotationconstraint.js
  2. +1 −1 src/ol/view2d.js
  3. +36 −0 test/spec/ol/rotationconstraint.test.js
  4. +10 −0 test/spec/ol/view2d.test.js
View
20 src/ol/rotationconstraint.js
@@ -37,3 +37,23 @@ ol.RotationConstraint.createSnapToN = function(n) {
}
};
};
+
+
+/**
+ * @param {number=} opt_tolerance Tolerance.
+ * @return {ol.RotationConstraintType} Rotation constraint.
+ */
+ol.RotationConstraint.createSnapToZero = function(opt_tolerance) {
+ var tolerance = opt_tolerance || 0.1;
+ return function(rotation, delta) {
+ if (goog.isDef(rotation)) {
+ if (Math.abs(rotation + delta) <= tolerance) {
+ return 0;
+ } else {
+ return rotation + delta;
+ }
+ } else {
+ return undefined;
+ }
+ };
+};
View
2 src/ol/view2d.js
@@ -387,6 +387,6 @@ ol.View2D.createConstraints_ = function(view2DOptions) {
zoomFactor, maxResolution, numZoomLevels - 1);
}
// FIXME rotation constraint is not configurable at the moment
- var rotationConstraint = ol.RotationConstraint.none;
+ var rotationConstraint = ol.RotationConstraint.createSnapToZero();
return new ol.Constraints(resolutionConstraint, rotationConstraint);
};
View
36 test/spec/ol/rotationconstraint.test.js
@@ -0,0 +1,36 @@
+goog.provide('ol.test.RotationConstraint');
+
+describe('ol.RotationConstraint', function() {
+
+ describe('SnapToZero', function() {
+
+ it('returns expected rotation value', function() {
+ var rotationConstraint = ol.RotationConstraint.createSnapToZero(0.3);
+
+ expect(rotationConstraint(0.1, 0)).toEqual(0);
+ expect(rotationConstraint(0.2, 0)).toEqual(0);
+ expect(rotationConstraint(0.3, 0)).toEqual(0);
+ expect(rotationConstraint(0.4, 0)).toEqual(0.4);
+
+ expect(rotationConstraint(-0.1, 0)).toEqual(0);
+ expect(rotationConstraint(-0.2, 0)).toEqual(0);
+ expect(rotationConstraint(-0.3, 0)).toEqual(0);
+ expect(rotationConstraint(-0.4, 0)).toEqual(-0.4);
+
+ expect(rotationConstraint(1, -0.9)).toEqual(0);
+ expect(rotationConstraint(1, -0.8)).toEqual(0);
+ // floating-point arithmetic
+ expect(rotationConstraint(1, -0.7)).not.toEqual(0);
+ expect(rotationConstraint(1, -0.6)).toEqual(0.4);
+
+ expect(rotationConstraint(-1, 0.9)).toEqual(0);
+ expect(rotationConstraint(-1, 0.8)).toEqual(0);
+ // floating-point arithmetic
+ expect(rotationConstraint(-1, 0.7)).not.toEqual(0);
+ expect(rotationConstraint(-1, 0.6)).toEqual(-0.4);
+ });
+
+ });
+});
+
+goog.require('ol.RotationConstraint');
View
10 test/spec/ol/view2d.test.js
@@ -49,6 +49,16 @@ describe('ol.View2D', function() {
});
});
+
+ describe('create rotation constraint', function() {
+ it('gives a correct rotation constraint function', function() {
+ var options = {};
+ var fn = ol.View2D.createConstraints_(options).rotation;
+ expect(fn(0.01, 0)).toEqual(0);
+ expect(fn(0.15, 0)).toEqual(0.15);
+ });
+ });
+
});
});

0 comments on commit f20cf83

Please sign in to comment.
Something went wrong with that request. Please try again.