fix: fix volume measure bug when Change mode in plcaing

This commit is contained in:
kradchen
2025-07-18 14:52:07 +08:00
parent fadf67b453
commit ddf31a3fdb
4 changed files with 28 additions and 13 deletions

View File

@@ -17,7 +17,9 @@
#include "UI/Widget/cine/pqVCRToolbar.h" #include "UI/Widget/cine/pqVCRToolbar.h"
ImageViewManager::ImageViewManager(QObject *parent) 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, connect(EventsCenter::Default(),&EventsCenter::AnnotationStateChanged,
this, &ImageViewManager::updateCornerInfoAll); this, &ImageViewManager::updateCornerInfoAll);
@@ -49,8 +51,11 @@ void ImageViewManager::add(DicomImageView *view) {
connect(view, &DicomImageView::onViewDoubleClick, connect(view, &DicomImageView::onViewDoubleClick,
this, &ImageViewManager::viewDoubleClicked); this, &ImageViewManager::viewDoubleClicked);
connect(view, &DicomImageView::beforeViewCleared,
this, &ImageViewManager::beforeViewCleared);
connect(view, &DicomImageView::afterViewCleared, connect(view, &DicomImageView::afterViewCleared,
this, &ImageViewManager::viewCleared); this, &ImageViewManager::afterViewCleared);
connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) { connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) {
setCurrentView(view); setCurrentView(view);
@@ -110,8 +115,8 @@ void ImageViewManager::setCurrentView(DicomImageView *view) {
currentView->setHighlight(true); currentView->setHighlight(true);
renderReferenceLine(); renderReferenceLine();
emit currentViewChanged(view);
} }
emit currentViewChanged(view);
} }
void ImageViewManager::smartDo(SmartDoCallback cb, DicomImageView *sourceView, void *callData, DoScope scope) { 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); 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) { smartDo([](auto v, auto callData) {
auto src = (DicomImageView*)callData; auto src = (DicomImageView*)callData;
if (v->isFusion() && v->getFusionInput() == src){ if (v->isFusion() && v->getFusionInput() == src){
@@ -400,14 +412,15 @@ void ImageViewManager::viewCleared(DicomImageView* view) {
reloadCurrentView(view); reloadCurrentView(view);
} }
void ImageViewManager::setInteractionMode(int InteractionMode) { void ImageViewManager::setInteractionMode(int aInteractionMode) {
void *data = (void *) &InteractionMode; void *data = (void *) &aInteractionMode;
smartDo([](auto v, auto callData) { smartDo([](auto v, auto callData) {
int *mode = (int *) callData; int *mode = (int *) callData;
if (v->getImageViewer()) { if (v->getImageViewer()) {
v->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum(*mode); v->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum(*mode);
} }
}, nullptr, data, All); }, nullptr, data, All);
mInteractiveMode = aInteractionMode;
} }
void ImageViewManager::renderAll() { void ImageViewManager::renderAll() {
@@ -553,19 +566,16 @@ void ImageViewManager::clearCurrentView() {
void ImageViewManager::reloadCurrentView(DicomImageView * view){ void ImageViewManager::reloadCurrentView(DicomImageView * view){
renderReferenceLine(); renderReferenceLine();
if (view && getFirstView()) if (view)
{ {
if (view->getImageViewer()){ if (view->getImageViewer()){
view->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum( view->getImageViewer()->GetInteractorStyle()->SetInteractionModeFromEnum(mInteractiveMode);
getFirstView()->getImageViewer()->GetInteractorStyle()->GetInteractionMode() if(mInteractiveMode == VTKIS_MEASURE)
);
if(getFirstView()->getImageViewer()->GetInteractorStyle()->GetInteractionMode() == VTKIS_MEASURE)
{ {
MeasureHelper::setMeasureType(MeasureHelper::getMeasureType()); MeasureHelper::setMeasureType(MeasureHelper::getMeasureType());
} }
EllipsoidVolumeAnnotationActor::Default()->ClearRenderingState(view->getImageViewer()->GetRenderer()); EllipsoidVolumeAnnotationActor::Default()->ClearRenderingState(view->getImageViewer()->GetRenderer());
renderAll(); renderAll();
} }
} }
emit currentViewChanged(view); emit currentViewChanged(view);

View File

@@ -75,8 +75,9 @@ public:
void viewReloadWithID(int aID, const std::string &unique_info); void viewReloadWithID(int aID, const std::string &unique_info);
void beforeViewCleared(DicomImageView* view);
void viewCleared(DicomImageView* view); void afterViewCleared(DicomImageView* view);
void clearCurrentView(); void clearCurrentView();
@@ -135,6 +136,7 @@ private:
DicomImageView *currentView; DicomImageView *currentView;
DicomImageView *currentFusionView; DicomImageView *currentFusionView;
bool mMaxed; bool mMaxed;
int mInteractiveMode;
void renderReferenceLine(); void renderReferenceLine();

View File

@@ -249,6 +249,7 @@ void DicomImageView::scrollBarValueChanged(int slice) {
} }
void DicomImageView::viewCleared() { void DicomImageView::viewCleared() {
emit beforeViewCleared(this);
resetView(); resetView();
mTitleBar->setTitleContent(""); mTitleBar->setTitleContent("");
emit afterViewCleared(this); emit afterViewCleared(this);

View File

@@ -218,6 +218,8 @@ public:
signals: signals:
void beforeViewCleared(DicomImageView *view);
void afterViewCleared(DicomImageView *view); void afterViewCleared(DicomImageView *view);
void onViewClick(DicomImageView *view); void onViewClick(DicomImageView *view);