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;
}
}
}
|