diff --git a/src/src/QDicomViewer.cpp b/src/src/QDicomViewer.cpp index dd7eeb6..1be0202 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" @@ -11,18 +11,11 @@ #include #include #include -#include "measure/ControlPointActor.h" -#include "measure/RulerAnnotationActor.h" -#include "measure/AngleAnnotationActor.h" -#include "measure/TextAnnotationActor.h" -#include "measure/EllipseAnnotationActor.h" -#include "measure/OpenPolyAnnotationActor.h" -#include "measure/ArrowAnnotationActor.h" -#include "measure/pqFontPropertyWidget.h" + #include "cine/pqVCRToolbar.h" #include -#include "measure/ActorDraggableInteractorStyle.h"" +#include "measure/ActorDraggableInteractorStyle.h" /************************************************************************ * Consider: @@ -331,11 +324,11 @@ void QDicomViewer::SetupAnnoTool(QToolButton* annoBtn) //AnnotationActor执行相关 -//TODO:考虑从这个类中移除,采用factory模式解耦合 -void QDicomViewer::executeActiveMeasure(ViewContainerWidget* Container, AnnotationActorType annType) +void QDicomViewer::executeActiveMeasure() { + ui->viewContainer->activeMeasure(); DicomImageView* curV = ui->viewContainer->getCurrentView(); - switch (annType) + switch (MeasureHelper::getMeasureType()) { case AnnotationActorType::DeleteSelectedAnn: if (curV != nullptr) @@ -367,7 +360,7 @@ void QDicomViewer::SetupMeasureTool(QToolButton* measureBtn) measureBtn->setToolTip(QString("Measurements")); connect(measureBtn, &QToolButton::clicked, this, [=] { - executeActiveMeasure(ui->viewContainer, m_cur_measure); + executeActiveMeasure(); }); QMenu* m; diff --git a/src/src/QDicomViewer.h b/src/src/QDicomViewer.h index e3f9974..244b098 100644 --- a/src/src/QDicomViewer.h +++ b/src/src/QDicomViewer.h @@ -91,10 +91,8 @@ private: /** * 按照annType的类型,在Container中执行对应的Measurement操作 - * @param Container 包含RenderWindow的QTWidget容器 - * @param annType 需要执行操作的AnnotationActorType */ - void executeActiveMeasure(ViewContainerWidget *Container, AnnotationActorType annType); + void executeActiveMeasure(); /** * 为对应的DicomImageView构建对应的播放控件 diff --git a/src/src/base/infinitiViewer.cxx b/src/src/base/infinitiViewer.cxx index dfaed49..1fb2fd0 100644 --- a/src/src/base/infinitiViewer.cxx +++ b/src/src/base/infinitiViewer.cxx @@ -866,7 +866,8 @@ void infinitiViewer::LoadMeasures(bool forceReload) { } void infinitiViewer::ReloadCurrentSliceMeasure() { - list = measureStore->GetMeasures(SOP_UID, ImageMapper->GetSliceNumber()); + list = measureStore->GetMeasures(SOP_UID, this->SliceOrientation, ImageMapper->GetSliceNumber()); + if (list) { for (int i = 0; i < list->length(); i++) { @@ -891,7 +892,7 @@ void infinitiViewer::ClearCurrentSliceMeasure() const { void infinitiViewer::AddMeasures(vtkObject*, unsigned long eventid, void* calldata) { auto m = static_cast(calldata); if (m->Valid()) { - measureStore->Store(SOP_UID, this->ImageMapper->GetSliceNumber(), m); + measureStore->Store(SOP_UID, this->SliceOrientation,this->ImageMapper->GetSliceNumber(), m); } LoadMeasures(true); this->Render(); @@ -918,7 +919,7 @@ void infinitiViewer::DeleteSelectedMeasure() { void infinitiViewer::DeleteCurrentSliceMeasure() { this->InteractorStyle->ClearSelectedProp(); ClearCurrentSliceMeasure(); - measureStore->RemoveAllInSlice(SOP_UID, this->ImageMapper->GetSliceNumber()); + measureStore->RemoveAllInSlice(SOP_UID, this->SliceOrientation, this->ImageMapper->GetSliceNumber()); ReloadCurrentSliceMeasure(); this->Render(); } diff --git a/src/src/measure/MeasureStore.cpp b/src/src/measure/MeasureStore.cpp index 467f5eb..b4c97de 100644 --- a/src/src/measure/MeasureStore.cpp +++ b/src/src/measure/MeasureStore.cpp @@ -4,37 +4,49 @@ #include "MeasureStore.h" #include "Measure.h" +#include "qdebug.h" +#include MeasureStore* MeasureStore::instance = nullptr; -void MeasureStore::Store(QString SeriesUid, int slice, Measure *measure) { +void MeasureStore::Store(QString SeriesUid, int plane, int slice, Measure *measure) { if (!store.contains(SeriesUid)){ - store[SeriesUid]=QMap>(); + store[SeriesUid]=QMap>>(); } - if (!store[SeriesUid].contains(slice)){ - store[SeriesUid][slice] = QList(); + if (!store[SeriesUid].contains(plane)){ + store[SeriesUid][plane] = QMap>(); } - if(store[SeriesUid][slice].contains(measure)) return; - measure->SetMeasureID(QString("%1-%2").arg(SeriesUid).arg(slice)); - store[SeriesUid][slice].push_back(measure); - + if (!store[SeriesUid][plane].contains(slice)){ + store[SeriesUid][plane][slice] = QList(); + } + measure->SetMeasureID(QString("%1-%2-%3-%4").arg(SeriesUid).arg(plane).arg(slice).arg(store[SeriesUid][plane][slice].size())); + qDebug()<<"store MeasureID:"<GetMeasureID(); + store[SeriesUid][plane][slice].push_back(measure); + qDebug()<<"measure count:"<* MeasureStore::GetMeasures(QString SeriesUid, int slice) { - if (!store.contains(SeriesUid)) return nullptr; - if (!store[SeriesUid].contains(slice))return nullptr; - return &store[SeriesUid][slice]; +QList* MeasureStore::GetMeasures(QString SeriesUid, int plane, int slice) { + + qDebug()<<"measure SeriesUid:"<GetMeasureID(); QStringList list = id.split("-"); measure->ForceDelete(); - store[list[0]][list[1].toInt()].removeOne(measure); + store[list[0]][list[1].toInt()][list[2].toInt()].removeOne(measure); } -void MeasureStore::RemoveAllInSlice(QString SeriesUid,int slice) { - for (auto item:store[SeriesUid][slice]) { +void MeasureStore::RemoveAllInSlice(QString SeriesUid, int plane, int slice) { + for (auto item:store[SeriesUid][plane][slice]) { item->ForceDelete(); } store[SeriesUid][slice].clear(); @@ -42,9 +54,11 @@ void MeasureStore::RemoveAllInSlice(QString SeriesUid,int slice) { void MeasureStore::RemoveAllInSeries(QString SeriesUid) { for (auto series:store[SeriesUid]) { - for (auto item: series) - { - item->ForceDelete(); + for (auto plane :series) { + for (auto item: plane) { + item->ForceDelete(); + } + plane.clear(); } series.clear(); } @@ -54,16 +68,16 @@ void MeasureStore::RemoveAllInSeries(QString SeriesUid) { void MeasureStore::Clear() { for(auto item: store) { - for (auto list :item) - { - for (auto m : list) - { - if (m){ - m->ForceDelete(); - m=nullptr; + for (auto plane :item) { + for (auto list :plane) { + for (auto m : list) { + if (m) { + m->ForceDelete(); + m = nullptr; + } } + list.clear(); } - list.clear(); } } } diff --git a/src/src/measure/MeasureStore.h b/src/src/measure/MeasureStore.h index c7d9c1b..bc56ef4 100644 --- a/src/src/measure/MeasureStore.h +++ b/src/src/measure/MeasureStore.h @@ -18,15 +18,15 @@ public: } return instance; } - void Store(QString SeriesUid,int slice,Measure* measure); + void Store(QString SeriesUid, int plane, int slice,Measure* measure); void Remove(Measure* measure); - void RemoveAllInSlice(QString SeriesUid,int slice); + void RemoveAllInSlice(QString SeriesUid,int plane,int slice); void RemoveAllInSeries(QString SeriesUid); void Clear(); - QList* GetMeasures(QString SeriesUid, int slice); + QList* GetMeasures(QString SeriesUid, int plane, int slice); private: - QMap>> store; + QMap>>> store; static MeasureStore* instance; };