/// <summary>
        /// Inserts an object into index.
        /// </summary>
        /// <param name="obj">An object to insert</param>
        public void Insert <T>(T obj)
            where T : IIndexable
        {
            if (!IndexedSpace.ContainsRectangle(obj.BoundingRectangle))
            {
                throw new ArgumentException("Bounding rectangle of the object outside the indexed space. Need to rebuild index.", "obj");
            }

            _root.Insert(obj, 1);
        }
        /// <summary>
        /// Строит индекс для списка объектов.
        /// </summary>
        /// <param name="objects">Перечислитель объектов, для которых требуется построить индекс</param>
        public void Build <T>(IEnumerable <T> objects)
            where T : IIndexable
        {
            Clear();

            List <T> list = new List <T>();

            foreach (T obj in objects)
            {
                if (IndexedSpace.ContainsRectangle(obj.BoundingRectangle))
                {
                    list.Add(obj);
                }
                else
                {
                    throw new ArgumentException("At least one object goes beyond the indexed space", "objects");
                }
            }

            _root.Build(list);
        }