ArcGIS扩展开发(一)--为 ArcGIS Desktop建立Add-in插件

 

本文地址:http://www.cnblogs.com/tmall/archive/2013/04/30/3052388.html转载需保留本地址。

   写在前面的:

  1、由于是头次翻译外文帮助文档,所以错误难免,希望大家都提出来,翻译的不好还望大家少拍砖多鼓励。

  2、本系列博文是依据 ArcGIS官方文档翻译的,原文地址为:        http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/Building_add_ins_for_ArcGIS_Desktop/0001000000w2000000/

    3、由于我现在大三,忙着上课和考研,所有博客会不定期更新本系列文章。

 

本次主题

  • · 关于 add-ins插件
  • · 什么时候使用 add-ins
    • · Python
    • · Classic COM extensibility
  • · Add-in的类型
  • · 管理 add-ins插件
  • · Add-in 文件结构分析
  • · 建立 add-ins插件

关于add-ins插件

     ArcGIS 10 为了是你更加容易的自定义和扩展ArcGIS Desktop应用程序,引入了几个新的很具有创新特性,包括Add-in模型。新的Add-in模型提供了一个公开的基础框架,目的是为了方便的创建一系列自定义工具,这些工具被打包压缩成了一个单独的文件。新的Add-in模型为了方便大家创建一系列自定义工具提供了一个公开的基础框架,它们被打包压缩成了一个单独的文件。新的Add-in模型提供了一个公开的基础框架,目的是为了方便的创建一系列被打包压缩在一个单独的文件的自定义工具。为了方便的创建一系列被打包压缩在一个单独的文件的自定义工具,新的Add-in模型提供了一个公开的基础框架。

    Add-ins插件能够很方便的在用户之间共享,因为它们既不需要安装程序 ,也不需要组件模型(COM)注册;Add-ins插件通过简单的复制它们到well-known文件夹,然后从当前文件夹中删除它们来移除 来安装到系统中。

Well-Known文件目录:

  Vista/7: C:\Users\<username>\Documents\ArcGIS\AddIns\Desktop10.0

  XP: C:\Documents and Settings\<username>\MyDocuments\ArcGIS\AddIns\Desktop10.0

    Add-ins 插件也能够通过集中式的网络在一个组织中的用户之间共享。Add-ins 插件是用.NET或者Java,还有可扩展标示语言(XML)制作的。XML描述用户的自定义信息,.NET 或者Java的类提供用户自定义的功能。ArcObjects软件的开发工具包(SDK)包括一个Add-Ins向导,它为了简化开发,还集成了开发环境,例如Eclipse, Microsoft Visual Studio。

什么时候使用add-ins插件

     ArcGIS add-ins使得构建和分享桌面自定义工具更加容易。然而,这取决于你构建的解决方案的目的和特性,接下来的某个操作或许适合你。

Python

      所有的ArcGIS桌面应用程序都包含嵌入式的脚本Python。

      ArcGIS应用的许多领域,特别是地理数据处理,都可以通过简单的Python应用程序编成接口(APIs),使得构建和自动化一些基础任务更加容易。Python脚本非常容易共享,并且制作它也不需要另外的开发环境。有许多公共的Python模块主要集中在科学,工程和数学运算上面。尽管它有这么多优势,Python也不是适合每个编程任务。

     此外,在Python里面编辑和调试 不够成熟,他不像Visual Studio那样的商业开发环境容易使用。

最后,你不能响应ArcGIS的事件,实现一个COM接口,或者用Python插入ESRI的许多COM扩展点。

Classic COM extensibility(经典的COM扩展模型)

     Add-in 框架不支持每个被ArcGIS定义的扩展点。例如,你不能用Add-in 自定义一个渲染器,一个自定义工作空间,或者自定义一个要素。如果你的解决方案包含add-in框架不支持的组件类型,你必须使用经典的COM扩展方法。此外,因为add-ins插件不涉及注册步骤,所以不要使用依赖类库,程序集,服务的add-in解决方案,因为那些需要注册。

