ArcGIS Pro Add-In插件开发[ArcGIS Pro SDK for .NET]
本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5 开发和撰写。
开发环境配置
获取ArcGIS Pro
我的ArcGIS Pro是在Esri官网申请的21天试用,版本为ArcGIS Pro 2.5.22081。
安装VS2019
VS2019的安装十分简单,在微软官网下载VS2019社区版安装程序,双击安装即可,具体可参考该博客
安装ArcGIS Pro SDK
关闭VS拓展自动更新
首先打开安装好的VS2019,点击“菜单栏-工具-选项”,在选项中找到“环境-拓展”,关闭拓展自动更新,如下图所示。关闭拓展自动更新可以防止拓展自动更新后与当前环境不匹配,如我的环境为ArcGIS Pro2.5,如果不关闭自动更新,则下次打开VS时ArcGIS Pro SDK插件将自动更新为2.6版本,与Pro版本不匹配,无法使用。

正式安装插件
接下来开始安装ArcGIS Pro SDK for .NET,需要点击“菜单栏-拓展-管理拓展”,在弹出的窗口中切换至联机,搜索“ArcGIS Pro”,找到“ArcGIS Pro SDK for .NET”和“ArcGIS Pro SDK for .NET(Utilities)”两个插件,安装并禁用自动更新。点击安装后,重启VS插件即安装完毕,至此,开发环境配置完成。

创建第一个Pro Add-in
使用模板创建Pro Add-in项目
打开VS2019,选择“创建新项目”,将“项目类型筛选”设置为“ArcGIS Pro SDK”,找到“ArcGIS Pro 模块加载项”创建项目即可,注意选择语言为C#而非VB。

添加一个button
Pro的插件及配置使用DAML文件,即项目下的“config.daml”进行声明。

手动添加button
添加button至显示
首先,我们来尝试手动添加一个button。打开“config.daml”文件,在controls标签下添加一个button标签。
<controls>
<button id="AddOneButton" caption="Add one button" className="AddOneButton" loadOnClick="false" smallImage="Images\AddInDesktop16.png" largeImage="Images\AddInDesktop32.png" keytip="AOB">
<tooltip>Add one button</tooltip>
</button>
</controls>
添加完button标签后,该控件并不会显示,只有当控件被某个group引用时,才会显示在菜单中,应用方式如下,其中refID为创建button标签时的id。
<groups>
<group id="DJ_SuspectTrackingSystem_Group1" caption="Group 1" appearsOnAddInTab="true">
<button refID="AddOneButton"/>
</group>
</groups>
至此,当Pro加载时即会在“菜单栏-加载项-Group”中显示该控件。修改完成后的“config.daml”文件和Pro中显示效果如下图所示。


为button添加逻辑代码
修改daml后,仅实现了在Pro中显示button,下面来为button添加逻辑代码。
在项目中新建一个类,类名为刚才daml文件中对应button的className属性,并使其继承自Pro SDK中的Button类。然后重写Button的相关方法,如点击时触发的OnClick方法,在其中实现逻辑代码即可,如下图。

自动添加button
在我们熟悉了daml文件之后,日常开发即可直接使用VS提供的快捷添加控件的方式。
在项目上“右击-添加-新建项”,在弹出的窗口左侧选择“ArcGIS Pro Add-ins”中进行筛选后,选择“ArcGIS Pro 按钮”,点击添加,VS即会自动添加一个button类至项目中,在daml文件的controls中添加button定义,并在默认group中引用该button。


生成Addin文件
插件配置完成后,在解决方案上“右键-重新生成解决方案”,待解决方案生成完毕后,在解决方案文件夹\bin\Debug目录下找到*.esriAddinX文件,该文件即为插件安装文件,双击即可为Pro安装该插件。

