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