From 96258358147fe53dbdd268606df366b8d4f99318 Mon Sep 17 00:00:00 2001 From: Krad Date: Fri, 1 Jul 2022 17:40:22 +0800 Subject: [PATCH] Refactor dicomimageview. 3 --- src/src/UI/Widget/dicomimageview.cpp | 91 +++++++++++------------ src/src/UI/Widget/dicomimageview.h | 21 +++--- src/src/UI/Widget/viewcontainerwidget.cpp | 6 +- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/src/UI/Widget/dicomimageview.cpp b/src/src/UI/Widget/dicomimageview.cpp index 9956762..446fbc6 100644 --- a/src/src/UI/Widget/dicomimageview.cpp +++ b/src/src/UI/Widget/dicomimageview.cpp @@ -1,20 +1,21 @@ #include "dicomimageview.h" + #include #include -#include "thumbnailImage.h" #include #include #include #include #include -#include "vtkImageProperty.h" -#include "UI/Widget/mytitlebar.h" +#include +#include #include "Interaction/ActorDraggableInteractorStyle.h" +#include "UI/Window/metaDataWindow.h" +#include "UI/Widget/mytitlebar.h" #include "cine/pqVCRController.h" #include "cine/pqVCRToolbar.h" -#include "vtkDiscretizableColorTransferFunction.h" -#include "UI/Window/metaDataWindow.h" +#include "thumbnailImage.h" #include "dcmtk/dcmdata/dcfilefo.h" //----------------------------------------------------------------------------- @@ -90,19 +91,33 @@ void DicomImageView::initScrollbar() { mScrollBar->setMaximum(mImageViewer->GetSliceMax()); mScrollBar->setSingleStep(1); 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) { mTitleBar->SetHighlight(yes); } +// action---------------------------------------------------------------------- void DicomImageView::SyncScrollBar() { mScrollBar->SetValueSilently(mImageViewer->GetSlice()); } void DicomImageView::resetView() { if (hasSeries()) { - removeViewWithFusion(); + unloadFusion(); removeViewWithMeasure(); mImageViewer->GetRenderer()->RemoveAllViewProps(); this->render(); @@ -123,6 +138,7 @@ bool DicomImageView::hasSeries() { } void DicomImageView::loadSeries(SeriesImageSet *series) { + initImageViewer(); mSeries = series; mImageViewer->SetInputData(mSeries->GetData()); mImageViewer->InitCornerInfo(series->GetProperty()); @@ -139,6 +155,7 @@ void DicomImageView::loadSeries(SeriesImageSet *series) { style->AddObserver(ActorDraggableInteractorStyle::DoubleClickEvent, this, &DicomImageView::doubleclickedEventCb); style->AddObserver(ActorDraggableInteractorStyle::ScalarOpacityEvent, this, &DicomImageView::scalarEventCb); style->AddObserver(ActorDraggableInteractorStyle::ScalarShiftEvent, this, &DicomImageView::scalarEventCb); + initScrollbar(); } 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------------------------------------------------------------------------ void DicomImageView::scrollBarValueChanged(int slice) { mImageViewer->SetSlice(slice); @@ -249,6 +249,23 @@ void DicomImageView::mousePressEvent(QMouseEvent *event) { 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----------------------------------------------------------------- void DicomImageView::dragEnterEvent(QDragEnterEvent *e) { if (e->mimeData()->hasFormat("text/plain")) { @@ -322,13 +339,13 @@ void DicomImageView::setFusionOpacity(double percent) { /** * Remove Fusion no matter it is base or overlay */ -void DicomImageView::removeViewWithFusion() { +void DicomImageView::unloadFusion() { if (hasSeries()) { if (isFusion()) { disconnect(mOverlayView, &DicomImageView::Signal_WindowLevelEventForFusion, this, &DicomImageView::fusionWindowChanged); - this->removeFusion(); + this->clearFusionContext(); mOverlayView->SetBaseView(nullptr); mOverlayView = nullptr; } @@ -337,40 +354,20 @@ void DicomImageView::removeViewWithFusion() { disconnect(this, &DicomImageView::Signal_WindowLevelEventForFusion, mBaseView, &DicomImageView::fusionWindowChanged); - mBaseView->removeFusion(); + mBaseView->clearFusionContext(); mBaseView->SetOverlayView(nullptr); mBaseView = nullptr; - } } } -void DicomImageView::removeFusion() { +void DicomImageView::clearFusionContext() { mImageViewer->RemoveFusionData(); mImageViewer->FusionOff(); mImageViewer->Render(); 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------------------------------------------------------------------------------------ void DicomImageView::updateWindowLevelCb() { mImageViewer->UpdateCornerInfo(BOTTOM_RIGHT); diff --git a/src/src/UI/Widget/dicomimageview.h b/src/src/UI/Widget/dicomimageview.h index 9f728c2..81d037f 100644 --- a/src/src/UI/Widget/dicomimageview.h +++ b/src/src/UI/Widget/dicomimageview.h @@ -88,7 +88,7 @@ public: void setFusionInput(DicomImageView *overlay); - void removeViewWithFusion(); + void unloadFusion(); //Measure @@ -159,7 +159,10 @@ public: mImageViewer->Render(); } + void loadSeries(SeriesImageSet *series); + signals: + void Signal_ViewEmpty(DicomImageView *view); void Signal_ViewClicked(DicomImageView *view); @@ -188,8 +191,8 @@ public slots: void imageTransformed(); void clicked(); - protected: + /** * 点击事件,用于激发当前选中 * @attention 只能捕获到titlebar区域的点击 @@ -227,11 +230,11 @@ protected: */ void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE; + void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; - - private: - void removeFusion(); + + void clearFusionContext(); void OverlayOn() { mIsOverlay = true; @@ -249,11 +252,11 @@ private: mBaseView = v; } + void SetOverlayView(DicomImageView *v) { mOverlayView = v; } - //Callback void doubleclickedEventCb(); @@ -261,8 +264,8 @@ private: void updateWindowLevelCb(); - void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata); + void syncEventFunc(vtkObject *caller, unsigned long eid, void *calldata); void initCineModeThread(); @@ -276,8 +279,6 @@ private: void initScrollbar(); - void loadSeries(SeriesImageSet *series); - vtkSmartPointer mGLRenWin; infinitiViewer *mImageViewer; @@ -297,6 +298,8 @@ private: bool mIsNegative; bool mIsOverlay; bool mIsSlotInited; + + void initImageViewer(); }; #endif \ No newline at end of file diff --git a/src/src/UI/Widget/viewcontainerwidget.cpp b/src/src/UI/Widget/viewcontainerwidget.cpp index 772a282..88cf040 100644 --- a/src/src/UI/Widget/viewcontainerwidget.cpp +++ b/src/src/UI/Widget/viewcontainerwidget.cpp @@ -327,9 +327,9 @@ void ViewContainerWidget::replaceViewWithSerie(const std::string& uniqueid, Dico { curV= manager.getCurrentView(); } - curV->removeViewWithFusion(); + curV->unloadFusion(); DicomLoader *helper = DicomLoader::GetInstance(); - curV->setDicomImageView(helper->getSeriesImageSet(uniqueid)); + curV->loadSeries(helper->getSeriesImageSet(uniqueid)); curV->render(); } @@ -371,7 +371,7 @@ void ViewContainerWidget::replaceViewWithFusion() void ViewContainerWidget::removeCurrentViewWithFusion() { if (manager.getCurrentView()) { - manager.getCurrentView()->removeViewWithFusion(); + manager.getCurrentView()->unloadFusion(); } }