跳转至

ENVI 5.4 即将推出:ENVITask 样式表

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/coming-soon-in-envi-54-envitask-style-sheets

8296 为本文评分:

5.0

ENVI 5.4 即将推出:ENVITask 样式表

匿名 2016年9月23日,星期五

自 ENVI 5.2 早期引入 ENVITasks 以来,一直存在着我们称之为动态用户界面(Dynamic UI)的功能。一些封装了 ENVITasks 的工具箱项会使用它,但您随时可以使用 ENVIUI::SelectTaskParameters() 方法,通过它来设置任务的部分或全部参数。当您调用此方法时,它会检查任务以获取每个参数的名称(NAME)、类型(TYPE)和值(VALUE)属性,并为每个参数构建包含小部件的对话框。如果参数值(VALUE)为 !NULL,则对应的小部件将显示为空;如果参数值有效,小部件则会显示该值。我们有一套启发式规则来尝试为每种类型(TYPE)选择最佳的小部件,但对于特定参数,它可能无法选择您想要的小部件。

为了解决这个问题,我们将在即将发布的 ENVI 5.4 中引入任务样式表。这个想法借鉴自 HTML 和 CSS,它们将内容与呈现分离。在 ENVITask 的上下文中,ENVITask 模板定义了内容,而样式表定义了呈现逻辑。这些样式表目前远不如 CSS 那么复杂,例如缺少层叠机制,但对于我们的目的来说并不需要那么复杂。样式表可以是一个 JSON 文件或内存中的哈希表(Hash),它允许您隐藏对话框底部的几个小部件,并为每个参数指定使用哪个小部件。您无需指定每个参数,不在样式表中的参数将回退到使用启发式规则选择的小部件。

让我们通过帮助页面中的示例来具体说明:

e = ENVI()   Task = ENVITask('NNDiffusePanSharpening')   ret = e.UI.SelectTaskParameters(Task)

生成的弹出对话框如下所示:

"像素大小比率"(Pixel Size Ratio)参数必须是整数,因此我们使用了带增/减按钮的编辑小部件。但也许您想使用滚轮小部件;这时样式表就派上用场了。

我可以将"像素大小比率"参数更改为使用滚轮小部件,如下所示:

style = Hash("schema", "envitask_3.0", $                "parameters", List(Hash("name", "pixel_size_ratio", $                                        "type", "IDLWheel_UI")))   ret = e.UI.SelectTaskParameters(Task, STYLE_SHEET=style)

一个关键点是,"parameters" 的值必须是一个哈希表(Hash)的列表(List),即使只有一个参数。等效的 JSON 文件如下:

{     "schema": "envitask_3.0",     "parameters": [         {             "name": "pixel_size_ratio",             "type": "IDLWheel_UI"         }     ] }

现在对话框看起来是这样的:

所有可能的"type"值都在"用户界面元素"(User Interface Elements)标题下有详细的文档说明。一些小部件允许您指定额外的属性来自定义其行为。例如,IDLWheel_UI 类支持指定最小(MIN)和最大(MAX)属性。如果参数本身已设置了这些属性,它们将被使用,但正如您在 NNDifusePanSharpening 任务中看到的,该参数并没有设置。不过,如果我们想要添加它们,可以在样式表中进行指定。我们通过将所有属性放入"keywords"键下的一个哈希表中来实现:

style = Hash("schema", "envitask_3.0", $                "parameters", List(Hash("name", "pixel_size_ratio", $                                        "type", "IDLWheel_UI", $                                        "keywords", Hash("min", 1, $                                                         "max", 9))))   ret = e.UI.SelectTaskParameters(Task, STYLE_SHEET=style)

等效的 JSON 文件如下:

{     "schema": "envitask_3.0",     "parameters": [         {             "name": "pixel_size_ratio",             "type": "IDLWheel_UI",             "keywords": {                 "max": 9,                 "min": 1             }         }     ] }

现在对话框看起来是这样的:

在上述所有示例中,我都在调用 SelectTaskParameters() 时手动指定了 STYLE_SHEET 关键字。如果您希望每次调用此方法处理您的任务时都自动使用样式表,那么请创建一个名为 <任务名称>.style 的 JSON 文件,并将其放在与 .task 文件相同的文件夹中。

使用属性提高图像分类精度 极速竞赛!