#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(*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); }