ENVI 6.3 / IDL 9.3 新功能介绍

ENVI 6.3 新功能

ENVI 6.3 于 2026 年 9 月正式发布。本次更新包含以下新增与改进功能:

功能亮点

  • 支持新的数据类型
  • 数据管理器(Data Manager)功能增强
  • 使用 ENVI Catalog 浏览并打开栅格数据
  • 无需 GSF 即可启动 ENVI Server
  • 基于任务调度器(Task Scheduler)实现桌面自动化
  • 视域分析工具(Viewshed Tool)增强
  • 特征计数工具(Feature Counting)增强
  • 在视图中标注定位针(Drop Location Pins)
  • 新增空间子集网格线叠加功能(Subset Grid Line Overlays)
  • 将自定义 PowerPoint 模板发布到 ENVI Repository
  • 将矢量数据保存为 FileGDB 格式
  • 新增对归一化红边红外指数的支持
  • 更新 ENVI 工具箱工具
  • 新增与升级 ENVI Tasks 和 Routines
  • 新增与更新 ENVI 首选项设置

新支持的数据类型

本版本新增对以下数据格式的支持:

  • AVIRIS-5 HDF 产品
  • Sentinel-5P 大气数据产品

数据管理器(Data Manager)增强

数据管理器的界面与显示进行了以下优化:

  1. 层次化与元数据展示:将文件添加到数据管理器时,左侧面板采用树状视图(Tree View)展示文件结构,右侧面板显示所选文件的元数据。元数据采用 HTML 格式渲染,方便直接复制粘贴到邮件或其他文档中。若栅格、矢量或标注文件包含空间参考/地图信息,右侧面板还会展示内置红色标记的世界地图,指示数据采集位置。点击标记可打开参考地图链接(由 ESRI® 提供支持),并自动缩放到对应区域。

image

  1. 缩略图视图:新增“缩略图(Thumbnails)”标签页,支持从树状视图一键切换到缩略图视图。

image

其他优化包括:

  • 优化了手动加载数据到视图的操作流程。
  • 新增动态波段选择(Dynamic Band Selection)功能。
  • 支持将多个文件组合为文件组(File Groups)。

使用 ENVI Catalog 浏览与打开栅格

全新的 ENVI Catalog 可帮助用户集中管理分散在不同目录下的栅格文件。无需再手动翻找文件夹,直接在 ENVI Catalog 中通过文件名、传感器类型、空间位置及其他元数据快速检索,即可一键将栅格数据加载至视图。

提供多种视图模式:

  • 表格视图(Table):可按列排序的元数据表格。

image

  • 画廊视图(Gallery):直观的缩略图网格。

image

  • 地图视图(Map):交互式地图,在地图上直观标注栅格数据的覆盖范围。

image

内部目录与高级许可:

  • 内部目录(Internal Catalog)是一个持久化归档数据库,会自动记录你在 ENVI 中打开过的每个栅格数据集。用户也可创建自定义目录,将栅格分为不同专题集合。
  • 快速构建目录的最佳方式是运行后台扫描任务(Scan Job),自动检索指定文件夹下的所有栅格文件并入库。扫描过程可在后台运行,甚至在夜间无值守执行。结合新增的 ENVI Task Scheduler,可实现定期自动检索并补充新文件。
  • ENVI 基础安装版内置“内部目录”及浏览功能,最高支持管理 250 幅影像。若需创建自定义目录、进行全盘目录扫描入库、合并或清理目录,则需要单独的 ENVI Catalog 许可。

无需 GSF 即可启动 ENVI Server

自本版本起,ENVI Server 不再依赖 GSF(Geospatial Services Framework)安装。ENVI Server 支持在后台、多机并行分发运行 ENVI Task。通过任务队列和可配置的 Worker 数量控制并发度,显著减轻本地工作站的计算压力,加速大数据量影像分析。

基于任务调度器(Task Scheduler)实现桌面自动化

ENVI 现在支持利用操作系统的定时调度机制,创建定时在后台自动运行的工作流。用户可在 ENVI Modeler 或通过 API 构建自动化流程,用于处理重复性任务。即使关闭 ENVI 主程序,任务也能在后台或夜间无缝运行,大幅节省工作时间的计算资源。

image

典型应用场景: 处理输入源随时间更新的文件夹,例如每周对新放入指定目录的影像自动生成缩略图。

