本文章轉載至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插件