Change check fusion status logic.

This commit is contained in:
Krad
2022-04-15 09:20:18 +08:00
parent b6752d4c1a
commit dcb75e7b05
2 changed files with 33 additions and 20 deletions

View File

@@ -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>
@@ -376,28 +376,32 @@ void ViewContainerWidget::removeCurrentViewWithFusion()
} }
} }
bool compareDoubleArray(double* a, double* b, int valCount){
static const double m = 1.0;
for (int i = 0; i < valCount; i++){
if (fabs(a[i]-b[i])>m) return false;
}
return true;
}
bool ViewContainerWidget::checkFusionStatus(DicomImageView *base, DicomImageView* overlap) bool ViewContainerWidget::checkFusionStatus(DicomImageView *base, DicomImageView* overlap)
{ {
if (nullptr == base || nullptr == overlap) SeriesImageSet* baseSeries = base->getSeriesInstance();
{ SeriesImageSet* overlapSeries = overlap->getSeriesInstance();
// no data
return false; if (!base->HasSeries() || !overlap->HasSeries()) return false;
} // diff study
if (!base->HasSeries() || !overlap->HasSeries()) if (baseSeries->getStudyUID() == nullptr ||
{ strcmp(baseSeries->getStudyUID(), overlapSeries->getStudyUID())!=0) return false;
return false; //same series
} if (baseSeries->GetSeriesNumber() == overlapSeries->GetSeriesNumber()) return false;
if (base->getSeriesNumber() != DicomModality::ReflMode) //diff position
{ if (!compareDoubleArray(baseSeries->GetProperty()->GetPosition(),overlapSeries->GetProperty()->GetPosition(),3)) return false;
return false; //diff orientation
} if (!compareDoubleArray(baseSeries->GetProperty()->GetDirectionCosine(),overlapSeries->GetProperty()->GetDirectionCosine(),6)) return false;
if (overlap->getSeriesNumber() == DicomModality::AttMode || overlap->getSeriesNumber() == DicomModality::SosMode) //diff bounds
{ if (!compareDoubleArray(baseSeries->GetData()->GetBounds(), overlapSeries->GetData()->GetBounds(),6)) return false;
return true; return true;
}
return false;
} }
void ViewContainerWidget::updateCornerInfoAll() { void ViewContainerWidget::updateCornerInfoAll() {

View File

@@ -70,6 +70,15 @@ protected:
private: private:
//fusion //fusion
void replaceViewWithFusion(); void replaceViewWithFusion();
/**
* 判断是否能fusion,判断依据为是否相同Study
* 且是否相同ImageOrientation和ImagePosition,
* 两边的Bounds是否一致
* @param base 基础数据源View
* @param overlap 覆盖数据源View
* @return
*/
bool checkFusionStatus(DicomImageView *base, DicomImageView* overlap); bool checkFusionStatus(DicomImageView *base, DicomImageView* overlap);
DicomImageView *createImageView(QWidget* parent); DicomImageView *createImageView(QWidget* parent);