import {quadtree} from 'd3-quadtree'; import * as Rectangle from './rectangle'; export class QuadTree { constructor() { this.quadTree = quadtree(); } add(datum) { this.quadTree.add(datum); } remove(datum) { this.quadTree.remove(datum); } search(queryRectangle) { const nodes = []; this.quadTree.visit((node, ...nodeRectangle) => { nodeRectangle[2] -= nodeRectangle[0]; nodeRectangle[3] -= nodeRectangle[1]; if (!Rectangle.intersects(queryRectangle, nodeRectangle)) { return true; } if (4 !== node.length) { nodes.push(node); } }); return nodes.filter((node) => { return Rectangle.isTouching(queryRectangle, node.data); }); } }