1.循序渐进的脚本模块

脚本模块是采用Python编写的。

1.1 使用ModuleWizard的模板创建Scripted Module

参考:
https://na-mic.org/wiki/2013_Project_Week_Breakout_Session:Slicer4Python
https://www.slicer.org/wiki/Documentation/Nightly/Developers/ModuleWizard
声明:
在Slicer4.4以及之后的版本,ModuleWizard被弃用了,官方建议使用ExtensionWizard。
  • 前提条件
以Mac平台为例进行讨论,这些步骤对于所有平台都是通用的。
Slicer在不同平台上构建说明与指令参考如下:

https://www.slicer.org/wiki/Documentation/Nightly/Developers/Build_Instructions
  • 制作一个拓展
我们以一个简单的脚本模块作为示例做一个拓展。可以在Slicer源目录中运行下面命令:

./Utilities/Scripts/ModuleWizard.py \--template ./Extensions/Testing/ScriptedLoadableExtensionTemplate \--target ../VolumeTools VolumeTools

我们把这个拓展起的名是VolumeTools,因为我们用它实现脚本模块的功能:在当前场景中滚动立体。

  • 制作一个脚本模块

现在,我们想把脚本模块嵌入到这个扩展中,需要执行以下命令(仍然在Slicer源目录):

./Utilities/Scripts/ModuleWizard.py \--template ./Extensions/Testing/ScriptedLoadableExtensionTemplate/ScriptedLoadableModuleTemplate \--target ../VolumeTools/VolumeScroller VolumeScroller

注意:我们使用了Module模板,module模板位于Extension模板中。

  • 设置CMakeLists.txt文件
因为这个模板包括了一个stand-in脚本模块(替身脚本模块?),我们希望删除这个stand-in模块,然后告诉CMakeLists.txt使用我们新创建的VolumScroller模块。我们也需要去清理dummy模块(虚拟模块?)。在unix平台上执行以下命令:

rm -rf ../VolumeTools/ScriptedLoadableModuleTemplate
perl -pi -e 's/ScriptedLoadableModuleTemplate/VolumeScroller/g' ../VolumeTools/CMakeLists.txt

注意:我们将来要手动编辑CMakeListsy.txt,因为它包括了扩展的所有元数据,如作者、类别、文档URL等。

  • 使用这个模块配置Slicer
我们现在需要测试我们的模块,最简单的方法就是利用命令行指定路径,如:

./Slicer-build/Slicer --additional-module-paths ../VolumeTools/VolumeScroller

上面的路径是假设你处在当地构建目录——Slicer-superbuild目录中,但是,我们用启动Slicer替换这个路径。

利用模板创建的初始化模块

接下来,我们就可以开启脚本模块的编程之路。

1.2 理解脚本模块的结构

再编程之前,花一点时间浏览模板还是值得的。模板代码就300多行,其中大多数是引用,所以实际应用过程中只需要进行小小的改动就好了。其他部分需要彻底的更改,因为我们要实现从模板到实际功能的转变。
模板中类定义如下:
注意:使用ModuleWizard/ExtensionWizard之后,字符串“ScriptedLoadableModuleTemplate”会替换成“VolumeScroller”
  • https://github.com/Slicer/Slicer/blob/master/Extensions/Testing/ScriptedLoadableExtensionTemplate/ScriptedLoadableModuleTemplate/ScriptedLoadableModuleTemplate.py#L9-34 ScriptedLoadableModuleTemplate是我们定制模块元数据的地方。注意:我们的测试代码在这里初始化。传递parent给构造函数,而parent是SlicerScriptedLoadableModule的实例
  • ScriptedLoadableModuleTemplateWidget定义了模型的GUI。通过传递qSlicerScriptedLoadableModuleWidget的实例给构造函数(C++的钩子)
  • ScriptedLoadableModuleTemplateLogic就是一个辅助类,定义算法的应用和我们需要的其他辅助函数。按照惯例,这个类不应该引用任何GUI元素。
  • ScriptedLoadableModuleTemplateTest is a subclass ofa standard python unittest TestCase. Note that this class responds specially to methods whose names start with the string "test", so follow the pattern of the template when adding test functionality.

1.3 基本的开发周期

  • 通过Python控制台访问模块
作为一个学习的例子,让我们在运行时的环境中操纵我们的窗口部件。这是Slicer中Python脚本模块非常强大的特征。

首先,打开Python控制台:View->Python Interactor
在控制台中,我们访问下面对象:slicer.modules.VolumeScrollerWidget
这是我们窗口模块部件的实例。注意:控制台我们已经配置好,使用它我们可以访问接口的任何字段,甚至操纵这些字段。看着接口时,可以尝试下面代码:
b = slicer.modules.VolumeScrollerWidget.applyButton
b.enabled = True
b.down = True
b.down = False
b.clicked()

注意:“clicked()”如何触发“Run the Algorithm”消息?这是因为对于按钮而言,点击相当于一个信号signal,它连接着Python的一个调用,这是脚本模块的一部分。

  • 编辑/重新加载代码
1.重载和测试可折叠盒子
注意两个大按钮“Reload”和“Reload and Test"按键,在开发的过程中还是很有用的:

Reload:
  1. 移除当前模块GUI的实例
  2. 重载Python源代码
  3. 在先前的位置在创建一个GUI
  4. 更新slicer.modules.<moduleName>Widget,指向新的实例
Reload and Test:

  • 执行重新加载
  • 调用我们定义的测试代码
