1.Overview

可加载模块可以看做是Logic和UI联合构成的。

2.Creating Loadable Module

  • 创建模块目录
建议使用ExtensionWizard采用模板的方法生成文件和文件目录。

  • Build
可以使用CMake GUI、也可以使用命令行的方法。注意的是一定要指定Slicer_DIR为实体。

例如:Slicer_DIR=D:\Slicer4D\Slicer-build
  • Installing
之前也谈到过这一点,对于Slicer的机制,并没有“Installing”一说。我们可以理解为对插件的注册。
在Application Setting Dialog中设置Addition Module Path的时候,路径指示到模块的库目录。
例如:D:\Slicer4D\Slicer-build\ModuleTest\myLoadable-build\lib\Slicer-4.7\qt-loadable-modules\Debug
  • Check the module
打开Slicer.exe,就可以在Module Navigation Interface中找到我们新建立的模块。

Slicer官网提供给了我们修改module名字的方法如4,本人不建议改来改去的麻烦。
  • 使用启动器(Launcher)打开Qt Designer
在Slicer开发中,我们慢慢会发现启动VS、QtDesigner等开发环境和以往很不同,往往是在命令行中利用Launcher(Slicer.exe)进行启动。
d:
cd Slicer4D/Slicer-build
Slicer.exe --designer

  • Change the UI
使用Qt Designer,编辑模块的UI文件,例如,我的UI文件位于:
D:\Slicer4D\Slicer-build\ModuleTest\myLoadable\myLoadable\Resources\UI
通过上面的展图,可以发现我这里是存在两个UI文件的:
qSlicermyLoadableFooBarWidget.ui、qSlicermyLoadableModuleWidget.ui。细节参考3.2.
  • Edit Module Files
Slicer4/Modules/Loadable/MY_MODULE_NAME/qSlicerMY_MODULE_NAME.[h|cxx]
Slicer4/Modules/Loadable/MY_MODULE_NAME/qSlicerMY_MODULE_NAMEWidget.[h|cxx]
Slicer4/Modules/Loadable/MY_MODULE_NAME/Logic/vtkSlicerMY_MODULE_NAMELogic.[h|cxx]

3.如何使用QtDesigner进行开发?

3.1 加载CTK和MRML部件

为了在Qt Designer中拥有CTK Widget和MRML Widget部件,Qt Designer提供了两个选项:
  • the first is to copy the CTK and MRML plugin libraries into %QT_DIR%/plugins/designer
  • the second is to set the environment variable QT_PLUGIN_PATH to the directory Slicer-build/bin containing the subdirectory designer with the plugin libraries.
Windows Note:

利用正确的环境变量运行Qt Designer:Slicer.exe --designer。
如果Slicer处于Debug模式下,那么Qt也必须用Debug模式。

3.2 Building & Installing

官网给的Build方法比较麻烦,这里我尝试了一种相对比较简单的方法:
  • UI设计好之后保存;
  • 利用CMake进行编译生成*****.sln
  • 利用VisualStudio打开*****.sln,进行编译
  • 按照3方法进行注册即可
VisualStudio编译是为了根据UI文件生成ui_qSlicer_*Name*_ModuleWidget.h,例如本例生成了ui_qSlicermyLoadableModuleWidget.h。
该文件被qSlicermyLoadableModuleWidgetGenericTest.cxx使用。

4.模块间的依存

原理如5.6所示,具体还有待研究。

5.参考资料

1.Creating:https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/CreateLoadableModule
2.Building:https://www.slicer.org/wiki/Documentation/Nightly/Developers/ExtensionWizard#Building
3.Installing:https://www.slicer.org/wiki/Documentation/Nightly/Developers/ExtensionWizard#.22Installation.22
4.Checking:https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/CreateLoadableModul
5.QtDesigner:https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/QtDesigner
6.ModuleDependency:https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/CreateLoadableModule

