#include "StdAfx.h"
|
#include "CHDefectPicker/DefectPicker.h"
|
#include "CHReviewRecipe/RcpSchedulingInfo.h"
|
|
CDefectPicker::CDefectPicker(void)
|
{
|
Reset();
|
}
|
|
CDefectPicker::~CDefectPicker(void)
|
{
|
Reset();
|
}
|
|
void CDefectPicker::Reset()
|
{
|
m_vecPickingResult.clear();
|
m_vecPickingResultWsi.clear();
|
m_vecPickingResultWsiMultiShot.clear();
|
}
|
|
int CDefectPicker::DefectPicking(VectorSReviewResult* vecSorterResult, CRcpSchedulingInfo* pScheduleInfo, int sortPriority, BOOL bWsi/*=FALSE*/)
|
{
|
if (vecSorterResult==NULL || pScheduleInfo==NULL) return 0;
|
|
int nDefectMaxCount = 0,nPickingTotalCount=0,nPickingPadCount=0, nPickingCount = 0,nPadDefectMaxCount=0, nWsiDefectMaxCount=0;
|
|
nDefectMaxCount = pScheduleInfo->GetMaxPointCount();
|
nPadDefectMaxCount = pScheduleInfo->GetMaxPadPointCount();
|
nWsiDefectMaxCount = pScheduleInfo->GetMaxWsiPointCount();
|
|
// review
|
if (!bWsi)
|
{
|
m_vecPickingResult.clear();
|
|
nPickingCount = min(int(vecSorterResult->size()), nPadDefectMaxCount);
|
|
int index = 0;
|
int nCount = 0;
|
|
for(int nIndx = 0; nIndx < int(vecSorterResult->size()); nIndx++)
|
{
|
if(nCount >= nPickingCount) break;
|
|
SReviewResult dataResult = vecSorterResult->at(nIndx);
|
|
//LYW 210810 DeleteStart
|
//if(dataResult.nLocation != DefectLoc_ASG && dataResult.nLocation != DefectLoc_PAD && dataResult.nLocation != DefectLoc_C2C) continue;
|
//LYW 210810 DeleteEnd
|
|
dataResult.nResultIdx = index;
|
dataResult.nSequenceNo = index++;
|
m_vecPickingResult.push_back(dataResult);
|
|
nCount++;
|
}
|
|
if(nPickingCount > nCount)
|
{
|
nDefectMaxCount += (nPickingCount - nCount);
|
}
|
|
nPickingCount = min(int(vecSorterResult->size()), nDefectMaxCount);
|
//if (nPickingCount <= 0) return 0;
|
|
nCount = 0;
|
for(int nIndx = 0; nIndx < int(vecSorterResult->size()); nIndx++)
|
{
|
if(nCount >= nPickingCount) break;
|
|
SReviewResult dataResult = vecSorterResult->at(nIndx);
|
|
//LYW 210810 DeleteStart
|
//if(dataResult.nLocation == DefectLoc_ASG || dataResult.nLocation == DefectLoc_PAD || dataResult.nLocation == DefectLoc_C2C) continue;
|
//LYW 210810 DeleteEnd
|
|
dataResult.nResultIdx = index;
|
dataResult.nSequenceNo = index++;
|
m_vecPickingResult.push_back(dataResult);
|
|
nCount++;
|
}
|
|
return int(m_vecPickingResult.size());
|
}
|
|
else // wsi
|
{
|
nPickingCount = min(int(vecSorterResult->size()), nWsiDefectMaxCount);
|
if (nPickingCount <= 0) return 0;
|
|
m_vecPickingResultWsi.clear();
|
|
int index = 0;
|
for (int nIdx=0; nIdx<nPickingCount; nIdx++)
|
{
|
SReviewResult dataResult = vecSorterResult->at(nIdx);
|
dataResult.nResultIdx = index;
|
dataResult.nSequenceNo = index++;
|
m_vecPickingResultWsi.push_back(dataResult);
|
}
|
return int(m_vecPickingResultWsi.size());
|
}
|
|
return 0;
|
}
|
int CDefectPicker::DefectPicking(vector <VectorSReviewResult> vecSorterResults, CRcpSchedulingInfo* pScheduleInfo, int sortPriority, BOOL bWsi)
|
{
|
|
return 0;
|
}
|
|
int CDefectPicker::DefectPickingMultiShot(VectorSReviewResult* vecSorterResult, CRcpSchedulingInfo* pScheduleInfo, int sortPriority)
|
{
|
if (vecSorterResult == NULL || pScheduleInfo == NULL) return 0;
|
|
int nDefectMaxCount = 0, nPickingTotalCount = 0, nPickingPadCount = 0, nPickingCount = 0, nPadDefectMaxCount = 0, nWsiDefectMaxCount = 0;
|
|
//nDefectMaxCount = pScheduleInfo->GetMaxPointCount();
|
//nPadDefectMaxCount = pScheduleInfo->GetMaxPadPointCount();
|
nWsiDefectMaxCount = pScheduleInfo->GetMaxWsiPointCount();
|
|
// wsi
|
{
|
nPickingCount = min(int(vecSorterResult->size()), nWsiDefectMaxCount);
|
if (nPickingCount <= 0) return 0;
|
|
//m_vecPickingResultWsi.clear();
|
m_vecPickingResultWsiMultiShot.clear();
|
|
int index = 0;
|
for (int nIdx = 0; nIdx < nPickingCount; nIdx++)
|
{
|
SReviewResult dataResult = vecSorterResult->at(nIdx);
|
dataResult.nResultIdx = index;
|
dataResult.nSequenceNo = index++;
|
m_vecPickingResultWsiMultiShot.push_back(dataResult);
|
}
|
return int(m_vecPickingResultWsiMultiShot.size());
|
}
|
|
return 0;
|
}
|
|
SReviewResult* CDefectPicker::GetPickingResult(int nIdx)
|
{
|
if (nIdx<0 || nIdx>=int(m_vecPickingResult.size())) return NULL;
|
|
return &m_vecPickingResult[nIdx];
|
}
|
|
SReviewResult* CDefectPicker::GetPickingResultWsi(int nIdx)
|
{
|
if (nIdx<0 || nIdx>=int(m_vecPickingResultWsi.size())) return NULL;
|
|
return &m_vecPickingResultWsi[nIdx];
|
}
|
|
SReviewResult* CDefectPicker::GetPickingResultWsiMultiShot(int nIdx)
|
{
|
if (nIdx < 0 || nIdx >= int(m_vecPickingResultWsiMultiShot.size())) return NULL;
|
|
return &m_vecPickingResultWsiMultiShot[nIdx];
|
}
|
|
const SReviewResult* CDefectPicker::GetPickingResultWsiMultiShot(int nIdx) const
|
{
|
if (nIdx < 0 || nIdx >= int(m_vecPickingResultWsiMultiShot.size())) return NULL;
|
|
return &m_vecPickingResultWsiMultiShot[nIdx];
|
}
|
|
const SReviewResult* CDefectPicker::GetPickingResult(int nIdx) const
|
{
|
if (nIdx<0 || nIdx>=int(m_vecPickingResult.size())) return NULL;
|
|
return &m_vecPickingResult[nIdx];
|
}
|
const SReviewResult* CDefectPicker::GetPickingResultWsi(int nIdx) const
|
{
|
if (nIdx<0 || nIdx>=int(m_vecPickingResultWsi.size())) return NULL;
|
|
return &m_vecPickingResultWsi[nIdx];
|
}
|