Refactor dicomimageview. 3

This commit is contained in:
Krad
2022-07-01 17:40:22 +08:00
parent 8b4afe9e6d
commit 9625835814
3 changed files with 59 additions and 59 deletions

View File

@@ -1,20 +1,21 @@
#include "dicomimageview.h" #include "dicomimageview.h"
#include <QMessageBox> #include <QMessageBox>
#include <QDebug> #include <QDebug>
#include "thumbnailImage.h"
#include <vtkRenderer.h> #include <vtkRenderer.h>
#include <vtkCamera.h> #include <vtkCamera.h>
#include <vtkInteractorStyleImage.h> #include <vtkInteractorStyleImage.h>
#include <QVTKOpenGLNativeWidget.h> #include <QVTKOpenGLNativeWidget.h>
#include <vtkGenericOpenGLRenderWindow.h> #include <vtkGenericOpenGLRenderWindow.h>
#include "vtkImageProperty.h" #include <vtkDiscretizableColorTransferFunction.h>
#include "UI/Widget/mytitlebar.h" #include <vtkImageProperty.h>
#include "Interaction/ActorDraggableInteractorStyle.h" #include "Interaction/ActorDraggableInteractorStyle.h"
#include "UI/Window/metaDataWindow.h"
#include "UI/Widget/mytitlebar.h"
#include "cine/pqVCRController.h" #include "cine/pqVCRController.h"
#include "cine/pqVCRToolbar.h" #include "cine/pqVCRToolbar.h"
#include "vtkDiscretizableColorTransferFunction.h" #include "thumbnailImage.h"
#include "UI/Window/metaDataWindow.h"
#include "dcmtk/dcmdata/dcfilefo.h" #include "dcmtk/dcmdata/dcfilefo.h"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -90,19 +91,33 @@ void DicomImageView::initScrollbar() {
mScrollBar->setMaximum(mImageViewer->GetSliceMax()); mScrollBar->setMaximum(mImageViewer->GetSliceMax());
mScrollBar->setSingleStep(1); mScrollBar->setSingleStep(1);
mScrollBar->setVisible(true); mScrollBar->setVisible(true);
if (!mIsSlotInited) {
connect(mScrollBar, &QScrollBar::valueChanged, this, &DicomImageView::scrollBarValueChanged);
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::imageTransformed);
mIsSlotInited = true;
}
}
void DicomImageView::initImageViewer() {
if (!mImageViewer) {
mImageViewer = infinitiViewer::New();
mImageViewer->SetRenderWindow(mGLRenWin);
mImageViewer->SetupInteractor(mGLRenWin->GetInteractor());
}
} }
void DicomImageView::setHighlight(bool yes) { void DicomImageView::setHighlight(bool yes) {
mTitleBar->SetHighlight(yes); mTitleBar->SetHighlight(yes);
} }
// action----------------------------------------------------------------------
void DicomImageView::SyncScrollBar() { void DicomImageView::SyncScrollBar() {
mScrollBar->SetValueSilently(mImageViewer->GetSlice()); mScrollBar->SetValueSilently(mImageViewer->GetSlice());
} }
void DicomImageView::resetView() { void DicomImageView::resetView() {
if (hasSeries()) { if (hasSeries()) {
removeViewWithFusion(); unloadFusion();
removeViewWithMeasure(); removeViewWithMeasure();
mImageViewer->GetRenderer()->RemoveAllViewProps(); mImageViewer->GetRenderer()->RemoveAllViewProps();
this->render(); this->render();
@@ -123,6 +138,7 @@ bool DicomImageView::hasSeries() {
} }
void DicomImageView::loadSeries(SeriesImageSet *series) { void DicomImageView::loadSeries(SeriesImageSet *series) {
initImageViewer();
mSeries = series; mSeries = series;
mImageViewer->SetInputData(mSeries->GetData()); mImageViewer->SetInputData(mSeries->GetData());
mImageViewer->InitCornerInfo(series->GetProperty()); mImageViewer->InitCornerInfo(series->GetProperty());
@@ -139,6 +155,7 @@ void DicomImageView::loadSeries(SeriesImageSet *series) {
style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb); style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb);
style->AddObserver(ActorDraggableInteractorStyle::ScalarOpacityEvent, this, &DicomImageView::scalarEventCb); style->AddObserver(ActorDraggableInteractorStyle::ScalarOpacityEvent, this, &DicomImageView::scalarEventCb);
style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb); style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb);
initScrollbar();
} }
int DicomImageView::getSeriesNumber() { int DicomImageView::getSeriesNumber() {
@@ -170,23 +187,6 @@ void DicomImageView::showMetaData() {
} }
} }
void DicomImageView::resizeEvent(QResizeEvent *event) {
//auto size conner info
if (!mImageViewer) return;
if (mImageViewer->GetvtkCornerAnnotation()) {
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
mImageViewer->Render();
}
if (mIsCine) {
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
VCRHelper::getVCRXOffset();
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
VCRHelper::getVCRYOffset();
mVcrToolbar->move(ax, ay);
}
}
//SLOTS------------------------------------------------------------------------ //SLOTS------------------------------------------------------------------------
void DicomImageView::scrollBarValueChanged(int slice) { void DicomImageView::scrollBarValueChanged(int slice) {
mImageViewer->SetSlice(slice); mImageViewer->SetSlice(slice);
@@ -249,6 +249,23 @@ void DicomImageView::mousePressEvent(QMouseEvent *event) {
emit Signal_ViewClicked(this); emit Signal_ViewClicked(this);
} }
void DicomImageView::resizeEvent(QResizeEvent *event) {
//auto size conner info
if (!mImageViewer) return;
if (mImageViewer->GetvtkCornerAnnotation()) {
mImageViewer->GetvtkCornerAnnotation()->SetMaximumFontSize(FontSizeHelper::getSize(frameGeometry().size()));
mImageViewer->Render();
}
if (mIsCine) {
int ax = (this->geometry().bottomLeft().x() + this->geometry().bottomRight().x()) / 2 +
VCRHelper::getVCRXOffset();
int ay = (this->geometry().bottomLeft().y() + this->geometry().bottomRight().y()) / 2 +
VCRHelper::getVCRYOffset();
mVcrToolbar->move(ax, ay);
}
}
// DND support----------------------------------------------------------------- // DND support-----------------------------------------------------------------
void DicomImageView::dragEnterEvent(QDragEnterEvent *e) { void DicomImageView::dragEnterEvent(QDragEnterEvent *e) {
if (e->mimeData()->hasFormat("text/plain")) { if (e->mimeData()->hasFormat("text/plain")) {
@@ -322,13 +339,13 @@ void DicomImageView::setFusionOpacity(double percent) {
/** /**
* Remove Fusion no matter it is base or overlay * Remove Fusion no matter it is base or overlay
*/ */
void DicomImageView::removeViewWithFusion() { void DicomImageView::unloadFusion() {
if (hasSeries()) { if (hasSeries()) {
if (isFusion()) { if (isFusion()) {
disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion, disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion,
this, &DicomImageView::fusionWindowChanged); this, &DicomImageView::fusionWindowChanged);
this->removeFusion(); this->clearFusionContext();
mOverlayView->SetBaseView(nullptr); mOverlayView->SetBaseView(nullptr);
mOverlayView = nullptr; mOverlayView = nullptr;
} }
@@ -337,40 +354,20 @@ void DicomImageView::removeViewWithFusion() {
disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion, disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion,
mBaseView, &DicomImageView::fusionWindowChanged); mBaseView, &DicomImageView::fusionWindowChanged);
mBaseView->removeFusion(); mBaseView->clearFusionContext();
mBaseView->SetOverlayView(nullptr); mBaseView->SetOverlayView(nullptr);
mBaseView = nullptr; mBaseView = nullptr;
} }
} }
} }
void DicomImageView::removeFusion() { void DicomImageView::clearFusionContext() {
mImageViewer->RemoveFusionData(); mImageViewer->RemoveFusionData();
mImageViewer->FusionOff(); mImageViewer->FusionOff();
mImageViewer->Render(); mImageViewer->Render();
mOverlayView->OverlayOff(); mOverlayView->OverlayOff();
} }
void DicomImageView::setDicomImageView(SeriesImageSet *series) {
if (!mImageViewer) {
mImageViewer = infinitiViewer::New();
mImageViewer->SetRenderWindow(mGLRenWin);
mImageViewer->SetupInteractor(mGLRenWin->GetInteractor());
}
//series->setVTKOpenGLNativeWidget(this->_glView);
loadSeries(series);
//whenver change instance,set scroll value to zero
initScrollbar();
if (!mIsSlotInited) {
connect(mScrollBar, &QScrollBar::valueChanged, this, &DicomImageView::scrollBarValueChanged);
connect(this, &DicomImageView::Signal_Transformation, this, &DicomImageView::imageTransformed);
mIsSlotInited = true;
}
}
//Callbacks------------------------------------------------------------------------------------ //Callbacks------------------------------------------------------------------------------------
void DicomImageView::updateWindowLevelCb() { void DicomImageView::updateWindowLevelCb() {
mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT); mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT);

View File

@@ -88,7 +88,7 @@ public:
void setFusionInput(DicomImageView *overlay); void setFusionInput(DicomImageView *overlay);
void removeViewWithFusion(); void unloadFusion();
//Measure //Measure
@@ -159,7 +159,10 @@ public:
mImageViewer->Render(); mImageViewer->Render();
} }
void loadSeries(SeriesImageSet *series);
signals: signals:
void Signal_ViewEmpty(DicomImageView *view); void Signal_ViewEmpty(DicomImageView *view);
void Signal_ViewClicked(DicomImageView *view); void Signal_ViewClicked(DicomImageView *view);
@@ -188,8 +191,8 @@ public slots:
void imageTransformed(); void imageTransformed();
void clicked(); void clicked();
protected: protected:
/** /**
* 点击事件,用于激发当前选中 * 点击事件,用于激发当前选中
* @attention 只能捕获到titlebar区域的点击 * @attention 只能捕获到titlebar区域的点击
@@ -227,11 +230,11 @@ protected:
*/ */
void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE; void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
private: private:
void removeFusion();
void clearFusionContext();
void OverlayOn() { void OverlayOn() {
mIsOverlay = true; mIsOverlay = true;
@@ -249,11 +252,11 @@ private:
mBaseView = v; mBaseView = v;
} }
void SetOverlayView(DicomImageView *v) { void SetOverlayView(DicomImageView *v) {
mOverlayView = v; mOverlayView = v;
} }
//Callback //Callback
void doubleclickedEventCb(); void doubleclickedEventCb();
@@ -261,8 +264,8 @@ private:
void updateWindowLevelCb(); void updateWindowLevelCb();
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata);
void initCineModeThread(); void initCineModeThread();
@@ -276,8 +279,6 @@ private:
void initScrollbar(); void initScrollbar();
void loadSeries(SeriesImageSet *series);
vtkSmartPointer<vtkGenericOpenGLRenderWindow> mGLRenWin; vtkSmartPointer<vtkGenericOpenGLRenderWindow> mGLRenWin;
infinitiViewer *mImageViewer; infinitiViewer *mImageViewer;
@@ -297,6 +298,8 @@ private:
bool mIsNegative; bool mIsNegative;
bool mIsOverlay; bool mIsOverlay;
bool mIsSlotInited; bool mIsSlotInited;
void initImageViewer();
}; };
#endif #endif

View File

@@ -327,9 +327,9 @@ void ViewContainerWidget::replaceViewWithSerie(const std::string& uniqueid, Dico
{ {
curV= manager.getCurrentView(); curV= manager.getCurrentView();
} }
curV->removeViewWithFusion(); curV->unloadFusion();
DicomLoader *helper = DicomLoader::GetInstance(); DicomLoader *helper = DicomLoader::GetInstance();
curV->setDicomImageView(helper->getSeriesImageSet(uniqueid)); curV->loadSeries(helper->getSeriesImageSet(uniqueid));
curV->render(); curV->render();
} }
@@ -371,7 +371,7 @@ void ViewContainerWidget::replaceViewWithFusion()
void ViewContainerWidget::removeCurrentViewWithFusion() void ViewContainerWidget::removeCurrentViewWithFusion()
{ {
if (manager.getCurrentView()) { if (manager.getCurrentView()) {
manager.getCurrentView()->removeViewWithFusion(); manager.getCurrentView()->unloadFusion();
} }
} }