ArcObjects SDK開發 005 ArcObjects SDK中的插件式架構

1、什麼是插件式架構

插件式架構設計中主要包括三個重要部分,宿主、插件協議以及插件實現。宿主是指使用插件的部分,該模塊可以是一個類,也可以是多個接口和類組成的模塊。插件協議是指宿主與插件之間的協議,宿主根據這個協議去調用插件的功能,插件根據這個協議去實現宿主需要的功能。插件實現就是基於插件協議實現的一個個具體插件。插件協議一般用接口體現。

image1.png

2、Arcobjects中的Command-Tool插件架構

要梳理AO中的Command-Tool插件架構,就要找到對應的宿主、插件協議以及具體的插件實現。

我們先通過ICommand的定義,找下宿主是什麼。

image2.png

當命令被創建的時候,會傳一個名爲hook的參數進來,該參數爲object類型,名稱翻譯過來叫鉤子。這個名稱挺形象的,相當於這個小小的插件鉤住了一個很龐大宿主對象,這樣在這個插件中,就可以使用宿主對象的任何資源了。

其關係如下圖所示。

image3.png

我們開發的時候,常用的宿主就是IMapControl、IPageLayoutControl,分別可以有AxMapControl.Object和AxPageLayoutControl.Object獲取。AO API已經爲我們實現了上百個命令或者工具。例如我們最常用的地圖放大工具、地圖全圖命令等。這些工具和命令我們都可以直接使用。

下面代碼展示瞭如何設置當前的地圖工具爲放大工具。

ESRI.ArcGIS.SystemUI.ITool myZoomInTool=new ControlsMapZoomInToolClass();
(myZoomInTool as ICommand).OnCreate(myAxMapControl.Object);
(myAxMapControl.Object as IMapControl2). CurrentTool = myZoomInTool;

調用AO API自帶的全圖工具的代碼如下。

ESRI.ArcGIS.SystemUI.ICommand myFullCommand=new ControlsMapFullExtentCommandClass ();
myFullCommand.OnCreate(myAxMapControl.Object);
myFullCommand. OnClick();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章