3DSlicer8:FAQ-2
生活随笔
收集整理的這篇文章主要介紹了
3DSlicer8:FAQ-2
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.MRML
1.1 Introduction
- MRML用來描述Slicer中的場景并映射到他的數(shù)據(jù)模型。MRML庫提供了一個API用于管理醫(yī)學圖像數(shù)據(jù)類型(體數(shù)據(jù)、模型、變換、基準點、相機等)和可視化;
- 每種數(shù)據(jù)類型都以一個特殊的MRML node(節(jié)點)來呈現(xiàn);MRML Scene就是所有MRML nodes的集合;Slicer MRML數(shù)據(jù)模型不依賴于系統(tǒng)的可視化組建和算法組件;
1.2 MRML Scene
- MRML Scene管理MRML nodes(增加、刪除、尋找、按類尋找);
- MRML Scene 提供了MRML nodes的可持續(xù)性(從XML文件中讀取、寫入到XML文件);
- MRML Scene提供了 Undo/Redo 機制;
1.3 MRML Nodes
- MRML nodes存儲Slicer應用的狀態(tài),包括原始數(shù)據(jù)和可視化參數(shù);下面是關(guān)鍵MRML nodes的集合,他們存儲著核心Slicer模塊的狀態(tài):
- 所有的MRML nodes必須應用某種標準的API:ReadAttributes/WriteAttributes/Copy等;
1.4 引用MRML 節(jié)點
一些MRML nodes 也會引用其他 nodes。例如,Transformable Node 引用了Transformation Node。Transformation Node引用了父級的Transformation Node。引用通過 Node ID存儲。- 使用VTKSetReferenceStringMacro設置引用ID(場景中注冊過程);
- 訪問方法在訪問之前應該通過ID檢查引用節(jié)點是否仍然在MRML場景中;
1.5 MRML事件與觀察者
MRML場景和每個節(jié)點的改變將會通過vtk事件和命令-觀察者機制傳遞給其他的觀測節(jié)點,GUI對象和Logic對象。一些經(jīng)驗規(guī)則如下:- Use vtk AddObserver() and InvokeEvent() methods. vtk SetMacro generates ModifiedEvent.
- The command-observer mechanism for MRML is implemented using helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.
- Observers should store a registered pointer to a MRML node to prevent callbacks on a deleted object.
1.6 如何添加一個MRML node到場景中?
- 一般模式
- 向場景中添加一個多邊形數(shù)據(jù)
- 從文件中載入多邊形數(shù)據(jù)
1.7當載入MRML場景時遇到如下錯誤怎么辦?
ERROR: In /path/to/VTK/Imaging/vtkImageMapToColors.cxx, line 153 vtkImageMapToColors (0x268f190): RequestInformation: No LookupTable was set but number of components in input doesn't match OutputFormat, therefore input can't be passed through!ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input.ERROR: In /path/to/VTK/Imaging/vtkImageExtractComponents.cxx, line 239 vtkImageExtractComponents (0x26947e0): Execute: Component 1 is not in input.[...]要確定每一個colorNodeRef屬性設置在每一個VolumeDisplay節(jié)點上。1.8 如何在2D視窗中更改體數(shù)據(jù)?
appLogic = slicer.app.applicationLogic() selectionNode = appLogic.GetSelectionNode() selectionNode.SetReferenceActiveVolumeID(bg) selectionNode.SetReferenceSecondaryVolumeID(fg) appLogic.PropagateVolumeSelection()2.IO
為什么我的節(jié)點Writer沒有出現(xiàn)在保存的對話框中?- 需要在qSlicerIOManager中注冊我們的Writer 用qSlicerYourModule::Setup();
示例:https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx
- 你的節(jié)點需要成為vtkMRMLStorableNode的子類;
3.Modules
3.1 在Slicer的build-tree中,Slicer的模塊位于哪里?
Slicer模塊和庫位于Slicer主構(gòu)建目錄: ~/Slicer-Superbuild/Slicer-build3.2 如何從C++可加載模塊調(diào)用一個CLI模塊?
問題描述:http://slicer-devel-archive.65872.n3.nabble.com/Calling-CLI-module-from-a-C-loadable-module-tt4031930.html 實例分析:https://github.com/Slicer/Slicer/blob/master/Modules/Loadable/CropVolume/Logic/vtkSlicerCropVolumeLogic.cxx#L318-3513.3 如何從命令行調(diào)用一個CLI模塊?
示例: Slicer.exe --launch CastScalarVolume input.mha output.mha 在Windows中使用要注意:- 需要使用Slicer應用程序的全名,即Slicer.exe而不是Slicer;
- 為了獲得CLI模塊支持的命令行參數(shù)的幫助,可以運行下面語句:
總結(jié)
以上是生活随笔為你收集整理的3DSlicer8:FAQ-2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++程序员必需的修养
- 下一篇: 3DSlicer9:FAQ-3