支持的调度周期:

  • 指定日期/时间的单次执行
  • 每隔 n分钟 / 每隔 n小时执行
  • 每天一次 / 每隔 n天执行
  • 每隔 n周 / 每隔 n个月执行

交互式视域分析工具(Viewshed Tool)增强

  • 独立控制面板:视域工具控制选项现整合至统一的对话框中。
  • 反向视域分析:支持计算哪些区域可以看到指定的观察点(正向视域显示观察点可看到的区域,反向视域显示可看到该点的区域)。

Viewshed

ReverseViewshed

  • 动画与数据导出:视域动态演化过程除了支持 MPEG 视频外,现已支持导出为 GIF 动图;观察点/目标点位置配置支持导出与还原 JSON 文件。

特征计数工具(Feature Counting Tool)更新

  • 网格控制与子集计数:支持自定义网格尺寸(Grid Size),并可在指定的网格外框子集中进行点计数。

image

  • 要素点筛选:新增点过滤窗口,可按图层或网格单元独立显隐视图中的特征计数点。

image

视图标注定位针(Drop Location Pins)

对于包含标准地图投影、Pseudo、RPC 或 GLT 空间参考的图层,现可在视图中快速落针标记位置,标记方法:

  1. 视图右键交互:直接在目标位置右键点击并选择标记在此处。

DropPinSelect

DropPinPosition

  1. 光标值工具(Cursor Value):通过工具栏新增的“在当前位置投放定位针”图标添加。

所有定位针均存储在独立图层中,支持保存为json 文件并再次加载。

DropPinSelectCV

空间子集网格线叠加(Subset Grid Line Overlays)

现在可以指定特定的空间子集范围叠加网格线。当后续向视图中加载更多图层或扩展显示范围时,已设置的网格线仍将锁定在最初指定的子集区域,不会随视图范围改变。

发布自定义 PowerPoint 模板至 ENVI 仓库

用户可将自定义的视图截屏到 PowerPoint(Chip View to PowerPoint)模板并发布分享至 ENVI Repository 仓库,方便团队共享。

矢量数据导出为 FileGDB 格式

菜单新增 File > Save As > Save Vector As FileGDB选项,支持将矢量数据集直接保存为 Esri File Geodatabase(地理数据库)格式。

新增归一化红边红外指数(NDRE)支持

归一化红边红外指数(Normalized Difference Red Edge Index, NDRE)已正式纳入 ENVI 内置光谱指数库。

ENVI 工具箱(Toolbox)更新

  • Generate Point Clouds and DSM by Dense Image Matching(摄影测量模块):新增 "Output Coordinate System"参数,用于指定生成 DSM 的目标坐标系。
  • Reproject Images:新增"Pixel Size"参数,方便直接设定重投影后的像元大小。
  • RXAnomalyDetection:协方差变换中新增 "Regularization Method"(正则化方法)与 "Regularization Tolerance"(正则化容差)参数。

新增与更新 ENVI Tasks 和 Routines

新增 Tasks:

  • Catalog 相关:"ExportCatalogToKML"(导出为 KML)、"ExportCatalogToSTAC"(导出为 STAC 资产目录)、"MergeCatalogs"(合并目录数据库)、"PopulateCatalog"(填充栅格至目录)、"PruneCatalog"(清除磁盘上已失效的目录条目)、"QueryCatalog"(检索目录)、"ScanFilesForCatalog"(全盘扫描可入库栅格)、"StartENVICatalogServer"(启动 Catalog 后台服务)。
  • 数据导出与检索:"ExportVectorToFileGDB"(导出矢量为 FileGDB)、"FindFiles"(依据模式匹配搜索文件)。
  • 系统与服务:"StartENVIServer"(启动 ENVI Server)、"SubmitScheduledJob"(自动调度并提交定时任务)。

更新 Tasks:

  • "BuildRasterSeries":新增 "ORDER_BY_TIME"参数。
  • "ChangeThresholdClassification":新增 "CHANGE_TYPE"参数。
  • "ClassificationStatistics":新增 "PERCENTAGES"参数,用于计算并输出各分类像元占总像元数(含 NoData/Ignore 像元)的百分比。
  • "PointCloudFeatureExtraction":移除 "DEM_FORMAT"和 "DSM_FORMAT" 参数。
  • "QueryAllTasks"/ "QueryTaskCatalog":新增 "FILTER_NAMES" 过滤参数。
  • "ReprojectRaster":新增 "PIXEL_SIZE"参数。

