zoukankan      html  css  js  c++  java
  • C# PageLayoutControl的基本操作

    来自:http://www.cnblogs.com/shenchao/p/3594394.html
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Forms; 
    using ESRI.ArcGIS.Controls; 
    using ESRI.ArcGIS.Carto; 
    using ESRI.ArcGIS.Display; 
    using ESRI.ArcGIS.Geometry; 
    using ESRI.ArcGIS.esriSystem; 
      
    namespace MyPageLayoutControl    //根据需要进行替换 
    { 
        class PageLayoutBaseOperate 
        { 
      
            /// <summary> 
            /// 依据ArcGis安装路径,加载自带信息 
            /// </summary> 
            /// <param name="symbologyControl"></param> 
            public static void InitAxSybologyControl(ISymbologyControlDefault symbologyControl ) 
            { 
                try
                { 
                   // Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\ESRI\CoreRuntime", true); 
                    Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\ESRI\Desktop10.0", true); 
                    if (null != regKey) 
                    { 
                        symbologyControl.LoadStyleFile(regKey.GetValue("InstallDir") + "\Styles\ESRI.ServerStyle"); 
                    } 
                    else
                    { 
                        MessageBox.Show("未能获得SymbologyControl控件的样式类!","提示",MessageBoxButtons.OK , MessageBoxIcon.Warning); 
                    } 
                    symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassBackgrounds).Update(); 
                    symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassBorders).Update(); 
                    symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassShadows).Update(); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("初始化SymbologyControl状态失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 加载地图文当 
            /// </summary> 
            /// <param name="mapControl"></param> 
            public static void LoadMapDocument(IPageLayoutControlDefault pageLayoutControl) 
            { 
                OpenFileDialog openfileDlg = new OpenFileDialog(); 
                openfileDlg.Title = "加载地图文当"; 
                openfileDlg.Filter = "map document (*.mxd)|*.mxd"; 
                openfileDlg.ShowDialog(); 
                string filepath = openfileDlg.FileName; 
      
                MapDocumentClass mapDoc = new MapDocumentClass(); 
      
                if (pageLayoutControl.CheckMxFile(filepath)) 
                { 
                    mapDoc.Open(filepath, ""); 
      
                    for (int i = 0; i < mapDoc.MapCount; i++) 
                    { 
                        pageLayoutControl.PageLayout = mapDoc.PageLayout; 
                    } 
                    pageLayoutControl.Refresh(); 
                } 
                else
                { 
                    MessageBox.Show(filepath + "不是有效的地图文当!"); 
                } 
            } 
      
            /// <summary> 
            /// 设置边框 
            /// </summary> 
            /// <param name="symbologyControl"></param> 
            public static void SetBorders(ISymbologyControlDefault symbologyControl) 
            { 
                try
                { 
                    symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassBorders; 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("设置边框失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 设置阴影 
            /// </summary> 
            /// <param name="symbologyControl"></param> 
            public static void SetShadows(ISymbologyControlDefault symbologyControl) 
            { 
                try
                { 
                    symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassShadows; 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("设置阴影失败!" + ex.Message); 
                } 
            } 
      
      
            /// <summary> 
            /// 设置背景 
            /// </summary> 
            /// <param name="pageLayoutControl"></param> 
            public static void SetBackGrounds(ISymbologyControlDefault symbologyControl) 
            { 
                try
                { 
                    symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassBackgrounds; 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("设置背景失败!" + ex.Message); 
                } 
            } 
              
            /// <summary> 
            /// 设置网格 
            /// </summary> 
            /// <param name="pageLayoutControl"></param> 
            public static void SetGrid(IPageLayoutControlDefault pageLayoutControl) 
            { 
                try
                { 
                    IActiveView activeView = pageLayoutControl.PageLayout as IActiveView; 
                    IMap map = activeView.FocusMap; 
                    IMeasuredGrid measuredGrid = new MeasuredGridClass(); 
                    IMapGrid mapGrid = measuredGrid as IMapGrid; 
                    measuredGrid.FixedOrigin = true; 
                    measuredGrid.Units = map.MapUnits; 
                    measuredGrid.XIntervalSize = 10; 
                    measuredGrid.YIntervalSize = 10; 
                    measuredGrid.XOrigin = -180; 
                    measuredGrid.YOrigin = -90; 
      
                    IProjectedGrid projectedGrid = measuredGrid as IProjectedGrid; 
                    projectedGrid.SpatialReference = map.SpatialReference; 
                    mapGrid.Name = "Measured Grid"; 
                    IGraphicsContainer graphicsContainer = activeView as IGraphicsContainer; 
                    IMapFrame mapFrame = graphicsContainer.FindFrame(map) as IMapFrame; 
                    IMapGrids mapGrids = mapFrame as IMapGrids; 
                    mapGrids.AddMapGrid(mapGrid); 
                    activeView.PartialRefresh(esriViewDrawPhase.esriViewBackground,null,null); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("设置网格失败!" + ex.Message); 
                } 
      
            } 
      
            /// <summary> 
            /// 已经SymbologyControl中的选择值,设定PageLayout属性 
            /// </summary> 
            /// <param name="pageLayoutControl"></param> 
            /// <param name="styleGalleryItem">e.styleGalleryItem</param> 
            public static void SetPageLayoutBySymbology(IPageLayoutControlDefault pageLayoutControl, IStyleGalleryItem styleGalleryItem) 
            { 
                try
                { 
                    IFrameProperties frameProperties = (IFrameProperties)pageLayoutControl.GraphicsContainer.FindFrame(pageLayoutControl.ActiveView.FocusMap); 
                    if (styleGalleryItem.Item is IBackground) 
                    { 
                        frameProperties.Background = (IBackground)styleGalleryItem.Item; 
                    } 
                    else if (styleGalleryItem.Item is IBorder) 
                    { 
                        frameProperties.Border = (IBorder)styleGalleryItem.Item; 
                    } 
                    else if (styleGalleryItem.Item is IShadow) 
                    { 
                        frameProperties.Shadow = (IShadow)styleGalleryItem.Item; 
                    } 
                    pageLayoutControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("设定PageLayout属性失败!" + ex.Message); 
                } 
            } 
      
      
            /// <summary> 
            /// 缩小 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void ZoomOut(IPageLayoutControlDefault pagelayoutControl) 
            { 
                try
                { 
                    pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomOut; 
                    //IEnvelope ipEnv = mapControl.TrackRectangle(); 
                    IEnvelope ipEnv = pagelayoutControl.Extent; 
                    ipEnv.Expand(2, 2, true); 
                    pagelayoutControl.Extent = ipEnv; 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("缩小失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 放大 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void ZoomIn(IPageLayoutControlDefault pagelayoutControl) 
            { 
                try
                { 
                    pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomIn; 
                    IEnvelope ipEnv = pagelayoutControl.TrackRectangle(); 
                    if (ipEnv.IsEmpty) 
                    { 
                        ipEnv = pagelayoutControl.Extent; 
                        ipEnv.Expand(0.5, 0.5, true); 
                    } 
                    pagelayoutControl.Extent = ipEnv; 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("放大失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 漫游 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void Pan(IPageLayoutControlDefault pagelayoutControl) 
            { 
                try
                { 
                    pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPagePan; 
                    //IEnvelope ipEnv = mapControl.Extent; 
                    pagelayoutControl.Pan(); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("漫游失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 全图 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void FullExtent(IPageLayoutControlDefault pagelayoutControl) 
            { 
                try
                { 
                    pagelayoutControl.Extent = pagelayoutControl.FullExtent; 
                    pagelayoutControl.Refresh(); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("全图显示失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 添加文字 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void AddTextElement(IPageLayoutControlDefault pagelayoutControl, string text, IRgbColor color, IEnvelope envelope,double textsize) 
            { 
                try
                { 
      
                    IActiveView activeView; 
                    IGraphicsContainer graphicsContainer; 
                    ITextElement textElement; 
                    ITextSymbol textSymbol; 
                    //IRgbColor color; 
                    IElement element; 
                    //IEnvelope envelope; 
      
                    activeView = pagelayoutControl.PageLayout as IActiveView; 
                    if (null == envelope) 
                    { 
                        envelope = new EnvelopeClass(); 
                        envelope.PutCoords(0, 0, 5, 5); 
                    } 
                    textElement = new TextElementClass(); 
                    element = textElement as IElement; 
                    element.Geometry = envelope; 
                    if (null == text) 
                    { 
                        textElement.Text = "测试地图"; 
                    } 
                    else
                    { 
                        textElement.Text = text; 
                    } 
                    textSymbol = new TextSymbolClass(); 
                    if (null == color) 
                    { 
                        color = new RgbColorClass(); 
                        color.Green = 255; 
                        color.Blue = 255; 
                        color.Red = 0; 
                    } 
      
                    textSymbol.Color = color as IColor; 
                    if (textsize < 0.1 || textsize > 100) 
                    { 
                        textSymbol.Size = 30; 
                    } 
                    else
                    { 
                        textSymbol.Size = textsize; 
                    } 
                    textElement.Symbol = textSymbol; 
                    graphicsContainer = activeView as IGraphicsContainer; 
                    graphicsContainer.AddElement(element, 0); 
                    pagelayoutControl.Refresh(); 
                } 
                catch (System.Exception ex) 
                { 
                    MessageBox.Show("添加文字失败!" + ex.Message); 
                } 
            } 
      
            /// <summary> 
            /// 添加图例 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void AddmapSurround(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope, string mapSurroundName) 
            { 
                UID uid; 
                //IEnvelope envelope; 
                //IMapSurround mapSurround; 
                IGraphicsContainer graphicsContainer; 
                IMapFrame mapFrame; 
                IMapSurroundFrame mapSurroundFrame; 
                IElement element; 
                ITrackCancel trackCancel; 
      
                uid = new UIDClass(); 
                  
                uid.Value = "esriCarto.legend"; 
                if (null == envelope) 
                { 
                    envelope = new EnvelopeClass(); 
                    envelope.PutCoords(1, 1, 2, 2); 
                } 
                graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; 
                mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; 
      
                mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); 
                if (null == mapSurroundName) 
                { 
                    mapSurroundFrame.MapSurround.Name = "图例"; 
                } 
                else
                { 
                    mapSurroundFrame.MapSurround.Name = mapSurroundName; 
                } 
                element = mapSurroundFrame as IElement; 
                element.Geometry = envelope; 
                element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); 
                trackCancel = new CancelTrackerClass(); 
                element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); 
                graphicsContainer.AddElement(element, 0); 
                pagelayoutControl.Refresh(); 
            } 
      
            /// <summary> 
            /// 文字比例尺 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void ScaleText(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope) 
            { 
                UID uid; 
                //IEnvelope envelope; 
                //IMapSurround mapSurround; 
                IGraphicsContainer graphicsContainer; 
                IMapFrame mapFrame; 
                IMapSurroundFrame mapSurroundFrame; 
                IElement element; 
                ITrackCancel trackCancel; 
      
                uid = new UIDClass(); 
                uid.Value = "esriCarto.ScaleText"; 
                if (null == envelope) 
                { 
                    envelope = new EnvelopeClass(); 
                    envelope.PutCoords(1, 1, 2, 2); 
                } 
                graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; 
                mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; 
                mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); 
                element = mapSurroundFrame as IElement; 
                element.Geometry = envelope; 
                element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); 
                trackCancel = new CancelTrackerClass(); 
                element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); 
                graphicsContainer.AddElement(element, 0); 
                pagelayoutControl.Refresh(); 
            } 
      
            /// <summary> 
            /// 图例比例尺 
            /// </summary> 
            /// <param name="pagelayoutControl"></param> 
            public static void ScaleMap(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope) 
            { 
                UID uid; 
                //IEnvelope envelope; 
                //IMapSurround mapSurround; 
                IGraphicsContainer graphicsContainer; 
                IMapFrame mapFrame; 
                IMapSurroundFrame mapSurroundFrame; 
                IElement element; 
                ITrackCancel trackCancel; 
      
                uid = new UIDClass(); 
                uid.Value = "esriCarto.ScaleLine"; 
                if (null == envelope) 
                { 
                    envelope = new EnvelopeClass(); 
                    envelope.PutCoords(1, 1, 10, 2); 
                } 
                graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; 
                mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; 
                mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); 
                element = mapSurroundFrame as IElement; 
                element.Geometry = envelope; 
                element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); 
                trackCancel = new CancelTrackerClass(); 
                element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); 
                graphicsContainer.AddElement(element, 0); 
                pagelayoutControl.Refresh(); 
            } 
      
            /// <summary> 
            /// 颜色 
            /// </summary> 
            /// <param name="r"></param> 
            /// <param name="g"></param> 
            /// <param name="b"></param> 
            /// <param name="t"></param> 
            /// <returns></returns> 
            public static IRgbColor GetColor(int r, int g, int b, int t) 
            { 
                IRgbColor rgbcolor = new RgbColorClass(); 
                rgbcolor.Red = r; 
                rgbcolor.Green = g; 
                rgbcolor.Blue = b; 
                rgbcolor.Transparency = (byte)t; 
                return rgbcolor; 
            } 
      
        } 
    }
    
  • 相关阅读:
    大富翁8分析
    DCOM实现分布式应用(三)
    DCOM实现分布式应用(一)
    [转]职业生涯中的10个致命错误
    VC中展开宏
    zoj 2853 Evolution
    poj 1088 滑雪
    hdu 2437 Jerboas
    poj 3070 Fibonacci
    zoj 2976 Light Bulbs
  • 原文地址:https://www.cnblogs.com/gisoracle/p/3870971.html
Copyright © 2011-2022 走看看