1.复习MRML类型

MRML,Medical Reality Markup Langguage,数据类型可以独立于系统可视化和算法部分执行。
MRML Scene数据对象包含了Slicer应用程序的状态、原始数据、可视化参数等诸多数据。每一个数据类型由特定的MRML Node来表示。MRML Scene实际上就是MRML Nodes的集合。
对于MRML数据类型,Slicer附带了相应的方法进行操作。例如对其中的MRML Node进行Add、Delete、Select、Undo、Redo等。这些方法统称为Slicer的MRML库,其API函数就是用来对MRML Scene数据进行操作的。其他的组件,如Logic和GUI,一直在见识MRML Scene的变化,一旦MRML Scene发生了任何形式的操作,那么Logic、GUI就会产生相应的操作。

2.工作目录

开发前熟悉源码以及算法库的分布是很有必要的。在使用CMake配置Slicer工程前,需要指定三个目录:
  • Slicer源代码文件夹
  • 目标生成文件夹
  • Qt库文件夹

2.1 工程目标目录结构

3Dslicer是在大量开源库(ITK、VTK、CTK、DCMTK)的基础之上开发的,所以编译3Dslicer的时候我们一定会和这些算法库打交道。庆幸的是,我们并不需要逐个一一下载!3Dslicer在编译的过程中,会通过网络自行下载各个库的源代码,并临时进行编译,所以Slicer工程目标目录就会包含这些开源算法库的源代码文件夹和编译后的文件夹。
以经典算法库BRAINSTools工程为例,其编译后对应各个文件夹,如下:
  • BRAINSTools:存放Git/SVN获取的源代码
  • BRAINSTools.dir:存放编译日志
  • BRAINSTools-build:存放编译后的目标文件
  • BRAINSTools-prefix:存放下载源代码的配置文件
像BRAINSTools这样的工具包还有cmcurl、CTK、DCMTK、EMSegment、ITKV4、jqplot、LibArchive、MultiVolumeExplorer/MultiVolumeImporter、NUMPY、OpenIGTLink/OpenIGTLinkIF、python、qRestAPI、SlicerExecutionModel、tcl、teem、VTK、zlib等19个,没事多翻翻源码总是有好处的。

Slicer-build文件夹是真正存放Slicer软件编译后的二进制代码目录,也是最关键的。使用Visual Studio打开Slicer.sln就可以清楚整个工程的子工程(>500)。

2.2 应用程序源码目录结构

Slicer的源码存放很有规律,方便浏览。在源代码目录.../Slicer下有众多子目录,每一个子目录代表一个特点的功能子集。
  • Applications:该目录下包含一个子目录SlicerApp,该子目录中的源码用于Slicer软件平台的框架,包括Main.cxx和主界面创建的源代码。
  • Base:实现Slicer的基础功能,包括CLI、Logic、Python、QTApp、QTCLI、QTCore、QTGUI等子目录。其中,CLI实现命令行模块功能;Logic实现数据处理的逻辑顺序、Python实现ITK、VTK算法的Python功能;QTApp帮助创建主界面;QTCLI创建命令行模块界面;QTCore实现程序的文件管理等基础功能;QTGUI实现绝大多数的工具栏、程序设置界面。
  • CMake & SurperBuild: 存放程序编译过程中需要使用到的*.cmake文件。
  • Libs:Slicer不仅仅使用了其他文件包中的库文件,还定义了很多函数库,都存放在该目录下。
  • Modules:所有类型模块的源代码。
  • Resource:存放资源文件,如HTML、icon、audio等。

2.3 CMakelist.txt分析

CMake可以根据不同平台、不同编译器生成相应的Makefile或者vcproj(Windows)项目。通过编写CMakeLists.txt可以控制生成的Makefile,从而控制编译过程
CMake自动生成的Makefile不仅可以通过make命令构建项目生成文件,还支持make install安装、make test测试安装程序、make package生成当前平台的安装包、make package source生成源码包、产生Dashboard显示数据并上传等高级功能。所以说只要在CMakeList.txt中简单配置,就可以完成很多复杂功能
Slicer源代码中,每一个目录以及其子目录中,都会存在一个CMakeList.txt文件,该文件就是CMake程序配置Slicer工程的关键。CMake通过读取CMakeList.txt中的代码从而得知编译该目录中的代码需要什么编译器进行编译,需要什么库进行链接。

