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 節。