ArcObjects接口IGraphicslayer,ICompositeLayer,ICompositeGraphicslayer相关用法记录

您所在的位置:网站首页 GIS二次开发接口的类型主要有 ArcObjects接口IGraphicslayer,ICompositeLayer,ICompositeGraphicslayer相关用法记录

ArcObjects接口IGraphicslayer,ICompositeLayer,ICompositeGraphicslayer相关用法记录

2024-07-10 10:49| 来源: 网络整理| 查看: 265

1,Arcgis地图组成,注记(Annotation),图形图层(GraphicsLayer),普通数据图层(我们称之为DataLayer)。

他们的叠放顺序分析:annotation和Graphicslayer都在数据图层之上,而且是始终在上面。annotation和Graphicslayer的顺序,我还不清楚。总之,现在我们可以得出,Graphicslayer在DataLayer之上。

2,所有的Graphicslayer都隶属于IMap对象,IPageLayout没有包含此类东西。Map对象有个默认的图形层,BasicGraphicslayer,类型为IGraphicslayer。通过它,我们可以得到map所有的图形层,方法如下: 

p.BasicGraphicsLayer as ICompositeLayer; for (int i = 0; i < cl.Count; i++) { ILayer lyr = cl.get_Layer(i); IGraphicsLayer gl = lyr as IGraphicsLayer; }

添加,删除Graphicslayer,是通过IComposteGraphicsLayer接口,

ICompositeGraphicsLayer cgl = _map.BasicGraphicsLayer as ICompositeGraphicsLayer; cgl.DeleteLayer(LayerName);

 

1,Element前置、后置等改变顺序已经实现,但如果有多个Graphicslayer,则当前操作的Element所在的Layer必须是Map的ActiveGraphicslayer,否则函数会报异常。

而且只能在单个图层上改变顺序,想要直接前置到所有图层的最上面,可以把它“剪贴”到最上层或最下层,但此时元素已经脱离了原图层。

2,Element复制粘贴已经实现,支持跨图层粘贴。

3,图层移动还真不支持,目前还没想到其它可行办法。

 

直接贴代码了

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geometry; using DevExpress.XtraEditors; using ESRI.ArcGIS.esriSystem; namespace ElementResearch { public enum ChangeOrderType { BringToFront,SendToBack,BringForward,SendBackward } public partial class Form1 : Form { public Form1() { InitializeComponent(); string mxd = System.IO.Path.Combine(Application.StartupPath, "data\\专题图.mxd"); axMapControl1.LoadMxFile(mxd); } private void Form1_Load(object sender, EventArgs e) { ICommand cmdGlobal = new ControlsMapFullExtentCommand(); cmdGlobal.OnCreate(axMapControl1.Object); cmdGlobal.OnClick(); ITool select = new ControlsSelectToolClass(); ((ICommand)select).OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = select; } private void axMapControl1_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e) { if (e.button != 2) { return; } IGraphicsContainerSelect gcs = (IGraphicsContainerSelect)axMapControl1.Map; if (gcs.ElementSelectionCount


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3