From a162b6fab3673f4ee23e12e059ec5d099968abe0 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sat, 25 May 2013 20:39:55 -0500 Subject: [PATCH] Use empty extents and refactor for clarity --- src/ol/structs/rtree.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/ol/structs/rtree.js b/src/ol/structs/rtree.js index 902b298099..41af87fcf3 100644 --- a/src/ol/structs/rtree.js +++ b/src/ol/structs/rtree.js @@ -68,31 +68,31 @@ ol.structs.RTree = function(opt_maxWidth) { * @type {ol.structs.RTreeNode} */ this.rootTree_ = /** @type {ol.structs.RTreeNode} */ - ({extent: [0, 0, 0, 0], nodes: []}); + ({extent: ol.extent.createEmpty(), nodes: []}); }; /** - * Generates a minimally bounding rectangle for all rectangles in - * array "nodes". `rect` is modified into the MBR. - * - * @param {Array} nodes Nodes. - * @param {ol.structs.RTreeNode} rect Rectangle. + * @param {ol.structs.RTreeNode} node Node. * @private - * @return {ol.structs.RTreeNode} Rectangle. */ -ol.structs.RTree.makeMBR_ = function(nodes, rect) { - if (nodes.length < 1) { - return {extent: [0, 0, 0, 0]}; +ol.structs.RTree.recalculateExtent_ = function(node) { + var n = node.nodes.length; + var extent = node.extent; + if (n === 0) { + ol.extent.empty(extent); + } else { + var firstNodeExtent = node.nodes[0].extent; + extent[0] = firstNodeExtent[0]; + extent[1] = firstNodeExtent[1]; + extent[2] = firstNodeExtent[2]; + extent[3] = firstNodeExtent[3]; + var i; + for (i = 1; i < n; ++i) { + ol.extent.extend(extent, node.nodes[i].extent); + } } - rect.extent = nodes[0].extent.concat(); - - for (var i = nodes.length - 1; i > 0; --i) { - ol.extent.extend(rect.extent, nodes[i].extent); - } - - return rect; }; @@ -497,7 +497,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) { returnArray = tree.nodes.splice(i, 1); } // Resize MBR down... - ol.structs.RTree.makeMBR_(tree.nodes, tree); + ol.structs.RTree.recalculateExtent_(tree); workingObject.target = undefined; if (tree.nodes.length < this.minWidth_) { // Underflow workingObject.nodes = /** @type {Array} */ @@ -521,7 +521,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) { // workingObject.nodes contains a list of elements removed from the // tree so far if (tree.nodes.length > 0) { - ol.structs.RTree.makeMBR_(tree.nodes, tree); + ol.structs.RTree.recalculateExtent_(tree); } for (var t = 0, tt = workingObject.nodes.length; t < tt; ++t) { this.insertSubtree_(workingObject.nodes[t], tree); @@ -543,7 +543,7 @@ ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) { workingObject.nodes = undefined; // Just start resizing } } else { // we are just resizing - ol.structs.RTree.makeMBR_(tree.nodes, tree); + ol.structs.RTree.recalculateExtent_(tree); } currentDepth -= 1; } while (hitStack.length > 0);