新增 API Routines:

  • "ENVIDataContainer::AddToArray":将数据对象(栅格、矢量、字符串等)插入容器数组;若容器已存在,则自动追加而非替换。
  • "ENVICatalog":提供调用和管理 ENVI Catalog 的完整 API 接口。
  • "ENVIUI::DisplayText":在可调整尺寸的对话框窗口中展示文本内容。

新增 ENVI 首选项设置(Preferences)

  • Display > General:新增 "Classification First Class Off"参数,用于控制是否在视图中默认隐藏分类图层的第一个类别(通常为 Background 或 Unclassified)。
  • Data Manager:新增 "Enable Internal Catalog"选项,控制是否启用内部目录。
  • Annotations > Pins:新增定位针相关的默认样式首选项。
  • Pyramids:新增 "Delete Auxiliary Pyramids on Exit"参数,控制退出时是否自动清理辅助金字塔文件。

IDL 9.3 新功能

IDL 9.3 带来了强大的高维数组支持、任意精度浮点计算、全新的 3D 导出格式以及 Python 3.14 深度集成。

新功能亮点

  1. 支持最高 64 维数组(Arrays up to 64 Dimensions)

此前 IDL 最高仅支持 8 维数组。IDL 9.3 突破性地将上限提升至 64 维。所有包含维度参数或关键字的函数与例程(如 "LINDGEN"、"FINDGEN"、"MAKE_ARRAY"、"TOTAL"、"MIN"、"MAX"、"SIZE" 等)均已完美适配多维数组运算。例如:

IDL> a = lindgen(2,2,2,2,2,2,2,2,2,4)

IDL> help, a

A LONG = Array[2, 2, 2, 2, 2, 2, 2, 2, 2, 4]

IDL> print, a.ndim, ": ", a.dim

10: 2 2 2 2 2 2 2 2 2 4

IDL> print, max(a)

2047

IDL> help, max(a, dimension = 10)

<Expression> LONG = Array[2, 2, 2, 2, 2, 2, 2, 2, 2]
  1. 任意精度浮点数计算类:BigFloat

继用于任意长整数计算的 "BigInteger" 之后,IDL 9.3 推出了全新的 "BigFloat" 类,用于实现高精度的浮点数数学计算。

  • 数值表示:结构为 x = M * 10^exponent,尾数 M 以 "BigInteger"存储,默认精度为 30 位(最高可扩展至 1000 位),指数范围支持 -1,000,000 ~ +1,000,000。
  • 高性能架构:核心底层数学运算采用 C 语言编写,确保极高的计算效率。源码文件位于 "lib/datatypes/bigfloat__define.pro"。
  • 高级数学函数:内置正弦(Sin)、余弦(Cos)、指数(Exp)、对数(Log2/Loge/Log10)、平方根(Sqrt)等高精度算法,可用于物理常数等高精度演练。

你可以用普通数字或字符串创建BigFloat。例如,以下所有语句都会产生相同的 BigFloat 值:

b = BigFloat(3.14d)

b = -BigFloat('3.14')

b = BigFloat(314, -2)

你也可以用关键词创建带有特殊值的BigFloat。例如:

b = BigFloat(/infinity)

c = BigFloat(/infinity, /negative)

d = BigFloat(/nan)

你可以将BigFloats与其他BigFloat、BigIntegers或普通数字结合使用。例如,计算里德伯常数:

IDL> fine_struct = 1 / BigFloat('137.035999177')

IDL> bohr_radius = BigFloat('5.29177210544e-11')

IDL> rydberg = fine_struct / (4 * BigFloat.pi * bohr_radius)

IDL> rydberg

10973731.5681425741417208047492
  1. CONGRID 增强:支持 Lanczos 重采样与 RGB 图像

  • "LANCZOS"关键字:引入 Lanczos Sinc 平滑滤波函数,在进行数组或图像缩小(Downsampling)时能提供极佳的抗锯齿效果。
  • "RGB"关键字:自动识别并循环处理 3 通道或 4 通道图像,无需手动拆分通道即可分别进行平滑缩放。
  1. 日历选择对话框:DIALOG_CALENDAR

新增独立的日历选择器控件 "DIALOG_CALENDAR",支持选择单个日期、日期+时间、多个不连续日期或日期区间,并提供丰富的 UI 外观控制关键字。

  1. 3D 图形导出为 GLTF/GLB 和 Cesium 3D Tiles

