Use MeasureFactory to refactor viewcontainerwidget
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
#include "QDicomViewer.h"
|
#include "QDicomViewer.h"
|
||||||
#include "global/include_all.h"
|
#include "global/include_all.h"
|
||||||
#include "base/SeriesImageSet.h"
|
#include "base/SeriesImageSet.h"
|
||||||
#include "view/subview/gridpopwidget.h"
|
#include "view/subview/gridpopwidget.h"
|
||||||
@@ -329,54 +329,9 @@ void QDicomViewer::SetupAnnoTool(QToolButton* annoBtn)
|
|||||||
//TODO:考虑从这个类中移除,采用factory模式解耦合
|
//TODO:考虑从这个类中移除,采用factory模式解耦合
|
||||||
void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, AnnotationActorType annType)
|
void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, AnnotationActorType annType)
|
||||||
{
|
{
|
||||||
QList<DicomImageView*> viewers = Container->getViewList();
|
|
||||||
DicomImageView* curV = ui->viewContainer->getCurrentView();
|
DicomImageView* curV = ui->viewContainer->getCurrentView();
|
||||||
switch (annType)
|
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:
|
case AnnotationActorType::DeleteSelectedAnn:
|
||||||
if (curV != nullptr)
|
if (curV != nullptr)
|
||||||
{
|
{
|
||||||
@@ -396,10 +351,7 @@ void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, Annotati
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
ui->viewContainer->activeMeasure();
|
||||||
RulerAnnotationActor* ann = RulerAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -420,92 +372,54 @@ void QDicomViewer::SetupMeasureTool(QToolButton* measureBtn)
|
|||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/distance.png");
|
QPixmap map(":/InfiniteViewer/Icon/distance.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::RulerAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::RulerAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
});
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
RulerAnnotationActor* ann = RulerAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
m->addAction(tr("Angle"), this, [=] {
|
m->addAction(tr("Angle"), this, [=] {
|
||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/angle.png");
|
QPixmap map(":/InfiniteViewer/Icon/angle.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::AngleAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::AngleAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
AngleAnnotationActor* ann = AngleAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
m->addAction(tr("Closed polygon"), this, [=] {
|
m->addAction(tr("Closed polygon"), this, [=] {
|
||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/polygon.png");
|
QPixmap map(":/InfiniteViewer/Icon/polygon.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::ClosedPolygonAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::ClosedPolygonAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
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);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
m->addAction(tr("Open polygon"), this, [=] {
|
m->addAction(tr("Open polygon"), this, [=] {
|
||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/polyline.png");
|
QPixmap map(":/InfiniteViewer/Icon/polyline.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::OpenPolygonAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::OpenPolygonAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
OpenPolyAnnotationActor* ann = OpenPolyAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
m->addAction(tr("Arrow"), this, [=] {
|
m->addAction(tr("Arrow"), this, [=] {
|
||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/arrow.png");
|
QPixmap map(":/InfiniteViewer/Icon/arrow.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::ArrowAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::ArrowAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
ArrowAnnotationActor* ann = ArrowAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
m->addAction(tr("Ellipse"), this, [=] {
|
m->addAction(tr("Ellipse"), this, [=] {
|
||||||
QPixmap map(":/InfiniteViewer/Icon/ellipse.png");
|
QPixmap map(":/InfiniteViewer/Icon/ellipse.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::EllipseAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::EllipseAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
EllipseAnnotationActor* ann = EllipseAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
m->addAction(tr("Text"), this, [=] {
|
m->addAction(tr("Text"), this, [=] {
|
||||||
measureBtn->setChecked(true);
|
measureBtn->setChecked(true);
|
||||||
QPixmap map(":/InfiniteViewer/Icon/text.png");
|
QPixmap map(":/InfiniteViewer/Icon/text.png");
|
||||||
measureBtn->setIcon(QIcon(map));
|
measureBtn->setIcon(QIcon(map));
|
||||||
m_cur_measure = AnnotationActorType::TextAnn;
|
MeasureHelper::setMeasureType(AnnotationActorType::TextAnn);
|
||||||
|
ui->viewContainer->activeMeasure();
|
||||||
QList<DicomImageView*> viewers = ui->viewContainer->getViewList();
|
|
||||||
std::for_each(viewers.begin(), viewers.end(), [=](DicomImageView* v) {
|
|
||||||
TextAnnotationActor* ann = TextAnnotationActor::New();
|
|
||||||
v->ActiveMeasure(ann);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
m->addSeparator();
|
m->addSeparator();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "viewcontainerwidget.h"
|
#include "viewcontainerwidget.h"
|
||||||
#include "thumbnailImage.h"
|
#include "thumbnailImage.h"
|
||||||
#include "DicomLoader.h"
|
#include "DicomLoader.h"
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "cine/pqVCRToolbar.h"
|
#include "cine/pqVCRToolbar.h"
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include "measure/ActorDraggableInteractorStyle.h"
|
#include "measure/ActorDraggableInteractorStyle.h"
|
||||||
|
#include "measure/MeasureFactory.h"
|
||||||
//-------------------------------------------------------
|
//-------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -399,3 +400,37 @@ bool ViewContainerWidget::checkFusionStatus(DicomImageView *base, DicomImageView
|
|||||||
return false;
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <QFrame>
|
#include <QFrame>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include "global/QGlobals.h"
|
#include "global/QGlobals.h"
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
class QGridLayout;
|
class QGridLayout;
|
||||||
class DicomImageView;
|
class DicomImageView;
|
||||||
class SeriesImageSet;
|
class SeriesImageSet;
|
||||||
|
class Measure;
|
||||||
|
|
||||||
class ViewContainerWidget : public QFrame {
|
class ViewContainerWidget : public QFrame {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|||||||
Reference in New Issue
Block a user