//------------------------------------------------------------------------------//
        // BitmapManager SetDisplayData()
        //------------------------------------------------------------------------------//
        // Function may be used to either set display data or set extemes of data
        // displayed.  If paramater "StateData' then this function has to have been
        // previously called with a non-null 'StateData'
        // If parameter 'StateData' is null its corresponding member variable
        // 'm_stateData' remains untouched.
        public void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData, DATA_EXTREMES_SPE_BITMAP DataExtremes,
            DATA_EXTREMES_SPE_BITMAP MovementDataExtremes, Boolean MaintainScaling)
        {
            // If parameter 'StateData' is null verify it's corresponding member variable isn't.
            if(StateData == null)
                Debug.Assert(m_stateData != null);

            // Assign parameters to their corresponding member variables.
            if(StateData != null)
                m_stateData = StateData;

            // Set up the bitmaps with the new data.
            m_diveTimeScale.SetDisplayData(m_stateData, DataExtremes, MaintainScaling);
            m_depthScale.SetDisplayData(m_stateData, DataExtremes, MaintainScaling);
            m_dive.SetDisplayData(m_stateData, DataExtremes, MaintainScaling);

            // Movement map currently always needs the extremes of the actual data passed
            // in.
            m_movement.SetDisplayData(m_stateData, MovementDataExtremes, MaintainScaling);

            m_parentForm.Invalidate();
        }
        //------------------------------------------------------------------------------//
        // Movement Bitmap UpdateDataDisplay()
        //------------------------------------------------------------------------------//
        public override void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData,
            DATA_EXTREMES_SPE_BITMAP StateDataExtremes, Boolean MaintainScaling)
        {
            int xStartMeters;
            int xEndMeters;
            int yStartMeters;
            int yEndMeters;

            base.SetDisplayData(StateData, StateDataExtremes, MaintainScaling);

            m_timeStartIndex = 0;
            m_timeEndIndex = StateData.Length - 1;

            // These are for the hashmarks
            xStartMeters = (int)Math.Floor(StateDataExtremes.xMin); // longitude start
            xEndMeters = (int)Math.Ceiling(StateDataExtremes.xMax); // longitude end
            yStartMeters = (int)Math.Floor(StateDataExtremes.yMin); // latitude start
            yEndMeters = (int)Math.Ceiling(StateDataExtremes.yMax); // latitude end

            if(xStartMeters < yStartMeters)
                m_startMeters = xStartMeters;
            else
                m_startMeters = yStartMeters;

            if(xEndMeters > yEndMeters)
                m_endMeters = xEndMeters;
            else
                m_endMeters = yEndMeters;

            RedrawBitmap();
        }
        //------------------------------------------------------------------------------//
        // Dive Scale Bitmap SetDisplayData()
        //------------------------------------------------------------------------------//
        public override void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData,
            DATA_EXTREMES_SPE_BITMAP StateDataExtremes, Boolean MaintainScaling)
        {
            base.SetDisplayData(StateData, StateDataExtremes, MaintainScaling); // copies it to local variables

            if(MaintainScaling == false)
            {
                // time scale sliders
                m_sliderSet.min.point = new Point(m_dataRect.X, m_pixelPosMinTopSlider);
                m_sliderSet.max.point = new Point(m_dataRect.X, m_pixelPosMaxBottomSlider);
                m_sliderSet.mid.point = new Point(m_dataRect.X + m_dataRect.Width / 2, m_pixelPosMinTopSlider + (m_pixelPosMaxBottomSlider - m_pixelPosMinTopSlider) / 2);
                m_scaleValue = (float)(m_pixelPosMaxBottomSlider - m_pixelPosMinTopSlider) / (float)m_sliderRange;
            }
        }
        //------------------------------------------------------------------------------//
        // Dive Scale Bitmap SetDisplayData()
        //------------------------------------------------------------------------------//
        // Called when new data is generated and needs to be displayed.
        public override void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData,
            DATA_EXTREMES_SPE_BITMAP StateDataExtremes, Boolean MaintainScaling)
        {
            int i;
            int xPixel;
            int zPixel;
            float delta;
            base.SetDisplayData(StateData, StateDataExtremes, MaintainScaling);



            m_bitmap = new Bitmap(m_dataRect.Width, m_dataRect.Height);

            if(StateData.Length > 1 && m_dataRect.Width > 1)
                m_dataScale.x = ((float)m_dataRect.Width-1/*-1 for zero index*/)/(float)(StateData.Length-1); // pixels per datum
            else
                m_dataScale.x = 1.0F;

            delta = (float)(StateDataExtremes.zMax - StateDataExtremes.zMin);
            if(delta <= 0)
                delta = 1;

            if(m_dataRect.Height > 1)
                m_dataScale.y = (m_dataRect.Height - 1)/delta; // pixels per datum
            else
                m_dataScale.y = 1.0F;

            for(i=0; i<m_stateData.Length; i++)
            {
                xPixel = (int)Math.Floor(m_dataScale.x*i); // minus 1 for zero index
                zPixel = (int)Math.Floor(m_dataScale.y*(m_stateData[i].z - StateDataExtremes.zMin));

                ds.x = m_dataScale.x;
                ds.y = m_dataScale.y;

                m_bitmap.SetPixel(xPixel, zPixel, GetCurrentBehaviorColor(m_stateData[i].animatState.behavior));
            }

            // Calculate the number of data points each pixel represents.
            m_dataPointsPerPixle = (float)m_stateData.Length / (float)m_dataRect.Width;

            if(MaintainScaling == false)
            {
                // time scale sliders
                m_sliderSet.min.point = new Point(m_pixlePntMinLSlider, m_dataRect.Y);
                m_sliderSet.max.point = new Point(m_pixlePntMaxRSlider, m_dataRect.Y);
                m_sliderSet.mid.point = new Point(m_pixlePntMinLSlider + (m_pixlePntMaxRSlider - m_pixlePntMinLSlider) / 2, m_dataRect.Y + m_dataRect.Height / 2);

                m_scaleValue = (float)(m_sliderSet.max.point.X - m_sliderSet.min.point.X) / (float)m_sliderRange;
            }
        }
        private void SetBitmapDisplayData(Boolean MaintainDataExtremes, Boolean MaintainScaling)
        {
            int i;
            DATA_EXTREMES_SPE_BITMAP currentDataExtremes;

            m_data = new ANIMATSTATEDATABITMAP[m_stateArray.Length];

            //////////////////////
            // convert lat/lon to meters
            // converstion process...
            for(i = 0; i< m_stateArray.Length; i++)
            {
                m_data[i].animatState = m_stateArray[i];
                m_data[i].y = (float)(m_stateArray[i].xDistance);
                m_data[i].x = (float)(m_stateArray[i].yDistance);
                m_data[i].z = -(float)m_stateArray[i].depth;
                m_data[i].targetDepth = -(float)m_stateArray[i].targetDepth;
            }

            currentDataExtremes = DetermineDataExtremes(m_data);
            if(MaintainDataExtremes == false)
                m_dataExtremes = currentDataExtremes;
            m_bitmapMgr.SetDisplayData(m_data, m_dataExtremes, currentDataExtremes, MaintainScaling);
        }
 //------------------------------------------------------------------------------//
 // Species Bitmap Window Constructor
 //------------------------------------------------------------------------------//
 public virtual void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData, DATA_EXTREMES_SPE_BITMAP DataExtremes, Boolean MaintainScaling)
 {
     m_stateData = StateData;
     m_dataExtremes = DataExtremes;
     m_bMaintainsScaleOnNewData = MaintainScaling;
 }
        //------------------------------------------------------------------------------//
        // Dive Bitmap SetDisplayData()
        //------------------------------------------------------------------------------//
        public override void SetDisplayData(ANIMATSTATEDATABITMAP[] StateData, DATA_EXTREMES_SPE_BITMAP DataExtremes,
            Boolean MaintainScaling)
        {
            Debug.Assert(StateData != null);

            m_stateData = StateData;
            m_dataExtremes = DataExtremes;

            m_displayInf.noDisplay = false;
            if(StateData.Length <= 1)
            {
                m_displayInf.noDisplay = true;
                return;
            }

            if(MaintainScaling == false)
            {

                // Initially (until user scales the time) the number of seconds to
                // display is equal to the length of the data array passed in.
                m_timeStartIndex = 0;
                m_timeEndIndex = m_stateData.Length - 1;

                m_displayInf.fDepthStartMeters = DataExtremes.zMin;
                m_displayInf.fDepthEndMeters = DataExtremes.zMax;

                m_displayInf.nDepthStartMeters = (int)Math.Floor(DataExtremes.zMin);
                m_displayInf.nDepthEndMeters = (int)Math.Ceiling(DataExtremes.zMax);

                // Scale the display based on the passed in display data.
                UpdateXYScale();
            }

            // Redraw the bitmap.
            ConstructBitmap();
        }