Opticks 开发者指南/插件类型
导入数据集时,Opticks 首先显示“打开”对话框,允许用户选择导入器和要导入的文件。它调用插件目录中每个插件的 getType() 方法,对于那些返回“Importer”的插件,它调用其 getName() 和 getDefaultExtensions() 方法,并将名称添加到“Importer”选择框,并将扩展名添加到“文件类型”选择框。当用户从选择框中选择导入器时,Opticks 调用导入器的 getDatasetParameters() 方法来确定所选文件是否是导入器识别的有效文件。如果文件有效,则“选项”按钮将被启用。如果用户随后按下“打开”对话框上的“选项”按钮,Opticks 将再次调用插件的 getDatasetParameters() 方法。这允许插件解析要加载的文件的标题并相应地设置 DatasetParameters 对象中的值。“选项”对话框随后将使用 DatasetParameters 中的值填充并显示。当用户按下“打开”对话框中的“打开”按钮时,Opticks 调用插件的 getInputSpecification() 和 getOutputSpecification() 方法。然后,它将每个插件参数上的实际值填充并调用插件的 execute() 方法来导入数据集。
ImporterShell 类表示导入器插件的外壳。导入器开发人员应使用此类并对其进行扩展以支持其导入器特定的代码。
const char* getDefaultExtensions()
不接受任何参数。由 Opticks 调用以获取有效的文件扩展名,这些扩展名用作导入文件时文件选择对话框中的过滤器。此方法返回导入器支持的扩展名列表(如在插件的构造函数中使用 setExtensions() 方法设置)。此列表作为字符字符串返回。该字符串由描述以及一个或多个以分号分隔的文件扩展名组成。多个文件类型可以使用双分号指定。示例包括“Landsat 头文件 (*.hdr)”、“TIFF 文件 (*.tif; *.tiff)”和“源文件 (*.c*);;头文件 (*.h)”。
bool getDatasetParameters()
接受两个参数。第一个是 const char*,它是要返回其参数的数据集的完整路径和文件名。第二个参数是指向 DatasetParameters 对象的指针。此方法使用给定文件的值填充给定的 DatasetParameters 对象。此方法的默认实现初始化对象并将所有参数的可修改标志设置为 true。如果填充 DatasetParameters 结构没有发生错误,则该方法返回 true。常见错误是给定文件不符合导入器的正确格式。
const void* getOptionsDialog()
此方法提供了一个接口,用于向用户显示专门的选项。它接受一个文件名(作为参数,即当前为导入而选择的文件名)和一个 DatasetParameters 指针作为参数。该方法返回一个 void* 指针,它实际上是 Qt 小部件的句柄。对于具有 SensorData 子类型的导入器,QWidget 被添加到现有选项对话框中。对于其他导入器,小部件应为可以显示的 QDialog。如果导入器没有自己的选项小部件,则此方法应返回 NULL。导入器插件应重新定义表 21 中的所有方法。在交互模式下,导入器的 execute() 方法在用户选择要加载的文件和用于加载文件的导入器后由 Opticks 调用。此外,用户可以指定采样标准,这些标准指示要读取的立方体哪一部分。通常,导入器插件会读取其要读取的文件的标题并使用通用导入器读取数据立方体。这使导入器开发人员免除了根据可能复杂的采样标准解析数据立方体的任务。有关从另一个插件调用插件的详细信息,请参阅部分。
ExporterShell 类表示导出器插件的外壳。导出器开发人员应扩展此类以支持其导出器特定的代码。
const char* getDefaultExtensions()
不接受任何参数。由 Opticks 调用以获取有效的文件扩展名,这些扩展名用作导入文件时文件选择对话框中的过滤器。此方法返回导出器支持的扩展名列表(如在插件的构造函数中使用 setExtensions() 方法设置)。此列表作为字符字符串返回。该字符串由描述以及一个或多个以分号分隔的文件扩展名组成。多个文件类型可以使用双分号指定。示例包括“Landsat 头文件 (*.hdr)”、“TIFF 文件 (*.tif; *.tiff)”和“源文件 (*.c*);;头文件 (*.h)”。
const void* getOptionsDialog()
此方法提供了一个接口,用于向用户显示专门的选项。它接受一个文件名(作为参数,即当前为导入而选择的文件名)和一个 DatasetParameters 指针作为参数。该方法返回一个 void* 指针,它实际上是 Qt 小部件的句柄。对于具有 SensorData 子类型的导入器,QWidget 被添加到现有选项对话框中。对于其他导入器,小部件应为可以显示的 QDialog。如果导入器没有自己的选项小部件,则此方法应返回 NULL。
ViewerShell 用于实现无模式对话框式插件。当插件扩展 ViewerShell 时,插件会自动继承正确销毁无模式对话框的代码。为了为销毁无模式对话框提供默认功能,ViewerShell 定义了以下方法,该方法必须在开发人员的插件中实现
virtual QWidget* getWidget() const = 0;
ViewerShell 通过覆盖 PlugIn2::abort() 方法、使用 getWidget() 获取小部件,以及向 DesktopServices 注册一个 PlugInCallback 来指示插件已完成其实现来销毁对话框。当回调执行时,对话框或小部件将被隐藏并销毁。然后卸载插件。由于对话框是通过调用 abort() 销毁的,因此派生插件在用户关闭对话框或小部件时也必须调用 abort() 方法,以便它将被销毁。这通常发生在无模式对话框或小部件中覆盖的 QWidget::closeEvent() 方法中。有关更多详细信息和使用无模式对话框的示例代码,请参见第 5.3 节。