1.qSlicerIGSReaderModule.h

#ifndef __qSlicerIGSReaderModule_h
#define __qSlicerIGSReaderModule_h// SlicerQt includes
#include "qSlicerLoadableModule.h" //模板类#include "qSlicerIGSReaderModuleExport.h" //捕获Unix和Windows操作系统之间的差异class qSlicerIGSReaderModulePrivate; //声明了一个类,但是该类没有在头文件中定义/// \ingroup Slicer_QtModules_ExtensionTemplate
class Q_SLICER_QTMODULES_IGSREADER_EXPORT
qSlicerIGSReaderModule: public qSlicerLoadableModule
{Q_OBJECT
#ifdef Slicer_HAVE_QT5Q_PLUGIN_METADATA(IID "org.slicer.modules.loadable.qSlicerLoadableModule/1.0");
#endifQ_INTERFACES(qSlicerLoadableModule);public:typedef qSlicerLoadableModule Superclass;//类型重定义 方便使用explicit qSlicerIGSReaderModule(QObject *parent=0); //显式的构造函数virtual ~qSlicerIGSReaderModule();qSlicerGetTitleMacro(QTMODULE_TITLE);virtual QString helpText()const;virtual QString acknowledgementText()const;virtual QStringList contributors()const;virtual QIcon icon()const;virtual QStringList categories()const;virtual QStringList dependencies() const;protected:/// 初始化模块,实现三维数据读/写功能virtual void setup();/// 创建并返回与此模块相关的窗体表示virtual qSlicerAbstractModuleRepresentation * createWidgetRepresentation();/// 创建并返回与此模块相关的逻辑连接 virtual vtkMRMLAbstractLogic* createLogic();

protected:QScopedPointer<qSlicerIGSReaderModulePrivate> d_ptr;private:Q_DECLARE_PRIVATE(qSlicerIGSReaderModule);Q_DISABLE_COPY(qSlicerIGSReaderModule);};#endif
Notice
1.explicit qSlicerIGSReaderModule(QObject *parent=0);
explicit约束构造函数进行显式转换,避免默认的隐式转换,提高代码可理解性。
http://blog.csdn.net/shenziheng1/article/details/78026883
2.class Q_SLICER_QTMODULES_IGSREADER_EXPORT  qSlicerIGSReaderModule : public qSlicerLoadableModule {};
起初看到这样定义类有点懵,我们可以查看Q_SLICER_QTMODULES_IGSREADER_EXPORT ("qSlicerIGSReaderModuleExport.h"头文件中),有如下代码:
#if defined(qSlicerIGSReaderModule_EXPORTS)#define Q_SLICER_QTMODULES_IGSREADER_EXPORT __declspec( dllexport )
#else#define Q_SLICER_QTMODULES_IGSREADER_EXPORT __declspec( dllimport )

通过这一行我们可以了解到,其实就是定义了一个宏,该宏的作用是提供给外部应用程序或DLL使用,有点像extent的味道,但据说比extend的性能要好。

http://blog.csdn.net/clever101/article/details/5421782

2.qSlicerIGSReaderModule.cpp