3DSlicer11:体系结构2相关推荐

  1. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

  2. 基于ARMv8的固件系统体系结构

    基于ARMv8的固件系统体系结构 The architecture of ARMv8-based firmware systems 自2011年发布以来,ARMv8处理器架构在移动设备市场上已经相当普 ...

  3. 人工智能微控制器体系结构

    人工智能微控制器体系结构 Microcontroller architectures evolve for AI 如果把人工智能和物联网交叉,会得到什么?AIoT是一个简单的答案,但是也可以为微控制器 ...

  4. AI芯片体系结构目标图形处理

    AI芯片体系结构目标图形处理 AI chip architecture targets graph processing 可编程图形流处理器(GSP)能够执行"直接图形处理.片上任务图管理和 ...

  5. AMD–7nm “Rome”芯片SOC体系结构,支持64核

    AMD–7nm "Rome"芯片SOC体系结构,支持64核 AMD Fully Discloses Zeppelin SOC Architecture Details at ISS ...

  6. 基于ARM Cortex-M的SoC存储体系结构和实战

    基于ARM Cortex-M的SoC存储体系结构和实战 System on Chip Architecture Tutorial Memory Architecture for ARM Cortex- ...

  7. 主存储器是现代计算机系统的数据传送中心,第2章计算机体系结构习与题答案.doc...

    第2章计算机体系结构习与题答案 第二章习题 复习题 1.简述冯?诺依曼原理,冯?诺依曼结构计算机包含哪几部分部件,其结构以何部件为中心? 答:冯?诺依曼理论的要点包括:指令像数据那样存放在存储器中,并 ...

  8. 未来计算机体系结构,华中科大金海:未来是计算机体系结构的“黄金十年” 要培养大量创新人才...

    近日,华为开发者大会2021(HDC.Cloud)在深圳举行.大会以"每一个开发者都了不起"为主题,汇聚高校学者.商业领袖.技术专家等各界顶级大咖,共同探讨ICT技术的基础创新与应 ...

  9. 软件体系架构模式之二分层体系结构

    分层体系结构模式是n层模式,其中组件被组织在水平层中.这是设计大多数软件的传统方法,并且具有独立性.这意味着所有组件都是互连的,但彼此之间不依赖. 图1:分层架构 在此体系结构中有四层,其中每一层在模 ...

最新文章

  1. linux 权限 x 表示,在Linux系统中,用户对目录拥有“x”权限,表示可以执行下列哪种操作?...
  2. VMware ESXi 安装手记
  3. 成功驱动HD4600-Clover引导
  4. java回车后自动从一个文本框切换到另一个_Java实用教程-Java基本语法-Java程序的构成...
  5. 一个模型搞定多个CTR业务!阿里STAR网络介绍(附代码实现)
  6. 吃瓜笔记 | 旷视研究院:被遮挡人脸区域检测的技术细节(PPT+视频)
  7. linux删除eth2设备_Linux卸载/删除多余网卡
  8. redis实战之事务与持久化
  9. 扫描无法传送到计算机,文件无法从复印机扫描到电脑?可能是以下操作您没有注意到...
  10. Nat. Methods | 基于几何深度学习解密蛋白分子表面的相互作用指纹
  11. 【dev Cpp新手请进】dev导入ege图形库
  12. python xlsx转xls_Python 批量将xls文件转换为xlsx
  13. 疯狂模渲大师链接永久是最新版|怎么安装客户端并激活素材库联系作者加载自营专属素材扩展包高效使用超一流辅助插件脚本工具的步骤教程?...
  14. 华硕电脑 计算机管理员,华硕笔记本BIOS怎么用管理员密码清除用户密码...-卓优商学问答...
  15. 【前端】PS图层切图
  16. 最近大火的chatGPT是什么?它是怎样聊天的?
  17. MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
  18. JSON 数据结构、数据格式
  19. 两个进程同时访问同一个文件
  20. 挪威石油基金将起诉大众汽车

热门文章

  1. atitit.loading的设计与实现控件选型attilax 总结
  2. C++内联函数的学习
  3. 分析性能瓶颈 — 调试OutOfMemoryException
  4. 沙漠之旅(二维dp)
  5. hdu 5631 Rikka with Graph(无向图的割边)
  6. hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
  7. NYOJ 456 邮票分你一半
  8. [LGP4707] 重返现世
  9. [题解](双向bfs)hdu_3085_Nightmare Ⅱ
  10. 恶作剧程序之炸弹窗口