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 "DicomLoader.h"
#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)
{
if (nullptr == base || nullptr == overlap)
{
return false;
}
if (!base->HasSeries() || !overlap->HasSeries())
{
return false;
}
if (base->getSeriesNumber() != DicomModality::ReflMode)
{
return false;
}
if (overlap->getSeriesNumber() == DicomModality::AttMode || overlap->getSeriesNumber() == DicomModality::SosMode)
{
return true;
}
return false;
SeriesImageSet* baseSeries = base->getSeriesInstance();
SeriesImageSet* overlapSeries = overlap->getSeriesInstance();
// no data
if (!base->HasSeries() || !overlap->HasSeries()) return false;
// diff study
if (baseSeries->getStudyUID() == nullptr ||
strcmp(baseSeries->getStudyUID(), overlapSeries->getStudyUID())!=0) return false;
//same series
if (baseSeries->GetSeriesNumber() == overlapSeries->GetSeriesNumber()) return false;
//diff position
if (!compareDoubleArray(baseSeries->GetProperty()->GetPosition(),overlapSeries->GetProperty()->GetPosition(),3)) return false;
//diff orientation
if (!compareDoubleArray(baseSeries->GetProperty()->GetDirectionCosine(),overlapSeries->GetProperty()->GetDirectionCosine(),6)) return false;
//diff bounds
if (!compareDoubleArray(baseSeries->GetData()->GetBounds(), overlapSeries->GetData()->GetBounds(),6)) return false;
return true;
}
void ViewContainerWidget::updateCornerInfoAll() {

View File

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