调试插件
如果不希望直接为Pro安装插件,而是在开发过程中需要测试插件效果,直接按快捷键F5或点击运行,VS将启动Pro,并在Pro中加载修改后的插件,可以在其中对插件进行测试。
开发小tip
- 当项目是从其他电脑拷贝而来时,引用地址可能不正确,此时,可以在解决方案上右击,找到“修复 Pro 引用”选项,点击后,插件会自动更新引用。若要手动更新引用,dll文件通常存放在
Pro安装路径\bin和Pro安装路径\bin\Extensions目录下。 - 提示"未能解析主引用***,因为它是针对“.NETFramework,Version=v4.8”框架生成的。该框架版本高于当前目标框架"错误信息,则说明生成使用的Framework版本与当前项目应该使用的Framework版本不匹配,在项目上“右击-属性-生成程序”,将“目标框架”切换为当前项目版本即可。

DAML配置
DAML是Desktop Application Markup Language的缩写。是ESRI基于XML标准自定义的UI配置文件。插件和配置的声明性部分是在DAML文件中定义的,其中包含了框架元素(主要是插件)的集合,还包括声明性部分(框架所需的信息,以便在适当的时候激活或创建相关的对象)。通过这种方式实现界面和功能的分离。
DAML介绍
具体的DAML介绍请查看DAML ID reference。以下仅介绍常用节点。
根节点
即ArcGIS标签下的节点,大多数情况下无需修改,使用默认即可,常用的有:
- defaultAssembly:该配置代表的插件所在的程序集名称。
- defaultNamespace:该配置代表的插件所在的命名空间名称。

AddInInfo节点
AddInInfo节点用于声明插件的相关信息,如名称、描述、图标等

modules节点
modules节点是最长访问的节点,插件元素的添加、描述等均在该节点下。modules节点可以包括的元素包括ribbon按钮、工具、画廊、组合框、编辑框、调色板和其他控件,以及应用程序窗格和对接窗格。
Pro 控件级别
Pro的控件级别从上到下分为Module-Tab-Group-Menu-Control,相互关系如下图所示。
- Tab

- Group

- Menu

- Control

一个原始的DAML文件如下图所示,开发时,先在controls标签下创建所有要使用的控件及其描述,然后在需要显示控件的group标签中引用对应的control即可。

将control在新tab中显示
默认情况下,control将添加至“菜单栏-加载项”中,如果需要在单独的Tab中显示,则需要在daml文件tabs标签下新建tab标签,并在其中添加对需要显示的group的引用,如下图。

