From d9aaf669ebf41914dc5eb77e8aec046d50cf4b27 Mon Sep 17 00:00:00 2001 From: kradchen Date: Mon, 7 Jul 2025 10:19:15 +0800 Subject: [PATCH] fix: fix a measure reload bug --- src/src/Rendering/Viewer/DICOMImageViewer.cxx | 14 ++++++++++++++ src/src/Rendering/Viewer/DICOMImageViewer.h | 2 ++ src/src/UI/Manager/ImageViewManager.cpp | 12 ++++++++++++ src/src/UI/Manager/ImageViewManager.h | 1 + src/src/UI/Widget/ImageView/dicomimageview.cpp | 6 ++++++ src/src/UI/Widget/ImageView/dicomimageview.h | 2 ++ 6 files changed, 37 insertions(+) diff --git a/src/src/Rendering/Viewer/DICOMImageViewer.cxx b/src/src/Rendering/Viewer/DICOMImageViewer.cxx index 70682ad..98f66ab 100644 --- a/src/src/Rendering/Viewer/DICOMImageViewer.cxx +++ b/src/src/Rendering/Viewer/DICOMImageViewer.cxx @@ -419,6 +419,20 @@ void DICOMImageViewer::Render() { } } +void DICOMImageViewer::RenderReloadMeasure() +{ + if (this->GetInput()) { + if (Fusion && FusionActor && !this->ImageStack->HasImage(FusionActor)) { + this->ImageStack->AddImage(FusionActor); + } + if (!Fusion && FusionActor && this->ImageStack->HasImage(FusionActor)) { + this->ImageStack->RemoveImage(FusionActor); + } + this->LoadMeasures(true); + this->RenderWindow->Render(); + } +} + // slice about----------------------------------------------------------------- void DICOMImageViewer::GetSliceRange(int &min, int &max) { vtkAlgorithm *input = this->GetInputAlgorithm(); diff --git a/src/src/Rendering/Viewer/DICOMImageViewer.h b/src/src/Rendering/Viewer/DICOMImageViewer.h index d871396..229bfb8 100644 --- a/src/src/Rendering/Viewer/DICOMImageViewer.h +++ b/src/src/Rendering/Viewer/DICOMImageViewer.h @@ -88,6 +88,8 @@ public: */ virtual void Render(); + virtual void RenderReloadMeasure(); + //@{ /** * Set/Get the input image to the viewer. diff --git a/src/src/UI/Manager/ImageViewManager.cpp b/src/src/UI/Manager/ImageViewManager.cpp index 862d305..cddf81d 100644 --- a/src/src/UI/Manager/ImageViewManager.cpp +++ b/src/src/UI/Manager/ImageViewManager.cpp @@ -253,8 +253,12 @@ void ImageViewManager::smartDo(SmartDoCallback cb,SmartDoCallback otherCb, Dico //Slots and actions------------------------------------------------------------ void ImageViewManager::viewClicked(DicomImageView *view) { + //current view show measure + view->RenderReloadMeasure(); + if (!view) return; this->setCurrentView(view); + renderAll(); } void ImageViewManager::viewDoubleClicked(DicomImageView *view) { @@ -407,6 +411,14 @@ void ImageViewManager::renderAll() { }, nullptr, nullptr, All); } +void ImageViewManager::renderAllReloadMeasure() { + smartDo([](auto v, auto) { + if (v->hasSeries()) { + v->RenderReloadMeasure(); + } + }, nullptr, nullptr, All); +} + void ImageViewManager::activeMeasure() { smartDo([](auto v, auto) { diff --git a/src/src/UI/Manager/ImageViewManager.h b/src/src/UI/Manager/ImageViewManager.h index 6c80d1d..fe7cd37 100644 --- a/src/src/UI/Manager/ImageViewManager.h +++ b/src/src/UI/Manager/ImageViewManager.h @@ -83,6 +83,7 @@ public: void setInteractionMode(int InteractionMode); void renderAll(); + void renderAllReloadMeasure(); void activeMeasure(); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 19122be..f1192db 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -162,6 +162,12 @@ bool DicomImageView::hasSeries() { return mSeries; } +void DicomImageView::RenderReloadMeasure() +{ + if (!hasSeries()) return; + mImageViewer->RenderReloadMeasure(); +} + void DicomImageView::loadSeries(SeriesImageSet *series) { if (!series) return; initImageViewer(); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.h b/src/src/UI/Widget/ImageView/dicomimageview.h index 732693e..a5b8f31 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.h +++ b/src/src/UI/Widget/ImageView/dicomimageview.h @@ -46,6 +46,8 @@ public: void render(); + void RenderReloadMeasure(); + //Series void setDicomImageView(SeriesImageSet *series);