/// <summary>
        /// Removes the specified item from the subset of this classification if that category is used.
        /// Selected -> !Selected
        /// Category[>0] -> Category[0]
        /// Category[0] -> Null
        /// Visible -> !Visible
        /// Chunk -> -1  or basically a chunk index that is never drawn.
        /// </summary>
        /// <param name="item">The item to change the drawing state of</param>
        /// <returns>Boolean, false if the item does not match the current grouping</returns>
        /// <exception cref="ReadOnlyException">Occurs if this list is set to read-only in the constructor</exception>
        public bool Remove(IFeature item)
        {
            if (_isReadOnly) throw new ReadOnlyException();
            if (Contains(item) == false) return false;

            IDrawnState previousState = _filter[item];
            IFeatureCategory cat = previousState.SchemeCategory;
            int chunk = previousState.Chunk;
            bool sel = previousState.IsSelected;
            bool vis = previousState.IsVisible;
            if (_activeType == FilterTypes.Category)
            {
                cat = _category != _filter.DefaultCategory ? _filter.DefaultCategory : null;
            }
            if (_activeType == FilterTypes.Chunk)
            {
                // removing from a chunk effectively means setting to -1 so that it will not get drawn
                // until it is added to a chunk again.
                chunk = -1;
            }
            if (_activeType == FilterTypes.Selection)
            {
                sel = !_selected;
            }
            if (_activeType == FilterTypes.Visible)
            {
                vis = !_visible;
            }
            _filter[item] = new DrawnState(cat, sel, chunk, vis);
            OnChanged();
            return true;
           
        }
 /// <summary>
 /// Adding a feature state sets the drawing state of the item to be 
 /// </summary>
 /// <param name="item">The item to add to this category</param>
 /// <exception cref="ReadOnlyException">Occurs if this list is set to read-only in the constructor</exception>
 public void Add(IFeature item)
 {
     if (_isReadOnly) throw new ReadOnlyException();
     IDrawnState previousState = _filter[item];
     IFeatureCategory cat = previousState.SchemeCategory;
     if (_useCategory) cat = _category;
     bool sel = previousState.IsSelected;
     if (_useSelection) sel = _selected;
     int chunk = previousState.Chunk;
     if (_useChunks) chunk = _chunk;
     bool vis = previousState.IsVisible;
     if (_useVisibility) vis = _visible;
    
     _filter[item] = new DrawnState(cat, sel, chunk, vis);
     OnChanged();
 }