// IGSReader Logic includes:逻辑功能
#include <vtkSlicerIGSReaderLogic.h>// IGSReader includes:总控与布局
#include "qSlicerIGSReaderModule.h"
#include "qSlicerIGSReaderModuleWidget.h"//-----------------------------------------------------------------------------
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))  //本项目使用的是qt-4.8.7就是比较低的版本
#include <QtPlugin> //Plug-in 机制
Q_EXPORT_PLUGIN2(qSlicerIGSReaderModule, qSlicerIGSReaderModule);
#endif//-----------------------------------------------------------------------------
/// \ingroup Slicer_QtModules_ExtensionTemplate
class qSlicerIGSReaderModulePrivate //头文件中声明的类,在此处定义、实现
{
public:qSlicerIGSReaderModulePrivate();
};//-----------------------------------------------------------------------------
// qSlicerIGSReaderModulePrivate methods//-----------------------------------------------------------------------------
qSlicerIGSReaderModulePrivate::qSlicerIGSReaderModulePrivate() //声明类构造函数
{
}//-----------------------------------------------------------------------------
// qSlicerIGSReaderModule methods 主类的方法//-----------------------------------------------------------------------------
qSlicerIGSReaderModule::qSlicerIGSReaderModule(QObject* _parent): Superclass(_parent), d_ptr(new qSlicerIGSReaderModulePrivate) //构造函数初始化
{
}
//-----------------------------------------------------------------------------
qSlicerIGSReaderModule::~qSlicerIGSReaderModule() //析构函数初始化
{
}
//-----------------------------------------------------------------------------
QString qSlicerIGSReaderModule::helpText() const
{return "This is a loadable module that can be bundled in an extension";
}
//-----------------------------------------------------------------------------
QString qSlicerIGSReaderModule::acknowledgementText() const
{return "This work was partially funded by NIH grant NXNNXXNNNNNN-NNXN";
}
//-----------------------------------------------------------------------------
QStringList qSlicerIGSReaderModule::contributors() const
{QStringList moduleContributors;moduleContributors << QString("John Doe (AnyWare Corp.)");return moduleContributors;
}
//-----------------------------------------------------------------------------
QIcon qSlicerIGSReaderModule::icon() const
{return QIcon(":/Icons/IGSReader.png");
}
//-----------------------------------------------------------------------------
QStringList qSlicerIGSReaderModule::categories() const
{return QStringList() << "Examples";
}
//-----------------------------------------------------------------------------
QStringList qSlicerIGSReaderModule::dependencies() const
{return QStringList();
}
//-----------------------------------------------------------------------------
void qSlicerIGSReaderModule::setup()
{this->Superclass::setup();
}
//-----------------------------------------------------------------------------
qSlicerAbstractModuleRepresentation* qSlicerIGSReaderModule
::createWidgetRepresentation() //创建窗体
{return new qSlicerIGSReaderModuleWidget;
}//-----------------------------------------------------------------------------
vtkMRMLAbstractLogic* qSlicerIGSReaderModule::createLogic() //创建并调用逻辑结构
{return vtkSlicerIGSReaderLogic::New(); //域名解析,类域为vtkSlicerIGSReaderLogic
}

Notice:成员函数被const修饰

如果一个成员函数不会修改数据成员,那么最好将其声明为const,因为const成员函数中不允许对数据成员进行修改,如果修改,编译器将报错,这大 大提高了程序的健壮性。 
http://blog.csdn.net/shenziheng1/article/details/78028327

3.主框架 qSlicerIGSReaderModuleWidget.h  qSlicerIGSReaderModuleWidget.cpp

#ifndef __qSlicerIGSReaderModuleWidget_h
#define __qSlicerIGSReaderModuleWidget_h
// SlicerQt includes:基类
#include "qSlicerAbstractModuleWidget.h"
#include "qSlicerIGSReaderModuleExport.h"
//类声明
class qSlicerIGSReaderModuleWidgetPrivate;
class vtkMRMLNode;/// \ingroup Slicer_QtModules_ExtensionTemplate
class Q_SLICER_QTMODULES_IGSREADER_EXPORT qSlicerIGSReaderModuleWidget :public qSlicerAbstractModuleWidget
{Q_OBJECTpublic:typedef qSlicerAbstractModuleWidget Superclass;qSlicerIGSReaderModuleWidget(QWidget *parent=0);virtual ~qSlicerIGSReaderModuleWidget();public slots://槽函数
protected:QScopedPointer<qSlicerIGSReaderModuleWidgetPrivate> d_ptr;virtual void setup();
private:Q_DECLARE_PRIVATE(qSlicerIGSReaderModuleWidget);Q_DISABLE_COPY(qSlicerIGSReaderModuleWidget);
};
#endif
// Qt includes
#include <QDebug>// SlicerQt includes
#include "qSlicerIGSReaderModuleWidget.h"
#include "ui_qSlicerIGSReaderModuleWidget.h"//加载主控面板
//-----------------------------------------------------------------------------
/// \ingroup Slicer_QtModules_ExtensionTemplate :类定义
class qSlicerIGSReaderModuleWidgetPrivate: public Ui_qSlicerIGSReaderModuleWidget //继承自主控面板
{
public:qSlicerIGSReaderModuleWidgetPrivate();
};
//-----------------------------------------------------------------------------
// qSlicerIGSReaderModuleWidgetPrivate methods:类方法//-----------------------------------------------------------------------------
qSlicerIGSReaderModuleWidgetPrivate::qSlicerIGSReaderModuleWidgetPrivate()
{
}
//-----------------------------------------------------------------------------
// qSlicerIGSReaderModuleWidget methods:主类的方法
//-----------------------------------------------------------------------------
qSlicerIGSReaderModuleWidget::qSlicerIGSReaderModuleWidget(QWidget* _parent): Superclass( _parent ), d_ptr( new qSlicerIGSReaderModuleWidgetPrivate ) //子类进行动态初始化
{
}
//-----------------------------------------------------------------------------
qSlicerIGSReaderModuleWidget::~qSlicerIGSReaderModuleWidget()
{
}
//-----------------------------------------------------------------------------
void qSlicerIGSReaderModuleWidget::setup()
{Q_D(qSlicerIGSReaderModuleWidget);d->setupUi(this);this->Superclass::setup();
}

