#include "StdAfx.h"
|
#include "CHReviewPrioritySorter/PrioritySorter.h"
|
|
CPrioritySorter::CPrioritySorter(int nMaxPointCount)
|
{
|
m_pPS2P = NULL;
|
m_nMaxPointCount = nMaxPointCount;
|
|
Reset();
|
}
|
|
CPrioritySorter::~CPrioritySorter(void)
|
{
|
Reset();
|
}
|
|
void CPrioritySorter::Reset()
|
{
|
m_bUseWSI = FALSE;
|
m_pGlassResult = NULL;
|
m_pRsRcpReviewInfo = NULL;
|
m_pRsRcpMeasureInfo = NULL;
|
|
m_vecDefectIndex.clear();
|
m_vecDefectResultPtr.clear();
|
|
m_vecSortingResult.clear();
|
m_vecSortingResultMeasure.clear();
|
m_vecSortingResultUser.clear();
|
m_vecSortingResultReflow.clear();
|
m_vecSortingResultWsi.clear();
|
m_vecSortingResultWsiReflow.clear();
|
m_vecSortingResultWsiUser.clear();
|
m_vecSortingResultWsiMultiShot.clear();
|
}
|
|
int CPrioritySorter::SaveDefectPoint(VectorDefectResultPtr& vecDefectResultPtr, const CString& strFilename)
|
{
|
//HSJ
|
FILE *fp = NULL;
|
_tfopen_s(&fp, strFilename, _T("w"));
|
if (fp==NULL) return 0;
|
|
_ftprintf_s(fp, _T("index,\tdf_idx,\toptic,\tgray,\tsize,\tpeak,\tx_pos,\ty_pos,\tJudge,\tSubtype,\tCode,\tZone,\tArea,\tStackType\n"));
|
|
int nIndex = 0;
|
CDefectResult *pDefectResult = NULL;
|
for (VectorDetectResultPrtIt it=vecDefectResultPtr.begin(); it!=vecDefectResultPtr.end(); it++)
|
{
|
pDefectResult = static_cast<CDefectResult*>(*it);
|
|
if(pDefectResult == NULL) continue;
|
|
_ftprintf_s(fp, _T("%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%.3lf,\t%.3lf,\t%d,\t%d,\t%s,\t%s,\t%d,\t%s\n"),
|
nIndex++, pDefectResult->nDefectIdx, pDefectResult->nOpticType, pDefectResult->nGrayType, pDefectResult->nAOISize, pDefectResult->nAOIPeak,
|
pDefectResult->nUMOriginX/1000.0, pDefectResult->nUMOriginY/1000.0,pDefectResult->nJudgeType,pDefectResult->nSubType,pDefectResult->strDefectCode, pDefectResult->strDefectZone, pDefectResult->nAOIArea, pDefectResult->strStackType);
|
}
|
|
fclose(fp);
|
|
return 1;
|
}
|
|
int CPrioritySorter::PrioritySorting(CGlassResult *pGlassResult, const CRsRcpReviewInfo *pRsRcpReviewInfo, const CRsRcpMeasureInfo *pRsRcpMesureInfo, BOOL bUseWSI)
|
{
|
m_pGlassResult = pGlassResult;
|
m_pRsRcpReviewInfo = pRsRcpReviewInfo;
|
m_pRsRcpMeasureInfo = pRsRcpMesureInfo;
|
m_bUseWSI = bUseWSI;
|
|
m_vecSortingResult.clear();
|
m_vecSortingResultMeasure.clear();
|
m_vecSortingResultUser.clear();
|
m_vecSortingResultReflow.clear();
|
m_vecSortingResultWsi.clear();
|
m_vecSortingResultWsiReflow.clear();
|
m_vecSortingResultWsiMultiShot.clear();
|
|
return PrioritySorting();
|
}
|
|
int CPrioritySorter::FilteringAndSorting(CGlassResult *pGlassResult, const CRsRcpReviewInfo* pRsRcpReviewInfo, const CRsRcpMeasureInfo *pRsRcpMesureInfo, BOOL bUseWSI)
|
{
|
m_pGlassResult = pGlassResult;
|
m_pRsRcpReviewInfo = pRsRcpReviewInfo;
|
m_pRsRcpMeasureInfo = pRsRcpMesureInfo;
|
m_bUseWSI = bUseWSI;
|
|
const CRcpSchedulingInfo* pScheduleInfo = pRsRcpReviewInfo->GetRcpSchedulingInfo();
|
if (pScheduleInfo == NULL) return 0;
|
|
m_nMaxPointCount = pScheduleInfo->GetMaxPointCount();
|
|
m_vecSortingResult.clear();
|
m_vecSortingResultMeasure.clear();
|
m_vecSortingResultUser.clear();
|
m_vecSortingResultReflow.clear();
|
m_vecSortingResultWsi.clear();
|
m_vecSortingResultWsiReflow.clear();
|
m_vecSortingResultWsiUser.clear();
|
m_vecSortingResultWsiMultiShot.clear();
|
|
return FilteringAndSorting();
|
}
|
|
|
SReviewResult* CPrioritySorter::GetSortingResult(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResult.size()))
|
return NULL;
|
|
return &m_vecSortingResult[nIndex];
|
}
|
|
SReviewResult* CPrioritySorter::GetSortingResultUser(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultUser.size()))
|
return NULL;
|
|
return &m_vecSortingResultUser[nIndex];
|
}
|
|
SReviewResult* CPrioritySorter::GetSortingResultReflow(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultReflow.size()))
|
return NULL;
|
|
return &m_vecSortingResultReflow[nIndex];
|
}
|
|
SReviewResult* CPrioritySorter::GetSortingResultMeasure(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultMeasure.size()))
|
return NULL;
|
|
return &m_vecSortingResultMeasure[nIndex];
|
}
|
|
|
SReviewResult* CPrioritySorter::GetSortingResultWsi(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultWsi.size()))
|
return NULL;
|
|
return &m_vecSortingResultWsi[nIndex];
|
}
|
|
SReviewResult* CPrioritySorter::GetSortingResultWsiReflow(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultWsiReflow.size()))
|
return NULL;
|
|
return &m_vecSortingResultWsiReflow[nIndex];
|
}
|
SReviewResult* CPrioritySorter::GetSortingResultWsiUser(int nIndex)
|
{
|
if(nIndex<0 || nIndex>=int(m_vecSortingResultWsiUser.size()))
|
return NULL;
|
|
return &m_vecSortingResultWsiUser[nIndex];
|
}
|
|
BOOL CPrioritySorter::CompareDefectSizeDescending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOISize > rhs->nAOISize);
|
}
|
|
BOOL CPrioritySorter::CompareDefectSizeAscending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOISize < rhs->nAOISize);
|
}
|
|
BOOL CPrioritySorter::CompareDefectPeakDescending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIPeak > rhs->nAOIPeak);
|
}
|
|
BOOL CPrioritySorter::CompareDefectPeakAscending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIPeak < rhs->nAOIPeak);
|
}
|
|
BOOL CPrioritySorter::CompareDefectCircleSizeDescending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIArea > rhs->nAOIArea);
|
}
|
|
BOOL CPrioritySorter::CompareDefectCircleSizeAscending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIArea < rhs->nAOIArea);
|
}
|
|
BOOL CPrioritySorter::CompareDefectCirclePeakDescending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIArea > rhs->nAOIArea);
|
}
|
|
BOOL CPrioritySorter::CompareDefectCirclePeakAscending(const CDefectResult* lhs, const CDefectResult* rhs)
|
{
|
return (lhs->nAOIArea < rhs->nAOIArea);
|
}
|