1. 程式人生 > >3D Slicer Programmatically Set Slice Offset and Intersections 用代碼修改Slicer中的切片偏移和交叉點顯示

3D Slicer Programmatically Set Slice Offset and Intersections 用代碼修改Slicer中的切片偏移和交叉點顯示

cnblogs 們的 int mod call eof col all mha

在3D Slicer中,當我們導入.mha/.mhd等格式的volume文件後,那麽我們就可以在Axial, Sagittal, Coronal三個方向來觀察我們的MRI或者CT的圖像了。3D Slicer界面提供了很多交互的功能,比如正上方就有一個滑動條slider,可以用來滑動切片觀察,如果我們不想手動來滑動slider,而是通過事件觸發,或者其他功能來觸發時,那麽我們就是要通過代碼來對切片進行交互。Slicer的用戶界面是Qt寫的,所有我們能通過用戶交互觸發的功能,都可以通過代碼來觸發。我們首先要獲取slicer的層管理器,然後獲得三個窗口的控件,然後通過窗口控件來獲得Logic類。因為Slicer使用的是典型的MVC框架,模型,視圖和控制器都分離開了。Slicer的模型就是各種節點Node,視圖就是各種窗口控件Widget,而控制器就是這些Logic類,所有的算法部分都可以放到Logic類裏頭,而跟用戶界面相關的控件都在Wdiget類裏。那麽我們通過代碼來設置切片偏移如下所示:

lm = slicer.app.layoutManager()
redLogic  = lm.sliceWidget(Red).sliceLogic()
yellowLogic  = lm.sliceWidget(Yellow).sliceLogic()
greenLogic  = lm.sliceWidget(Green).sliceLogic()
# Set offset
redLogic.SetSliceOffset(10)
yellowLogic.SetSliceOffset(20)
greenLogic.SetSliceOffset(30)

我們在工具欄中的Crosshair按鈕下點擊最後一個項Slice Intersections可以打開Slice的交叉十字標,如果我們不想手動點擊,而是加載我們的插件的時候就自動打開,可以使用如下代碼:

# Set intersection visible
redLogic.GetSliceCompositeNode().SetSliceIntersectionVisibility(1)
yellowLogic.GetSliceCompositeNode().SetSliceIntersectionVisibility(1)
greenLogic.GetSliceCompositeNode().SetSliceIntersectionVisibility(
1)

如果我們想在建立模型的時候,自動打開Slice Intersections Visible的話,可以添加下面這行代碼:

# Set slice intersections visible
slicer.util.getNode(YourModelNode).GetDisplayNode(). SetSliceIntersectionVisibility(1) 

3D Slicer Programmatically Set Slice Offset and Intersections 用代碼修改Slicer中的切片偏移和交叉點顯示