常用DAML元素
下面只介绍常用的元素及其属性、方法等,各元素具体使用情景、属性、方法等请参见官方API文档。DAML中通常可以包括controls、categories、dockpanes、groups、menus、minitoolbars、panes、toolbars等等各种元素,具体元素可参见官方DAML ID Reference
控件control
控件常用属性
控件常用方法
控件常见方法有:
- OnClick():单击控件时触发
使用时,在控件类中重写对应的方法即可,如:
internal class AddOneButton : ArcGIS.Desktop.Framework.Contracts.Button
{
protected override void OnClick()
{
MessageBox.Show("Hello World");
}
}
常用控件
- button
- comboBox
- checkBox
- labelControl
- tool
停靠窗dockpane
dockpane类为停靠窗口类,其UI由对应的.xaml文件确定,逻辑代码由对应的.cs类文件实现。
双击xaml文件即可进入设计窗口,可以通过拖拽的方式将各种控件添加至dockpane界面中,可以通过可视化或代码方式设置控件和dockpane的各种属性。
本文参考:
- 博客 https://blog.csdn.net/xiangqiang2015/article/details/81741689
- 博客 https://blog.csdn.net/DynastyRumble/article/details/104683339
- Esri官方wiki https://github.com/esri/arcgis-pro-sdk/wiki
- Pro API reference https://pro.arcgis.com/en/pro-app/sdk/api-reference/index.html#topic10500.html
- 官方DAML ID Reference https://github.com/Esri/arcgis-pro-sdk/wiki/ArcGIS-Pro-DAML-ID-Reference
ArcGIS Pro Add-In插件开发[ArcGIS Pro SDK for .NET]的更多相关文章
- Premiere Pro & After Effects插件开发调试方法
在给Adobe Premiere Pro(PR)和Adobe After Effects(AE)插件开发时,对于实时调试插件有着很强的需求.除了业务需求外,单步调试插件还能够摸清楚Plugin和Hos ...
- ArcGis Classic COM Add-Ins插件开发的一般流程 C#
COM add-ins是我对这种开发方式的称呼,Esri的官方文档里称其为“Extending ArcObject”或者“Classic COM extensibility”,Esri所称的addin ...
- 2013Esri全球用户大会之ArcGIS for Server&Portal for ArcGIS
Q1:ArcGIS 10.2 for Server有哪些新特性? ArcGIS 10.2对于ArcGIS for Server来说是一个引人注目的版本.它建立在ArcGIS 10.1扎实雄厚的基础上, ...
- ArcGIS 批量修改数据名称-arcgis案例实习教程
ArcGIS 批量修改数据名称-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:批量修改数据/文件名称 使用方法: 输入:文件夹(或者 ...
- ArcGIS 要素类平移工具-arcgis案例实习教程
ArcGIS 要素类平移工具-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离,进行整体平移. 优点:使用 ...
- 未能加载文件或程序集“file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.3DAnalyst.dll”或它的某一个依赖项。试图加载格式不正确的程序。 行 129,位置 5。
能加载文件或程序集“file:///C:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Local.dll”或它 ...
- ArcGIS 在VS2010中 ESRI.ArcGIS.SOESupport.dll 无法正常加载的处理
转自 http://blog.csdn.net/tnt123688/article/details/23186973 问题描述: 打开ArcGIS的SOE模板后,提示 错误 命名空间“ESRI.A ...
- 【ArcGIS遇上Python】ArcGIS Python批处理入门到精通实用教程目录
目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 Python语言是目前很火热的语言,极大的促进了人工智能发展.你知道在ArcGIS中也会有python的身影吗?事实上,在ArcG ...
- Final Cut Pro X效果插件开发总结
一.介绍 最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理.Final Cut Pro是苹果公司推出的一款视频剪辑软件,因此需要在OSX平 ...
随机推荐
- js原型链结构理解
在一般的面向对象的语言中,都存在类(class)的概念,类就是对象的模板,对象就是类的实例. 但在js中是没有类的定义的(万物皆是对象). 题外话:但是在ES6中提供了更接近传统语言的写法,引入了C ...
- github 新功能 profile README.md
引 自从github被微软收购后,每天都会有一些新花样,ui变化,界面变化,更多的功能,相信这个它会越来越好,程序员越来越喜欢.今天浏览大佬的github 无意中发现了 github profile ...
- Golang语言排序的几种方式
1.Ints,float64s,strings 使用以如函数实现基本类型 sort.Ints sort.Float64s sort.Strings s := []int{4, 2, 3, 1} sor ...
- python基础--python基本知识、七大数据类型等
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, ...
- IO—》递归
递归的概述 递归,指在当前方法内调用自己的这种现象 public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); ...
- AI大厂算法测试心得:人脸识别关键指标有哪些?
仅仅在几年前,程序员要开发一款人脸识别应用,就必须精通算法的编写.但现在,随着成熟算法的对外开放,越来越多开发者只需专注于开发垂直行业的产品即可. 由调查机构发布的<中国AI产业地图研究> ...
- pycharm 退出虚拟环境
pycharm 内置虚拟环境 venv 如果要退出就直接 deactivate 命令就行 运行的话直接在命令行输python3 文件名
- Django学习路31_使用 locals 简化 context 写法,点击班级显示该班学生信息
urls 中 进行注册 url(r'grades',views.grades) views 中编写函数 def grades(request): grades_list = Grade.objects ...
- PHP imagecolorallocate - 为一幅图像分配颜色
imagecolorallocate — 为一幅图像分配颜色.高佣联盟 www.cgewang.com 语法 int imagecolorallocate ( resource $image , in ...
- SpringClould进行Devtools热部署
当我们在使用SpringCloud搭建项目的时候,会有多个项目,每次修改东西的时候,都需要重新启动项目,这样的操作就比较繁琐. 为了提高工作的效率,避免每次频繁的重启项目,在子类pom文件中,我们可以 ...