3DSlicer13:Command Line Interface(CLI)
生活随笔
收集整理的這篇文章主要介紹了
3DSlicer13:Command Line Interface(CLI)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.ExtensionWizard創建初始框架
1.1 ExtensionWizard綜述
ExtensionWizard是一個工具的集合,既可以利用Slicer中的圖像用戶接口(GUI)訪問,也可以在一個獨立的Python控制臺使用命令行接口(CLI)訪問。 Slicer Module通常包含幾個不同種類的文件,例如CMakeList.txt、源文件、資源文件。很多情況下,文件名以及文件中的文本字符串的名字都是相關的,需要同步以便編譯。 一個Extension把一個或多個Module封裝成包,這個包可以通過Slicer下載。 ExtensionWizard就是一個工具,它可以簡化創建Extension的流程。1.2使用圖形用戶接口GUI訪問ExtensionWizard
為了使用ExtensionWizard,我們只需要安裝最近的Slicer版本,開啟,然后選擇“Extension Wizard”模塊。 Extension提供了一個“模板機制”簡化了創建Extension的流程。這個流程可以自動為我們創建文件,并且提供合適的文件名的代碼,這樣我們就能立刻上手:- 點擊“Create Extension”;
- 確定拓展文件名,并確定一個空的目錄作為目標文件夾,點擊OK;
- 點擊“Add module to Extension”;
- 確定名稱和模塊類型。大多數第一次開發人員應該選擇“Scripted”作為模塊類型。因為只有Python腳本模塊很容易創建并且不需要使用一個自己組建好的Slicer。點擊“OK”;
- 選中我們自己的模塊,然后下載。選擇“Add selected module to search path”自動下載;
- 通過“Module List”打開我們新創建的模塊。如果我們啟用了開發者模式,修改之后并不需要重啟Slicer,直接重新加載就好了。
1.3 使用命令行接口CLI訪問ExtensionWizard(高級用戶)
Extension提供了一個“模板機制”簡化了創建Extension的流程。這個流程可以自動為我們創建帶有合適名字的文件,我們只需要在模板內進行一些關鍵的內容替換就可以了。先介紹幾個術語:
- 模板template:包含用于創建新實體(Extension、Module)的文件目錄;
- templatKey:在模塊文件名和標識符中使用的文本字符串;
- 目的地destination:放置新代碼的目錄;
- 名字name:創建新實體(Extension、Module)的名字。代碼將會被放在這個名字的子目錄中,同時這個名字將會取代templateKey。
這個常備的模板包括一個占位符,這個占位符指明了新的'add_subdirectory'應該插在哪里(如果這個占位符不存在,向導嘗試在最近存在的‘add_subdirectory’后面添加一個新的‘add_subdirectory’)。 注意:目的地目錄destination direction(extension)是可選的,默認情況下是當前目錄。在上面的例子中,我們使用cd轉到一個新創建的extension目錄 Slicer中提供的常備用的模板(Extension、Module)詳細參考如下網址: https://github.com/Slicer/Slicer/tree/master/Utilities/Templates
1.4 三個模塊的區別
- CLI:提供自定義命令行接口的模塊;
- Loadable:Slicer中提供新功能的C++模塊;
- Scripted:Slicer中提供新功能的Python模塊;
1.5 使用自定義的模板
默認情況下,ExtensionWizard使用Slicer提供的模板。當然,我們也可以通過參數'--templatePath'添加自己的模板: # Add custom templates; expects to find subdirectories under the path matching # a template type, e.g. 'modules' slicerExtensionWizard --templatePath ~/code/Templates# Add custom module templates slicerExtensionWizard --templatePath modules=~/code/Templates1.6 使用Extensions
- 組建building
https://www.slicer.org/wiki/Documentation/Nightly/Developers/FAQ#How_to_build_an_extension_.3F
- 安裝installing
- ~/code/MyExtension/build/lib/Slicer-<version>/qt-loadable-modules
- ~/code/MyExtension/build/lib/Slicer-<version>/qt-scripted-modules
- ~/code/MyExtension/MyPythonModule
2.在Slicer源代碼樹外Building模塊
Slicer支持的不同類型的模塊Modules很容易在源代碼樹外進行編譯。 注意:在build C++模塊之前,我們應該確保在本機上已經利用源碼Build了 Slicer。 下面的例子是為Unix系列平臺設計的的,但是同樣適應Windows: 假設:新編寫的module源代碼在文件夾‘MyModule’中,外部編譯可以通過下面代碼實現: $ mkdir MyModule-build $ cd MyModule-build $ cmake -DSlicer_DIR:PATH=/path/to/Slicer-Superbuild/Slicer-build ../MyModule $ make 為了使上面代碼有效,我們除了需要在最頂層文件“CMakeLists.txt”文件中添加“cmake_minimum_required”,也要確保在設置模塊名字“MODULE_NAME”之后,添加如下代碼: find_package(Slicer REQUIRED) include(${Slicer_USE_FILE})================================================================================= 最全面的代碼示例如下所示: cmake_minimum_required(VERSION 2.8.9) <- - - - ADD THISfind_package(Slicer COMPONENTS ConfigurePrerequisites) <- - - - ADD THIS project(EmptyExtensionTemplate) <- - - - ADD THIS#----------------------------------------------------------------------------- set(MODULE_NAME ${PROJECT_NAME}) set(MODULE_TITLE ${MODULE_NAME})string(TOUPPER ${MODULE_NAME} MODULE_NAME_UPPER)#----------------------------------------------------------------------------- find_package(Slicer REQUIRED) <- - - - - - - ADD THIS include(${Slicer_USE_FILE}) <- - - - - - - - ADD THIS#----------------------------------------------------------------------------- add_subdirectory(Logic)#----------------------------------------------------------------------------- set(MODULE_EXPORT_DIRECTIVE "Q_SLICER_QTMODULES_${MODULE_NAME_UPPER}_EXPORT")[...] 成功編譯了Slicer模塊之后,Slicer的模塊可執行程序和庫就位于我們的模塊組建目錄中build_dir/lib/Slicer-X.Y/module_type。 然后我們需要把這個目錄添加到Application Setting GUI的Addition module路徑中,這樣就可以便面重新編譯Super-build可以直接測試了。更詳細的“目錄結構”可以參考如下: https://www.slicer.org/wiki/Documentation/Nightly/Developers/DirectoryStructure
============================================================================== 關于此部分容易犯錯誤的地方進行總結:
2.1 在Slicer build-tree中,哪里是Slicer 模塊?
Slicer模塊的可執行程序和庫位于Slicer組建目錄中“Slicer-Superbuild/Slicer-build”中。2.2 如何修訂外部模塊的本地版本?
https://www.slicer.org/wiki/Documentation/Nightly/Developers/Build_Module2.3 如何從C++ 可加載模塊中調用CLI模塊?
Calling CLI module from a C++ loadable module:http://slicer-devel-archive.65872.n3.nabble.com/Calling-CLI-module-from-a-C-loadable-module-tt4031930.html
Example: vtkSlicerCropVolumeLogic.cxx#L318-351: https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/CropVolume/Logic/vtkSlicerCropVolumeLogic.cxx#L318-351
2.4 如何從命令行中調用CLI模塊?
對于Windows操作系統,我們要使用Slicer應用程序的全名(文件名+后綴)。 Slicer.exe --launch CastScalarVolume input.mha output.mha如果想要得到CLI模塊支持的命令行參數幫助,運行: Slicer.exe --launch CastScalarVolume? c:\SomeWriteAbleDirectory\usage.txt
3.學習資源
目前已經存在的CLI模塊的源碼: http://viewvc.slicer.org/viewvc.cgi/Slicer4/trunk/Modules/CLI/ 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的3DSlicer13:Command Line Interface(CLI)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个比较简单驱动程序[编译环境]
- 下一篇: 3DSlicer14:Loadable