IDL 对象图形(Object Graphics)与函数图形(Function Graphics)现已支持直接导出为标准的 GLTF/GLB 格式,并可同步生成用于 WebGIS 渲染的 Cesium 3D Tiles 瓦片。

  • 支持 ".gltf"(JSON文本)和 ".glb"(二进制)两种存储形式。
  • 函数图形可通过 ".Save, "file.gltf""一键导出;对象图形可使用新增的 "IDLgrGLTF" 类进行绘制与保存。
  • 交互式工具 "XOBJVIEW"也已内置该导出选项。

例如,对于函数图形:

s = surface(/test)

s.Save, "mysurface.gltf"

对于对象图形,构建一组不同高度“建筑物”的3D模型,然后导出为GLTF文件:

verts = [[0,0,0],[1,0,0],[1,1,0],[0,1,0], $

  [0,0,1],[1,0,1],[1,1,1],[0,1,1]]

poly = [4, 0,1,2,3, 4, 4,5,6,7, 4, 0,1,5,4, $ ; -Z +Z -Y faces

  4, 2,3,7,6, 4, 0,3,7,4, 4, 1,2,6,5]   ; +Y -X +X faces

oModel = IDLgrModel()

for i = 0, 5 do for j = 0, 5 do begin & $

  color = bytscl(randomu(seed, 3)) & $

  vert1 = float(verts) & $

  vert1[0, *] += i & vert1[1, *] += j & $

  vert1[2, *] *= 4 * randomu(seed) & $

  oPoly = IDLgrPolygon(vert1, POLYGON=poly, COLOR=color) & $

  oModel.Add, oPoly & $

endfor

oView = IDLgrView()

oView.Add, oModel

obj = IDLgrGLTF(filename='buildings.glb')

obj.Draw, oView

obj = 0

 gltf_buildings_341x268

  1. 3D 图形导出为 X3D 格式

支持将 3D 图形导出为 ISO/IEC 标准的 X3D(可扩展三维)格式。X3D 采用 XML 声明式语法,是 VRML 的现代化替代方案,非常适合 Web 端 3D 交互展示。可通过 "p.Save, "plot.x3d"" 或 "IDLgrX3D" 类实现导出。

例如,对于函数图形:

p = plot3d(/test)

p.save, "myplot.x3d"

对于对象图形,构建氢的dz2壳层的三维模型,然后导出:

vertices = ex_spher_harm(polygons = poly)

oPoly = IDLgrPolygon(vertices, polygon=poly, color=[180,50,50])

oModel = IDLgrModel()

oModel.Add, oPoly

oView = IDLgrView()

oView.Add, oModel

obj = IDLgrX3D(filename='hydrogen.x3d')

obj.Draw, oView

obj = 0

hydrogen_341x226 

  1. 堆内存调试诊断:HEAP_DEBUG

新增 "HEAP_DEBUG" 过程,允许依据 Heap Variable ID 对指定堆变量(指针 Pointer 或对象 Object)设置断点。当 IDL 试图创建匹配 ID 的堆变量时,程序会自动挂起。配合 "HELP, /HEAP" 命令,能高效定位并解决应用程序中的内存/指针泄露问题。

  1. 获取进程 ID:IDL_GETPID

新增 "IDL_GETPID()" 函数,返回当前 IDL 进程的 PID。配合 "/PARENT" 关键字可直接获取其父进程的 PID。

  1. 快速文本读取:READ_TEXTFILE

新增 "READ_TEXTFILE" 函数,提供了一种比传统 "READF" 更高效、更便捷的方式,可一步将文本文件的全部行一次性读入字符串数组中。

  1. 数学函数 SINC

新增内置 "SINC" 函数,直接计算标量或数组的 sinc(x) = sin(x)/x 值。例如:

IDL> SINC([0, 0.5, 2])

1.00000  0.958851  0.454649
  1. 极值查询函数:TYPEMAX 和 TYPEMIN

新增 "TYPEMAX" 和 "TYPEMIN" 函数,可快速查询 IDL 中所有数值数据类型(BYTE, INT, LONG, FLOAT, DOUBLE, COMPLEX, UINT, ULONG64 等)的理论最大值与最小值。例如:

IDL> types = [1,2,3,4,5,6,9,12,13,14,15]

IDL> foreach type, types do begin & tmin=typemin(type) & $

IDL>   tmax=typemax(type) & print, typename(tmin), tmin, tmax & endforeach

BYTE      0              255

INT       -32768          32767

LONG      -2147483648    2147483647

FLOAT     1.17549e-38    3.40282e+38

