IDL 9.1版本具有以下新增功能和更新:
新增功能:
- Windows 小部件的深色模式
- 球諧變換
- GAUSS_QUAD_LEGENDRE 功能
- 讀取和轉換 float16/binary16 半精度浮點數
- 命令列進度條
- IDL_HASHVAR 功能
- 新的 SVG 圖示
- RENDER_SVG 功能
- RENDER_ICON 功能
- SVG_ICON_BROWSER 例程
更新功能:
- VS Code 的 IDL 擴充套件
- HDF5 可以處理空陣列
- HttpRequest 進度條
- IDL_String::替換新的 Count 引數
- 對 NaN 和 Infinity 值的 JSON 支援
- LEGEND 填充顏色
- MapContinents Shapefile
- 多行工具提示
- PRINT/PRINTF 新的 NEWLINE 關鍵字
- Shapefile 增強
- TS_SMOOTH新的 NAN 關鍵字
- WIDGET_BROWSER 支援
- WIDGET_LABEL 和 WIDGET_TEXT 文字和背景顏色
- WIDGET_PROPERTYSHEET Top Header 關鍵字
- WIDGET_TEXT 對齊關鍵字
- WIDGET_TEXT FRAME = 0
- WRITE_PNG 壓縮關鍵字
- Dataminer 安裝
1 新功能
1.1 Windows 小部件的深色模式
在 Windows 上,IDL 小部件現在支援深色模式主題。您可以使用新的 IDL 首選項IDL_THEME 更改小部件主題,該首選項可以設定為 0 表示淺色模式(預設),設定為 1 表示深色模式。可以使用 IDL Workbench 中的首選項對話方塊或使用 PREF_SET 例程來設定主題首選項。新的只讀系統變數 !THEME允許您確定首選項的當前值。
一些一般說明:
- 在 Windows 上,所有 IDL 小部件應用程式(包括 ENVI)都將遵循主題設定。
- 如果您更改主題,則必須重新啟動 IDL 才能使更改生效。
- IDL 小元件主題獨立於 Windows 系統主題設定。
- IDL Workbench 有自己的主題設定,與此設定無關。
- 直接圖形視窗和物件圖形視窗中的圖形不受影響。
- Linux 和 Mac 平臺將預設忽略主題首選項,並始終使用淺色模式。
1.2 球諧變換
IDL 現在具有用於執行正向和逆向球諧變換的內建函式。
SPHERE_HARM_FORWARD 函式使用 Gauss-Legendre 演算法來計算球面座標網格上二維輸入陣列的正向球面諧波變換。SPHERE_HARM_INVERSE 函式計算逆向球諧變換,並在球面座標網格上返回結果。正向變換和逆向變換都是用 C 程式碼編寫的,並且是多執行緒的,以實現最佳效能。
球諧變換是在全球資料集上分析波型的有用工具,廣泛用於氣象學和海洋學,以及地磁場和太陽磁場的研究。正向和逆向變換對於應用頻譜濾波器也很有用。在這種情況下,執行正向變換,然後對頻譜系數應用濾波函式,之後執行逆變換。
除了轉換函式之外,IDL 現在還有兩個新例程:SPHERE_HARM_FILTER 和 SPHERE_HARM_KERNEL。這些例程可用於對球面資料集進行光譜過濾,以保持波數長於特定閾值。
例如,這裡我們載入一些 1884 年 12 月 1 日的氣溫資料,然後計算 T63 截斷:
restore, filepath('reanl20v3_1dec1884_512x256dbl.sav', $
subdir=['examples', 'data'])
T63 = sphere_harm_filter(A, 63)
im = image(A, rgb_table = 75, layout=[1, 2, 1], $
dim=[550, 580], min = -30, max = 30)
im = image(T63, rgb_table = 75, /current, $
layout=[1, 2, 2])
這些例程基於 Mark Miesch、Marc DeRosa 和 Gilbert P. Compo 編寫的原始變換和過濾例程,並經許可使用。有關更詳細的示例以及資料來源和參考,請參閱 SPHERE_HARM_FORWARD。
1.3 GAUSS_QUAD_LEGENDRE 功能
新的 GAUSS_QUAD_LEGENDRE 函式計算高斯正交積分的 x 值(橫座標)和加權係數,其中 x 值是 N 階勒讓德多項式(Legendre polynomial)的根。GAUSS_QUAD_LEGENDRE基於劍橋大學出版社出版的 Numerical Recipes in C: The Art of Scientific Computing(第二版)第 4.5 節中描述的gauleg例程,並經許可使用。
1.4 讀取和轉換 float16/binary16 半精度浮點數
半精度浮點數的長度為 16 位,而單精度浮點數的長度為 32 位,雙精度浮點數的長度為 64 位。這些數字的標準格式稱為 float16(或 binary16),基於 IEEE 754 標準。儘管 IDL 沒有原生支援16 位浮點數,但 IDL 現在可以讀取和轉換 float16 數字。READ_BINARY 函式有一個新的 FLOAT16 關鍵字,它會自動從檔案中讀取 float16 數字並將其轉換為 32 位浮點數。此外,您還可以使用新的 FLOAT16_DECODE 和 FLOAT16_ENCODE 函式將 16 位無符號整數(float16 格式)與 32 位浮點數相互轉換。
例如:
a = uint([0, 1, 0x8001, 0x3ff, 0x3c00, 0xbc00, 0x7bff, 0x7c00, 0xfc00, 0x7fff])
b = float16_decode(a)
help, b
print, b
IDL 列印:
B FLOAT = Array[10]
0.00000 5.96046e-08 -5.96046e-08 6.09756e-05 1.00000 -1.00000 65504.0 Inf -Inf NaN
現在轉換回來:
c = float16_encode(b)
help, c
print, c, format='(10z)'
IDL 列印:
C UINT = Array[10]
0 1 8001 3ff 3c00 bc00 7bff 7c00 fc00 7fff
有關詳細資訊,請參閱 FLOAT16_DECODE、FLOAT16_ENCODE 和 READ_BINARY。
1.5 命令列進度條
新的 CLI_Progress 類在 IDL Workbench 控制檯中或在終端中執行 IDL 時實現命令列進度條。例如:
length = 1000 ; for example, file length in bytes
cli_progress.initialize, title = 'Download', maximum = length, /remaining
for i=0,length do begin & $
cli_progress.update, i & $
wait,0.01 & $
endfor
在這裡,進度條將從 0% 緩慢前進到 100%,類似於:
Download 46% [##################----------------------] 6m:27s
CLI_Progress 類具有用於控制條寬、字元、剩餘時間以及標題和文字訊息的選項。您還可以構建一個“乒乓”選取框進度條,其中進度指示器沿進度條來回彈跳。例如:
CLI_Progress.Initialize, ping_pong = !true, complete_char = "<IDL>"
for i = 0,114 do begin & $
CLI_Progress.Update & $
wait, 0.02 & $
endfor
<IDL> 這個詞來回跳動:
[-----------------------------------<IDL>-----]
有關更多資訊,請參閱 CLI_Progress 或訪問 CLI_Progress 示例頁面。
1.6 IDL_HASHVAR 功能
IDL 有一個新的 IDL_HASHVAR 函式,該函式接受任何 IDL 變數並返回表示該值的標量 32 位雜湊程式碼。IDL_HASHVAR 函式用於建立簡單的雜湊碼值,可用於將任意值轉換為具有均勻分佈的 32 位(四位元組)雜湊碼。它還可以用於確定兩個字串是否相同,因為字串中的微小差異(例如單個字元)將產生完全不同的雜湊值。有關更多詳細資訊,請參閱 IDL_HASHVAR。
1.7 新的 SVG 圖示
IDL 現在附帶了 Font Awesome 專案中的 2000 多個新圖示。這些圖示可以在 IDL 發行版的以下目錄中找到:
<IDL_DIR>/resource/bitmaps/svg/brands
<IDL_DIR>/resource/bitmaps/svg/regular
<IDL_DIR>/resource/bitmaps/svg/solid
您可以使用新SVG_ICON_BROWSER顯示所有圖示,也可以使用新的 RENDER_ICON 和 RENDER_SVG 函式來訪問它們。所有這些圖示均根據 Creative Commons Attribution 4.0 International License 分發,可以在您自己的應用程式中自由使用。
1.8 RENDER_SVG 功能
IDL 具有一個新的 RENDER_SVG 函式,該函式可以將 SVG 檔案渲染為具有可選輸出大小、背景色和前景色的點陣圖影像。例如:
file = filepath('folder-open.svg', subdir=['resource', 'bitmaps', 'svg', 'regular'])
img = RENDER_SVG(file, width=128, height=128, background=0xCCCCCC, foreground=0xFF0000)
help, img
i = image(img)
IDL 列印:
IMG BYTE = Array[128, 128, 3]
1.9 RENDER_ICON 功能
IDL 具有一個新的 RENDER_ICON 函式,可從 IDL 中的 SVG 檔案建立圖示。例如:
w = widget_base(/row)
icon = RENDER_ICON("folder-open")
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
icon = RENDER_ICON("folder-open", width=32, height=32)
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
icon = RENDER_ICON("folder-open", width=64, height=64)
w1 = widget_base(w)
wb = widget_button(w1, value=icon, /bitmap)
widget_control, w, /realize
1.10 SVG_ICON_BROWSER 例程
IDL 增加了一個新的 SVG_ICON_BROWSER 例程,用於顯示 IDL 附帶的所有 2000+ 圖示的縮圖。瀏覽器有一個過濾器,還會顯示各個圖示的示例程式碼,以及快速檢視該圖示在各種視窗小部件型別中的顯示方式。有關詳細資訊,請參閱 SVG_ICON_BROWSER。
2 功能更新
2.1 VS Code 的 IDL 擴充套件
IDL 現在擁有了一個新的現代化開發環境,可在 Visual Studio Code 中免費使用。可以從 VS Code 擴充套件頁面輕鬆下載和安裝 VSCode 擴充套件的 IDL。該擴充套件具有以下功能:
- 功能齊全的 IDL 程式碼編輯器,具有變數型別檢測、自動完成、色彩編碼、問題報告和程式碼格式化功能。
- 帶有斷點的整合偵錯程式,或在 VS Code 終端中執行命令列 IDL。
- 支援 IDL Notebook 風格的介面,帶有嵌入式圖形並儲存為 PDF。
- 可定製的主題和顏色。
- 懸停幫助包含完整的 IDL 文件,包括程式碼示例。
- 為 SAVE 檔案或 DLM 中的例程建立例程定義文件。
- 原生多語言支援。
有關詳細資訊,請訪問 VSCode 的 IDL 頁面。
2.2 HDF5 可以處理空陣列
H5D_READ 和 H5_GETDATA 例程現在可以處理具有零長度陣列的 H5T_VLEN 資料型別。在這些情況下,結果是指向 !NULL 變數。
2.3 HttpRequest 進度條
HttpRequest 類(在 IDL 9.0 中引入)現在在 ::Get、::Post 和 ::Put 方法上有一個可選的進度條。此進度條使用上述新CLI_Progress條。有關詳細資訊,請參閱 HttpRequest::Get、HttpRequest::Post 和 HttpRequest::Put。
2.4 IDL_String::替換新的 Count 引數
IDL_String Replace 方法現在具有新的可選 Count 引數。該引數允許您指定要替換的匹配項數量。預設值是替換所有匹配項。例如:
IDL> str = '.......'
IDL> print, str.replace('.', '*', 3)
***....
還可以指定一個負計數,從字串的末尾開始:
IDL> str = '.......'
IDL> print, str.replace('.', '*', -3)
....***
有關更多詳細資訊,請參閱 IDL_String::Replace。
2.5 對 NaN 和 Infinity 值的 JSON 支援
IDL 的 JSON_PARSE 函式現在支援陣列中的末尾逗號以及特殊的 NaN、Inf 和 Infinity(不帶引號)值。這些都是對 JSON 規範的非標準補充,但提供了與 Python 和其他生成 JSON 工具更好的互操作性。
此外,JSON_SERIALIZE 現在有一個新的 NANINF_LITERAL 關鍵字。預設行為是將 NaN 和 Infinity 值輸出為帶引號的字串,這遵循 JSON 規範,但不允許將它們轉換回浮點值。設定 NANINF_LITERAL 關鍵字將輸出這些值,但不帶引號。這允許 JSON_PARSE 和其他工具(如 Python)理解這些值並返回浮點 NaN 和 Infinity 值。
2.6 LEGEND 填充顏色
現在可以指定 LEGEND 圖形函式的填充顏色:
p = plot(/test)
l = legend(target=p, fill_color='yellow')
有關詳細資訊,請參閱 LEGEND。
2.7 MapContinents Shapefile
MapContinents 圖形功能已更新,包含適用於各大洲、國家/地區、湖泊、島嶼和河流的更多最新 shapefile,包括適用於各大洲、湖泊和河流的新高解析度版本。例如:
m0 = Map('Geographic', limit=[41, -93, 50, -83], margin=[0.1, 0.1, 0.1, 0.05])
m0.mapgrid.label_position = 0
m0.mapgrid.linestyle = "none"
m0.mapgrid.grid_longitude = 2
m0.mapgrid.grid_latitude = 2
m1 = MapContinents(/hires, fill_color="light green")
m2 = MapContinents(/lakes, /hires, fill_color='light blue', linestyle=0)
m3 = MapContinents(/islands, fill_color='green')
m4 = MapContinents(/rivers, /hires, color='blue', thick = 2)
2.8 多行工具提示
IDL 小元件現在支援跨多行的工具提示。要建立多行工具提示,只需在設定 TOOLTIP 關鍵字時嵌入換行符 \n 即可。有關詳細資訊,請參閱 WIDGET_BUTTON、WIDGET_DRAW 或 WIDGET_TREE 上的 TOOLTIP 關鍵字。
2.9 PRINT/PRINTF 新的 NEWLINE 關鍵字
PRINT 和 PRINTF 過程具有新的 NEWLINE 關鍵字。預設值為 1,與以前一樣在輸出末尾輸出換行符(\n)。設定 NEWLINE=0 將隱藏換行符,並允許您多次呼叫 PRINT 並使所有輸出都出現在同一行上。
2.10 Shapefile 增強
IDLffShape 類使用的 Shapefile 庫已更新到最新版本。此外,IDLffShape 現在可以處理 Date 和 Logical 屬性型別。您還可以使用新屬性檢索所有屬性的 Shapefile 型別。有關詳細資訊,請參閱 IDLffShape。
2.11 TS_SMOOTH新的 NAN 關鍵字
TS_SMOOTH 函式具有新的 NAN 關鍵字。設定此關鍵字可使例程檢查輸入資料中是否出現 IEEE 浮點值 NaN 或 Infinity。值為 NaN 或 Infinity 的元素被視為缺失資料。因此,例程會將這些缺失的元素替換為平滑視窗內有效點的平滑值(使用簡單的 Boxcar 平滑)。
2.12 WIDGET_BROWSER 支援
WIDGET_BROWSER 已更新為包含對 macOS 的支援。
2.13 WIDGET_LABEL 和 WIDGET_TEXT 文字和背景顏色
WIDGET_LABEL 和 WIDGET_TEXT 現在支援 FOREGROUND_COLOR 和 BACKGROUND_COLOR 關鍵字,這些關鍵字允許您設定文字顏色和背景文字框顏色。您還可以使用 WIDGET_CONTROL 動態更改這些屬性。例如,儲存並執行以下程式碼:
pro widtext_ex_change, ev
common _widtext, w1, w2
widget_control, w1, foreground_color=bytscl(randomu(s,3)), background_color=bytscl(randomu(s,3))
widget_control, w2, foreground_color=bytscl(randomu(s,3)), background_color=bytscl(randomu(s,3))
end
pro widtext_ex
common _widtext, w1, w2
w = widget_base(xsize = 200, /column)
w0 = widget_base(w, /row)
f = 'Segoe*24'
w1 = widget_label(w0, value='Label', foreground_color=[0,200,0], background_color=[255,255,0], font=f, scr_xsize=100)
w2 = widget_text(w0, value='My Text', /editable, foreground_color=[200,0,0], background_color=[0,255,255], font=f)
w0 = widget_base(w, /row)
wbutton = widget_button(w0, value='Change', event_pro = 'widtext_ex_change', font=f)
widget_control, w, /realize
xmanager,'widtext_ex', w, /no_block
end
2.14 WIDGET_PROPERTYSHEET Top Header 關鍵字
WIDGET_PROPERTYSHEET 有一個新的 TOP_HEADER 關鍵字,當該關鍵字設定為 0 時,將隱藏頂部(列)標題。
2.15 WIDGET_TEXT 對齊關鍵字
WIDGET_TEXT 有 6 個新的對齊關鍵詞:
- ALIGN_BOTTOM、ALIGN_CENTER、ALIGN_LEFT、ALIGN_RIGHT 和 ALIGN_TOP 關鍵字控制小部件在其父部件中的位置。這些關鍵字在所有平臺上都是允許的。預設值為 ALIGN_CENTER。
- 新的 ALIGNMENT 關鍵字允許您設定文字對齊方式。此關鍵字可用於Windows平臺,但在其他平臺上將被靜默忽略。
2.16 WIDGET_TEXT FRAME = 0
在 Windows 上,WIDGET_TEXT現在可以設定 FRAME=0 以刪除文字構件周圍的邊框。在其他平臺上,文字小部件始終具有框架,設定 FRAME=0 將不起作用。
2.17 WRITE_PNG 壓縮關鍵字
WRITE_PNG 函式具有一個新的 COMPRESSION 關鍵字,該關鍵字允許您控制 PNG 輸出的壓縮量。該值必須在 0 到 9 的範圍內。值為 0 表示無壓縮。較高的值將提供較小的檔案,但寫入和讀取的速度會變慢。預設值為 6,這在壓縮和速度之間提供了良好的平衡。
2.18 Dataminer 安裝
Dataminer 模組現在預設與 IDL 一起安裝。它仍然需要許可證才能使用。Dataminer 支援讀取和連線到 Microsoft Excel、PostgreSQL 和許多其他資料庫管理系統。
3 庫更新
第三方庫已更新到以下版本:
- ArmPL 24.04
- CEF 121.3.7 for Windows and Mac. To support Red Hat-based systems (Fedora, CentOS, and Rocky Linux). Linux uses CEF 99.2.14.
- antlr 2.7.7
- curl 8.9.0
- Eclipse CVS Client 1.4.2000.v20211124-1800
- eclipse-egit-plugin 6.7.0.202309050840-r
- eclipse-platform 4.29.0.v20230903-1000
- Eclipse Temurin JDK 21.0.2
- Eclipse Temurin JRE 21.0.2
- HDF5 1.14.3
- Inno Setup 6.2.2(u)
- jackson-json-processor 2.15.2
- ibtiff 4.6.0t
- Libxml2 2.13.3
- microsoft-vcredist 14.40.33810
- mongo-c-driver 1.27.0
- mongo-cxx-driver 3.10.1
- nghttp2 1.62.1
- NumPy 1.24.4
- NumPy 1.26.4
- OpenSSL 3.3.1
- P4Eclipse 2023.1.2516406
- poco 1.13.3
- Python 3.12.4
- shapelib 1.6.0
- SQLite 3.46.0
- x11-dev-tools 1.0.2
- X PixMap Library 3.5.17
- xerces-c 3.2.5
- zlib 1.3.1
新增了以下第三方庫:
- Eclipse JGit 6.7.0.202309050840-r
- libtirpc 1.3.4
- LunaSVG 2.3.9
以下第三方庫已被刪除:
- HASP Sentinel-LDK_SDK