Is there anything can be done to improve the performance of my Hawkeye map?

726
0
10-04-2013 08:10 PM
JcsonJcson
New Contributor
My code is gonna below:
private void EagleEye_Load(object sender, EventArgs e) {
            toolbar.SetBuddyControl(map_main.Object);
            toc.SetBuddyControl(map_main.Object);
        }
        #region Even on Main map
        //Update extend map.
        private void map_main_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) {
            IRgbColor rgb = new RgbColorClass();  //The color of the Outline.
            rgb.Red = 255;
            rgb.Green = 0;
            rgb.Blue = 0;
            rgb.Transparency = 255;

            ISimpleLineSymbol outLine = new SimpleLineSymbolClass();   //The outline.
            outLine.Color = rgb;
            outLine.Width = 3;  //The width of the outline.

            rgb = new RgbColorClass();  //The fill color.
            rgb.Red = 255;
            rgb.Green = 0;
            rgb.Blue = 0;
            rgb.Transparency = 0;

            ISimpleFillSymbol fill = new SimpleFillSymbolClass();   //The fill style.
            fill.Outline = outLine;
            fill.Color = rgb;

            IRectangleElement rectangle = new RectangleElementClass();  //The selection element.
            IElement rectangleElement = rectangle as IElement;
            IFillShapeElement shape = rectangleElement as IFillShapeElement;
            shape.Symbol = fill;
            rectangleElement.Geometry = (IEnvelope)e.newEnvelope;

            IGraphicsContainer mapContainer = map_eagle.Map as IGraphicsContainer;
            mapContainer.DeleteAllElements();   //Delete elements in the hawkeye map.
            mapContainer.AddElement((IElement)shape, 0);
            IActiveView view = mapContainer as IActiveView;
            view.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
        }
        //Replace map.
        private void map_main_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e) {
            map_eagle.Map.AddLayer(this.GetOverviewLayer(map_main.Map));
            map_eagle.Extent = map_main.FullExtent;
            map_eagle.ActiveView.Refresh();
        }

        private void map_main_OnFullExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnFullExtentUpdatedEvent e) {
            map_eagle.Map.AddLayer(this.GetOverviewLayer(map_main.Map));
            map_eagle.Extent = map_main.FullExtent; //Change the hawkeye map extent as the main map.
            map_eagle.Refresh();
        }
        #endregion

        #region Even on Halkeye map.
        private void map_eagle_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) {
            if(e.button == 1) {
                IPoint p = new PointClass();
                p.PutCoords(e.mapX, e.mapY);
                map_main.CenterAt(p);
                map_main.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
            }
        }

        private void map_eagle_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) {
            if(map_main.LayerCount > 0) {   //Has layer.
                if(e.button == 1) { //Left click.
                    IPoint p = new PointClass();
                    p.PutCoords(e.mapX, e.mapY);
                    map_main.CenterAt(p);
                }
                else if(e.button == 2) {    //Right click.
                    map_main.Extent = map_eagle.TrackRectangle();
                }
                else throw new ArgumentNullException("???????????!");
                map_main.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
            }
        }
        #endregion

        /// <summary>
        /// Get the maxnum extent layer.
        /// </summary>
        /// <param name="map">The map that contains the layers..</param>
        /// <returns>the maxnum extent layer</returns>
        private ILayer GetOverviewLayer(IMap map) {
            if(map.LayerCount <= 0) throw new ArgumentNullException("None layer!");
            ILayer maxLayer = map.get_Layer(0);
            for(int i = 1; i < map.LayerCount; i++) {
                if(map.get_Layer(i).AreaOfInterest.Width > maxLayer.AreaOfInterest.Width)
                    maxLayer = map.get_Layer(i);
            }
            return maxLayer;
        }


It seems that I refresh so much or someting else,and I always want to search for improving the performance.
Could you launch someting? Thanks very much.
0 Kudos
0 Replies