[Libreoffice-commits] online.git: loleaflet/src

Mihai Varga mihai.varga at collabora.com
Thu Jul 16 07:48:36 PDT 2015


 loleaflet/src/geometry/PolyUtil.js    |  141 +++++++++++++++++++++++++++++++++
 loleaflet/src/layer/tile/TileLayer.js |  143 ----------------------------------
 2 files changed, 142 insertions(+), 142 deletions(-)

New commits:
commit 8d22cb30899e747d7c6d2f5f8a4807d0c48eb927
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Thu Jul 16 17:47:40 2015 +0300

    loleaflet: moved 'rectanglesToPolygons' method to PolyUtils

diff --git a/loleaflet/src/geometry/PolyUtil.js b/loleaflet/src/geometry/PolyUtil.js
index f5afe08..f024159 100644
--- a/loleaflet/src/geometry/PolyUtil.js
+++ b/loleaflet/src/geometry/PolyUtil.js
@@ -51,3 +51,144 @@ L.PolyUtil.clipPolygon = function (points, bounds, round) {
 
 	return points;
 };
+
+L.PolyUtil.rectanglesToPolygons = function (rectangles, docLayer) {
+	// algorithm found here http://stackoverflow.com/questions/13746284/merging-multiple-adjacent-rectangles-into-one-polygon
+	var eps = 20;
+	// Glue rectangles if the space between them is less then eps
+	for (var i = 0; i < rectangles.length - 1; i++) {
+		for (var j = i + 1; j < rectangles.length; j++) {
+			for (var k = 0; k < rectangles[i].length; k++) {
+				for (var l = 0; l < rectangles[j].length; l++) {
+					if (Math.abs(rectangles[i][k].x - rectangles[j][l].x) < eps) {
+						rectangles[j][l].x = rectangles[i][k].x;
+					}
+					if (Math.abs(rectangles[i][k].y - rectangles[j][l].y) < eps) {
+						rectangles[j][l].y = rectangles[i][k].y;
+					}
+				}
+			}
+		}
+	}
+
+	var points = {};
+	for (i = 0; i < rectangles.length; i++) {
+		for (j = 0; j < rectangles[i].length; j++) {
+			if (points[rectangles[i][j]]) {
+				delete points[rectangles[i][j]];
+			}
+			else {
+				points[rectangles[i][j]] = rectangles[i][j];
+			}
+		}
+	}
+
+	function getKeys(points) {
+		var keys = [];
+		for (var key in points) {
+			if (points.hasOwnProperty(key)) {
+				keys.push(key);
+			}
+		}
+		return keys;
+	}
+
+	function xThenY(aStr, bStr) {
+		var a = aStr.match(/\d+/g);
+		a[0] = parseInt(a[0]);
+		a[1] = parseInt(a[1]);
+		var b = bStr.match(/\d+/g);
+		b[0] = parseInt(b[0]);
+		b[1] = parseInt(b[1]);
+
+		if (a[0] < b[0] || (a[0] === b[0] && a[1] < b[1])) {
+			return -1;
+		}
+		else if (a[0] === b[0] && a[1] === b[1]) {
+			return 0;
+		}
+		else {
+			return 1;
+		}
+	}
+
+	function yThenX(aStr, bStr) {
+		var a = aStr.match(/\d+/g);
+		a[0] = parseInt(a[0]);
+		a[1] = parseInt(a[1]);
+		var b = bStr.match(/\d+/g);
+		b[0] = parseInt(b[0]);
+		b[1] = parseInt(b[1]);
+
+		if (a[1] < b[1] || (a[1] === b[1] && a[0] < b[0])) {
+			return -1;
+		}
+		else if (a[0] === b[0] && a[1] === b[1]) {
+			return 0;
+		}
+		else {
+			return 1;
+		}
+	}
+
+	var sortX = getKeys(points).sort(xThenY);
+	var sortY = getKeys(points).sort(yThenX);
+
+	var edgesH = {};
+	var edgesV = {};
+
+	var len = getKeys(points).length;
+	i = 0;
+	while (i < len) {
+		var currY = points[sortY[i]].y;
+		while (i < len && points[sortY[i]].y === currY) {
+			edgesH[sortY[i]] = sortY[i + 1];
+			edgesH[sortY[i + 1]] = sortY[i];
+			i += 2;
+		}
+	}
+
+	i = 0;
+	while (i < len) {
+		var currX = points[sortX[i]].x;
+		while (i < len && points[sortX[i]].x === currX) {
+			edgesV[sortX[i]] = sortX[i + 1];
+			edgesV[sortX[i + 1]] = sortX[i];
+			i += 2;
+		}
+	}
+
+	var polygons = [];
+	var edgesHKeys = getKeys(edgesH);
+	while (edgesHKeys.length > 0) {
+		var p = [[edgesHKeys[0], 0]];
+		while (true) {
+			var curr = p[p.length - 1][0];
+			var e = p[p.length - 1][1];
+			if (e === 0) {
+				var nextVertex = edgesV[curr];
+				delete edgesV[curr];
+				p.push([nextVertex, 1]);
+			}
+			else {
+				nextVertex = edgesH[curr];
+				delete edgesH[curr];
+				p.push([nextVertex, 0]);
+			}
+			if (p[p.length - 1][0] === p[0][0] && p[p.length - 1][1] === p[0][1]) {
+				p.pop();
+				break;
+			}
+		}
+		var polygon = [];
+		for (i = 0; i < p.length; i++) {
+			polygon.push(docLayer._twipsToLatLng(points[p[i][0]]));
+			delete edgesH[p[i][0]];
+			delete edgesV[p[i][0]];
+		}
+		polygon.push(docLayer._twipsToLatLng(points[p[0][0]]));
+		edgesHKeys = getKeys(edgesH);
+		polygons.push(polygon);
+	}
+	return polygons;
+};
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index ac74511..42a59f4 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -402,7 +402,7 @@ L.TileLayer = L.GridLayer.extend({
 					$('#scroll-container').mCustomScrollbar('scrollTo', [center.y, center.x]);
 				}
 
-				var polygons = this._rectanglesToPolygons(rectangles);
+				var polygons = L.PolyUtil.rectanglesToPolygons(rectangles, this);
 				for (i = 0; i < polygons.length; i++) {
 					var selection = new L.Polygon(polygons[i], {
 						pointerEvents: 'none',
@@ -511,147 +511,6 @@ L.TileLayer = L.GridLayer.extend({
 		e.tile.onload = null;
 	},
 
-	_rectanglesToPolygons: function(rectangles) {
-		// algorithm found here http://stackoverflow.com/questions/13746284/merging-multiple-adjacent-rectangles-into-one-polygon
-		var eps = 20;
-		// Glue rectangles if the space between them is less then eps
-		for (var i = 0; i < rectangles.length - 1; i++) {
-			for (var j = i + 1; j < rectangles.length; j++) {
-				for (var k = 0; k < rectangles[i].length; k++) {
-					for (var l = 0; l < rectangles[j].length; l++) {
-						if (Math.abs(rectangles[i][k].x - rectangles[j][l].x) < eps) {
-							rectangles[j][l].x = rectangles[i][k].x;
-						}
-						if (Math.abs(rectangles[i][k].y - rectangles[j][l].y) < eps) {
-							rectangles[j][l].y = rectangles[i][k].y;
-						}
-					}
-				}
-			}
-		}
-
-		var points = {};
-		for (i = 0; i < rectangles.length; i++) {
-			for (j = 0; j < rectangles[i].length; j++) {
-				if (points[rectangles[i][j]]) {
-					delete points[rectangles[i][j]];
-				}
-				else {
-					points[rectangles[i][j]] = rectangles[i][j];
-				}
-			}
-		}
-
-		function getKeys(points) {
-			var keys = [];
-			for (var key in points) {
-				if (points.hasOwnProperty(key)) {
-					keys.push(key);
-				}
-			}
-			return keys;
-		}
-
-		function xThenY(aStr, bStr) {
-			var a = aStr.match(/\d+/g);
-			a[0] = parseInt(a[0]);
-			a[1] = parseInt(a[1]);
-			var b = bStr.match(/\d+/g);
-			b[0] = parseInt(b[0]);
-			b[1] = parseInt(b[1]);
-
-			if (a[0] < b[0] || (a[0] === b[0] && a[1] < b[1])) {
-				return -1;
-			}
-			else if (a[0] === b[0] && a[1] === b[1]) {
-				return 0;
-			}
-			else {
-				return 1;
-			}
-		}
-
-		function yThenX(aStr, bStr) {
-			var a = aStr.match(/\d+/g);
-			a[0] = parseInt(a[0]);
-			a[1] = parseInt(a[1]);
-			var b = bStr.match(/\d+/g);
-			b[0] = parseInt(b[0]);
-			b[1] = parseInt(b[1]);
-
-			if (a[1] < b[1] || (a[1] === b[1] && a[0] < b[0])) {
-				return -1;
-			}
-			else if (a[0] === b[0] && a[1] === b[1]) {
-				return 0;
-			}
-			else {
-				return 1;
-			}
-		}
-
-		var sortX = getKeys(points).sort(xThenY);
-		var sortY = getKeys(points).sort(yThenX);
-
-		var edgesH = {};
-		var edgesV = {};
-
-		var len = getKeys(points).length;
-		i = 0;
-		while (i < len) {
-			var currY = points[sortY[i]].y;
-			while (i < len && points[sortY[i]].y === currY) {
-				edgesH[sortY[i]] = sortY[i + 1];
-				edgesH[sortY[i + 1]] = sortY[i];
-				i += 2;
-			}
-		}
-
-		i = 0;
-		while (i < len) {
-			var currX = points[sortX[i]].x;
-			while (i < len && points[sortX[i]].x === currX) {
-				edgesV[sortX[i]] = sortX[i + 1];
-				edgesV[sortX[i + 1]] = sortX[i];
-				i += 2;
-			}
-		}
-
-		var polygons = [];
-		var edgesHKeys = getKeys(edgesH);
-		while (edgesHKeys.length > 0) {
-			var p = [[edgesHKeys[0], 0]];
-			while (true) {
-				var curr = p[p.length - 1][0];
-				var e = p[p.length - 1][1];
-				if (e === 0) {
-					var nextVertex = edgesV[curr];
-					delete edgesV[curr];
-					p.push([nextVertex, 1]);
-				}
-				else {
-					nextVertex = edgesH[curr];
-					delete edgesH[curr];
-					p.push([nextVertex, 0]);
-				}
-				if (p[p.length - 1][0] === p[0][0] && p[p.length - 1][1] === p[0][1]) {
-					p.pop();
-					break;
-				}
-			}
-			var polygon = [];
-			for (i = 0; i < p.length; i++) {
-				polygon.push(this._twipsToLatLng(points[p[i][0]]));
-				delete edgesH[p[i][0]];
-				delete edgesV[p[i][0]];
-			}
-			polygon.push(this._twipsToLatLng(points[p[0][0]]));
-			edgesHKeys = getKeys(edgesH);
-			polygons.push(polygon);
-		}
-		return polygons;
-	},
-
 	_clearSelections: function () {
 		this._selections.clearLayers();
 	},


More information about the Libreoffice-commits mailing list