function insert_and_check(datum, quadtree) {
const corners = datum._bbox
quadtree._max_width = quadtree._max_width || 0
quadtree._max_height = quadtree._max_height || 0
datum._occluded = false
if (DEBUG) {
datum.visited = []
}
quadtree[which_visit](
(node, x0, y0, x1, y1) => {
if (datum._occluded) {return true}
if (DEBUG) {
datum.visited.push({x0, y0, x1: x1, y1: y1, variety : "quad", overlaps: false})
}
if (node.length) {
const box_intersects_quad = hasOverlaps(
corners,
[x0 - quadtree._max_width/2,
x1 + quadtree._max_width/2,
y0 - quadtree._max_height/2,
y1 + quadtree._max_height/2],
);
if (!box_intersects_quad) {
return true
} else {
datum.visited[datum.visited.length - 1].overlaps = true
return undefined
}
} else {
if (DEBUG) {
const [x0, x1, y0, y1] = node.data._bbox
const [x, y] = [(x0 + x1)/2, (y0 + y1)/2]
datum.visited.push({x0, y0, x1, y1, variety: "word", word: node.data.text, overlaps: false})
}
if (hasOverlaps(corners, node.data._bbox)) {
if (DEBUG) {
datum.visited[datum.visited.length - 1].overlaps = true
}
datum._occluded = true
return "break";
}
}
}, [quadtree.x()(datum), quadtree.y()(datum)]);
if (!datum._occluded) {
quadtree.add(datum)
if (quadtree._max_width < corners[1] - corners[0]) {
quadtree._max_width = (corners[1] - corners[0])
}
if (quadtree._max_height < (corners[3] - corners[2])) {
quadtree._max_height = corners[3] - corners[2]
}
}
}