ENVI 5.0 SP2 全新的二次开发模式
分享
在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
启动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 个评论
相关问题
- 请问ArcGIS适合在局域网内用javaweb做二次开发吗?
- 安装完arcgis10.3后,为何没有Envi tools这个工具箱?
- ENVI中Image to Map中X/Y Pixel Size的参数如何设置?
- 如何学好二次开发?
- 按照Engine+开发手册ArcEngine_10.0_C#二次开发编写的鹰眼的代码,运行时鹰眼不显示!
- envi安装
- 零基础进行二次开发可行吗?
- arcgis 线要素的平行复制在AE二次开发中如何实现,使用哪些接口
- envi 两幅图像图像镶嵌后有明显的色差及接缝线,该怎么解决?
- ENVI植被覆盖度计算大于1
- ENVI中图像分辨率 (Resolution)与比例尺 (Sacle) 之间的如何换算?