DOUBLE    2.2250739e-308  1.7976931e+308

COMPLEX   (  1.17549e-38,  1.17549e-38)(  3.40282e+38,  3.40282e+38)

DCOMPLEX  (  2.2250739e-308,  2.2250739e-308)(  1.7976931e+308,  1.7976931e+308)

UINT      0              65535

ULONG     0              4294967295

LONG64    -9223372036854775808   9223372036854775807

ULONG64   0              18446744073709551615
  1. WebSocket 客户端支持

"HttpRequest" 类新增对 WebSocket 协议的支持,使 IDL 具备作为 WebSocket 客户端与服务端进行双向实时通信的能力。

例如,假设有一台运行在localhost端口8765上的WebSocket服务器,它只是对接收到的数据进行回码。然后在IDL中你可以这样做:

ws = HttpRequest.WebSocket("ws://localhost:8765")

print, ws.Receive()

ws.Send, 'Hello from IDL'

print, ws.Receive()

ws.Send, bindgen(10) + 1b

print, ws.Receive()

Initial message from server

Echo: Hello from IDL

1   2   3   4   5   6   7   8   9  10

功能改进与优化

  1. 数组函数(Filter, Map, NestedMap, Reduce)现已适配 List

以往在调用 "IDL_Variable" 的 "Map"、"Filter" 等高阶函数时,附加参数仅支持标量或传统 IDL 数组。现在新增了对 "List"(列表)数据结构的支持。

例如,构造一个字符串数组和字符串列表,然后将它们串接起来:

IDL> a = ['Arr1', 'Arr2', 'Arr3']

IDL> b = List('L1', 'L2', 'L3')

IDL> result = a.Map(Lambda(x, y: `${x} + ${y}`), b)

IDL> result

Arr1 + L1

Arr2 + L2

Arr3 + L3
  1. ZIP 压缩与解压命令行进度条

"FILE_ZIP" 和 "FILE_UNZIP" 函数新增 "/PROGRESS_BAR" 关键字,开启后可在控制台终端实时显示百分比与进度条动态效果。

IDL> file_zip,'myfolder','myfolder.zip',/progress