Help & Ackowledgement利用Module主体进行设计;Display等窗体我们可以利用Qt自行设计。

Notice:
这里有一个问题啊???class vtkMRMLnode应该是一个相当主要的类了,但这个类是怎么定义以及使用的呢???

4.vtkSlicerIGSReaderModuleLogic

该项目与qSlicerIGSReaderModule项目(负责总控及主面板)、qSlicerIGSReaderModuleWidgets项目(负责其他独立的面板)一同构成了Module开发的主要项目集。其中,vtkSlicerIGSReaderModuleLogic负责3D操作的Slicer逻辑类管理,更具体的就是,该类管理3D视场中数据的读取、属性更改、保存等。
vtkSlicerIGSReaderLogic.h:

// .NAME vtkSlicerIGSReaderLogic - slicer logic class for volumes manipulation
// .SECTION Description
// This class manages the logic associated with reading, saving,
// and changing propertied of the volumes
#ifndef __vtkSlicerIGSReaderLogic_h
#define __vtkSlicerIGSReaderLogic_h
// Slicer includes
#include "vtkSlicerModuleLogic.h"
// MRML includes ????
// STD includes
#include <cstdlib>
#include "vtkSlicerIGSReaderModuleLogicExport.h"/// \ingroup Slicer_QtModules_ExtensionTemplate
class VTK_SLICER_IGSREADER_MODULE_LOGIC_EXPORT vtkSlicerIGSReaderLogic :public vtkSlicerModuleLogic
{
public:static vtkSlicerIGSReaderLogic *New();vtkTypeMacro(vtkSlicerIGSReaderLogic, vtkSlicerModuleLogic);void PrintSelf(ostream& os, vtkIndent indent);protected:vtkSlicerIGSReaderLogic();virtual ~vtkSlicerIGSReaderLogic();virtual void SetMRMLSceneInternal(vtkMRMLScene* newScene);///场景中注册MRML节点类. 当MRMLScene连接到这个逻辑类的时候,会自动被调用virtual void RegisterNodes();virtual void UpdateFromMRMLScene();virtual void OnMRMLSceneNodeAdded(vtkMRMLNode* node);virtual void OnMRMLSceneNodeRemoved(vtkMRMLNode* node);
private:vtkSlicerIGSReaderLogic(const vtkSlicerIGSReaderLogic&); // Not implementedvoid operator=(const vtkSlicerIGSReaderLogic&); // Not implemented
};
#endif

vtkSlicerIGSReaderLogic:

// IGSReader Logic includes
#include "vtkSlicerIGSReaderLogic.h"// MRML includes
#include <vtkMRMLScene.h>// VTK includes
#include <vtkIntArray.h>
#include <vtkNew.h>
#include <vtkObjectFactory.h>// STD includes
#include <cassert>
//----------------------------------------------------------------------------
vtkStandardNewMacro(vtkSlicerIGSReaderLogic);
//----------------------------------------------------------------------------
vtkSlicerIGSReaderLogic::vtkSlicerIGSReaderLogic() //构造函数
{
}
//----------------------------------------------------------------------------
vtkSlicerIGSReaderLogic::~vtkSlicerIGSReaderLogic() //析构函数
{
}
//----------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::PrintSelf(ostream& os, vtkIndent indent)
{this->Superclass::PrintSelf(os, indent);
}//---------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::SetMRMLSceneInternal(vtkMRMLScene * newScene) //场景设置
{vtkNew<vtkIntArray> events;events->InsertNextValue(vtkMRMLScene::NodeAddedEvent);events->InsertNextValue(vtkMRMLScene::NodeRemovedEvent);events->InsertNextValue(vtkMRMLScene::EndBatchProcessEvent);this->SetAndObserveMRMLSceneEventsInternal(newScene, events.GetPointer());
}//-----------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::RegisterNodes()
{assert(this->GetMRMLScene() != 0);
}
//---------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::UpdateFromMRMLScene()
{assert(this->GetMRMLScene() != 0);
}
//---------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::OnMRMLSceneNodeAdded(vtkMRMLNode* vtkNotUsed(node))
{
}
//---------------------------------------------------------------------------
void vtkSlicerIGSReaderLogic::OnMRMLSceneNodeRemoved(vtkMRMLNode* vtkNotUsed(node))
{
}

