我亲爱的宝贝呀:ENVI下用菜单调用IDL程序的方法

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 18:01:46
ENVI下用菜单调用IDL程序的方法2009年05月27日 星期三 10:42

      IDL程序可以手动添加菜单或自动为ENVI添加菜单,自动方式详细可见文章http://hi.baidu.com/dyqwrp/blog/item/5b6c6ac45edbf6a18326ac7a.html。如果是独立运行的IDL的pro文件或sav文件则添加到envi的菜单中则需要一点技巧。

     如果是IDL的pro文件,如果直接调用的话,只需在pro主程序定义后面添加", **",其中**可以是任意字符(初步测试^_^)。

    如果是IDL的sav文件,放在envi安装路径的"\save_add"目录下,调用时需要新建一个pro进行调用转换,因IDL的pro主程序一般不写", **"的,那样调用会出错。

    有一点需要注意:如用相对路径,例用cd,current = root,此时获得是IDL安装路径下的"\lib\hook"路径,那么sav文件就必须要放在"\lib\hook"下而不能放在envi安装路径的"\save_add"目录下了。

测试代码如下:

;sav文件可自己写,或可下载,http://www.rayfile.com/files/9146338c-4a64-11de-b154-0019d11a795f/

;自动创建ENVI菜单
PRO Envi_use_idl_define_buttons, buttonInfo
compile_opt idl2

; 创建主菜单-在Basic Tools菜单前后
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '外部IDL程序', $
    /MENU, REF_VALUE = 'Help', /SIBLING, POSITION = 'after'
;创建子菜单
ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '调用IDL-Pro', $
    uValue = '', $
    event_pro ='Envi_use_idl', $
    REF_VALUE = '外部IDL程序'
    ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = '调用IDL-Sav', $
    uValue = '', $
    event_pro ='Envi_use_idl_sav', $
    REF_VALUE = '外部IDL程序'
END
;
;
PRO Envi_use_idl_sav,abc ;abc可任意修改

   ; 第一种方式-直接调用,sav必须放在save_add目录下

Test_widget_slider  

   ;第二种方式-定义路径调用,此时返回的路径是IDL的lib\hook目录
CD,current = root
savFile = root+'\test_widget_slider.sav'
IF FILE_TEST(savfile) EQ 0 THEN BEGIN    
    tmp = DIALOG_MESSAGE(savfile+'文件不存在',/error)
    RETURN;
ENDIF
RESTORE,savfile
;
Test_widget_slider
END


PRO Envi_use_idl_event, ev
HELP,ev
END
;
PRO Envi_use_idl,event
;
;
tlb1 = WIDGET_BASE(title='对象图形法', $
    xOffset = 200)
;object draw
wDraw1 = WIDGET_DRAW(tlb1, $
    xSize =200,ySize =200, $
    graphics_level = 2,$
    /wheel_events, $
    retain = 2, $
    /Expose_events )
WIDGET_CONTROL,tlb1,/realize
geo = WIDGET_INFO(wDraw1,/geom)
;
WIDGET_CONTROL, wDraw1,get_value = odraw
HELP,odraw
;
Xmanager, 'envi_use_idl',tlb1,/no_Block
;
END