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();
posted @ 2022-11-27 11:42  mytudousi  阅读(112)  评论(0编辑  收藏  举报