5.参考资料

《Slicer源码》

3DSlicer31:结构的实例分析IGSReader相关推荐

  1. 第02章 一个实例初识WorkBench分析流程-卡扣结构的动作分析

    第02章 一个实例初识WorkBench分析流程-卡扣结构的动作分析 1问题描述,关心的结果 2. 建模的介绍,模型改如何简化 3. 复杂特征的网格初步试划分 4. 网格再次的划分及调整 5. 材料的 ...

  2. Abaqus高级实例分析视频教程-材料 静力 结构优化分析教程

    Abaqus高级实例分析视频教程-材料 静力 结构优化分析教程 链接:https://pan.baidu.com/s/11ri8tIpbMWYvtTciQYK8Wg 提取码:i3qw

  3. 基于结构应力方法的焊接结构疲劳评估及实例分析(上篇)

    作者 | 裴宪军博士 ,仿真秀专栏作者 一.写在文前 焊接技术作为现代制造业中的支柱技术之一,由于其整体性强.轻量化.经济性好等优点,焊接结构被广泛应用于轨道交通.航空航天,船舶.重型装备等领域,安全 ...

  4. 基于结构应力方法的焊接结构疲劳评估及实例分析(下篇)

    作者 | 裴宪军 ,仿真秀专栏作者 一.写在文前 焊接技术作为现代制造业中的支柱技术之一,是制造强国的关键保障.由于其整体性强.轻量化.经济性好等优点,焊接结构被广泛应用于轨道交通.航空航天,船舶.重 ...

  5. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  6. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  7. RPC-原理及RPC实例分析

    还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...

  8. 马歇尔·赫伯特:人工智能的前沿技术与实例分析

    来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...

  9. Android10.0 Binder通信原理(四)-Native-C\C++实例分析

    摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

最新文章

  1. 【组合数学】指数生成函数 ( 证明指数生成函数求解多重集排列 )
  2. C++继承中父类和子类之间的赋值兼容
  3. svm涉及的一些概念
  4. 【牢骚】360,你怎么对待别人,别人就怎么对待你。
  5. Leet Code OJ 83. Remove Duplicates from Sorted List [Difficulty: Easy]
  6. Squared Permutation(线段树)
  7. 1071svm函数 r语言_R语言机器学习之核心包e1071 - 数据分析
  8. ES11新特性_动态import---JavaScript_ECMAScript_ES6-ES11新特性工作笔记065
  9. HDU1434 幸福列车【模拟+优先队列】
  10. 五大步骤快速搭建个人网站
  11. 第七届蓝桥杯省赛C/C++大学B组真题解析
  12. POJ 3641 Pseudoprime numbers (miller-rabin 素数判定)
  13. c语言printf()输出格式大全(转载)
  14. 概率统计及其应用第三章知识总结_高中数学130分,知识点最全总结,高分必看!...
  15. php今日头条抓取正文,今日头条文章爬虫采集 - 八爪鱼采集器
  16. chmod 777 到底是啥 ???看完这个你就完全懂了!
  17. python 千位分隔符_千位分隔符的完整攻略
  18. 突破软件测试的瓶颈(上)
  19. 【golang】golang使用cmd去ping网址在window和linux的区别
  20. dblp搜文献时各颜色含义

热门文章

  1. 精灵沿着正方形路线运动暂停2秒后然后再将自己放大4倍
  2. ECSHOP 模版文件里的编辑区域
  3. 安装目录opencv for android 教程(环境搭建篇)
  4. 通过组策略找回“网上邻居”
  5. NHibernate初学者指南(2):一个完整的例子
  6. Centos常用系统命令
  7. WindowsXP 下的pix模拟器出炉了!!!
  8. mysql数据库配置文件my.ini
  9. [算法] 举一反三之n重复数组中找唯一m重复异类数
  10. 程序组件通信方案集锦