ENVI菜单添加方法有两种:
1.修改文件
在ENVI\menu\envi.men文件中添加如下部分:
-0{Myfunctions}
-0{Myfunctions}
-1{文件信息查看}{not used}{test_envi_file_info}
-1{文件多波段存储}{not used}{test_envi_file_sav}
举例文件中部分信息:
0 {Help} -----0表示最顶层菜单
1 {Start ENVI Classic Help} {envi help} {envi_menu_event} ----1表示一级菜单,按1,2,3……菜单级别排列;
Start ENVI Classic Help显示在菜单上的内容(注:使用中文会出现乱码)
envi help是用户的自定义值部分,该值在同函数处理多个菜单项时有用,用来判断选中的菜单项;
envi_menu_event是时间处理程序的名称,即用户名函数。需要注意这里使用的是用户名函数,而不是用户函数所在的文件名。
1 {Mouse Button Descriptions} {mouse descriptions} {envi_menu_event}
1 {About ENVI Classic} {about envi} {envi_menu_event}
2.ENVI_DEFINE_MENU_BUTTON函数
举个栗子(注:需要将代码程序发布为sav文件,把sav文件拷贝到save_add文件夹中,运行ENVI才会显示添加的菜单)
例1:
pro envi_hello_define_buttons,btninfo
envi_define_menu_button,btninfo, $
value = 'ENVI Hello', $
uvalue = '', $
event_pro = 'envi_hello', $
ref_value = 'Band Math', $ ;在Basic Tools->Band Math之后添加菜单ENVI Hello
position = 'after'
end
pro envi_hello,event ; envi_hello事件,固定格式 :xxx,event。xxx表示事件名
envi_select,fid=fid
if fid eq -1 then return
envi_file_query, fid, ns=ns,$
nl=nl,nb=nb
ns = strtrim(ns,2)
nl = strtrim(nl,2)
nb = strtrim(nb,2)
info = '行数:' + ns +string(13B)+ $
'列数:' + ns +string(13B)+ $
'波段数:' + nb
result = dialog_message(info, /question, $
title='信息描述',/default_no)
end
例2:
pro read_awx_define_buttons,buttonInfo
envi_define_menu_button, buttonInfo, $
value='程序添加菜单',$
/menu,$
ref_value='自定义菜单',/sibling, $
position='after'
envi_define_menu_button, buttonInfo, VALUE = 'read_AWX', $
uValue = '', $
event_pro ='READ_AWX', $
ref_value = '程序添加菜单'
envi_define_menu_button, buttonInfo, VALUE = '信息提示', $
uValue = '', $
event_pro ='mymenu_event1', $
ref_value = '程序添加菜单'
position=1
end
pro mymenu_event1,event
tip1=dialog_message('ENVI自定义菜单',/info)
end
;AWX文件解析程序
pro read_awx,event
compile_opt strictarr
;获取ENVI默认设置参数
cfg = envi_get_configuration_values()
;默认数据打开目录
inPath = cfg.default_data_directory
;对话框选择文件
file = dialog_pickfile(path = inPath, $
filter ='*.awx',title ='选择AWX文件')
;判断文件是否存在
if file_test(file) ne 1 then return
;打开文件
openr, file_lun, file ,/Get_Lun
;定位到信息部分
point_lun,file_lun,20
HeadLine =indgen(3)
readu,file_lun,HeadLine
;定位到信息部分
point_lun,file_lun,58
BeginDate=indgen(5) ;依次为年月日时分
EndDate =indgen(5) ;依次为年月日时分
;读取
readu,file_lun,BeginDate
readu,file_lun,EndDate
descriptionStr = '起始时间:'+strjoin(strtrim(BeginDate,2),'-')+$
'结束时间:'+strjoin(strtrim(EndDate,2),'-')
;定义数据
data = bytarr(HeadLine[2],(HeadLine[0]))
;定位到数据部分
point_lun,file_lun,HeadLine[0]*HeadLine[1]
readu,file_lun,data
;关闭文件lun
free_lun,file_lun
;设置ENVI内容
envi_setup_head, fname=file, $
ns=headLine[2], nl=HeadLine[0], nb=1, $
DESCRIP=descriptionStr, $
interleave=0, data_type=1, $
offset=HeadLine[0]*HeadLine[1], /write, /open
end