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"
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);

View File

@@ -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();

View File

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

View File

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