Opticks是一款开源的遥感数据处理平台,与其同类开源软件OSSIM一样,支持种类丰富的数据文件格式,但其最大特点为设计精巧的插件开发模式,在设计技巧上,系统提供了良好的封装特性,即使插件开发者对框架内部的设计机制了解较少,也能开发出合格的插件。
一、插件种类
系统为各类插件提供了基类,插件开发者只需要从这些基类创作自己的派生类,即可实现插件的功能,系统主要提供了以下插件基类:
- ImporterShell
- AlgorithmShell
- GeoreferenceShell
图1
其中,所有的数据输入插件可以从ImporterShell派生,所有的算法类可以从AlgorithmShell派生。地理参考类型的插件可以从GeoreferenceShell这个基类继承。
二、 插件模块要实现的功能
2.1 插件模块的文件结构安排
一般来讲,插件是一个工程,包含了多个文件,其中会有一个名为ModuleManager.cpp 的文件,这个文件的功能很明确,就是将整个工程作为一个模块向框架注册。一个工程中可以同时有多个插件(多数情况下如此)。在图2的例子中,removeHaze.cpp是一个算法插件。
图2
2.2 注册插件
首先,插件需要向框架软件注册自己,下面是ModuleManager.cpp文件的内容。
图3
在图3中, 宏REGISTER_MODULE向框架注册了一个名为IntelligenceAnalysis的模块。
2.3插件的构造函数
以Opticks自带插件PCA为例,详细讲解插件要实现的功能,下面是插件PCA的构造函数:
1.setName("Principal Component Analysis");
2.setVersion(APP_VERSION_NUMBER);
3.setCreator("Ball Aerospace & Technologies Corp.");
4.setCopyright(APP_COPYRIGHT);
5.setShortDescription("PCA");
6.setDescription("Run Principal Component Analysis on data cube.");
7.setMenuLocation("[通用算法]\\Principal Component Analysis");
8.setDescriptorId("{7D2F39B3-31BA-4ef1-B326-7ADCD7F92186}");
9.allowMultipleInstances(true);
10.setAbortSupported(true);
11.setProductionStatus(APP_IS_PRODUCTION_RELEASE);
前4行分别指明插件的名称、版本、作者和版权,第5,6行指明本插件的简短描述,第7行是插件提供的按钮在工具栏上的位置,第8行是一个DescriptorId, 后面介绍。第9行表明该插件是否允许运行多个实例。第10行表明该插件在执行时是否允许被用户中断。第11行指明产品的状态,是否为发布状态。
2.4 插件要实现的其它功能
插件在execute()方法中,提供它要实现的功能。但是插件在执行功能之前,需要从框架内取到需要处理的数据。