VTK+Qt读取mhd文件 可以进行四视图显示,并且拖动平面可以动态显示
在窗口cpp文件的源代码:
#include “vtkmainwindow.h”
#include “ui_vtkmainwindow.h”
//VTK
#include “vtkSmartPointer.h”
#include “vtkXMLPolyDataReader.h”
#include “vtkPolyDataMapper.h”
#include “vtkActor.h”
#include “vtkRenderer.h”
#include “vtkRenderWindow.h”
#include “vtkRenderWindowInteractor.h”
#include “vtkInteractorStyle.h”
#include <vtkInteractorStyleTrackballCamera.h>
#include “vtkMetaImageReader.h”
#include “vtkImageCast.h”
//#include “vtkVolumeRayCastCompositeFunction.h”
#include “vtkGPUVolumeRayCastMapper.h”
#include “vtkFixedPointVolumeRayCastMapper.h”
#include “vtkVolumeProperty.h”
#include “vtkPiecewiseFunction.h”
#include “vtkColorTransferFunction.h”
#include “vtkVolume.h”
#include “vtkProperty.h”
#include <vtkImageData.h>
#include <vtkTransform.h>
#include <vtkLinearTransform.h>
#include <vtkMatrix4x4.h>
#include <vtkImageReslice.h>
#include <vtkImageActor.h>
#include <vtkInteractorStyleImage.h>
#include <vtkPlane.h>
#include <vtkImagePlaneWidget.h>
#include <vtkCommand.h>
#include <vtkCamera.h>
#include <vtkWidgetEventTranslator.h>
#include <vtkcutter.h>
#include <vtkImageData.h>
//Qt
#include
#include
#include <QVTKWidget.h>
#include <QFileInfo.h>
#include
#include <qtimer.h>
#include <qevent.h>
//C++
#define _USE_MATH_DEFINES
#include <math.h>
#include
#define VTP_FILETYPE 1
#define MHAORMHD_FILETYPE 2
#define MHD_FILETYPE 2
double m_RedColor[3] = { 1.0, 0.0, 0.0 };
double m_GreenColor[3] = { 0.0, 1.0, 0.0 };
double m_BlueColor[3] = { 0.0, 0.0, 1.0 };
int m_Extent[6] = { 0, 0, 0, 0, 0, 0 };//图像的范围
double m_Spacing[3] = { 0, 0, 0 };//像素间距
double m_Origen[3] = { 0, 0, 0 };//原点
double m_Center[3] = { 0, 0, 0 };//图像的中心位置
int VolumeExtent[6] = { 0, 0, 0, 0, 0, 0 };
class vtkPlaneCallback : public vtkCommand
{
public:
vtkPlaneCallback() {}
~vtkPlaneCallback(){}
static vtkPlaneCallback *New()
{
return new vtkPlaneCallback;
}
void SetImageReslice(std::vector<vtkSmartPointer<vtkImageReslice> > reslice)
{
this->m_vCbReslice = reslice;
}
void SetPlaneWidget(std::vector<vtkSmartPointer<vtkImagePlaneWidget> > planeZ)
{
this->m_vCbPlaneWidget = planeZ;
}
void SetInteractor(std::vector<vtkSmartPointer<vtkRenderWindowInteractor> > interactor)
{
this->m_vInteractor = interactor;
}
void SetPlane(std::vector<vtkSmartPointer<vtkPlane> > plane)
{
this->m_vCbPlane = plane;
}
void SetvtpPolydata(std::vector<vtkSmartPointer<vtkPolyData> > vtpPolyData)
{
this->m_vCbPolyData = vtpPolyData;
}
void SetActor(std::vector<vtkSmartPointer<vtkActor> > cutterActor)
{
this->m_vCbCutterActor = cutterActor;
}
void SetRenderer(std::vector<vtkSmartPointer<vtkRenderer> > imageRenderer)
{
this->m_vCbImageRenderer = imageRenderer;
}
void SetQvtkWidget(std::vector <QVTKWidget* > qvtkwidget)
{
this->m_vCbQvtkWidget = qvtkwidget;
}
void Execute(vtkObject *caller, unsigned long vtkNotUsed(event), void *callData) VTK_OVERRIDE
{
for (int i = 0; i < m_vCbPlaneWidget.size(); ++i)
{
m_vCbReslice[i]->SetResliceAxesOrigin(m_vCbPlaneWidget[i]->GetCenter());//获取切片轴心
m_vCbReslice[i]->Update();//缺少该句qvtkwidget将不能动态显示
//m_vCbPlane[i]->GetOrigin(m_vCbPlaneWidget[i]->GetOrigin());
//m_vCbPlane[i]->GetNormal(m_vCbPlaneWidget[i]->GetNormal());
//m_vInteractor[i]->Render();
//------------------------------------------------------------------------------------------------
vtkSmartPointer <vtkPlane> plane = vtkSmartPointer <vtkPlane>::New();
plane->SetOrigin(m_vCbPlaneWidget[i]->GetOrigin());
plane->SetNormal(m_vCbPlaneWidget[i]->GetNormal());
for (int j = 0; j < m_vCbPolyData.size(); ++j)
{
vtkSmartPointer<vtkCutter> cutter = vtkSmartPointer<vtkCutter>::New();
cutter->SetCutFunction(plane);
cutter->SetInputData(m_vCbPolyData[j]);
cutter->Update();
vtkSmartPointer<vtkPolyDataMapper> cutterMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
cutterMapper->SetInputConnection(cutter->GetOutputPort());
cutterMapper->Update();
m_vCbCutterActor[i * m_vCbPolyData.size() + j]->SetMapper(cutterMapper);
vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
if (m_vCbPlaneWidget[i]->GetNormal()[2] == 1)
{
transform->Translate(m_vCbPlaneWi