private void InsertToNode(Node node, ItemAndRect itemAndRect) { if (!node.Rect.IntersectsWith(itemAndRect.Rect)) { return; } // Console.WriteLine("Insert into " + node.Rect + " " + itemAndRect.Rect); if (node.TopLeft == null) { node.ItemAndRects.Add(itemAndRect); if (node.ItemAndRects.Count >= subdivisionItemCountThreshold) { Subdivide(node); } } else { InsertToNode(node.TopLeft, itemAndRect); InsertToNode(node.TopRight, itemAndRect); InsertToNode(node.BottomLeft, itemAndRect); InsertToNode(node.BottomRight, itemAndRect); } }
public void Insert(T item, IntRect2 regionRect) { var itemAndRect = new ItemAndRect { Item = item, Rect = regionRect }; InsertToNode(Root, itemAndRect); }