3DSlicer31:结构的实例分析IGSReader
来源:互联网 发布:桌面定时器软件 编辑:程序博客网 时间:2024/05/29 18:50
1.qSlicerIGSReaderModule.h
#ifndef __qSlicerIGSReaderModule_h#define __qSlicerIGSReaderModule_h// SlicerQt includes#include "qSlicerLoadableModule.h" //模板类#include "qSlicerIGSReaderModuleExport.h" //捕获Unix和Windows操作系统之间的差异class qSlicerIGSReaderModulePrivate; //声明了一个类,但是该类没有在头文件中定义/// \ingroup Slicer_QtModules_ExtensionTemplateclass Q_SLICER_QTMODULES_IGSREADER_EXPORTqSlicerIGSReaderModule : public qSlicerLoadableModule{ Q_OBJECT#ifdef Slicer_HAVE_QT5 Q_PLUGIN_METADATA(IID "org.slicer.modules.loadable.qSlicerLoadableModule/1.0");#endif Q_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/780268832.classQ_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_ExtensionTemplateclass 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_ExtensionTemplateclass 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_ExtensionTemplateclass 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 implemented void operator=(const vtkSlicerIGSReaderLogic&); // Not implemented};#endifvtkSlicerIGSReaderLogic:// 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源码》
阅读全文
0 0
- 3DSlicer31:结构的实例分析IGSReader
- 实例分析Java Class的文件结构
- 实例分析Java Class的文件结构
- 实例分析 Java Class 的文件结构
- 实例分析Java Class的文件结构
- 实例分析Java Class的文件结构
- 实例分析Java Class的文件结构
- 实例分析Java Class的文件结构
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 分支结构的实例
- Java 类文件结构实例分析
- 基于结构;基于对象;面向对象;基于接口四种C++编程思想的实例分析
- 黑马程序员一java中内部类的结构分析实例
- 分析rwlock的结构
- 嵌入式系统基础及知识及接口技术总结
- 模板
- JavaScript: 使用typeof和instanceof操作符检测数值类型和引用类型变量
- centos6.x新增用户
- 灰度图像--形态学处理(腐蚀,膨胀,开、闭运算,顶帽(礼帽),低帽(黒帽),测定腐蚀、测地膨胀,形态学重建)
- 3DSlicer31:结构的实例分析IGSReader
- 协议森林
- c 语言之fork() 函数用法
- 张成的日常问题整理(新)
- ROS学习基础例子出现的问题(上)
- Android 中Freelien插件使用
- 你去面试,需要准备什么知识点?
- Android录像后在手机文件夹不显示问题的解决办法
- ERR_UNSAFE_PORT