3DSlicer11:体系结构2
生活随笔
收集整理的這篇文章主要介紹了
3DSlicer11:体系结构2
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.復習MRML類型
MRML,Medical Reality Markup Langguage,數(shù)據(jù)類型可以獨立于系統(tǒng)可視化和算法部分執(zhí)行。 MRML Scene數(shù)據(jù)對象包含了Slicer應用程序的狀態(tài)、原始數(shù)據(jù)、可視化參數(shù)等諸多數(shù)據(jù)。每一個數(shù)據(jù)類型由特定的MRML Node來表示。MRML Scene實際上就是MRML Nodes的集合。對于MRML數(shù)據(jù)類型,Slicer附帶了相應的方法進行操作。例如對其中的MRML Node進行Add、Delete、Select、Undo、Redo等。這些方法統(tǒng)稱為Slicer的MRML庫,其API函數(shù)就是用來對MRML Scene數(shù)據(jù)進行操作的。其他的組件,如Logic和GUI,一直在見識MRML Scene的變化,一旦MRML Scene發(fā)生了任何形式的操作,那么Logic、GUI就會產(chǎn)生相應的操作。
2.工作目錄
開發(fā)前熟悉源碼以及算法庫的分布是很有必要的。在使用CMake配置Slicer工程前,需要指定三個目錄:- Slicer源代碼文件夾
- 目標生成文件夾
- Qt庫文件夾
2.1 工程目標目錄結構
3Dslicer是在大量開源庫(ITK、VTK、CTK、DCMTK)的基礎之上開發(fā)的,所以編譯3Dslicer的時候我們一定會和這些算法庫打交道。慶幸的是,我們并不需要逐個一一下載!3Dslicer在編譯的過程中,會通過網(wǎng)絡自行下載各個庫的源代碼,并臨時進行編譯,所以Slicer工程目標目錄就會包含這些開源算法庫的源代碼文件夾和編譯后的文件夾。 以經(jīng)典算法庫BRAINSTools工程為例,其編譯后對應各個文件夾,如下:- BRAINSTools:存放Git/SVN獲取的源代碼
- BRAINSTools.dir:存放編譯日志
- BRAINSTools-build:存放編譯后的目標文件
- BRAINSTools-prefix:存放下載源代碼的配置文件
2.2 應用程序源碼目錄結構
Slicer的源碼存放很有規(guī)律,方便瀏覽。在源代碼目錄.../Slicer下有眾多子目錄,每一個子目錄代表一個特點的功能子集。- Applications:該目錄下包含一個子目錄SlicerApp,該子目錄中的源碼用于Slicer軟件平臺的框架,包括Main.cxx和主界面創(chuàng)建的源代碼。
- Base:實現(xiàn)Slicer的基礎功能,包括CLI、Logic、Python、QTApp、QTCLI、QTCore、QTGUI等子目錄。其中,CLI實現(xiàn)命令行模塊功能;Logic實現(xiàn)數(shù)據(jù)處理的邏輯順序、Python實現(xiàn)ITK、VTK算法的Python功能;QTApp幫助創(chuàng)建主界面;QTCLI創(chuàng)建命令行模塊界面;QTCore實現(xiàn)程序的文件管理等基礎功能;QTGUI實現(xiàn)絕大多數(shù)的工具欄、程序設置界面。
- CMake & SurperBuild: 存放程序編譯過程中需要使用到的*.cmake文件。
- Libs:Slicer不僅僅使用了其他文件包中的庫文件,還定義了很多函數(shù)庫,都存放在該目錄下。
- Modules:所有類型模塊的源代碼。
- Resource:存放資源文件,如HTML、icon、audio等。
2.3 CMakelist.txt分析
CMake可以根據(jù)不同平臺、不同編譯器生成相應的Makefile或者vcproj(Windows)項目。通過編寫CMakeLists.txt可以控制生成的Makefile,從而控制編譯過程。 CMake自動生成的Makefile不僅可以通過make命令構建項目生成文件,還支持make install安裝、make test測試安裝程序、make package生成當前平臺的安裝包、make package source生成源碼包、產(chǎn)生Dashboard顯示數(shù)據(jù)并上傳等高級功能。所以說只要在CMakeList.txt中簡單配置,就可以完成很多復雜功能。 Slicer源代碼中,每一個目錄以及其子目錄中,都會存在一個CMakeList.txt文件,該文件就是CMake程序配置Slicer工程的關鍵。CMake通過讀取CMakeList.txt中的代碼從而得知編譯該目錄中的代碼需要什么編譯器進行編譯,需要什么庫進行鏈接。總結
以上是生活随笔為你收集整理的3DSlicer11:体系结构2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3DSlicer10:体系结构1
- 下一篇: CMake1:HelloWorld