跳转至

如何调查 IDL 对象代码

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/how-to-investigate-idl-object-code

12705 给本文评分:

4.0

如何调查 IDL 对象代码

匿名 2016年3月24日,星期四

IDL 附带的对象类通常都有非常完善的文档,这在你代码中使用 IDL 对象类时大有帮助。我经常从同事那里获得基于 IDL 对象的代码,而这些代码并不总是包含文档。当遇到这种情况时,我会使用这个示例代码来快速调查与对象类关联的方法和超类。

此代码示例会输出一个 HTML 表格,其中包含给定对象类的信息。

; 打印有关对象类的信息

pro ab_obj_info, obj, noresolve=noresolve, short=short, super=ksuper, $ out_super=super, quiet=quiet

compile_opt idl2

; 查找所有超类 if (size(obj, /type) eq 7) then class=obj else class=obj_class(obj) super=strupcase(class) if ~keyword_set(noresolve) then resolve_all, class=super[0], /quiet, /cont x=0 y=1 repeat begin for i=x,y-1 do begin sup=obj_class(super[i],/superclass) if (sup[0] ne '') then super=[super,sup] endfor x=y y=n_elements(super) endrep until (x eq y) if ~keyword_set(quiet) then print, 'Class: '+super[0] if (y gt 1) && ~keyword_set(quiet) then begin print, 'Superclass: '+super[1:*], format='(a)' endif if keyword_set(ksuper) then return ; print, '

' print, '' out = list() func = routine_info(/function) sysfunc = routine_info(/function, /system) proc = routine_info() sysproc = routine_info(/system) for i=0,y-1dobegin ind = where(func.StartsWith(super[i]+'::'),fcount) for j=0,fcount-1dobegin f = func[ind[j]] param = routine_info(f, /param, /func) print, '' print, '' if param.num_argsgt1thenbegin str = strjoin(param.args[1:*],',') endifelse str = '' print, '' if param.num_kw_argsgt0thenbegin str = strjoin(param.kw_args,',') endifelse str = '' print, '' endfor ind = where(sysfunc.StartsWith(super[i]+'::'), fcount) for j=0,fcount-1dobegin f = sysfunc[ind[j]] print, '' endfor ind = where(proc.StartsWith(super[i]+'::'),fcount) for j=0,fcount-1dobegin p = proc[ind[j]] param = routine_info(p, /param) print, '' print, '' if param.num_argsgt1thenbegin str = strjoin(param.args[1:*],',') endifelse str = '' print, '' if param.num_kw_argsgt0thenbegin str = strjoin(param.kw_args,',') endifelse str = '' print, '' endfor ind = where(sysproc.StartsWith(super[i]+'::'), fcount) for j=0,fcount-1dobegin p = sysproc[ind[j]] print, '' endforendforprint, '
Class::MethodArgumentsKeyword
'+f+'() '+str+' '+str+'
'+f+'
'+p+'() '+str+' '+str+'
'+p+'
' end

这里我在 IDLgrColorbar 类上运行此代码,它本身已有完善文档,但作为一个方便的示例:

IDL> ab_obj_info,'idlgrcolorbar'

类: IDLGRCOLORBAR 超类: IDLGRMODEL 超类: IDLGRCONTAINER 超类: IDL_CONTAINER 超类: IDLGRCOMPONENT 超类: IDLITCOMPONENT

以下是输出的 HTML 表格,显示了与 IDLgrColorbar 类关联的所有方法。

Class::Method Arguments Keyword
IDLGRCOLORBAR::COMPUTEDIMENSIONS() OSRCDEST PATH
IDLGRCOLORBAR::INIT() ARED,AGREEN,ABLUE BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,UVALUE,XCOORD_CONV,YCOORD_CONV,ZCOORD_CONV,_EXTRA
IDLGRCOLORBAR::CALCSIZE() DIMENSIONS,SHOW_AXIS,THICK
IDLGRCOLORBAR::CLEANUP()
IDLGRCOLORBAR::GETPROPERTY() ALL,BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,PARENT,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,TRANSFORM,UVALUE,XCOORD_CONV,XRANGE,YCOORD_CONV,YRANGE,ZCOORD_CONV,ZRANGE,_REF_EXTRA
IDLGRCOLORBAR::SETPROPERTY() BLUE_VALUES,COLOR,DIMENSIONS,GREEN_VALUES,HIDE,MAJOR,MINOR,NAME,PALETTE,RED_VALUES,SHOW_AXIS,SHOW_OUTLINE,SUBTICKLEN,THICK,THREED,TICKFORMAT,TICKFRMTDATA,TICKLEN,TICKTEXT,TICKVALUES,TITLE,UVALUE,XCOORD_CONV,YCOORD_CONV,ZCOORD_CONV,_EXTRA
IDLGRMODEL::GETCTM
IDLGRMODEL::GETXYZRANGE
IDLGRMODEL::INIT
IDLGRMODEL::ADD
IDLGRMODEL::CLEANUP
IDLGRMODEL::DRAW
IDLGRMODEL::DRAWSELF
IDLGRMODEL::GETPROPERTY
IDLGRMODEL::RESET
IDLGRMODEL::ROTATE
IDLGRMODEL::SCALE
IDLGRMODEL::SETPROPERTY
IDLGRMODEL::TRANSLATE
IDLGRCONTAINER::GETBYNAME
IDLGRCONTAINER::INIT
IDLGRCONTAINER::ADD
IDLGRCONTAINER::CLEANUP
IDLGRCONTAINER::DRAW
IDLGRCONTAINER::REMOVE
IDL_CONTAINER::COUNT
IDL_CONTAINER::EQUALS
IDL_CONTAINER::GET
IDL_CONTAINER::INIT
IDL_CONTAINER::ISCONTAINED
IDL_CONTAINER::ADD
IDL_CONTAINER::CLEANUP
IDL_CONTAINER::MOVE
IDL_CONTAINER::REMOVE
IDLGRCOMPONENT::INIT
IDLGRCOMPONENT::CLEANUP
IDLGRCOMPONENT::GETPROPERTY
IDLGRCOMPONENT::SETPROPERTY
IDLITCOMPONENT::EDITUSERDEFPROPERTY
IDLITCOMPONENT::GETFULLIDENTIFIER
IDLITCOMPONENT::GETPROPBYNAME
IDLITCOMPONENT::GETPROPERTYBYIDENTIFIER
IDLITCOMPONENT::INIT
IDLITCOMPONENT::QUERYPROPERTY
IDLITCOMPONENT::_GETALLPROPERTYDESCRIPTORS
IDLITCOMPONENT::CLEANUP
IDLITCOMPONENT::GETPROPERTY
IDLITCOMPONENT::GETPROPERTYATTRIBUTE
IDLITCOMPONENT::NOTIFYBRIDGE
IDLITCOMPONENT::REGISTERPROPERTY
IDLITCOMPONENT::RESTORE
IDLITCOMPONENT::SETPROPERTY
IDLITCOMPONENT::SETPROPERTYATTRIBUTE
IDLITCOMPONENT::SETPROPERTYBYIDENTIFIER
IDLITCOMPONENT::UNREGISTERPROPERTY
IDLITCOMPONENT::UPDATECOMPONENTVERSION

IDL & ENVI 许可证服务器安全补丁 无人机系统(UAS):热议不断,仍在努力起飞