Simple MPR and slice orientation features

This commit is contained in:
Krad
2022-04-02 16:12:14 +08:00
parent 6e94408288
commit b88efa3b25
6 changed files with 48 additions and 8 deletions

View File

@@ -216,6 +216,10 @@ void QDicomViewer::createToolButton()
this->SetupMaximizeTool(btnmaximize); this->SetupMaximizeTool(btnmaximize);
this->SetupMinimizeTool(btnminimize); this->SetupMinimizeTool(btnminimize);
this->SetupCloseTool(btnclose); this->SetupCloseTool(btnclose);
connect(btnMPR,&QToolButton::clicked,[=](){
ui->viewContainer->SetCurrentViewSliceOrientation((ui->viewContainer->GetCurrentViewSliceOrientation()+1)%3);
});
} }
void QDicomViewer::SetupFullScreenTool(QToolButton* btnfullscreen) void QDicomViewer::SetupFullScreenTool(QToolButton* btnfullscreen)

View File

@@ -45,6 +45,7 @@ void infinitiViewer::SetFusionInputData(vtkImageData* data)
if (!this->FusionMapper) { if (!this->FusionMapper) {
this->FusionMapper = vtkImageSliceMapper::New(); this->FusionMapper = vtkImageSliceMapper::New();
this->FusionMapper->SliceAtFocalPointOn(); this->FusionMapper->SliceAtFocalPointOn();
this->FusionMapper->SliceFacesCameraOn();
FusionMapper->SetInputData(data); FusionMapper->SetInputData(data);
this->FusionActor = vtkImageSlice::New(); this->FusionActor = vtkImageSlice::New();
FusionActor->SetPickable(false); FusionActor->SetPickable(false);
@@ -304,6 +305,8 @@ infinitiViewer::infinitiViewer()
this->ImageActor = vtkImageSlice::New(); this->ImageActor = vtkImageSlice::New();
this->ImageMapper = vtkImageSliceMapper::New(); this->ImageMapper = vtkImageSliceMapper::New();
this->ImageMapper->SliceAtFocalPointOn(); this->ImageMapper->SliceAtFocalPointOn();
this->ImageMapper->SliceFacesCameraOn();
this->ImageActor->SetMapper(this->ImageMapper); this->ImageActor->SetMapper(this->ImageMapper);
this->FusionActor = nullptr; this->FusionActor = nullptr;
this->FusionMapper = nullptr; this->FusionMapper = nullptr;
@@ -657,8 +660,10 @@ void infinitiViewer::SetSliceOrientation(int orientation)
this->Renderer->ResetCamera(); this->Renderer->ResetCamera();
this->Renderer->GetActiveCamera()->SetParallelScale(scale); this->Renderer->GetActiveCamera()->SetParallelScale(scale);
} }
// first render to update imageMapper slice
this->Render(); this->Render();
//use SetSlice as second render the first image
SetSlice(0);
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@@ -679,7 +684,7 @@ void infinitiViewer::UpdateOrientation()
case infinitiViewer::SLICE_ORIENTATION_XZ: case infinitiViewer::SLICE_ORIENTATION_XZ:
cam->SetFocalPoint(0, 0, 0); cam->SetFocalPoint(0, 0, 0);
cam->SetPosition(0, -1, 0); // 1 if medical ? cam->SetPosition(0, 1, 0); // 1 if medical ?
cam->SetViewUp(0, 0, 1); cam->SetViewUp(0, 0, 1);
break; break;

View File

@@ -1,4 +1,4 @@
#include "view/dicomimageview.h" #include "view/dicomimageview.h"
#include <QMessageBox> #include <QMessageBox>
#include <QDebug> #include <QDebug>
#include <QMimeData> #include <QMimeData>
@@ -562,8 +562,10 @@ void DicomImageView::SetPanOffset(double * pan)
} }
} }
//FIXME:这个函数有问题,会导致MPR显示出错
void DicomImageView::ResetPanZoom() void DicomImageView::ResetPanZoom()
{ {
return;
if (HasSeries()) if (HasSeries())
{ {
//necessary to reset pan //necessary to reset pan
@@ -667,7 +669,7 @@ void DicomImageView::Rotate(double angle, TransFormType operation)
//slcing is related with rotation, you have to recalculate to get it right //slcing is related with rotation, you have to recalculate to get it right
_ImageViewer->GetRenderer()->ResetCameraClippingRange(); _ImageViewer->GetRenderer()->ResetCameraClippingRange();
_ImageViewer->SetSlice(slice); _ImageViewer->SetSlice(slice);
_ImageViewer->GetRenderWindow()->Render(); // _ImageViewer->GetRenderWindow()->Render();
emit Signal_Transformation(operation); emit Signal_Transformation(operation);
} }
@@ -828,3 +830,18 @@ void DicomImageView::removeViewWithMeasure()
_ImageViewer->UnActiveMeasure(); _ImageViewer->UnActiveMeasure();
_ImageViewer->DeleteCurrentSeriesMeasure(); _ImageViewer->DeleteCurrentSeriesMeasure();
} }
void DicomImageView::SetSliceOrientation(int orientation) {
slice_orientation = orientation;
_ImageViewer->SetSliceOrientation(orientation);
int max = 0;
int min = 0;
_ImageViewer->GetSliceRange(min, max);
_scrollBar->setValue(min);
_scrollBar->setMaximum(max);
_scrollBar->setValue(0);
}
int DicomImageView::GetSliceOrientation() {
return slice_orientation;
}

View File

@@ -1,4 +1,4 @@
#pragma once #pragma once
#include <QFrame> #include <QFrame>
#include <QOpenGLWidget> #include <QOpenGLWidget>
#include "ClickableScrollBar.h" #include "ClickableScrollBar.h"
@@ -124,6 +124,8 @@ public:
//Negative //Negative
void ToggleNegativeMode(); void ToggleNegativeMode();
void SetSliceOrientation(int orientation);
int GetSliceOrientation();
signals: signals:
/** /**
@@ -227,6 +229,7 @@ private:
int _SliceStep =0; int _SliceStep =0;
int _PrevSlice =0; int _PrevSlice =0;
int _ScrollTriggerType = scrollScope::TriggerType::USER_TRIGGER; int _ScrollTriggerType = scrollScope::TriggerType::USER_TRIGGER;
int slice_orientation = 2;
bool isCine = false; bool isCine = false;
bool isNegative = false; bool isNegative = false;

View File

@@ -1,4 +1,4 @@
#include "viewcontainerwidget.h" #include "viewcontainerwidget.h"
#include "thumbnailImage.h" #include "thumbnailImage.h"
#include "DicomLoader.h" #include "DicomLoader.h"
#include <QWidget> #include <QWidget>
@@ -434,3 +434,11 @@ void ViewContainerWidget::activeMeasure() {
}, nullptr, nullptr, ImageViewManager::All); }, nullptr, nullptr, ImageViewManager::All);
} }
void ViewContainerWidget::SetCurrentViewSliceOrientation(int type) {
manager.getCurrentView()->SetSliceOrientation(type);
}
int ViewContainerWidget::GetCurrentViewSliceOrientation() {
return manager.getCurrentView()->GetSliceOrientation();;
}

View File

@@ -43,6 +43,9 @@ public:
void removeCurrentViewWithFusion(); void removeCurrentViewWithFusion();
void SetInteractionMode(int InteractionMode); void SetInteractionMode(int InteractionMode);
void SetCurrentViewSliceOrientation(int orientation);
int GetCurrentViewSliceOrientation();
signals: signals:
void Signal_NotifyThumbnail(DicomImageView *view); void Signal_NotifyThumbnail(DicomImageView *view);