3DSlicer33:Adding MRML
生活随笔
收集整理的這篇文章主要介紹了
3DSlicer33:Adding MRML
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.Adding in MRML to Slicer
MRML是Slicer中用到的場景描述,并映射到他的數據模型。MRML庫提供了API管理醫學圖像數據類型和可視化,數據類型包含Volume、model、transform、fiducials、camera... 在MRML中,每一種數據類型都通過一個特殊的MRML節點表示。MRML場景實際上就是不同節點的集合。 Slicer MRML數據模型獨立于系統的可視化和算法組件實現的。其他的組分(Logic & GUI)一旦觀測到MRML場景(獨立節點)的改變,就會啟動相應的MRML事件響應。2.MRML Scene
MRML場景管理著MRML節點:添加、刪除、遍歷(按類型)。也包含如下兩個方面:- 永久的節點:讀XML文件、寫XML文件。
- Undo/Redo機制,能夠存儲場景(各個節點)的前一個狀態?
3.MRML Nodes
MRML節點用來存儲Slicer應用的狀態,包括原始數據和可視化參數。MRML所有節點組織成C++層次結構,所有的都繼承自vtkVolumeNode類。 舉一個簡單的例子: vtkMRMLTransformableNode就是(Volume、Model、Fiducial、Transformation)的父類; vtkMRMLVolumeNode就是vtkMRMLScalarVolumeNode和vtkMRMLVectorVolumeNode的父類。 具體類的繼承關系如下:
4.Reference to MRML Nodes
一些MRML節點會引用其他節點。例如:Transformable 節點就會引用Transformation節點。引用存儲在節點ID中。注意:- 使用vtkSetReferenceStringMacra() 設置引用ID(負責在場景中注冊引用)
- 使用ID檢查當前的引用節點是否還在MRML場景中
5.MRML Events-Observers
MRML場景和各自節點的改變,將會傳遞給其他的觀察者節點。GUI和Logic對象通過vtk事件以及命令-觀察者機制響應。一些經驗如下:- 使用vtk AddObserver()和InvokeEvent()方法。vtk 宏 SetMacro生成ModifiedEvents
- The command-observer mechanism for MRML is implemented using helper vtkObserverManager, class, MRML Observer macros, and ProcessMRMLEvents method.
- 觀察者應該存儲一個已經注冊了的指向MRML節點的指針,這樣可以防止回調函數操作一個已經銷毀的對象。
6.MRML Observer API
觀察者API定義在Libs/MRML/vtkMRMLNode.h中- vtkSetMRMLObjectMacro:用另一個vtk對象(另一個MRML節點、Logic、GUI)注冊MRML節點
- vtkSetAndObserverMRMLObjectMacro:注冊一個MRML節點,并為vtkCommand::ModifyEvent()添加一個觀察者
- vtkSetAndObserveMRMLObjectEventMacro:注冊一個MRML節點,并為一個指定的Event集合設置一個觀察者。
- SetAndObserveMEMLScene[Events]:函數方法,在GUI和Logic中使用,觀測Modify、NewScene、NodeAdded等事件
- ProcessMRMLEvents:函數方法,在MRML節點、Logic、GUI類中使用,為了處理來自觀察者節點的事件。
- 自定義的MRML節點為模型參數提供了永久的存儲。
- 自定義的MRML節點應該使用RegisterNodeClass()在MRML場景中注冊,這樣有利于存儲,以及從場景文件中恢復
- 自定義節點類會用到如下方法
- 自定義節點類會使用到如下方法:
- CreateNodeInstance()
- GetNodeTagName()
- ReadXMLAttributes()
- WriteXML()
- Copy()
總結
以上是生活随笔為你收集整理的3DSlicer33:Adding MRML的全部內容,希望文章能夠幫你解決所遇到的問題。