在 ArcGIS 的 Add-ins 开发中,ESRI.ArcGIS.Desktop.AddIns.Tool
是一个用于创建自定义工具的类。以下是这三个方法 OnUpdate()
, OnActivate()
, OnMouseDown()
的基本用途和示例:
OnUpdate()
OnUpdate()
方法在工具栏上的工具被点击之前调用,用于确定工具是否可用。比如,你可能想要根据当前地图或图层的状态来启用或禁用某个工具。
protected override void OnUpdate()
{
// 检查工具是否应该被启用
bool enable = true; // 根据你的逻辑来设置
this.Enabled = enable;
}
OnActivate()
OnActivate()
方法在工具被激活时调用,即在工具被选中并准备使用之前。你可以在这里进行一些初始化的工作,比如设置地图的当前工具。
protected override void OnActivate()
{
// 设置当前地图的当前工具
ArcMap.Application.CurrentTool = this;
}
OnMouseDown()
OnMouseDown()
方法在用户点击地图时调用。这是执行工具主要功能的地方,比如选择要素等。
protected override void OnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
{
try
{
//获取当前应用程序对象
IApplication app = ArcMap.Application;
if (app == null)
return;
// 获取当前地图文档Map、ActiveView
IMxDocument pMxDoc = app.Document as IMxDocument;
IMap pMap = pMxDoc.FocusMap;
IActiveView activeView = pMap as IActiveView;
//获取第一个图层
IFeatureLayer featureLayer = pMmap.get_Layer(0) as IFeatureLayer;
//在地图上绘制临时点
IRubberBand pRubberBandp = new RubberPointClass();
IGeometry pQueryGeometryp = pRubberBandp.TrackNew(activeView.ScreenDisplay, null);
//根据临时点获取选择集
pMap.SelectByShape(pQueryGeometryp, null, true);
IFeatureSelection pSelection1 = featureLayer as IFeatureSelection;
pSelection1.SelectionSet.Search(null, true, out ICursor pCsor);
if (pSelection1.SelectionSet.Count > 0)
{
IFeatureCursor pFeatureCursor = pCsor as IFeatureCursor;
IFeature feature = pFeatureCursor.NextFeature();
// 查找选中的要素图层中是否存在JZDKBH字段,存在则获取值
int fieldIndex2 = feature.Fields.FindField("JZDKBH");
if (fieldIndex2 != -1)
{
string jzdkbh2 = feature.get_Value(fieldIndex2).ToString();
MessageBox.Show("JZDKBH:"+jzdkbh2);
}
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
pCsor = null;
}
catch
{
}
}
OnUpdate()
方法应该返回一个布尔值,指示工具是否可用。OnActivate()
方法通常用于设置应用程序的状态,比如当前工具。OnMouseDown()
方法是用户交互的主要入口点,在这里处理用户的点击事件。