Example #1
0
 private void TraverseOverlapping(KdTreeNode <T> node, AaRect rect, Action <T> action)
 {
     if (node.type == NodeType.Leaf)
     {
         var holder = node.leaf.holder;
         while (holder != null)
         {
             if (AaRect.Overlaps(rect, holder.fitRect))
             {
                 action(holder.body);
             }
             holder = holder.sibling.next;
         }
     }
     else
     {
         var pos = node.DetermineInnerNodePosition(rect);
         if (pos != ChildPosition.More)
         {
             TraverseOverlapping(node.inner.nodeLess, rect, action);
         }
         if (pos != ChildPosition.Less)
         {
             TraverseOverlapping(node.inner.nodeMore, rect, action);
         }
         TraverseOverlapping(node.inner.nodeBoth, rect, action);
     }
 }