標籤:
來自: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; } } }
C# PageLayoutControl的基本操作