public void UpdateValues(I2DMapLayer layer)
    {
        FeatureMapInfo info = layer.GetFeatureMapInfo(_index);

        this.position        = info.position;
        this._outputPosition = info.position;
        this.spacing         = info.spacing;



        bool reinit = false;

        if (this._shape != info.shape || this._convShape != info.convShape || this._outputShape != info.outputShape)
        {
            reinit = true;
        }

        this._shape       = info.shape;
        this._outputShape = info.outputShape;
        this._convShape   = info.convShape;

        if (reinit)
        {
            InitGrids();
        }
        else
        {
            UpdateGrids();
        }
    }
    public FeatureMapInfo GetFeatureMapInfo(int featureMapIndex)
    {
        Vector3[]      filterPositions = GetInterpolatedFilterPositions(); //not ideal  recalculating this everytime, but should have minor performance impact
        FeatureMapInfo info            = new FeatureMapInfo();

        info.position    = filterPositions[featureMapIndex];
        info.shape       = reducedResolution;
        info.convShape   = _currentConvShape;
        info.outputShape = Get2DOutputShape();
        info.spacing     = pixelSpacing;
        return(info);
    }
    public FeatureMap(I2DMapLayer layer, int index)
    {
        this._index = index;
        FeatureMapInfo info = layer.GetFeatureMapInfo(index);

        this.position        = info.position;
        this._outputPosition = info.position;
        this._shape          = info.shape;
        this._outputShape    = info.outputShape;
        this._convShape      = info.convShape;
        this.spacing         = info.spacing;

        InitGrids();
    }