ArcMap Add-in之tool

在 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() 方法是用户交互的主要入口点,在这里处理用户的点击事件。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半吊子读书人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值