Example #1
0
        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;
                }
            }
        }