/// <summary> /// Returns a list containing every item from this <see cref="QuadTree{T}"/>. /// </summary> /// <returns><see cref="ListArray{QuadTreeItem{T}}"/> containing every item.</returns> public ListArray <QuadTreeItem <T> > GetItems() { var items = QuadTreePool <T> .RentItemList(); void AddToList(QuadTree <T> tree) { items.AddRange(tree.Items); if (tree.IsDivided) { AddToList(tree.TopLeft); AddToList(tree.TopRight); AddToList(tree.BottomLeft); AddToList(tree.BottomRight); } } AddToList(this); return(items); }
public ListArray <QuadTreeItem <T> > Query(RectangleF range) { if (!Bounds.Intersects(range)) { return(null); } var result = QuadTreePool <T> .RentItemList(); var items = GetItems(); foreach (var item in items) { if (range.Intersects(item.Bounds)) { result.Add(item); } } QuadTreePool <T> .Return(items); return(result); }