利用OpenRS所提供源码走通一个简单入门级插件开发实例
平台:VC6.0
前期准备:为方便日后文件管理,在\OpenRS\目录下建立自己的工作区目录,结构类似于OpenRS的组织结构。即,在\OpenRS\下新建一个文件夹shell (注:这个shell是我自己起的名字,大家随便起),在shell目录下再分别新建两个文件夹build和src;在build目录下新建文件夹vc60,在src目录下新建文件夹plugins;在vc60目录下新建文件夹plugins。针对本例这已够用,以后可根据实际情况进行扩展,不多言。
菜鸟步骤(牛蛙break;):
(1) 打开VC6.0,新建一个MFC AppWizard [dll]工程,Project name设置为FirstPlugin,Location设置为\OpenRS\shell\build\vc60\plugins\目录,其他按默认设置,点击OK,点击Finish,点击OK。
(2) 在File View视图中把工程下的文件全删掉。
(3) File--Close Workspace。然后进入目录\OpenRS\shell\build\vc60\plugins\FirstPlugin\,除Debug文件夹和FirstPlugn.dsp外,全部删掉。(删掉后如下图所示)
(4) 将FirstPlugin.dsp拖入VC6.0中;
(5) Project--Setting,点击C/C++标签页,在Category后面的下拉菜单中选择Precompiled Headers,选择第二项Automatic use of precompiled headers,并在下面的Through header中输入:stdafx.h ;
(6) Category下拉菜单中选择Preprocessor,在Additional include directories:下输入\OpenRS\desktop\include ;
(7) 点击Link标签页,Category:下拉菜单选择General。在Output file name:下输入\openRS\desktop\debug\vc60\Plugins\FirstPlugin.dll ,点击OK;
(8) 在\OpenRS\shell\src\plugins目录下新建文件夹FirstPlugin;
(9) 把\OpenRS\desktop\src\plugins\PluginExample目录中的exeExample.cpp和pluginExample.cpp复制到(8)中FirstPlugin目录下;
(10) 把exeExample.cpp重命名为orsThreshold.cpp,把PluginExample.cpp重命名为orsXPlugin.cpp ;
(11) Project -- Add to Project -- Files ,把刚才\OpenRS\shell\src\plugins\FirstPlugin目录下重命名的两个文件添加到工程中;
(12) 打开orsThreshold.cpp
(13) 把exeExample替换为Threshold (有5处);
(14) 在class orsThreshold该行的上面添加:#include "orsImage/orsIExeImageFilter.h" ;
(15) 把orsISimpleExe替换为orsISE_ImageFilter (有3处) ;
(16) 此时类定义的最后一行是:ORS_OBJECT_IMP2(orsThreshold, orsISE_ImageFilter, orsIExecute, "sample", "Simple Sample Exe");
(17) 将其改为:ORS_OBJECT_IMP3(orsThreshold, orsISE_ImageFilter, orsISimpleExe, orsIExecute, "sample", "Simple Sample Exe"); (注:execute函数中那个Sleep(1)第一个字母应该是大写,直接改过来)
(18) 打开orsXPlugin.cpp
(19) 把orsPluginInitializer替换为orsXPlugin (有2处) ;
(20) 把“//对象工厂声明"下面的三行代码注释掉后两行,即把:
orsIObject* createExeExampleObject(bool bForRegister); orsIObject* createHelloObject(bool bForRegister); orsIObject* createExeParallelExampleObject(bool bForRegister);
变为:
orsIObject* createExeExampleObject(bool bForRegister); //orsIObject* createHelloObject(bool bForRegister); //orsIObject* createExeParallelExampleObject(bool bForRegister);
(21) 将orsIObject* createExeExampleObject(bool bForRegister);改为 orsIObject* createThresholdObject(bool bForRegister); (黑体修改部分即orsThreshold.cpp中最下面那个函数名)
(22) 在initialize函数中把:
platform->getRegisterService()->registerObject(createHelloObject); platform->getRegisterService()->registerObject(createExeExampleObject); platform->getRegisterService()->registerObject(createExeParallelExampleObject); return true;
修改为:
//platform->getRegisterService()->registerObject(createHelloObject); platform->getRegisterService()->registerObject(createThresholdObject); //platform->getRegisterService()->registerObject(createExeParallelExampleObject); return true;
(23) 把getID函数中return "org.openRS.pluginExample"改为 return "org.openRS.FirstPlugin" ;
(24) 把getName函数中return "pluginExample"改为 return "FirstPlugin" ;
(25) 把getProvider函数中return "edu.whu.liesmars.guowei"改为return "edu.whu.rs.shell" ;
(26) 对该工程进行Build(F7);
(27) 新打开一个VC6.0程序,打开OpenRS工程,在OpenRS classes上右键选择Set as Active Project,运行程序;
(28) 选择菜单栏中”插件“--"插件浏览",弹出Plugins对话框;在左上角”插件列表“中即可看到刚建的”FirstPlugin.dll“,点击它便可显示出相应描述性说明,点击OK退出;
(29) 点击orsViewer图标按钮,打开orsViewer主界面;点击”图层“--”添加影像层“,随便打开一张影像;
(30) 点击"影像滤波”--“Simple Sample Exe”,打开“可执行对象配置”对话框,这便是对FirstPlugin插件的调用,可点击“单机执行”看调用效果;
(注:在orsThreshold.cpp类定义最后一行代码中,酱紫:ORS_OBJECT_IMP3(orsThreshold, orsISE_ImageFilter, orsISimpleExe, orsIExecute, "sample", "Simple Sample Exe"); 看黑体部分,前者是orsThreshold的标识ID,后者是其描述。【(中括号里的,只是我的理解,可能还不够正确)前者是第30步中“可执行对象配置”对话框“输出文件名”-Value部分自动添加的后缀"_sample.***",后者是菜单“影像滤波”下的子菜单Simple Sample Exe的名称。】)
这便是OpenRS上一个插件程序的编写、调试及调用。
很感谢的一份参考资料:武汉大学OpenRS培训大纲 (注:参考资料上有几处小细节并不完善,大家不妨结合着程序一边调一边参考)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
小结:
对于正在入门菜鸟如我的新手而言,有些文档例如OpenRS自带的doc目录下的“OpenRS软件集成方案与开发指南 - V0.85.doc”,也看的不是很懂。虽然里面老师总结的也很清楚,有相应大的步骤,但当时花费了一段时间依然进展不大,没能连甚至最简单的插件例子走通。很希望能有一个“傻瓜”级的实例教程能仿照着依葫芦画瓢,然后慢慢去理解消化。这也是我啰嗦这么多的原因,按需自取即可。我相信很多程序只要有个指导带着做一遍(或演示一遍如何做),我们就能掌握,并慢慢在其基础上改进、创新,难就难在要有个引路,否则干着急却无从下手。
这只是个小小的开始,后面的开发定会更精彩。开始了,就好办了。