日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3DSlicer15:Scripted Module

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3DSlicer15:Scripted Module 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.循序漸進的腳本模塊

腳本模塊是采用Python編寫的。

1.1 使用ModuleWizard的模板創建Scripted Module

參考: https://na-mic.org/wiki/2013_Project_Week_Breakout_Session:Slicer4Python https://www.slicer.org/wiki/Documentation/Nightly/Developers/ModuleWizard
聲明: 在Slicer4.4以及之后的版本,ModuleWizard被棄用了,官方建議使用ExtensionWizard。
  • 前提條件
以Mac平臺為例進行討論,這些步驟對于所有平臺都是通用的。 Slicer在不同平臺上構建說明與指令參考如下: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Build_Instructions
  • 制作一個拓展
我們以一個簡單的腳本模塊作為示例做一個拓展。可以在Slicer源目錄中運行下面命令: ./Utilities/Scripts/ModuleWizard.py \--template ./Extensions/Testing/ScriptedLoadableExtensionTemplate \--target ../VolumeTools VolumeTools我們把這個拓展起的名是VolumeTools,因為我們用它實現腳本模塊的功能:在當前場景中滾動立體。
  • 制作一個腳本模塊
現在,我們想把腳本模塊嵌入到這個擴展中,需要執行以下命令(仍然在Slicer源目錄): ./Utilities/Scripts/ModuleWizard.py \--template ./Extensions/Testing/ScriptedLoadableExtensionTemplate/ScriptedLoadableModuleTemplate \--target ../VolumeTools/VolumeScroller VolumeScroller注意:我們使用了Module模板,module模板位于Extension模板中。
  • 設置CMakeLists.txt文件
因為這個模板包括了一個stand-in腳本模塊(替身腳本模塊?),我們希望刪除這個stand-in模塊,然后告訴CMakeLists.txt使用我們新創建的VolumScroller模塊。我們也需要去清理dummy模塊(虛擬模塊?)。在unix平臺上執行以下命令: rm -rf ../VolumeTools/ScriptedLoadableModuleTemplate perl -pi -e 's/ScriptedLoadableModuleTemplate/VolumeScroller/g' ../VolumeTools/CMakeLists.txt注意:我們將來要手動編輯CMakeListsy.txt,因為它包括了擴展的所有元數據,如作者、類別、文檔URL等。
  • 使用這個模塊配置Slicer
我們現在需要測試我們的模塊,最簡單的方法就是利用命令行指定路徑,如: ./Slicer-build/Slicer --additional-module-paths ../VolumeTools/VolumeScroller上面的路徑是假設你處在當地構建目錄——Slicer-superbuild目錄中,但是,我們用啟動Slicer替換這個路徑。
利用模板創建的初始化模塊 接下來,我們就可以開啟腳本模塊的編程之路。

1.2 理解腳本模塊的結構

再編程之前,花一點時間瀏覽模板還是值得的。模板代碼就300多行,其中大多數是引用,所以實際應用過程中只需要進行小小的改動就好了。其他部分需要徹底的更改,因為我們要實現從模板到實際功能的轉變。 模板中類定義如下: 注意:使用ModuleWizard/ExtensionWizard之后,字符串“ScriptedLoadableModuleTemplate”會替換成“VolumeScroller”
  • https://github.com/Slicer/Slicer/blob/master/Extensions/Testing/ScriptedLoadableExtensionTemplate/ScriptedLoadableModuleTemplate/ScriptedLoadableModuleTemplate.py#L9-34?ScriptedLoadableModuleTemplate是我們定制模塊元數據的地方。注意:我們的測試代碼在這里初始化。傳遞parent給構造函數,而parent是SlicerScriptedLoadableModule的實例
  • ScriptedLoadableModuleTemplateWidget定義了模型的GUI。通過傳遞qSlicerScriptedLoadableModuleWidget的實例給構造函數(C++的鉤子)
  • ScriptedLoadableModuleTemplateLogic就是一個輔助類,定義算法的應用和我們需要的其他輔助函數。按照慣例,這個類不應該引用任何GUI元素。
  • ScriptedLoadableModuleTemplateTest?is a subclass ofa standard python unittest TestCase. Note that this class responds specially to methods whose names start with the string "test", so follow the pattern of the template when adding test functionality.

1.3 基本的開發周期

  • 通過Python控制臺訪問模塊
作為一個學習的例子,讓我們在運行時的環境中操縱我們的窗口部件。這是Slicer中Python腳本模塊非常強大的特征。 首先,打開Python控制臺:View->Python Interactor 在控制臺中,我們訪問下面對象:slicer.modules.VolumeScrollerWidget 這是我們窗口模塊部件的實例。注意:控制臺我們已經配置好,使用它我們可以訪問接口的任何字段,甚至操縱這些字段。看著接口時,可以嘗試下面代碼: b = slicer.modules.VolumeScrollerWidget.applyButton b.enabled = True b.down = True b.down = False b.clicked()注意:“clicked()”如何觸發“Run the Algorithm”消息?這是因為對于按鈕而言,點擊相當于一個信號signal,它連接著Python的一個調用,這是腳本模塊的一部分。
  • 編輯/重新加載代碼
1.重載和測試可折疊盒子 注意兩個大按鈕“Reload”和“Reload and Test"按鍵,在開發的過程中還是很有用的: Reload:
  • 移除當前模塊GUI的實例
  • 重載Python源代碼
  • 在先前的位置在創建一個GUI
  • 更新slicer.modules.<moduleName>Widget,指向新的實例
  • Reload and Test:
    • 執行重新加載
    • 調用我們定義的測試代碼
    默認情況下,測試將會下載一個示例數據集并確認該數據集已經被加載。后面仍然會討論測試的內容。 2.Reloading https://na-mic.org/wiki/2013_Project_Week_Breakout_Session:Slicer4Python

    1.4 完善的功能

    此時,寫代碼實現我們想要的功能是一個簡單的事。我們不需要一行一行地瀏覽代碼,只需要在每一步更換block-by-block來測試功能。
    • 改善GUI
    • 改善Logic

    2.Python腳本模塊設計:超越基礎

    包括Widget的應用、Logic、MRML 類,使用MRML節點存儲模型參數

    3.Module Factory

    加載模塊分成許多步驟:
    • module factories 必須注冊到 factorymanager中
    • 下載模塊后的目錄必須傳遞給factory manager
    • 將模塊與場景和應用連接

    4.MRML節點與模塊之間的聯系

    模塊可以與MRML節點進行關聯,例如,這種關聯關系允許模塊編輯確定的MRML節點。模塊既可以通過重寫?qSlicerAbstractCoreModule::associatedNodeTypes()方法指定節點類型列表,也可以通過調用qSlicerCoreApplication::addModuleAssociatedNodeTypes()關聯任何模塊的任何節點。 多個模塊可以與同一個MRML節點類型相關聯。

    總結

    以上是生活随笔為你收集整理的3DSlicer15:Scripted Module的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。