3DSlicer8:FAQ-2
生活随笔
收集整理的這篇文章主要介紹了
3DSlicer8:FAQ-2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.MRML
1.1 Introduction
- MRML用來描述Slicer中的場景并映射到他的數據模型。MRML庫提供了一個API用于管理醫學圖像數據類型(體數據、模型、變換、基準點、相機等)和可視化;
- 每種數據類型都以一個特殊的MRML node(節點)來呈現;MRML Scene就是所有MRML nodes的集合;Slicer MRML數據模型不依賴于系統的可視化組建和算法組件;
1.2 MRML Scene
- MRML Scene管理MRML nodes(增加、刪除、尋找、按類尋找);
- MRML Scene 提供了MRML nodes的可持續性(從XML文件中讀取、寫入到XML文件);
- MRML Scene提供了 Undo/Redo 機制;
1.3 MRML Nodes
- MRML nodes存儲Slicer應用的狀態,包括原始數據和可視化參數;下面是關鍵MRML nodes的集合,他們存儲著核心Slicer模塊的狀態:
- 所有的MRML nodes必須應用某種標準的API:ReadAttributes/WriteAttributes/Copy等;
1.4 引用MRML 節點
一些MRML nodes 也會引用其他 nodes。例如,Transformable Node 引用了Transformation Node。Transformation Node引用了父級的Transformation Node。引用通過 Node ID存儲。- 使用VTKSetReferenceStringMacro設置引用ID(場景中注冊過程);
- 訪問方法在訪問之前應該通過ID檢查引用節點是否仍然在MRML場景中;
1.5 MRML事件與觀察者
MRML場景和每個節點的改變將會通過vtk事件和命令-觀察者機制傳遞給其他的觀測節點,GUI對象和Logic對象。一些經驗規則如下:- 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到場景中?
- 一般模式
- 向場景中添加一個多邊形數據
- 從文件中載入多邊形數據
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節點上。1.8 如何在2D視窗中更改體數據?
appLogic = slicer.app.applicationLogic() selectionNode = appLogic.GetSelectionNode() selectionNode.SetReferenceActiveVolumeID(bg) selectionNode.SetReferenceSecondaryVolumeID(fg) appLogic.PropagateVolumeSelection()2.IO
為什么我的節點Writer沒有出現在保存的對話框中?- 需要在qSlicerIOManager中注冊我們的Writer 用qSlicerYourModule::Setup();
示例:https://github.com/Slicer/Slicer/blob/3dd75da/Modules/Loadable/Markups/qSlicerMarkupsModule.cxx
- 你的節點需要成為vtkMRMLStorableNode的子類;
3.Modules
3.1 在Slicer的build-tree中,Slicer的模塊位于哪里?
Slicer模塊和庫位于Slicer主構建目錄: ~/Slicer-Superbuild/Slicer-build3.2 如何從C++可加載模塊調用一個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 如何從命令行調用一個CLI模塊?
示例: Slicer.exe --launch CastScalarVolume input.mha output.mha 在Windows中使用要注意:- 需要使用Slicer應用程序的全名,即Slicer.exe而不是Slicer;
- 為了獲得CLI模塊支持的命令行參數的幫助,可以運行下面語句:
總結
以上是生活随笔為你收集整理的3DSlicer8:FAQ-2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++程序员必需的修养
- 下一篇: 3DSlicer9:FAQ-3