private void DrawKdRectSplits <T>(KdTreeNode <T> node, AaRect bounds) { Graphics g = _graphics; if (node.type == NodeType.Inner) { Pen pen = Pens.DarkGray; if (node.inner.axis == Axis.X) { g.DrawLine(pen, node.inner.pivot, bounds.min.y, node.inner.pivot, bounds.max.y); DrawKdRectSplits( node.inner.nodeLess, AaRect.mm(bounds.min, node.inner.pivot, bounds.max.y) ); DrawKdRectSplits( node.inner.nodeMore, AaRect.mm(node.inner.pivot, bounds.min.y, bounds.max) ); } if (node.inner.axis == Axis.Y) { g.DrawLine(pen, bounds.min.x, node.inner.pivot, bounds.max.x, node.inner.pivot); DrawKdRectSplits( node.inner.nodeLess, AaRect.mm(bounds.min, bounds.max.x, node.inner.pivot) ); DrawKdRectSplits( node.inner.nodeMore, AaRect.mm(bounds.min.x, node.inner.pivot, bounds.max) ); } DrawKdRect(node.inner.nodeBoth); } if (node.type == NodeType.Leaf) { var holder = node.leaf.holder; while (holder != null) { //DrawRect(Pens.DarkRed, holder.fatRect.ExtendSides(V.fill(5))); holder = holder.sibling.next; } } }