From ddf31a3fdb98b6c96885b6f33ddb368fd9b8efe6 Mon Sep 17 00:00:00 2001 From: kradchen Date: Fri, 18 Jul 2025 14:52:07 +0800 Subject: [PATCH] fix: fix volume measure bug when Change mode in plcaing --- src/src/UI/Manager/ImageViewManager.cpp | 34 ++++++++++++------- src/src/UI/Manager/ImageViewManager.h | 4 ++- .../UI/Widget/ImageView/dicomimageview.cpp | 1 + src/src/UI/Widget/ImageView/dicomimageview.h | 2 ++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/src/UI/Manager/ImageViewManager.cpp b/src/src/UI/Manager/ImageViewManager.cpp index 17c122a..766688a 100644 --- a/src/src/UI/Manager/ImageViewManager.cpp +++ b/src/src/UI/Manager/ImageViewManager.cpp @@ -17,7 +17,9 @@ #include "UI/Widget/cine/pqVCRToolbar.h" ImageViewManager::ImageViewManager(QObject *parent) - : QObject(parent), currentView(nullptr), currentFusionView(nullptr), mMaxed(false) { + : QObject(parent), currentView(nullptr), + currentFusionView(nullptr), mMaxed(false), + mInteractiveMode(4) { connect(EventsCenter::Default(),&EventsCenter::AnnotationStateChanged, this, &ImageViewManager::updateCornerInfoAll); @@ -49,8 +51,11 @@ void ImageViewManager::add(DicomImageView *view) { connect(view, &DicomImageView::onViewDoubleClick, this, &ImageViewManager::viewDoubleClicked); + connect(view, &DicomImageView::beforeViewCleared, + this, &ImageViewManager::beforeViewCleared); + connect(view, &DicomImageView::afterViewCleared, - this, &ImageViewManager::viewCleared); + this, &ImageViewManager::afterViewCleared); connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) { setCurrentView(view); @@ -110,8 +115,8 @@ void ImageViewManager::setCurrentView(DicomImageView *view) { currentView->setHighlight(true); renderReferenceLine(); - emit currentViewChanged(view); } + emit currentViewChanged(view); } void ImageViewManager::smartDo(SmartDoCallback cb, DicomImageView *sourceView, void *callData, DoScope scope) { @@ -390,7 +395,14 @@ void ImageViewManager::viewReloadWithID(int aID, const std::string &unique_info) reloadCurrentView(selectView); } -void ImageViewManager::viewCleared(DicomImageView* view) { +void ImageViewManager::beforeViewCleared(DicomImageView* view) { + if (view && view->getImageViewer()) + { + EllipsoidVolumeAnnotationActor::Default()->ClearRenderingState(view->getImageViewer()->GetRenderer()); + } +} + +void ImageViewManager::afterViewCleared(DicomImageView* view) { smartDo([](auto v, auto callData) { auto src = (DicomImageView*)callData; if (v->isFusion() && v->getFusionInput() == src){ @@ -400,14 +412,15 @@ void ImageViewManager::viewCleared(DicomImageView* view) { reloadCurrentView(view); } -void ImageViewManager::setInteractionMode(int InteractionMode) { - void *data = (void *) &InteractionMode; +void ImageViewManager::setInteractionMode(int aInteractionMode) { + void *data = (void *) &aInteractionMode; smartDo([](auto v, auto callData) { int *mode = (int *) callData; if (v->getImageViewer()) { v->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum(*mode); } }, nullptr, data, All); + mInteractiveMode = aInteractionMode; } void ImageViewManager::renderAll() { @@ -553,19 +566,16 @@ void ImageViewManager::clearCurrentView() { void ImageViewManager::reloadCurrentView(DicomImageView * view){ renderReferenceLine(); - if (view && getFirstView()) + if (view) { if (view->getImageViewer()){ - view->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum( - getFirstView()->getImageViewer()->GetInteractorStyle()->GetInteractionMode() - ); - if(getFirstView()->getImageViewer()->GetInteractorStyle()->GetInteractionMode() == VTKIS_MEASURE) + view->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum(mInteractiveMode); + if(mInteractiveMode == VTKIS_MEASURE) { MeasureHelper::setMeasureType(MeasureHelper::getMeasureType()); } EllipsoidVolumeAnnotationActor::Default()->ClearRenderingState(view->getImageViewer()->GetRenderer()); renderAll(); - } } emit currentViewChanged(view); diff --git a/src/src/UI/Manager/ImageViewManager.h b/src/src/UI/Manager/ImageViewManager.h index 46bb47d..2a04adc 100644 --- a/src/src/UI/Manager/ImageViewManager.h +++ b/src/src/UI/Manager/ImageViewManager.h @@ -75,8 +75,9 @@ public: void viewReloadWithID(int aID, const std::string &unique_info); + void beforeViewCleared(DicomImageView* view); - void viewCleared(DicomImageView* view); + void afterViewCleared(DicomImageView* view); void clearCurrentView(); @@ -135,6 +136,7 @@ private: DicomImageView *currentView; DicomImageView *currentFusionView; bool mMaxed; + int mInteractiveMode; void renderReferenceLine(); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 870c3ae..3f7fd21 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -249,6 +249,7 @@ void DicomImageView::scrollBarValueChanged(int slice) { } void DicomImageView::viewCleared() { + emit beforeViewCleared(this); resetView(); mTitleBar->setTitleContent(""); emit afterViewCleared(this); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.h b/src/src/UI/Widget/ImageView/dicomimageview.h index a5b8f31..ddd2319 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.h +++ b/src/src/UI/Widget/ImageView/dicomimageview.h @@ -218,6 +218,8 @@ public: signals: + void beforeViewCleared(DicomImageView *view); + void afterViewCleared(DicomImageView *view); void onViewClick(DicomImageView *view);