Add-in 类型

     ArcGIS 桌面应用程序支持一组固定的Add-in类型,包括最流行的基于COM的扩展模型都被引入到ArcGIS预览版中了。下面的Add-in类型是目前正式版支持的类型。

  • · Buttons and tools(按钮和工具) 
    按钮和工具是最简单的能够在工具栏显示的控件,按钮还能在菜单上显示。
  • · Combo boxes(组合框)

      Combo box提供了一个下拉列表框,同时能够随意的提供能够编辑的输入区域。

  • · Menus and context menus(菜单和快捷菜单)
    菜单展现的是一组下拉式列表按钮,子菜单,多项目。菜单项能够来自嵌入的资源,add-in资源或者是两者的组合。菜单通常驻留在工具栏,但是它们也出现在独立的快捷菜单(弹出式菜单)或者根菜单。
  • · Multi-items(多项目)

   多项目是在运行时创建的动态的菜单项的集合。多项目在菜单项在运行之前不清楚或项目需要在当前系统状态进行修改的基础上情况下非常有用。

  • · Toolbars (工具栏)
    工具栏更够宿主按钮,工具,菜单,工具栏选项或者组合框。像菜单一样,出现工具栏上的控件能够来自嵌入资源,add-in资源或者两者的组合。工具栏能够被自动配置,当初始化的时候会被加到应用程序中。
  • · Tool palettes(工具栏选项)

     工具栏选项提供了紧凑的方式来组合一系列工具,最常用的工具出现在工具栏上伴随着一个小的下拉按钮它用来选择同组中的其他工具。像菜单一样,出现在工具栏选项上的工具可以来自嵌入资源,add-in资源或者两者的组合。

  • · Dockable windows (可停靠窗体)
    可停靠窗口可以悬浮或者停靠在ArcGIS 桌面应用程序中。你可以用任意一种内容填充可停靠窗体:图表,幻灯片,视频,迷你地图,或者包含其他控件的自定义对话框,当然也包括ESRI的控件。Add-in开发者必须考虑在可停靠窗体上的控件的初始化,控件是否被其他可停靠窗体分组。
  • · Application extensions(应用程序扩展)
    应用程序扩展被用来协调与其他组件的活动,例如按钮,工具,可停靠窗体。应用程序扩展通常负责存储和add-in插件相关的状态。 当被关联的应用程序启动的的时候,应用程序扩展插件的配置信息会在加载 时候配置好。扩展插件也能够在被配置好出现在标准的ArcGIS扩展对话框内。
  • · Editor extensions (编辑器扩展)
    编辑器扩展插件允许你通过直接加载插件到编辑框架里面来自定义你的编辑工作流。与应用程序拓展插件相反,Add-ins编辑扩展工具是在编辑会话的时候被加载的开始运行的(编辑>开始编辑)。你可以通过创建编辑扩展工具来自定义你的编辑会话的功能。

管理Add-ins

     Add-ins插件能够通过 基于web 分享,通过邮件或者浏文件系统或者网络等各种各样的资源获得。你可以在Windows Explorer里面通过双击add-in文件来安装它。当双击add-in文件的时候,ESRI系统所支持add-in文件的安装验证机制,并将其拷贝到well-known文件夹。用户可以查看插件的作者,描述,版本,数字签名信息在用户安装插件的时候。这个验证的步骤的作用是确保你的文件被拷贝到合适的位置,确保文件名字没有冲突,还要确保已经存在的add-in插件的版本不能够被老版本的插件覆盖。

这种功能也可以通过电子邮件附件,或者网页链接来工作。

看下面的截图:

 

     Add-ins插件也可以通过ArcGIS 桌面应用程序上自定义对话框上的“添加”文件按钮安装插件。截图如下:

 

        你可以通过自定义菜单选择自定义对话框。Add-ins插件可以通过双击或者从本地已被分类好的文件中选择添加操作来安装。本地Add-ins插件位于本地机器每个用户的well-known文件夹中。如果不使用ESRI系统的add-in功能,也可以手动拷贝文件到well-known文件夹下,但是要注意文件重名,版本覆盖等问题。这种方法在网络中分享add-ins插件很常见。正如经典的COM组件,单独的add-in类型可以通过自定义对话框来访问到。 例如,一个被定义在add-in插件功能中的按钮和COM模型的命令式一样的,他们都被详细的分类列举在命令选项卡上。从这里,你可以将它拖到工具栏或者菜单上。

      ArcGIS桌面应用程序自定义菜单下又add-in 管理器对话框。在对话框的Add-Ins标签栏提供了每个被安装并且当前正在运行的插件的详细的信息。

看接下来的屏幕截图:

 

      Add-In管理器“操作”选项卡可以让用户自定义well-known文件夹。Add-In框架会每次在应用程序启动的时候会在自定义文件夹里自动搜索另外的add-ins插件。这个操作一个小组中用中心网络的方式分享Add-ins 情况下特别有用。在不登录客户机的情况下,可以添加,删除,更新Add-ins 插件。如果更新了add-in插件后,系统会通过反射机制在插件下次启动的时候自动更新。“操作”选项卡也可以让所有的add-in插件功能失效。

截图如下:

 

      从add-in管理器里面,用户也可以选择删除某个特定的add-in插件。