3DSlicer23:Module-Create Loadable相关推荐

  1. OPA 6 - module(Create Button Test);

    Created by Wang, Jerry, last modified on Nov 08, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  2. 如何将自定义代码生成TVM

    如何将自定义代码生成TVM 如何将自定义代码生成TVM 本文参考链接: https://tvm.apache.org/docs/dev/how_to/relay_bring_your_own_code ...

  3. TVM实现hardware backend

    TVM实现hardware backend 官方的矩阵相加的示例如下: 2个矩阵相加的实现 for (int i = 0; i < n; ++i) { C[i] = A[i] + B[i]; } ...

  4. TVM开发三个示例分析

    TVM开发三个示例分析 把自主生成的代码生成TVM 把自主生成的代码生成TVM 目录 简介 要生成C代码. 要生成任何其它图形表示. 实现一个C代码生成器 实现[CodegenC] 运算符代码生成 输 ...

  5. 怎样用Python控制图片人物动起来?一文就能Get!

    作者 | 李秋键 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 出品 | AI科技大本营(ID:rgznai100) 引言:近段时间,一个让梦娜丽莎图像动起来的项目火遍了朋友圈.而今天我们就将 ...

  6. RTlinux3.2安装

    ( 1 ).前言 2003 年以后, fmslabs 的 RTLinux Free 版本为 3.2Pre ,和以前的 RTLinux 3.1 比较,不再需要必须从 2.4.4 的内核上安装. RTLi ...

  7. 解密虚拟 DOM——snabbdom 核心源码解读

    本文源码地址:https://github.com/zhongdeming428/snabbdom 对很多人而言,虚拟 DOM 都是一个很高大上而且远不可及的专有名词,以前我也这么认为,后来在学习 V ...

  8. magento php 所需模块,Magento 博客

    Magento2已经发布一段时间了.Magento1.9.x到Magento2,模块的结构已经出现很大的变化.今天,我们将指导您如何创建一个简单的Magento2模块. 创建模块之前,我们对比一下Ma ...

  9. springboot---整合shiro

    Shiro是一个非常不错的权限框架,它提供了登录和权限验证功能 1.创建数据库脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- -------- ...

  10. abaqus质量缩放系数取值_ABAQUS/Explicit质量缩放(MASS SCALING)使用心得  [转simwe]...

    概要 准静态分析或某些动态分析中,少数尺寸较小的单元控制稳态时间增量,为提高计算效率,ABAQUS/Explicit常采用质量缩放的方法.质量缩放可用于: 1.缩放整个模型,单个单元或单元组的质量 2 ...

最新文章

  1. 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
  2. groovy 慢_groovy优化
  3. ad 卡尔曼_对Kalman(卡尔曼)滤波器的理解
  4. Python反爬机制介绍
  5. Python与MySQL的交互
  6. Matlab | Matlab从入门到放弃(4)——样本均值
  7. f5 ppt图标_PPT制作学习 (PPT技巧干货,拿走不谢)
  8. 什么时候使用Shell
  9. Django的第一步(第一节)
  10. js的动态加载、缓存、更新以及复用(四)
  11. 爱特php文件管理器2.8_查找「超级蜘蛛池开发者中心 抠:44564876易」安卓应用 - 豌豆荚...
  12. (转)Android--sharepreference总结
  13. 从401航班事故调查看项目总结
  14. fedora 安装oracle 12c,Fedora12下安装Oracle11客户端
  15. Cosmos发起提案计划申请资助实施ATOM全面营销计划
  16. 数据结构练习(20)和为n连续正数序列
  17. MATLAB强化学习实战(十) 多智能体的路径跟随控制
  18. PS制作水彩效果头像
  19. esp32 cam 内网穿透 视频传输
  20. MATLAB当中一些简单的数值分析函数总结

热门文章

  1. 总结:数组名和指针完全是两码事
  2. XML学习第三节 Schema介绍
  3. blockhouses
  4. hdu 5108(分解质因数)
  5. linux 压缩解压归档
  6. NYOJ 1075 (递推 + 矩阵快速幂)
  7. StringTokenizer类的使用方法
  8. 对oracle sql的一些总结
  9. 数字三角形W(加强版) codevs 2189
  10. java程序错误类型及异常处理