Use empty extents and refactor for clarity

This commit is contained in:
Tom Payne
2013-05-25 20:39:55 -05:00
parent f0baf2efc2
commit a162b6fab3

View File

@@ -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);