IDL

IDL8.6新功能

0
分享 2017-01-01
新增功能

自动检查更新
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"专题以获取详细信息。


如果有程序在使用IDL Task Engine,并且希望获取task信息,可以使用IDLQueryTaskTask和IDLQueryAllTasksTask。
查看"Custom Tasks"专题,获取更详细的帮助内容。

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'

为了更好地兼容性,新版本仍然可以使用旧的方式。查看IDL帮助中的"Using Formatted Input and Output"专题,以获取更详细信息。

图形字体改进
新版本中可视化函数中的字体默认为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:
>>>from idlpy import *

... 

>>>>IDL.run('print, 2+')

-------------------------------------------------------- 

IDLError Traceback (most recent call last)

...


IDLError: % Syntax error. 


IDL IPython Notebook 支持 Multi-line Blocks
IDL IPython (Jupyter) Notebook支持multi-line IDL code blocks。现在可以编写语句块代码,例如FOR BEGIN/END 或 IF/THEN等。甚至可以编译函数和过程。查看"IDL Notebook Kernel"专题获取详细信息。

IDL IPython Notebook 支持 Magic Commands
IDL IPython (Jupyter) Notebook支持magic commands,控制notebook行为。可用的命令支持我们嵌入HTML,执行任意的Python代码,从inline切换到windowed graphics。查看"IDL Notebook Kernel"专题获取详细信息。

编译和恢复代码时支持忽略已存在程序
正常情况下,当我们编译pro代码或restore save文件时,已存在程序将被替换为新加载的程序。这个特性在一些情况下会造成异常错误,比如当ENVI在运行时,而restore进来的程序里包含了旧版代码。现在可以通过使用SKIP_EXISTING关键字来避免覆盖已存在程序。RESTORE、RESOLVE_ROUTINE和RESOLVE_ALL均支持SKIP_EXISTING关键字。

SYSTIME新增关键字
SYSTIME函数新增ELAPSED关键字,代替了原有的ElapsedSeconds参数。SecondsFlagElapsedSeconds 参数被废弃,但是旧版本程序依然可用。新编写代码中建议使用SECONDS和ELAPSED关键字。

高精度可重复Timer
现在可以创建定时器(timer),并按照精确的循环时间进行重复响应,而不必担心IDL花费在处理timer回调函数的时间。查看Timer.Set中的REPEAT关键字获取详细信息。

库更新
  • cURL库更新到7.49.1版本;
  • cURL中的OpenSSL库版本更新到1.0.2h;
  • Python Bridge已支持Python 3.5版本。

文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0102xsap.html

0 个评论

要回复文章请先登录注册