Zipping... 100.0% [########################################] xyz.pro

IDL> file_unzip,'myfolder.zip','myoutputfolder',/progress

Unzipping... 100% [########################################] xyz.pro
  1. Hash::Map 支持获取哈希键(Keys)

使用 "Hash::Map" 迭代映射哈希表时,启用全新的 "/KEYS" 关键字后,对应每个值的 Hash Key 将作为最后一个参数传入映射/Lambda 函数中。例如:

IDL> var = HASH("key1", "A", "key2", "B")

IDL> result = var.Map(Lambda('value,sep,key: key + sep + value'), "=", /keys)

IDL> result

{

  "key1": "key1=A",

  "key2": "key2=B"

}
  1. 内置 Web 浏览器组件升级至 CEF 146

Windows 平台上的 IDL 浏览器组件("WIDGET_BROWSER")已升级至 CEF (Chromium Embedded Framework) 146:

  • 修复多项 CVE 漏洞,大幅提升安全性和稳定性。
  • 支持更现代化的 JS、DOM、CSS 特性。
  • 集成性能更强劲的 V8 JavaScript 引擎。
  1. IDL 包管理器(IPM)进度回调与隐式文件控制

  • 进度控制:"Publish"、"Install"和 "Update" 方法新增 "CALLBACK_FUNCTION" 和 "CALLBACK_DATA" 参数,允许开发者自定义上传/下载进度条 UI;新增 "PROGRESS" 参数以显隐命令行默认进度条。
  • 点文件打包:"Publish"方法新增 "INCLUDE_DOTFILES" 关键字,用于强制打包以 "." 开头的隐藏文件和文件夹(默认忽略)。
  1. 原始字符串的点方法无需括号

此前对非变量的原始字面量字符串调用点方法(Dot Methods)时必须外加括号。IDL 9.3 取消了这一限制。例如:

IDL> a = "*"

IDL> print, a.dup(10) ; no parentheses needed for a variable

IDL> print, ("*").dup(10) ; previously we needed parentheses around a raw string

现在,你不再需要在原始字符串周围加括号来使用这些点数方法。例如:

IDL> print, "*".dup(10)

**********

IDL> print, "IDL is fun!".strlen()

    11

IDL> print, "a/b/c/d".split("/")

a b c d
  1. 多行文本行间距控制(LINE_SPACING)

"TEXT"(函数图形)和 "IDLgrText"(对象图形)新增 "LINE_SPACING" 属性,用于精准调整包含 "!C" 换行符的多行文本的行距倍数。

例如,对于函数图形:

p = plot(/test)

t = text(0.5, 0.75, "$Here is a damped\nsine wave$", line_spacing = 2)

例如,对于对象图形:

obj = idlgrmodel()

txt = 'IDL is!CFun!'

obj.add, idlgrtext(txt,/enable_format, line_spacing=0.75)

obj.add, idlgrtext(txt,/enable_format, line_spacing=1, loc=[0.25,0,0])

obj.add, idlgrtext(txt,/enable_format, line_spacing=1.5, loc=[0.5,0,0])

xobjview, obj, xsize=800, scale=2

IDLgrText-linestyle_319x89

  1. NetCDF 支持 64 位 CDF5 格式

IDL NetCDF 组件现已完整支持读取和写入 CDF5 格式的 NetCDF-3 文件。该格式打破了传统限制,允许数组单个维度的元素数量超过 40 亿个。在 "NCDF_CREATE" 中指定 "/NETCDF3_CDF5" 即可创建该文件。

  1. 嵌入式 Python 环境升级至 3.14

IDL 与 ENVI 内置的 Python 运行环境已升级至 Python 3.14 版本。

  1. Python Bridge 错误追溯(Traceback)展示

此前通过 IDL Python Bridge 调用 Python 代码若报错,仅会弹出一句顶层异常信息,无法查看堆栈。现已支持输出完整的 Python Error Traceback,精准定位 Python 代码内部的具体行号与报错原因。例如,使用较旧版本的IDL时:

IDL> np = python.import('numpy')

IDL> result = np.linalg.solve([[1,2],[2,4]], [1,2])

% PYTHON::_OVERLOADMETHOD: PYTHON_CALLMETHOD: Exception: Singular matrix.

% Execution halted at: $MAIN$

现在,IDL 9.3:

IDL> np = python.import('numpy')

IDL> result = np.linalg.solve([[1,2],[2,4]], [1,2])

% PYTHON_CALLMETHOD: Traceback (most recent call last):

%   File "C:\Program Files\NV5\IDL93\bin\bin.x86_64\idl-python\numpy\linalg\_linalg.py", line 452, in solve

%     r = gufunc(a, b, signature=signature)

%   File "C:\Program Files\NV5\IDL93\bin\bin.x86_64\idl-python\numpy\linalg\_linalg.py", line 145, in _raise_linalgerror_singular

%     raise LinAlgError("Singular matrix")

% numpy.linalg.LinAlgError: Singular matrix

% Execution halted at: $MAIN$
  1. 动态协方差(RUNNING_COVARIANCE)矩阵模式

"RUNNING_COVARIANCE" 函数新增矩阵模式,用于直接计算 M x N 数据集中所有变量对之间的协方差和相关性统计量。只需传入单个 M x N 数组即可返回 M x M 的结构体统计矩阵;

IDL> data = randomu(seed, 5, 100)  ; 5 variables x 100 samples

IDL> result = running_covariance(data) ; Returns a 5x5 array of structures with pairwise statistics

提示: 使用<Variable>.<TagName>(例如result.covariance)访问目标统计量的5x5数组。

此外,"PREVIOUS" 关键字亦同步支持传入 M x M 结构体数组以接续增量计算。

  1. 符号图形置顶属性:ONGLASS

"SYMBOL" 函数新增 "ONGLASS" 属性。设为 "1" 时,符号将绘制在始终面向观察者的最前端平面上(置于所有其他 3D 图形对象之上),可完美解决地图或多图层渲染时的遮挡与绘制顺序(Draw Order)冲突。

  1. UI 控件属性增强

  • "WIDGET_DRAW":"SCROLL"关键字功能扩展("0": 禁用;"1": 自动;"2": 强制横向滚动条常亮;"3": 强制纵向滚动条常亮;"4": 强制双向滚动条常亮)。
  • "WIDGET_TEXT":新增 "YPAD"关键字,用于设定文本与控件边界之间的垂直内边距(Padding)。
  • "WIDGET_TREE":新增 "FRAME"关键字,设为 "0" 可去除树状控件的默认外边框,方便无缝嵌入 Tab 选项卡或 Base 容器中。
posted @ 2026-09-20 16:08  ENVI-IDL技术殿堂  阅读(88)  评论(0)    收藏  举报