Use MeasureFactory to refactor viewcontainerwidget

This commit is contained in:
Krad
2022-03-11 14:08:23 +08:00
parent be526bcf07
commit fc8e784758
3 changed files with 55 additions and 105 deletions

View File

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

View File

@@ -1,4 +1,4 @@
#include "viewcontainerwidget.h"
#include "viewcontainerwidget.h"
#include "thumbnailImage.h"
#include "DicomLoader.h"
#include <QWidget>
@@ -12,6 +12,7 @@
#include "cine/pqVCRToolbar.h"
#include <QMessageBox>
#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);
}
});
}

View File

@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <QFrame>
#include <QScrollBar>
#include "global/QGlobals.h"
@@ -9,6 +9,7 @@
class QGridLayout;
class DicomImageView;
class SeriesImageSet;
class Measure;
class ViewContainerWidget : public QFrame {
Q_OBJECT