#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); if(dataResult.nLocation != DefectLoc_ASG && dataResult.nLocation != DefectLoc_PAD && dataResult.nLocation != DefectLoc_C2C) continue; 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); if(dataResult.nLocation == DefectLoc_ASG || dataResult.nLocation == DefectLoc_PAD || dataResult.nLocation == DefectLoc_C2C) continue; 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; nIdxat(nIdx); dataResult.nResultIdx = index; dataResult.nSequenceNo = index++; m_vecPickingResultWsi.push_back(dataResult); } return int(m_vecPickingResultWsi.size()); } return 0; } int CDefectPicker::DefectPicking(vector 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]; }