From 374f916b3ac2b5755cb35deec34b27e3ba9a3da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 15 Dec 2014 17:30:57 +0100 Subject: [PATCH] Add ol.geom.flat.transform.translate --- src/ol/geom/flat/transformflatgeom.js | 31 ++++++++++++++++++- ...mflatgeom.js => transformflatgeom.test.js} | 16 ++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) rename test/spec/ol/geom/flat/{transformflatgeom.js => transformflatgeom.test.js} (83%) diff --git a/src/ol/geom/flat/transformflatgeom.js b/src/ol/geom/flat/transformflatgeom.js index 574c8bcd33..7bb08e8a83 100644 --- a/src/ol/geom/flat/transformflatgeom.js +++ b/src/ol/geom/flat/transformflatgeom.js @@ -22,7 +22,7 @@ ol.geom.flat.transform.transform2D = var m13 = goog.vec.Mat4.getElement(transform, 1, 3); var dest = goog.isDef(opt_dest) ? opt_dest : []; var i = 0; - var j, jj; + var j; for (j = offset; j < end; j += stride) { var x = flatCoordinates[j]; var y = flatCoordinates[j + 1]; @@ -34,3 +34,32 @@ ol.geom.flat.transform.transform2D = } return dest; }; + + +/** + * @param {Array.} flatCoordinates Flat coordinates. + * @param {number} offset Offset. + * @param {number} end End. + * @param {number} stride Stride. + * @param {number} deltaX Delta X. + * @param {number} deltaY Delta Y. + * @param {Array.=} opt_dest Destination. + * @return {Array.} Transformed coordinates. + */ +ol.geom.flat.transform.translate = + function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) { + var dest = goog.isDef(opt_dest) ? opt_dest : []; + var i = 0; + var j, k; + for (j = offset; j < end; j += stride) { + dest[i++] = flatCoordinates[j] + deltaX; + dest[i++] = flatCoordinates[j + 1] + deltaY; + for (k = j + 2; k < j + stride; ++k) { + dest[i++] = flatCoordinates[k]; + } + } + if (goog.isDef(opt_dest) && dest.length != i) { + dest.length = i; + } + return dest; +}; diff --git a/test/spec/ol/geom/flat/transformflatgeom.js b/test/spec/ol/geom/flat/transformflatgeom.test.js similarity index 83% rename from test/spec/ol/geom/flat/transformflatgeom.js rename to test/spec/ol/geom/flat/transformflatgeom.test.js index dd3689bd52..c661116a88 100644 --- a/test/spec/ol/geom/flat/transformflatgeom.js +++ b/test/spec/ol/geom/flat/transformflatgeom.test.js @@ -62,6 +62,22 @@ describe('ol.geom.flat.transform', function() { }); + describe('ol.geom.flat.transform.translate', function() { + it('translates the coordinates array', function() { + var multiPolygon = new ol.geom.MultiPolygon([ + [[[0, 0, 2], [0, 1, 2], [1, 1, 2], [1, 0, 2], [0, 0, 2]]], + [[[2, 2, 3], [2, 3, 3], [3, 3, 3], [3, 2, 3], [2, 2, 3]]]]); + var flatCoordinates = multiPolygon.getFlatCoordinates(); + var deltaX = 1; + var deltaY = 2; + ol.geom.flat.transform.translate(flatCoordinates, 0, + flatCoordinates.length, multiPolygon.getStride(), + deltaX, deltaY, flatCoordinates); + expect(flatCoordinates).to.eql([ + 1, 2, 2, 1, 3, 2, 2, 3, 2, 2, 2, 2, 1, 2, 2, + 3, 4, 3, 3, 5, 3, 4, 5, 3, 4, 4, 3, 3, 4, 3]); + }); + }); });