zoukankan      html  css  js  c++  java
  • 3D Slicer Logics

    1.Logics综述

    Logic是算法的集合,主要处理场景中的MRML节点。
    Logic可以是:
    • Active(主动):观测场景和节点,当接收事件改变时进行响应
    • Passive(被动):实用函数的集合用来简化节点的处理
    • a mix of both:不理想...

    2.Logic的类型

    在Slicer中存在5种Logics。他们功能通常由他们的依赖库决定。不同Logic类型之间的继承关系可以方便我们去理解他们之间的关系。

    2.1 MRML Logics

    • 位置:Slicer/Libs/MRML/Logics
    • 依赖项:MRML core、no graphical dependency、no Slicer dependency
    • 功能:包含了逻辑基本类,如vtkMRMLAbstractLogic、vtkMRMLApplicationLogic,以及助手类;MRML Logics无法访问应用程序,所以不需要包含任何特定的Slicer代码
    • 示例:
      • factories:对于MRML节点,VTKMRMLColorLogic创建默认的vtkMRMLColor* Node
      • helpers:vtkMRMLModelHierarchyLogic

    2.2 Slicer Logic

    • 位置:Slicer/Base/Logics
    • 依赖项:MRML Logic
    • 功能:用于Slicer应用程序的特殊化的MRML Logic
    • 示例:vtkSlicerColorLogic了解应用程序默认的LUT IDs 和 自定义应用程序的LUT文件

    2.3 Application logic

    • 位置:Slicer/Libs/MRML/Logics/vtkMRMLApplicationLogic.[h|cxx] 和 Slicer/Base/Logics/vtkSlicerApplicationLogic.[h|cxx]
    • 依赖项:vtkMRMLApplicationLogic不依赖Slicer,但是vtkSlicerApplicationLogic依赖
    • 功能:包含了应用程序的特定信息。vtkMRMLApplicationLogic是一个使用MRML为应用程序专门设计的抽象类。vtkSlicerApplicationLogic是为Slicer专门设计的。
    vtk[MRML/Slicer]ApplicationLogic 并不是独立存在的,他们可以访问任何的Logic。 
    vtk[MRML/Slicer]ApplicationLogic 包含一个node/logic列表,这个在应用程序里是唯一的。

     2.4 Module Logic

    • 位置:Slicer/Modules/Loadable/XYZ/Logic/vtkSlicerXXXLogic
    • 依赖项:Slicer logics, XYZ nodes 和 可供选择的其他模块逻辑
    • 功能:模块逻辑就是模块的公共程序接口API。模块可以访问其他模块的Logic,例如 qSlicerCoreApplication::moduleManager()->module("Volumes")->logic())。每个模块中至多存在一个模块逻辑。然而,这并不影响模块逻辑使用帮助逻辑,例如:vtkSlicerModelsLogic可以初始化/使用 vtkMRMLModelHierarchyLogic

    2.5 Displayable Manager

    • 位置:Slicer/Libs/MRML/DisplayableManager
    • 依赖项:MRML Logic 和 vtkRendering
    • 功能:在VTK渲染器中呈现节点,并处理与视口的用户交互。

    3.总结

    一个类,如Logic、Widget,应该在他的API中显示说明所需要的逻辑。

    例如:qMRMLColorPickerwidget::setColorLogic(vtkMRMLColorLogic*)

    而不是通过直接使用应用程序逻辑隐藏这个需求:

    例如:this->GetApplicationLogic()->GetModelHierarchyLogic() 
    类实例器的作用是将需要的逻辑传递给创建的类,例如模块插件将模块逻辑传递给模块部件。对于依赖其他模块逻辑而言的模块逻辑,通过函数qSlicer*Module::setup()可以解决。qSlicer*Modules可以访问所有的模块和他们的逻辑,例如qSlicerCoreApplication::moduleManager()->module("Volumes")->logic()。在API中显示所需要的逻辑可以使得代码更具有模块化,也更容易测试。
  • 相关阅读:
    <<Rust程序设计语言>>个人版(4: 所有权)
    《逻辑学入门》笔记(45-66)
    《逻辑学入门》笔记(23-44)
    <<Rust程序设计语言>>个人版(3.3: 函数/3.4: 注释/3.5: 控制流)
    <<Rust程序设计语言>>个人版(1: 入门/2: 编写猜谜游戏)
    网站如何保护用户的密码
    在 Gin 项目中使用 WebSocket
    《逻辑学入门》笔记(1-22)
    浅谈双重认证逻辑
    某大型网络安全活动中遇到的钓鱼邮件
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14235447.html
Copyright © 2011-2022 走看看