private void Query(object searchBounds, AbstractNode node, ArrayList matches) { for (IEnumerator i = node.ChildBoundables.GetEnumerator(); i.MoveNext();) { IBoundable childBoundable = (IBoundable)i.Current; if (!GetIntersectsOp().Intersects(childBoundable.Bounds, searchBounds)) { continue; } AbstractNode abstractNode = childBoundable as AbstractNode; if (abstractNode != null) { Query(searchBounds, abstractNode, matches); } else { ItemBoundable objItem = childBoundable as ItemBoundable; if (objItem != null) { matches.Add(objItem.Item); } else { Debug.Assert(false, "Should never reach here"); } } } }
private bool RemoveItem(AbstractNode node, object item) { IBoundable childToRemove = null; for (IEnumerator i = node.ChildBoundables.GetEnumerator(); i.MoveNext();) { ItemBoundable childBoundable = i.Current as ItemBoundable; if (childBoundable != null) { if (childBoundable.Item == item) { childToRemove = childBoundable; } } } if (childToRemove != null) { node.ChildBoundables.Remove(childToRemove); return(true); } return(false); }