ENVI 5.0 SP2 全新的二次开发模式

0
分享 2016-05-30
在ENVI 5.0发布时,便加入了许多全新的二次开发接口。ENVI 5.0 SP2的发布,同样带来了新的功能函数接口。下面对ENVI 5.0版本中新增的二次开发技术进行一个总结。

启动ENVI
IDL中启动ENVI批处理模式,在之前版本的代码如下:
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
启动ENVI Classic,与之前相同,直接在IDL控制台输入ENVI即可。

ENVI 5.0新增了启动ENVI批处理模式的方法,格式如下:
Result = ENVI([/CURRENT] [, ERROR=variable] [, /HEADLESS] [, LAYOUT=array] [, LOG_FILE=string] [, UVALUE=variable])
最常用的为:
e = ENVI() ;启动ENVI 5界面

e = ENVI(/headless) ;headless关键字表示只调用ENVI函数,不打开ENVI界面

程序控制
使用e = ENVI()启动ENVI之后,e返回为一个对象,信息如下:
ENVI> help, e
E ENVI <165828>
ENVI> print, e
ENVI <165828>
LANGUAGE = 'zho'
LAYOUT = 1, 1
LOG_FILE = ''
ROOT_DIR = 'C:\Program Files\Exelis\envi50\'
UI = <ObjHeapVar165829(ENVIUI)>
UVALUE = !NULL
VERSION = '5.0.2'
WIDGET_ID = 3

可以看到e中包含了许多信息,包括语言、视图布局、日志文件、安装目录、UI对象、UVALUE、版本和Widget_ID。
得到e对象之后,便可以利用e的许多方法进行对ENVI的控制,比如新建图层、新建视图、控制视图布局、添加扩展、打开栅格矢量文件等等。方法及功能介绍如下表所示:


数据控制
同时,ENVI 5提供了很多与数据相关的对象参考,具体如下表所示。


显示控制
ENVI 5全新的用户界面,带来了新的操作习惯。增加了图层管理功能,可以在一个视图中叠加显示多个图层,同时提供了几种透视窗口,可以进行卷帘、闪烁等操作。
同样,ENVI 5提供了与这些功能相对应的API,可实现对ENVI的图层进行操作、创建透视窗口、弹出选择文件对话框等功能。如下表所示:


扩展工具
在IDL8.2中,提供了新建ENVI扩展向导,在IDL中点击“文件”-“ENVI扩展”即可弹出如下对话框,填写相关信息,点击完成,则自动新建工程和源码文件。

图:新建ENVI扩展
自动生成的代码如下:


新建ENVI扩展示例
下面用一个示例介绍如何为ENVI Toolbox添加扩展工具,以及为ENVI添加新的菜单(ENVI 5.0 SP2新增功能)。代码如下:
PRO TEST_EXTENSION_EXTENSIONS_INIT
COMPILE_OPT IDL2
; Get the current application
e = ENVI(/CURRENT)

;在ENVI原始菜单Display-View Swipe下面加入一个新的菜单Plot,并且有分隔符
e.ADDEXTENSION, 'Plot', 'TEST_EXTENSION', /menu, $
PATH = 'Display', after = 'View Swipe', uvalue = 'plot', /sep

;在Plot后边加入一个新的菜单Surface
e.ADDEXTENSION, 'Surface', 'TEST_EXTENSION', /menu, $
PATH = 'Display', after = 'Plot', uvalue = 'surface'

;在Display中加入一个Graphics菜单,再Graphics菜单下再加入Plot和Surface
e.ADDEXTENSION, 'Plot', 'TEST_EXTENSION', /menu, $
PATH = 'Display/Graphics', uvalue = 'plot'
e.ADDEXTENSION, 'Surface', 'TEST_EXTENSION', /menu, $
PATH = 'Display/Graphics', uvalue = 'surface'

;在Toolbox的Extensions下加入Graphics文件夹,在文件夹下加入Plot和Surface工具
e.ADDEXTENSION, 'Plot', 'TEST_EXTENSION', $
PATH = 'Graphics', uvalue = 'plot'
e.ADDEXTENSION, 'Surface', 'TEST_EXTENSION', $
PATH = 'Graphics', uvalue = 'surface'

END

PRO TEST_EXTENSION, event
; Set compile options
COMPILE_OPT IDL2
; General error handler
CATCH, err
IF (err NE 0) THEN BEGIN
CATCH, /CANCEL
IF OBJ_VALID(e) THEN $
e.REPORTERROR, 'ERROR: ' + !error_state.MSG
MESSAGE, /RESET
RETURN
ENDIF

;Get ENVI session
e = ENVI(/CURRENT)
;******************************************
; Insert your ENVI Extension code here...
;******************************************
;获取UVALUE
WIDGET_CONTROL, event.ID, get_uvalue = uvalue

;通过判断UVALUE进行不同的操作
CASE uvalue OF
'plot': p = PLOT(/test)
'surface': s = SURFACE(/test)
ENDCASE
END

创建sav文件方法有两种:
1. 在IDL资源管理器中,右键点击TEST_EXTENSION工程文件夹,点击构建工程即可。
2. 编译pro源码文件,然后使用SAVE命令创建sav文件。

IDL> .compile -v 'D:\IDLWorkspace82\My_Extension\test_extension.pro'
% Compiled module: TEST_EXTENSION_EXTENSIONS_INIT.
% Compiled module: TEST_EXTENSION.
IDL> save, filename = 'D:\TEMP\TEST_EXTENSION.sav', /routines

然后将sav文件拷贝到ENVI安装目录下的Extensions文件夹内,重启ENVI即可。
可以看到创建的Display下面的新菜单,以及包含的二级菜单,和Toolbox下的新工具,如图所示:


图:新增加的菜单和工具
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d01016j9s.html

0 个评论

要回复文章请先登录注册