From fc8e784758e3b2ff6d8f2e00a0e28c10839d9593 Mon Sep 17 00:00:00 2001 From: Krad Date: Fri, 11 Mar 2022 14:08:23 +0800 Subject: [PATCH] Use MeasureFactory to refactor viewcontainerwidget --- src/src/QDicomViewer.cpp | 120 ++++----------------------- src/src/view/viewcontainerwidget.cpp | 37 ++++++++- src/src/view/viewcontainerwidget.h | 3 +- 3 files changed, 55 insertions(+), 105 deletions(-) diff --git a/src/src/QDicomViewer.cpp b/src/src/QDicomViewer.cpp index bbcdb0b..809dc2d 100644 --- a/src/src/QDicomViewer.cpp +++ b/src/src/QDicomViewer.cpp @@ -1,4 +1,4 @@ -#include "QDicomViewer.h" +#include "QDicomViewer.h" #include "global/include_all.h" #include "base/SeriesImageSet.h" #include "view/subview/gridpopwidget.h" @@ -329,54 +329,9 @@ void QDicomViewer::SetupAnnoTool(QToolButton* annoBtn) //TODO:考虑从这个类中移除,采用factory模式解耦合 void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, AnnotationActorType annType) { - QList viewers = Container->getViewList(); DicomImageView* curV = ui->viewContainer->getCurrentView(); switch (annType) { - case AnnotationActorType::RulerAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - RulerAnnotationActor* ann = RulerAnnotationActor::New(); - v->ActiveMeasure(ann); - v->Render(); - }); - break; - case AnnotationActorType::AngleAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - AngleAnnotationActor* ann = AngleAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - break; - case AnnotationActorType::ClosedPolygonAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - OpenPolyAnnotationActor* ann = OpenPolyAnnotationActor::New(); - ann->SetClosed(1); - v->ActiveMeasure(ann); - }); - break; - case AnnotationActorType::OpenPolygonAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - OpenPolyAnnotationActor* ann = OpenPolyAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - break; - case AnnotationActorType::ArrowAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - ArrowAnnotationActor* ann = ArrowAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - break; - case AnnotationActorType::EllipseAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - EllipseAnnotationActor* ann = EllipseAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - break; - case AnnotationActorType::TextAnn: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - TextAnnotationActor* ann = TextAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - break; case AnnotationActorType::DeleteSelectedAnn: if (curV != nullptr) { @@ -396,10 +351,7 @@ void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, Annotati } break; default: - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - RulerAnnotationActor* ann = RulerAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + ui->viewContainer->activeMeasure(); break; } } @@ -420,92 +372,54 @@ void QDicomViewer::SetupMeasureTool(QToolButton* measureBtn) measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/distance.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::RulerAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - RulerAnnotationActor* ann = RulerAnnotationActor::New(); - v->ActiveMeasure(ann); - }); - }); + MeasureHelper::setMeasureType(AnnotationActorType::RulerAnn); + ui->viewContainer->activeMeasure(); + }); m->addAction(tr("Angle"), this, [=] { measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/angle.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::AngleAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - AngleAnnotationActor* ann = AngleAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::AngleAnn); + ui->viewContainer->activeMeasure(); }); m->addAction(tr("Closed polygon"), this, [=] { measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/polygon.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::ClosedPolygonAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - OpenPolyAnnotationActor* ann = OpenPolyAnnotationActor::New(); - ann->SetClosed(1); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::ClosedPolygonAnn); + ui->viewContainer->activeMeasure(); }); m->addAction(tr("Open polygon"), this, [=] { measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/polyline.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::OpenPolygonAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - OpenPolyAnnotationActor* ann = OpenPolyAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::OpenPolygonAnn); + ui->viewContainer->activeMeasure(); }); - m->addAction(tr("Arrow"), this, [=] { measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/arrow.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::ArrowAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - ArrowAnnotationActor* ann = ArrowAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::ArrowAnn); + ui->viewContainer->activeMeasure(); }); - m->addAction(tr("Ellipse"), this, [=] { QPixmap map(":/InfiniteViewer/Icon/ellipse.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::EllipseAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - EllipseAnnotationActor* ann = EllipseAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::EllipseAnn); + ui->viewContainer->activeMeasure(); }); m->addAction(tr("Text"), this, [=] { measureBtn->setChecked(true); QPixmap map(":/InfiniteViewer/Icon/text.png"); measureBtn->setIcon(QIcon(map)); - m_cur_measure = AnnotationActorType::TextAnn; - - QList viewers = ui->viewContainer->getViewList(); - std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) { - TextAnnotationActor* ann = TextAnnotationActor::New(); - v->ActiveMeasure(ann); - }); + MeasureHelper::setMeasureType(AnnotationActorType::TextAnn); + ui->viewContainer->activeMeasure(); }); m->addSeparator(); diff --git a/src/src/view/viewcontainerwidget.cpp b/src/src/view/viewcontainerwidget.cpp index 61553e2..4495588 100644 --- a/src/src/view/viewcontainerwidget.cpp +++ b/src/src/view/viewcontainerwidget.cpp @@ -1,4 +1,4 @@ -#include "viewcontainerwidget.h" +#include "viewcontainerwidget.h" #include "thumbnailImage.h" #include "DicomLoader.h" #include @@ -12,6 +12,7 @@ #include "cine/pqVCRToolbar.h" #include #include "measure/ActorDraggableInteractorStyle.h" +#include "measure/MeasureFactory.h" //------------------------------------------------------- @@ -399,3 +400,37 @@ bool ViewContainerWidget::checkFusionStatus(DicomImageView *base, DicomImageView return false; } +void ViewContainerWidget::updateCornerInfoAll() { + manager.smartDo([](auto v, auto calldata) { + if (v->HasSeries()){ + v->updateCornerInfoAll(); + } + }); +} + +void ViewContainerWidget::updateCornerInfoPrivacy() { + manager.smartDo([](auto v, auto calldata) { + if (v->HasSeries()){ + v->updateCornerInfoPrivacy(); + } + }); +} + +void ViewContainerWidget::render() { + manager.smartDo([](auto v, auto calldata) { + if (v->HasSeries()){ + v->Render(); + } + }); +} + +void ViewContainerWidget::activeMeasure() { + + manager.smartDo([](auto v, auto calldata) { + if (v->HasSeries()){ + Measure* measure = MeasureFactory::getMeasure((AnnotationActorType)MeasureHelper::getMeasureType()); + v->ActiveMeasure(measure); + } + }); +} + diff --git a/src/src/view/viewcontainerwidget.h b/src/src/view/viewcontainerwidget.h index 33386aa..9a39e25 100644 --- a/src/src/view/viewcontainerwidget.h +++ b/src/src/view/viewcontainerwidget.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include #include "global/QGlobals.h" @@ -9,6 +9,7 @@ class QGridLayout; class DicomImageView; class SeriesImageSet; +class Measure; class ViewContainerWidget : public QFrame { Q_OBJECT