IDL新特性
新增功能
自动检查更新
IDL支持在启动时自动检查更新。如果有新版本,IDL将在控制台输出提示。此配置项可以在“窗口”>“首选项”中进行开关,或使用 IDL_UPDATE_CHECK 配置。
IDL Tasks
IDL Tasks是面向对象的,可以封装IDL程序。
对于用户来说,IDL Tasks 提供了如下技术优势:
IDLTask对象包含了所有输入输出参数,能够方便访问
通过IDLQueryTaskCatalogTask可以查询可用的IDLTask;
能够方便了解输入参数及其格式要求;
支持验证输入参数的合理性,包含数据类型、可选项、范围以及其他附加约束。
对于开发者来说,IDL Tasks提供了如下技术优势:
编写新的程序,允许IDLTask验证输入参数,而不需要自己编写额外代码;
可以方便地将现有的程序转换为IDLTask,只需要创建一个task文件来配置程序;
提供每个参数的信息,如方向(输入或输出)、数据类型、可选项、有效范围等;
IDL Tasks可以被其他编程语言调用。
如果有程序在使用IDL Task Engine,并且希望获取task信息,可以使用IDLQueryTaskTask和IDLQueryAllTasksTask。
IDL Task Engine
除了引入IDLTask,同时提供了一个IDLTask Engine,支持在命令行模式中运行IDLTasks。可以将IDL功能嵌入到其他语言开发的程序或环境中。这些环境必须能够处理standard streams (stdin, stdout, and stderr)。
NCDF_PARSE
现在提供了一个新的函数NCDF_PARSE,能够解析NetCDF-3 或 NetCDF-4文件,并返回一个HASH结构,包含了文件的所有信息和数据。
NCDF_IS_NCDF
现在提供了一个新的函数NCDF_IS_NCDF,能够识别文件是否为NetCDF-3格式。
全新许可方式
从ENVI5.4/IDL8.6开始,将采用Flexera许可管理技术,用户可以方便的进行许可授权和管理,可根据需要选择使用单机版或者浮动版本,这种许可管理机制比之前的灵活便捷。
更新内容
C Printf-Style Format Strings
当调用IDL的输入输出程序时使用了C printf-style format string,现在可以直接指定字符串,而不需要%符号。例如:
PRINT, INDGEN(3), FORMAT = '(%"The values are: %d %d %d")'
现在可以这样使用:
PRINT, INDGEN(3), FORMAT = 'The values are: %d %d %d'
为了更好地兼容性,新版本仍然可以使用旧的方式。
图形字体改进
新版本中可视化函数中的字体默认为DejaVuSans。使得绘制曲线和其他可视化图形时的字体更加漂亮。如果需要,可以使用FONT_NAME属性修改为其他字体,之前的默认字体为Helvetic。可以查看PLOT、TEXT或其他可视化函数中的说明。
新的TrueType字体
IDL提供了全新的4个字体:DejaVuSans Italic、DejaVuSans Bold、DejaVuSans Bold Italic和一个自定义的DejaVuSymbol字体。DejaVuSymbol字体包含了很多有用的数学符号。这些字体可以被用在直接图形法、对象图形法和新的可视化函数中,同时可以被Embedded Formatting Commands使用。查看IDL帮助中的 "Using TrueType Fonts" 专题查看新的DejaVuSymbol 字体。
改进的TeX-like数学符号
TEXT函数使用新的DejaVuSymbol 字体来显示数学符号。
Python-to-IDL Bridge错误处理
使用Python-to-IDL bridge,当在IDL命令行中遇到格式错误或程序错误时,新版本将抛出一个IDLError异常,并停止执行python脚本。可以使用标准的 Python try/except block 来获取这些错误。查看IDL帮助中的 "Python to IDL Bridge" 获取详细信息。
注:为了使用新的错误处理功能,在导入idlpy到Python时,需要导入所有的module,而不仅仅是IDL class:
IDL IPython Notebook 支持 Magic Commands
IDL IPython (Jupyter) Notebook支持magic commands,控制notebook行为。可用的命令支持我们嵌入HTML,执行任意的Python代码,从inline切换到windowed graphics。
编译和恢复代码时支持忽略已存在程序
正常情况下,当我们编译pro代码或restore save文件时,已存在程序将被替换为新加载的程序。这个特性在一些情况下会造成异常错误,比如当ENVI在运行时,而restore进来的程序里包含了旧版代码。现在可以通过使用SKIP_EXISTING关键字来避免覆盖已存在程序。RESTORE、RESOLVE_ROUTINE和RESOLVE_ALL均支持SKIP_EXISTING关键字。
SYSTIME新增关键字
SYSTIME函数新增ELAPSED关键字,代替了原有的Elapsed Seconds参数。SecondsFlag 和 ElapsedSeconds 参数被废弃,但是旧版本程序依然可用。新编写代码中建议使用SECONDS和ELAPSED关键字。
高精度可重复Timer
现在可以创建定时器(timer),并按照精确的循环时间进行重复响应,而不必担心IDL花费在处理timer回调函数的时间。查看Timer.Set中的REPEAT关键字获取详细信息。
库更新
cURL库更新到7.49.1版本;
cURL中的OpenSSL库版本更新到1.0.2h;
Python Bridge已支持Python 3.5版本。