卸载一个Add-in插件只不过就是把选择的add-in文件移动到了回收站,这便于日后有需要的时候对插件进行恢复。

卸载按钮只对本地的add-ins插件有效。为了卸载原来自定义文件夹里面的add-in插件,可以利用移除按钮直接移除add-in插件。

Add-in file anatomy(插件文件结构分析)

      Add-in插件是由许多部分组成的,包括描述add-in插件的自定义信息的元数据的XML文件,图像和其他自定义数据,还有已经编译的代码。

为了把这些有关系的数据关联在一起,add-ins插件都是被打包成一个以esriAddIn为拓展名的zip压缩包。(例如,Acme.esriAddIn)

Add-ins插件使用声明式和命令式编程技术。上面提及到XML文件是声明部分,它描述了add-in插件所有的静态方面的信息,包括标题,提示,帮助,图像和详细的初始化布局信息。这为声明和方案方面增加灵活性,减少和简化的开发人员的负担,一般会使得开发和维护更加容易。例如,你可以在不需要重新编译的情况下修改你的插件的标题和按钮的图像。一些自定义工具,例如工具栏,工具栏选项,菜单等等,它们都是声明式的,它们没有活动的部分。

接下来的XML例子展示了一个有一个按钮的工具栏:

<ESRI.Configuration

  xmlns="http://schemas.esri.com/Desktop/AddIns"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Name>

    Acme Custom Mapping Extension

  </Name>

  <AddInID>{6fa0df73-57ab-491e-a73d-e58ce07af414}</AddInID>

  <Description>Custom mapping toolbar.</Description>

  <Version>1.0</Version>

  <Image>Images\Acme.png</Image>

  <Author>John Locke</Author>

  <Company>Acme</Company>

  <Date>5/28/2009</Date>

  <Targets>

    <Target name="Desktop" version="10.0"/>

  </Targets>

  <AddIn language="CLR" library="Acme.dll" namespace="Acme">

    <ArcMap>

      <Commands>

        <Button

          id="Acme_ToggleDockWinBtn"

          class="ToggleDockWinBtn"

          caption="OpenDockWin"

          category="Acme Tools"

          image="Images\ToggleDockWinBtn.png"

          tip="Toggle dockable window."

          message="Open dockable window.">

          <Help heading="Toggle">Turns the ACME dockable window on and off.</Help>

        </Button>

      </Commands>

      <Toolbars>

        <Toolbar id="Acme_Toolbar" caption="Acme Toolbar">

          <Items>

            <Button refID="Acme_ToggleDockWinBtn"/>

          </Items>

        </Toolbar>

      </Toolbars>

    </ArcMap>

  </AddIn>

</ESRI.Configuration>

 

 

 

      下面的代码展示了部分有效按钮的例子。

      所有的ArcObjects对象, 因为强大的编程环境,可以直接供于开发人员使用。

public class ToggleDockWndBtn: Button

{

    public ToggleDockWndBtn(){}

 

    protected override void OnClick()

    {

        //Get dockable window.

        UID dockWinID = new UIDClass();

        dockWinID.Value = @"ESRI_SelectionSample_SelCountDockWin";

        s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID);

    }

}

 

 

 

Public Class ToggleDockWinBtn

    Inherits ESRI.ArcGIS.Desktop.AddIns.Button

    

    Public Sub New()

        

    End Sub

    

    Protected Overrides Sub OnClick()

    

    'Get dockable window.

    Dim dockWinID As UID = New UIDClass()

    dockWinID.Value = "ESRI_SelectionSample_SelCountDockWin"

    s_dockWindow = ArcMap.DockableWindowManager.GetDockableWindow(dockWinID)

End Sub

 

 

Building add-ins(建立add-ins插件)

   Add-ins插件使用综合的开发环境(IDE),比如Visual Studio Express for .NET 和Eclipse for Java等。ArcObjects SDKs提供的向导和模板可以自动生成包括XML文件和类文件的项目。

      此外,当建立这些工程的时候,它们会自动生成一个add-in文件,然后复制它们到well-known文件夹中。大多数情况下,XML文件是由向导来生成的,然而,如果你想手动编辑XML文件,因为已经关联的架构文件有智能感知和动态验证功能,这使得编辑就更加容易了。如果想了解更多关于add-ins插件的开发,向导和模板的使用,请看我后续翻译文章的《建立一个自定义界面的add-ins插件》。

 

See Also:

怎么样从COM组件迁移到add-ins插件

 

 

posted @ 2013-04-30 20:36  国产毛毛虫  阅读(6772)  评论(0编辑  收藏  举报