#include "StdAfx.h"
|
#include "CHDefectPicker/DefectPicker_Range.h"
|
#include "CHReviewRecipe/RcpSchedulingInfo.h"
|
|
CDefectPicker_Range::CDefectPicker_Range(void)
|
{
|
Reset();
|
}
|
|
CDefectPicker_Range::~CDefectPicker_Range(void)
|
{
|
Reset();
|
}
|
|
void CDefectPicker_Range::Reset()
|
{
|
m_vecPickingResult.clear();
|
m_vecPickingResultWsi.clear();
|
}
|
|
int CDefectPicker_Range::DefectPicking(VectorSReviewResult* vecSorterResult, CRcpSchedulingInfo* pScheduleInfo, BOOL bWsi/*=FALSE*/)
|
{
|
if (vecSorterResult==NULL || pScheduleInfo==NULL) return 0;
|
|
int nDefectMaxCount = 0, nPickingCount = 0;
|
|
// review
|
if (!bWsi)
|
{
|
int nRangeLeftCount = pScheduleInfo->GetRangePointCount(Range_Left);
|
int nRangeLeftStartX = pScheduleInfo->GetRangeStartX(Range_Left);
|
int nRangeLeftEndX = pScheduleInfo->GetRangeEndX(Range_Left);
|
|
int nRangeMidCount = pScheduleInfo->GetRangePointCount(Range_Middle);
|
int nRangeMidStartX = pScheduleInfo->GetRangeStartX(Range_Middle);
|
int nRangeMidEndX = pScheduleInfo->GetRangeEndX(Range_Middle);
|
|
int nRangeRightCount = pScheduleInfo->GetRangePointCount(Range_Right);
|
int nRangeRightStartX = pScheduleInfo->GetRangeStartX(Range_Right);
|
int nRangeRightEndX = pScheduleInfo->GetRangeEndX(Range_Right);
|
|
int nRangeLeftAddCount=0, nRangeMidAddCount=0, nRangeRightAddCount=0;
|
|
for (int nIdx=0; nIdx<int(vecSorterResult->size()); nIdx++)
|
{
|
SReviewResult dataResult = vecSorterResult->at(nIdx);
|
|
// add left
|
if ((dataResult.nUMOriginX>=nRangeLeftStartX&&dataResult.nUMOriginX<nRangeLeftEndX) && nRangeLeftAddCount<nRangeLeftCount)
|
{
|
dataResult.nRangeIdx = 0;
|
m_vecPickingResult.push_back(dataResult);
|
nRangeLeftAddCount++;
|
|
continue;
|
}
|
|
// add middle
|
if ((dataResult.nUMOriginX>=nRangeMidStartX&&dataResult.nUMOriginX<nRangeMidEndX) && nRangeMidAddCount<nRangeMidCount)
|
{
|
dataResult.nRangeIdx = 1;
|
m_vecPickingResult.push_back(dataResult);
|
nRangeMidAddCount++;
|
|
continue;
|
}
|
|
// add right
|
if ((dataResult.nUMOriginX>=nRangeRightStartX&&dataResult.nUMOriginX<nRangeRightEndX) && nRangeRightAddCount<nRangeRightCount)
|
{
|
dataResult.nRangeIdx = 0;
|
m_vecPickingResult.push_back(dataResult);
|
nRangeRightAddCount++;
|
|
continue;
|
}
|
}
|
|
return int(m_vecPickingResult.size());
|
}
|
else // wsi
|
{
|
// default picking
|
nDefectMaxCount = pScheduleInfo->GetMaxWsiPointCount();
|
|
nPickingCount = min(int(vecSorterResult->size()), nDefectMaxCount);
|
if (nPickingCount <= 0) return 0;
|
|
m_vecPickingResultWsi.clear();
|
|
for (int nIdx=0; nIdx<nPickingCount; nIdx++)
|
{
|
SReviewResult dataResult = vecSorterResult->at(nIdx);
|
|
m_vecPickingResultWsi.push_back(dataResult);
|
}
|
|
return int(m_vecPickingResultWsi.size());
|
}
|
|
return 0;
|
}
|