Ejemplo n.º 1
0
        /// <summary>
        /// Remove an item from the <see cref="QuadTree{T}"/>.
        /// </summary>
        /// <param name="item">Item to add.</param>
        /// <returns>True if successful, false if not.</returns>
        public virtual bool Remove(T item)
        {
            if (!itemDictionary.ContainsKey(item))
            {
                return(false);
            }

            if (rootTree.Remove(item))
            {
                itemDictionary.Remove(item);
                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Recursively removes an item.
        /// </summary>
        /// <param name="item">Item to be removed.</param>
        /// <returns>True if successful, false if not.</returns>
        public virtual bool Remove(T item)
        {
            if (!Boundary.ContainsPoint(item))
            {
                return(false);
            }

            if (items.Remove(item))
            {
                return(true);
            }

            if (northWest == null)
            {
                return(false);
            }

            bool removed = false;

            if (northWest.Remove(item))
            {
                removed = true;
            }
            else if (northEast.Remove(item))
            {
                removed = true;
            }
            else if (southWest.Remove(item))
            {
                removed = true;
            }
            else if (southEast.Remove(item))
            {
                removed = true;
            }

            // If a change was made, check if child trees are empty, if so then remove them.
            if (removed)
            {
                clean();
                return(true);
            }

            return(false);
        }