默认情况下,测试将会下载一个示例数据集并确认该数据集已经被加载。后面仍然会讨论测试的内容。

2.Reloading
https://na-mic.org/wiki/2013_Project_Week_Breakout_Session:Slicer4Python

1.4 完善的功能

此时,写代码实现我们想要的功能是一个简单的事。我们不需要一行一行地浏览代码,只需要在每一步更换block-by-block来测试功能。
  • 改善GUI
  • 改善Logic

2.Python脚本模块设计:超越基础

包括Widget的应用、Logic、MRML 类,使用MRML节点存储模型参数

3.Module Factory

加载模块分成许多步骤:
  • module factories 必须注册到 factorymanager中
  • 下载模块后的目录必须传递给factory manager
  • 将模块与场景和应用连接

4.MRML节点与模块之间的联系

模块可以与MRML节点进行关联,例如,这种关联关系允许模块编辑确定的MRML节点。模块既可以通过重写 qSlicerAbstractCoreModule::associatedNodeTypes()方法指定节点类型列表,也可以通过调用qSlicerCoreApplication::addModuleAssociatedNodeTypes()关联任何模块的任何节点。
多个模块可以与同一个MRML节点类型相关联。

3DSlicer15:Scripted Module相关推荐

  1. 问题:AttributeError: module 'tensorflow' has no attribute 'gfile'

    目录 问题 原因与解决方案 解决方案1 解决方案2 问题 运行如下代码 if not tf.gfile.exists(DATA_DIRECTORY):tf.gfile.makedirs(DATA_DI ...

  2. 解决错误:No module named ‘Cryptodome‘ 和错误rosbag.bag.ROSBagException: unsupported compression type: lz4

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 解决错误:No module named 'Cryptodome' 和错误rosbag.bag.ROSBagExcept ...

  3. 解决tensorflow报错:AttributeError: module ‘tensorflow.keras.backend‘ has no attribute ‘get_session‘ 问题

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 解决tensorflow报错:AttributeError: module 'tensorflow.keras.back ...

  4. 错误:AttributeError: module 'enum' has no attribute 'IntFlag'

    错误:AttributeError: module 'enum' has no attribute 'IntFlag' 文章目录: 一.错误原因 二.解决错误方法:[参考](https://stack ...

  5. Python3中提示:no module named 'wxpy'

    场景 本地安装了Python3并且也已经执行了pip install wxpy 但是程序运行时提示: no module named 'wxpy' 实现 wxpy官网: https://pypi.or ...

  6. (转)输入pipt提示:AttributeError: 'module' object has no attribute 'HTTPSConnection'

    文章转自:http://write.blog.csdn.net/postedit/51725016 1.测试 [root@s011805161450 ~]# python Python 2.7.8 ( ...

  7. GDCM:gdcm::Module的测试程序

    GDCM:gdcm::Module的测试程序 GDCM:gdcm::Module的测试程序 GDCM:gdcm::Module的测试程序 #include "gdcmModule.h&quo ...

  8. 已解决 问题ModuleNotFoundError: No module named ‘tensorflow.examples.tutorials‘

    已解决 问题ModuleNotFoundError: No module named 'tensorflow.examples.tutorials' 我是一名新手 想学习一下CNN 在网上找了一些py ...

  9. tensorflow2.0及以上版本在使用Session模块时报错:AttributeError: module ‘tensorflow‘ has no attribute ‘Session‘ 已解决

    tensorflow2.0版本及之后的版本在使用Session模块时报错:AttributeError: module 'tensorflow' has no attribute 'Session' ...

最新文章

  1. 用C语言解“二分法求多项式单根”题
  2. Windows XP中安装虚拟网卡microsoft loopback adapter
  3. CSS进阶(7)—— 内联元素的掌管者line-height和vertical-align(上)
  4. 【PP】重复生产参数文件说明
  5. vue全局引入openlayers_vue中使用OpenLayers(一):引入谷歌地图
  6. 看ADS如何治愈DDoS伤痛
  7. 三大应用需求:5G信道编码技术取得突破
  8. 真传x深度学习第二课:nvidia显卡驱动和cuda安装(小米13.3,显卡mx150)
  9. 21天Jmeter打卡Day20 响应断言,JSON断言
  10. java创建对象方法列表(转)
  11. 浅析DC/DC转换器未来市场的发展前景
  12. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员考试报名
  13. 文件内容批量简体转换繁体
  14. 老板面试怎么谈?千万不要走近误区。
  15. video视频,audio音频基础学习
  16. Gartner:细分分析如何提高销售预测的准确性?
  17. GUI学习之二十二——QRubberBand学习总结
  18. 戴尔服务器的作用是什么,戴尔 PowerEdge M910 管理功能强大
  19. wallpaper怎么导入视频_怎样制作Wallpaper Engine视频壁纸 制作视频壁纸方法图文教程...
  20. UIdemo 制作一个简单的iPhone相册

热门文章

  1. saiku、mondrian前奏之——立方体、维度、Schema的基本概念
  2. oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)
  3. Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
  4. XML 需要用的空间
  5. 一名普通程序员的自我诊断书
  6. hdu 2544最短路(Dijkstra)
  7. BestCoder Round #84
  8. hdu 1881(简单01背包)
  9. hdu 1565 方格取数(1)(状态压缩dp)
  10. fmt.Println、fmt.Printf、fmt.Sprintf、fmt.Sprintln