Change check fusion status logic.
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user