#include "ct.h"
#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkDICOMImageReader.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkTextProperty.h>
#include <vtkTextMapper.h>
#include <vtkCommand.h>
#include <vtkImageMapper.h>
#include "ReadDICOMSeries.h"
#include <QFileDialog.h>
#include <QDockWidget>
#include <QListWidget>
#include <QDockWidget>
#include <QStatusBar>
#include <QLabel>
#include <QDebug>
#include "ui_ct.h"
#pragma execution_character_set("utf-8")//显示中文
ct::ct(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
this->setWindowTitle("肺部三维重建");
ui.statusBar->setSizeGripEnabled(false);//去掉状态栏右下角的三角
////浮动窗口
QDockWidget *dockList = new QDockWidget(this);
addDockWidget(Qt::LeftDockWidgetArea, dockList);
QListWidget *listWidget = new QListWidget(this);
dockList->setWidget(listWidget);
////状态栏
//QStatusBar *sBar = statusBar();
//QLabel *label = new QLabel(this);
//sBar->addWidget(label);
//label->setText("大是大非 "+QString::number(a)); //imageViewer_1->GetSlice()
}
void ct::on_actionOpen_triggered()
{
//读取文件夹目录
QString fileName = QFileDialog::getExistingDirectory(this, "请选择文件夹","/");
if (fileName.isEmpty())
{
return;
}
QByteArray ba = fileName.toLocal8Bit();
const char *fileName_str = ba.data();// 支持带中文路径的读取
std::string folder = fileName.toStdString();//打开文件
vtkSmartPointer<vtkDICOMImageReader> reader =
vtkSmartPointer<vtkDICOMImageReader>::New();//创建读取图片的对象
reader->SetDirectoryName(folder.c_str());//获取该文件夹下的图片
reader->Update();
vtkSmartPointer<vtkImageViewer2> imageViewer_1 = vtkSmartPointer<vtkImageViewer2>::New();
vtkSmartPointer<vtkImageViewer2> imageViewer_2 = vtkSmartPointer<vtkImageViewer2>::New();
vtkSmartPointer<vtkImageViewer2> imageViewer_3 = vtkSmartPointer<vtkImageViewer2>::New();
imageViewer_1->SetInputConnection(reader->GetOutputPort());//将读取的图像显示出来
imageViewer_1->SetRenderWindow(ui.qvtk_1->GetRenderWindow());
imageViewer_1->SetSliceOrientationToXY();
imageViewer_1->SetSlice((int)imageViewer_1->GetSliceMax()*0.5);//将图片定位到中间图片
imageViewer_2->SetInputConnection(reader->GetOutputPort());//将读取的图像显示出来
imageViewer_2->SetRenderWindow(ui.qvtk_2->GetRenderWindow());
imageViewer_2->SetSliceOrientationToYZ();
imageViewer_2->SetSlice((int)imageViewer_2->GetSliceMax()*0.5);//将图片定位到中间图片
imageViewer_3->SetInputConnection(reader->GetOutputPort());//将读取的图像显示出来
imageViewer_3->SetRenderWindow(ui.qvtk_3->GetRenderWindow());
imageViewer_3->SetSliceOrientationToXZ();
imageViewer_3->SetSlice((int)imageViewer_3->GetSliceMax()*0.5);//将图片定位到中间图片
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor_1 = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor_2 = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor_3 = vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<myVtkInteractorStyleImage> myInteractorStyle_1 = vtkSmartPointer<myVtkInteractorStyleImage>::New();
vtkSmartPointer<myVtkInteractorStyleImage> myInteractorStyle_2 = vtkSmartPointer<myVtkInteractorStyleImage>::New();
vtkSmartPointer<myVtkInteractorStyleImage> myInteractorStyle_3 = vtkSmartPointer<myVtkInteractorStyleImage>::New();
myInteractorStyle_1->SetImageViewer(imageViewer_1);
myInteractorStyle_2->SetImageViewer(imageViewer_2);
myInteractorStyle_3->SetImageViewer(imageViewer_3);
imageViewer_1->SetupInteractor(renderWindowInteractor_1);
imageViewer_2->SetupInteractor(renderWindowInteractor_2);
imageViewer_3->SetupInteractor(renderWindowInteractor_3);
renderWindowInteractor_1->SetInteractorStyle(myInteractorStyle_1);
renderWindowInteractor_2->SetInteractorStyle(myInteractorStyle_2);
renderWindowInteractor_3->SetInteractorStyle(myInteractorStyle_3);
imageViewer_1->GetRenderer()->SetBackground(0.0, 0.0, 0.0);
imageViewer_1->Render();
imageViewer_1->GetRenderer()->ResetCamera();
imageViewer_1->Render();
imageViewer_2->GetRenderer()->SetBackground(0.0, 0.0, 0.0);
imageViewer_2->Render();
imageViewer_2->GetRenderer()->ResetCamera();
imageViewer_2->Render();
imageViewer_3->GetRenderer()->SetBackground(0.0, 0.0, 0.0);
imageViewer_3->Render();
imageViewer_3->GetRenderer()->ResetCamera();
imageViewer_3->Render();
renderWindowInteractor_1->Initialize();
renderWindowInteractor_2->Initialize();
renderWindowInteractor_3->Initialize();
renderWindowInteractor_1->Start();
renderWindowInteractor_2->Start();
renderWindowInteractor_3->Start();
}
void ct::on_action3D_triggered()
{
}
void myVtkInteractorStyleImage::SetImageViewer(vtkImageViewer2* imageViewer) {//定位图片位置
_ImageViewer = imageViewer;
_MinSlice = imageViewer->GetSliceMin();
_MaxSlice = imageViewer->GetSliceMax();
_NowSlice = imageViewer->GetSlice();
_Slice = _NowSlice;
}
void myVtkInteractorStyleImage::MoveSliceForward() {
if (_Slice < _MaxSlice) {
_Slice += 1;
_ImageViewer->SetSlice(_Slice);
_ImageViewer->Render();
}
}
void myVtkInteractorStyleImage::MoveSliceBackward() {
if (_Slice > _MinSlice) {
_Slice -= 1;
_ImageViewer->SetSlice(_Slice);
_ImageViewer->Render();
}
}
void myVtkInteractorStyleImage::OnKeyDown() {
std::string key = this->GetInteractor()->GetKeySym();
if (key.compare("Up") == 0) {
MoveSliceForward();
}
else if (key.compare("Down") == 0) {
MoveSliceBackward();
}
vtkInteractorStyleImage::OnKeyDown();
}
void myVtkInteractorStyleImage::OnMouseWheelForward() {
MoveSliceForward();
}
void myVtkInteractorStyleImage::OnMouseWheelBackward() {
if (_Slice > _MinSlice) {
MoveSliceBackward();
}
}
void ct::on_actionQuit_triggered()
{
qApp->quit();
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ct.zip (63个子文件)
.vs
ct
v14
.suo 36KB
ct.VC.VC.opendb 20B
ct.sln 926B
x64
Release
Debug
ct.exe 160KB
ct.ilk 1.72MB
ct.pdb 3.06MB
Debug
ct
ct.h 315B
ct.qrc 62B
Resources
ct.cpp 6KB
ct.ui 2KB
x64
Release
ct.tlog
CL.write.1.tlog 800B
CL.read.1.tlog 128B
uic.read.1u.tlog 88B
ct.write.1u.tlog 432B
unsuccessfulbuild 0B
CL.command.1.tlog 4KB
moc.write.1u.tlog 230B
rcc.write.1u.tlog 218B
ct.lastbuildstate 198B
rcc.read.1u.tlog 90B
uic.write.1u.tlog 210B
moc.read.1u.tlog 86B
qrc_ct.obj 2KB
qt_work.log 674B
ct.log 542B
Debug
vc140.pdb 2.31MB
qt.log 657B
ct.tlog
CL.write.1.tlog 3KB
CL.read.1.tlog 116KB
QtRcc.read.1u.tlog 90B
uic.read.1u.tlog 88B
QtUic.write.1u.tlog 210B
ct.write.1u.tlog 30KB
QtUic.read.1u.tlog 88B
CL.command.1.tlog 5KB
moc.write.1u.tlog 226B
rcc.write.1u.tlog 218B
QtMoc.read.1u.tlog 86B
link.write.1.tlog 742B
link.command.1.tlog 12KB
link.read.1.tlog 19KB
ct.lastbuildstate 196B
QtRcc.write.1u.tlog 218B
QtMoc.write.1u.tlog 226B
rcc.read.1u.tlog 90B
uic.write.1u.tlog 210B
moc.read.1u.tlog 86B
main.obj 110KB
moc_ct.obj 102KB
qrc_ct.obj 6KB
ct.obj 440KB
qt_work.log 1KB
ct.log 158B
ReadDICOMSeries.h 1KB
main.cpp 421B
GeneratedFiles
Release
moc_ct.cpp 4KB
ui_ct.h 4KB
qrc_ct.cpp 1KB
Debug
moc_ct.cpp 4KB
ct.vcxproj 13KB
ct.vcxproj.filters 2KB
ct.vcxproj.user 633B
ct.VC.db 36.65MB
共 63 条
- 1
资源评论
- yuhuicemoon2020-08-21可以,有一定的参考价值
- aoeiuv01142019-08-22找不到了,再下一次
鸣珂锵玉
- 粉丝: 1262
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- python-leetcode面试题解之第157题用Read4读取N个字符-题解.zip
- python-leetcode面试题解之第156题上下翻转二叉树-题解.zip
- python-leetcode面试题解之第155题最小栈-题解.zip
- python-leetcode面试题解之第153题寻找旋转排序数组中的最小值-题解.zip
- python-leetcode面试题解之第152题乘积最大子数组-题解.zip
- python-leetcode面试题解之第151题反转字符串中的单词-题解.zip
- python-leetcode面试题解之第150题逆波兰表达式求值-题解.zip
- python-leetcode面试题解之第149题直线上最多的点数-题解.zip
- python-leetcode面试题解之第148题排序链表-题解.zip
- python-leetcode面试题解之第147题对链表进行插入排序-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功