ENVI自带WIDGET自由组合使用方法

0
分享 2016-06-26

ENVI提供了一些自带WIDGET供用户调用,在二次开发中可以节省大量时间。可以通过ENVI帮助查看WIDGET组件使用方法和功能说明,如图1所示,为ENVI自带组件列表。

ENVI自带组件在单个使用时非常方便,可以利用auto_wid_mng获取组件的输入信息。但是如果我们需要在自己编写的界面中使用ENVI自带组件,或同时使用两个甚至多个自带组件时利用auto_wid_mng就不能方便获取每个组件的输入信息了。



图1 ENVI自带组件列表

下面通过一个示例介绍如何自由组合使用ENVI自带组件。以widget_map和widget_outfm为例,创建如图2所示的界面,并点击OK按钮时获取每个组件的输入信息。


图2 同时使用2个ENVI自带组件
代码如下:
PRO BASE_EVENT, ev

WIDGET_CONTROL, ev.TOP, get_uvalue = pState

outf = pState.OUTF
mapw = pState.MAPW

;响应事件
CASE WIDGET_INFO(ev.ID, /uname) OF

'ok': BEGIN
;获取信息
WIDGET_CONTROL, mapw, get_value = mapw_value
PRINT, '获取的投影坐标信息******************************************'
HELP, mapw_value

WIDGET_CONTROL, outf, get_value = outf_value
PRINT, '获取的输出路径信息******************************************'
HELP, outf_value
END

ELSE:
ENDCASE
END


PRO TEST_ENVI_WIDGET
;
COMPILE_OPT idl2
ENVI, /restore_base_save_files
ENVI_BATCH_INIT

;创建顶级Base
base = WIDGET_BASE(title = 'ENVI Widget', /column)
;创建投影坐标系选择组件
mapw = WIDGET_MAP(base, /frame)
;创建输出文件选择组件
outf = WIDGET_OUTFM(base, uvalue='outf', /frame)
;创建按钮
ok = WIDGET_BUTTON(base, value = 'OK', uname = 'ok')

WIDGET_CONTROL, base, /realize

;将mapw和outf两个组件ID存储在base的uvalue中
pState = {outf:outf, mapw:mapw}
WIDGET_CONTROL, base, set_uvalue = pState

XMANAGER, 'base', base, /no_block

END

使用演示:参数设置好之后(如图3所示),点击OK按钮,得到如下结果,利用这些信息便可以进行下一步处理了。
获取的投影坐标信息******************************************
** Structure <188d5c00>, 3 tags, length=224, data length=202, refs=1:
MAP_X DOUBLE 111.00000
MAP_Y DOUBLE 45.000000
PROJ STRUCT -> ENVI_PROJ_STRUCT Array[1]
获取的输出路径信息******************************************
** Structure <18744090>, 3 tags, length=24, data length=22, refs=1:
NAME STRING 'D:\Temp\test_envi_widget.dat'
IN_MEMORY LONG 0
COMPRESSION INT 0
图3 参数设置结果
文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0101575z.html

0 个评论

要回复文章请先登录注册