ENVI自带WIDGET自由组合使用方法
分享
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
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 个评论
相关问题
- 安装完arcgis10.3后,为何没有Envi tools这个工具箱?
- ENVI中Image to Map中X/Y Pixel Size的参数如何设置?
- envi安装
- 大家过来围观呀,怎么修改widget距地图边框的距离呀,不知道表述是否正确,上图
- arcmap字段属性表中有文本和数字组合如何只提取数字
- envi 两幅图像图像镶嵌后有明显的色差及接缝线,该怎么解决?
- ENVI植被覆盖度计算大于1
- ENVI中图像分辨率 (Resolution)与比例尺 (Sacle) 之间的如何换算?
- ENVI与ArcGIS一体化集成的特点是什么?
- 做arcgis sddins :arcmap自带的通过layer properties的display 中的Display Expression 控制显示字段。
- Pro3.3 和 Pro3.4都不能在自带的Python窗口内import第三方库