Convenience function for common composite transform
This commit is contained in:
committed by
Andreas Hocevar
parent
4cde6a0a6d
commit
a655234cc3
@@ -166,6 +166,32 @@ ol.transform.translate = function(transform, dx, dy) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a composite transform given an initial translation, scale, rotation, and
|
||||||
|
* final translation (in that order only, not commutative).
|
||||||
|
* @param {!ol.Transform} transform The transform (will be modified in place).
|
||||||
|
* @param {number} dx1 Initial translation x.
|
||||||
|
* @param {number} dy1 Initial translation y.
|
||||||
|
* @param {number} sx Scale factor x.
|
||||||
|
* @param {number} sy Scale factor y.
|
||||||
|
* @param {number} angle Rotation (in counter-clockwise radians).
|
||||||
|
* @param {number} dx2 Final translation x.
|
||||||
|
* @param {number} dy2 Final translation y.
|
||||||
|
* @return {!ol.Transform} The composite transform.
|
||||||
|
*/
|
||||||
|
ol.transform.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
|
||||||
|
var sin = Math.sin(angle);
|
||||||
|
var cos = Math.cos(angle);
|
||||||
|
transform[0] = sx * cos;
|
||||||
|
transform[1] = sy * sin;
|
||||||
|
transform[2] = -sx * sin;
|
||||||
|
transform[3] = sy * cos;
|
||||||
|
transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;
|
||||||
|
transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;
|
||||||
|
return transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invert the given transform.
|
* Invert the given transform.
|
||||||
* @param {!ol.Transform} transform Transform.
|
* @param {!ol.Transform} transform Transform.
|
||||||
|
|||||||
@@ -72,6 +72,29 @@ describe('ol.transform', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('ol.transform.compose()', function() {
|
||||||
|
it('composes a translate, scale, rotate, translate transform', function() {
|
||||||
|
var dx1 = 3;
|
||||||
|
var dy1 = 4;
|
||||||
|
var sx = 1.5;
|
||||||
|
var sy = -1.5;
|
||||||
|
var angle = Math.PI / 3;
|
||||||
|
var dx2 = -dx1 / 2;
|
||||||
|
var dy2 = -dy1 / 2;
|
||||||
|
|
||||||
|
var expected = ol.transform.create();
|
||||||
|
ol.transform.translate(expected, dx1, dy1);
|
||||||
|
ol.transform.scale(expected, sx, sy);
|
||||||
|
ol.transform.rotate(expected, angle);
|
||||||
|
ol.transform.translate(expected, dx2, dy2);
|
||||||
|
|
||||||
|
var composed = ol.transform.create();
|
||||||
|
var composedReturn = ol.transform.compose(composed, dx1, dy1, sx, sy, angle, dx2, dy2);
|
||||||
|
expect(composed).to.equal(composedReturn);
|
||||||
|
expect(composed).to.eql(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('ol.transform.invert()', function() {
|
describe('ol.transform.invert()', function() {
|
||||||
it('inverts a transform', function() {
|
it('inverts a transform', function() {
|
||||||
var transform = [1, 0, 1, 0, 1, 0];
|
var transform = [1, 0, 1, 0, 1, 0];
|
||||||
|
|||||||
Reference in New Issue
Block a user