• 3D Slicer FAQ-1


    1.Core Feature 应该采用C++还是Python进行开发?

    这并没有统一的答案,因为Slicer应用各种语言和技术进行开发。
    • MRML和大多数逻辑操作符是采用c++开发的,如VTK子类
    • 应用和大多数的界面是采用C++开发的,如QWidget子类
    • 很多和C++捆绑在一起的重要模块,如LabelStatistics/ExtensionWizard,采用Python脚本开发;另外一些,如Editor、DICOM、DataProbe,是采用C++和Python混合开发的
    • 其他的一些核心特征,如Charts、SceneViews、ExtensionManager等,依赖于JavaScript和网络技术进行开发

    2.组建 Building

    2.1 Slicer building tree 是如何组织的?

    Slicer building tree 有两个层次:
    • ~/Projects/Slicer-SuperBuild:管理所有的依赖模块,如VTK,ITK,Python...
    • ~/Projects/Slicer-SuperBuild/Slicer-build:组建目录
    Slicer的目录结构请参看:https://www.slicer.org/wiki/Documentation/Nightly/Developers/DirectoryStructure
    该目录结构包括Slicer本体(Building tree;Install tree)、拓展安装与组建树、API

    2.2 什么是Clean Building?

    将Slicer目录作为顶层文件;例如:
    C:/Projects/Slicer-SuperBuilding

    2.3 如果VS编译器崩溃了怎么办?

    如果VS编译器崩溃了,并报错 "Microsoft C/C++ Compiler Driver has stopped working", 最有可能的原因是路径名字太长了。因此在组建Slicer工程时,强烈建议将其放在最顶层,如2.2.

    2.4 Qt4>=4.85需要Ubuntu12.04以上的版本?

    https://issues.slicer.org/view.php?id=3325

    2.5 为什么分布式的CMake必能不用在Ubuntu12.04以上的版本?

    http://slicer-devel-archive.65872.n3.nabble.com/PYTHON-INCLUDE-DIR2-when-building-Slicer4-td4028557.html
    https://issues.slicer.org/view.php?id=3103
    https://issues.slicer.org/view.php?id=3116#c8649
    http://public.kitware.com/Bug/view.php?id=14156

    2.6 Windows上配置、组建Slicer?

    https://www.slicer.org/wiki/Documentation/Nightly/Developers/Build_Instructions#Windows
     

    3.Python Scripting

    3.1 如何从Python脚本访问一个Python脚本化模块?

    所有的Slicer模块都在slicer.modules命名空间下,例如,如果我想访问sampledata模块可以采用如下方式:
    slicer.modules.sampledata.
    如果想访问模块的窗口小部件,使用widgetRepresentations()获得C++基础类 & 使用self()获得Python类。例如,slicer.modules.sampledata.widgetRepresentation().self()返回该模块下的一个PythonWidget对象。

    3.2 如何利用Python保存一幅图像/体数据?

    slicer.util模块提供了保存一个节点saveNote或者整个场景saveScene的方法:
    更多细节可以参考如下两篇材料:
    https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/util.py#L229-267
    https://github.com/Slicer/Slicer/blob/master/Base/Python/slicer/tests/test_slicer_util_save.py

    3.3 在保存体数据时,如何实现压缩和禁止压缩?

    在Slicer Python Modules中,使用VTKMRMLVolumeNode可以操作体数据。‘压缩’等偏好会被传递到slicer.util.saveNode函数。这个属性将会被传递到Slicer保存的Node里面。压缩示例如下所示:
    • properties['useCompression'] = 0; #不采用压缩
    • file-path = os.path.join(cast_dir,file_name)
    • slicer.util.saveNode(node,file_path,properties)

    3.4 如何向Slicer的一个场景视图中分配一个体数据Volume?

    以MRHead体数据为例,操作如下:
    • red_logic = slicer.app.layoutManager().slicerWidget("Red").slicerLogic()
    • red_cn = red_logic.GetSlicerCompositeNode()
    • red_logic.GetSliceCompositeNode().SetBackgroundVolumeID(slicer.util.getNode('MRHead').GetID)
    可以参考如下资料:
    http://slicer-devel-archive.65872.n3.nabble.com/Assign-volumes-to-views-tt4028694.html

    3.5 如何在3DSlicer的视图中访问VTKRender?

    renderer = slicer.app.layoutManager().threeDWidget(0).threeDView().renderWindow().
    GetRenderers().GetFirstRenderer()

    3.6 如何获得VTK rendering的后端?

    backend = slicer.app.layoutManager().threeDWidget(0).threeDView(). renderWindow().
    GetRenderingBackend()

    3.7 如何在场景中使三维视图居中?

    • ayoutManager = slicer.app.layoutManager()
    • threeDWidget = layoutManager.threeDWidget(0)
    • threeDView = threeDWidget.threeDView()
    • threeDView.resetFocalPoint()

    3.8 如何隐藏一个变换?

    • n = getNode('Bone')
    • logic = slicer.vtkSlicerTransformLogic()
    • logic.hardenTransform(n)
    参看资料详见:
    http://slicer-devel-archive.65872.n3.nabble.com/Scripting-hardened-transforms-tt4029456.html

    3.9 我在哪里可以找到一个示例的脚本?

    所有的脚本文档都在如下:
    https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository

    3.10 我如何使用一个可视化的调试器进行单步调试?

    在Windows系统,PTVS(Python Tool for Visual Studio,https://github.com/Microsoft/PTVS )支持在VS环境下调试Python代码。至于具体的调试细节以及调试方法,可以参看如下:
    https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/Debugging_Python_in_Visual_Studio
  • 相关阅读:
    [每日一讲] Python系列:浅拷贝与深拷贝
    [每日一讲] Python系列:变量、内存管理与传递
    [每日一讲] Python系列:字典
    [每日一讲] Python系列:列表与元组
    [已开源/文章教程]独立开发 一个社交 APP 的源码/架构分享 (已上架)
    从选择到上传,可能是最贴心的高仿朋友圈编辑了
    完整的社交app源码android+laravel
    基于Laravel+Swoole开发智能家居后端
    APP架子迁移指南(三)
    Laravel如何优雅的使用Swoole
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14235282.html
Copyright © 2020-2023  润新知