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