#include "StdAfx.h" #include "CHReviewResult/GlassResult.h" using namespace CHReviewResult; double CGlassResult::CalculateDistance(int nPosX, int nPosY, int nGrabX, int nGrabY) { double dx = double(nPosX-nGrabX) / 1000.0; double dy = double(nPosY-nGrabY) / 1000.0; return sqrt(dx*dx + dy*dy); } CGlassResult::CGlassResult(void) { InitializeCriticalSection(&m_csProcess); InitializeCriticalSection(&m_csDefect); Reset(); } CGlassResult::~CGlassResult(void) { Reset(); DeleteCriticalSection(&m_csProcess); DeleteCriticalSection(&m_csDefect); } void CGlassResult::Reset() { // current status m_bReadRawFile = FALSE; m_nCurDefectIdx = 0; m_dwMinFrameTick = 200; //ms m_nDeFocusCount = 0; m_strGlassLastName = _T(""); // glass info m_nDivideType = 0; m_nSlotNum = 0; m_nGlassSizeX = 0; m_nGlassSizeY = 0; m_nCollisionDistanceX = 0; m_nCollisionDistanceY = 0; m_nCollisionXPos1 = 0; m_nCollisionXPos2 = 0; m_nOriginDir = 0; m_nCornerCutDir = 0; m_nReviewSnapSerialNo = 0; m_glassJudge = 0; m_bCenterCoordinate = FALSE; m_bInverseCoordinate = FALSE; m_dDistanceThreshold = 9999.0; //AOI Raw File Path m_strAOIRawFileName = _T(""); //TD m_strAOIRawFilePath = _T(""); //TD m_strAOIRawCDFileName = _T(""); //CD m_strAOIRawCDFilePath = _T(""); //CD m_strAOIRawSDFileName = _T(""); //SD m_strAOIRawSDFilePath = _T(""); //SD //Local Raw File Path m_strLocalRawFilePath = _T(""); //TD m_strLocalRawCDFilePath = _T(""); //CD m_strLocalRawSDFilePath = _T(""); //SD // glass transfer info m_strLotID = _T(""); m_strGlassID = _T(""); m_strRecipeID = _T("default"); m_strProcessID = _T(""); m_strPPID = _T(""); m_strPPID_RC = _T(""); m_strStepID = _T(""); m_strFlowID = _T(""); m_strFlowHistory = _T(""); m_strOperID = _T(""); m_strGlassCode = _T(""); m_equipID = _T(""); m_strJobType = _T(""); m_strJobID = _T(""); m_strLotSeqNum = _T(""); m_strSlotSeqNum = _T(""); m_strPropertyCode = _T(""); m_strJobJudgeCode = _T(""); m_strJobGradeCode = _T(""); m_strSubstrateType = _T(""); m_strJobSize = _T(""); m_strGlassThickness = _T(""); m_strJobAngle = _T(""); m_strJobFlip = _T(""); m_strCuttingGlassType = _T(""); m_strPairJobID = _T(""); m_strPairFlag = _T(""); m_strOptionValue = _T(""); m_strReserved = _T(""); /////////// 20170825 smok. ph2 element Ãß°¡ m_strGlassJudgeCode = _T(""); m_strGlassGradeCode = _T(""); m_strProdID = _T(""); m_strProcessingFlag = _T(""); m_strInspectionJudgeData = _T(""); m_strSkipFlag = _T(""); m_strInspectionFlag = _T(""); m_strMode = _T(""); m_strGlassType = _T(""); m_strDummyType = _T(""); m_strProcessingCount = _T(""); // time m_strUnLoadingTime = _T(""); m_strResultDate = _T(""); // align info m_AlignRecipe.Reset(); m_AlignResult.Reset(); // cell info m_vecCellResult.clear(); // defect info m_vecCrackDefectResult.clear(); m_vecMaskDefectResult.clear(); m_vecPadDefectResult.clear(); m_vecCommonDefectResult.clear(); m_vecAlignDefectResult.clear(); m_vecActiveDefectResult.clear(); m_vecReworkDefectResult.clear(); // review result info m_vecReviewResult.clear(); m_vecUserResult.clear(); m_vecWsiResult.clear(); m_vecMeasureResult.clear(); m_vecReflowResult.clear(); m_vecWsiReflowResult.clear(); m_vecWsiMultiShotResult.clear(); // review schedule result m_vecReviewScheduleResult.clear(); m_vecUserScheduleResult.clear(); m_vecWsiScheduleResult.clear(); m_vecMeasureScheduleResult.clear(); m_vecReflowScheduleResult.clear(); m_vecWsiReflowScheduleResult.clear(); m_vecWsiMultiShotScheduleResult.clear(); //FDCº¸°í¿ë Review Contrast //#3524_210723_LYW_CF AOI Review µðÆ÷Ä¿½º ¾Ë¶÷ Ãß°¡ ¹× FDC º¸°í ¹æ½Ä °³¼± MOD Start nReview00ImageContrast = 5; nReview01ImageContrast = 5; //#3524_210723_LYW_CF AOI Review µðÆ÷Ä¿½º ¾Ë¶÷ Ãß°¡ ¹× FDC º¸°í ¹æ½Ä °³¼± MOD End // defect result for (MapDefectResultIt it = m_mapDefectResult.begin(); it != m_mapDefectResult.end(); it++) { CDefectResult* pDefect = static_cast(it->second); delete pDefect; } m_mapDefectResult.clear(); } void CGlassResult::HT_Reset() { // current status m_bReadRawFile = FALSE; m_nCurDefectIdx = 0; m_dwMinFrameTick = 200; //ms m_nDeFocusCount = 0; m_strGlassLastName = _T(""); // glass info m_nDivideType = 0; m_nSlotNum = 0; m_nGlassSizeX = 0; m_nGlassSizeY = 0; m_nCollisionDistanceX = 0; m_nCollisionDistanceY = 0; m_nCollisionXPos1 = 0; m_nCollisionXPos2 = 0; m_nOriginDir = 0; m_nCornerCutDir = 0; m_nReviewSnapSerialNo = 0; m_glassJudge = 0; m_bCenterCoordinate = FALSE; m_bInverseCoordinate = FALSE; m_dDistanceThreshold = 9999.0; //AOI Raw File Path m_strAOIRawFileName = _T(""); //TD m_strAOIRawFilePath = _T(""); //TD m_strAOIRawCDFileName = _T(""); //CD m_strAOIRawCDFilePath = _T(""); //CD m_strAOIRawSDFileName = _T(""); //SD m_strAOIRawSDFilePath = _T(""); //SD //Local Raw File Path m_strLocalRawFilePath = _T(""); //TD m_strLocalRawCDFilePath = _T(""); //CD m_strLocalRawSDFilePath = _T(""); //SD // glass transfer info m_strLotID = _T(""); m_strGlassID = _T(""); m_strRecipeID = _T("default"); m_strProcessID = _T(""); m_strPPID = _T(""); m_strPPID_RC = _T(""); m_strStepID = _T(""); m_strFlowID = _T(""); m_strFlowHistory = _T(""); m_strOperID = _T(""); m_strGlassCode = _T(""); m_equipID = _T(""); m_strJobType = _T(""); m_strJobID = _T(""); m_strLotSeqNum = _T(""); m_strSlotSeqNum = _T(""); m_strPropertyCode = _T(""); m_strJobJudgeCode = _T(""); m_strJobGradeCode = _T(""); m_strSubstrateType = _T(""); m_strJobSize = _T(""); m_strGlassThickness = _T(""); m_strJobAngle = _T(""); m_strJobFlip = _T(""); m_strCuttingGlassType = _T(""); m_strPairJobID = _T(""); m_strPairFlag = _T(""); m_strOptionValue = _T(""); m_strReserved = _T(""); /////////// 20170825 smok. ph2 element Ãß°¡ m_strGlassJudgeCode = _T(""); m_strGlassGradeCode = _T(""); m_strProdID = _T(""); m_strProcessingFlag = _T(""); m_strInspectionJudgeData = _T(""); m_strSkipFlag = _T(""); m_strInspectionFlag = _T(""); m_strMode = _T(""); m_strGlassType = _T(""); m_strDummyType = _T(""); m_strProcessingCount = _T(""); // time m_strUnLoadingTime = _T(""); m_strResultDate = _T(""); // align info m_AlignRecipe.Reset(); m_AlignResult.Reset(); // cell info m_vecCellResult.clear(); // defect info m_vecCrackDefectResult.clear(); m_vecMaskDefectResult.clear(); m_vecPadDefectResult.clear(); m_vecCommonDefectResult.clear(); m_vecAlignDefectResult.clear(); m_vecActiveDefectResult.clear(); m_vecReworkDefectResult.clear(); // review result info m_vecReviewResult.clear(); m_vecUserResult.clear(); m_vecWsiResult.clear(); m_vecMeasureResult.clear(); m_vecReflowResult.clear(); m_vecWsiReflowResult.clear(); m_vecWsiMultiShotResult.clear(); // review schedule result m_vecReviewScheduleResult.clear(); m_vecUserScheduleResult.clear(); m_vecWsiScheduleResult.clear(); m_vecMeasureScheduleResult.clear(); m_vecReflowScheduleResult.clear(); m_vecWsiReflowScheduleResult.clear(); m_vecWsiMultiShotScheduleResult.clear(); //FDCº¸°í¿ë Review Contrast //#3524_210723_LYW_CF AOI Review µðÆ÷Ä¿½º ¾Ë¶÷ Ãß°¡ ¹× FDC º¸°í ¹æ½Ä °³¼± MOD Start nReview00ImageContrast = 50; nReview01ImageContrast = 50; //#3524_210723_LYW_CF AOI Review µðÆ÷Ä¿½º ¾Ë¶÷ Ãß°¡ ¹× FDC º¸°í ¹æ½Ä °³¼± MOD End //// defect result //for (MapDefectResultIt it = m_mapDefectResult.begin(); it != m_mapDefectResult.end(); it++) //{ // CDefectResult* pDefect = static_cast(it->second); // delete pDefect; //} m_mapDefectResult.clear(); } void CGlassResult::AddCellResult(const CCellResult& cellResult) //ºÐÆÇ Á¤º¸? { CCellResult transResult = cellResult; if (m_nDivideType==1) // AºÐÆÇ { } else if (m_nDivideType==2) // BºÐÆÇ { } m_vecCellResult.push_back(transResult); } void CGlassResult::AddReviewScheduleResult(const CPathSchedulerResult& scheduleResult) { m_vecReviewScheduleResult.push_back(scheduleResult); } void CGlassResult::AddUserScheduleResult(const CPathSchedulerResult& scheduleResult) { m_vecUserScheduleResult.push_back(scheduleResult); } void CGlassResult::AddWsiScheduleResult(const CPathSchedulerResult& scheduleResult) { m_vecWsiScheduleResult.push_back(scheduleResult); } void CGlassResult::AddMeasureScheduleRedult(const CPathSchedulerResult& scheduleResult) { m_vecMeasureScheduleResult.push_back(scheduleResult); } void CGlassResult::AddReflowScheduleRedult( const CPathSchedulerResult& scheduleResult ) { m_vecReflowScheduleResult.push_back(scheduleResult); } void CGlassResult::AddWsiReflowScheduleRedult( const CPathSchedulerResult& scheduleResult ) { m_vecWsiReflowScheduleResult.push_back(scheduleResult); } void CGlassResult::AddWsiMultiShotScheduleResult(const CPathSchedulerResult& scheduleResult) { m_vecWsiMultiShotScheduleResult.push_back(scheduleResult); } const VectorReviewScheduleResult* CGlassResult::GetVectorWsiMultiShotScheduleResult() const { return &m_vecWsiMultiShotScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorWsiMultiShotScheduleResult() { return &m_vecWsiMultiShotScheduleResult; } int CGlassResult::GetWsiMultiShotScheduleResultCount() const { return (int)m_vecWsiMultiShotScheduleResult.size(); } CPathSchedulerResult* CGlassResult::GetWsiMultiShotScheduleResult(int nModuleIdx) { for (VectorReviewScheduleResultIt it = m_vecWsiMultiShotScheduleResult.begin(); it != m_vecWsiMultiShotScheduleResult.end(); it++) { if (nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetWsiMultiShotScheduleResult(int nModuleIdx) const { for (constVectorReviewScheduleResultIt it = m_vecWsiMultiShotScheduleResult.begin(); it != m_vecWsiMultiShotScheduleResult.end(); it++) { if (nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetWsiMultiShotSSchedulerResultCount(int nModuleIdx) const { const CPathSchedulerResult* pWsiMultiShotScheduleResult = GetWsiMultiShotScheduleResult(nModuleIdx); if (pWsiMultiShotScheduleResult == NULL) return -1; return pWsiMultiShotScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetWsiMultiShotSSchedulerResult(int nModuleIdx, int nResultIdx) { CPathSchedulerResult* pScheduleResult = GetWsiMultiShotScheduleResult(nModuleIdx); if (pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } const SSchedulerResult* CGlassResult::GetWsiMultiShotSSchedulerResult(int nModuleIdx, int nResultIdx) const { const CPathSchedulerResult* pScheduleResult = GetWsiMultiShotScheduleResult(nModuleIdx); if (pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } void CGlassResult::AddWsiUserScheduleRedult( const CPathSchedulerResult& scheduleResult ) { m_vecWsiUserScheduleResult.push_back(scheduleResult); } BOOL CGlassResult::AddDefectResult(CDefectResult* pDefectResult) { EnterCriticalSection(&m_csDefect); if (!pDefectResult) { LeaveCriticalSection(&m_csDefect); return FALSE; } if (pDefectResult) { pDefectResult->nDefectIdx = m_nCurDefectIdx; m_mapDefectResult.insert(std::make_pair(pDefectResult->nUMOriginX, pDefectResult)); m_nCurDefectIdx++; ClassifyDefectResult(pDefectResult); } LeaveCriticalSection(&m_csDefect); return TRUE; } void CGlassResult::ClassifyDefectResult(CDefectResult* pDefectResult) { if(pDefectResult->nLocation == DefectLoc_Crack) { m_vecCrackDefectResult.push_back(*pDefectResult); } else if(pDefectResult->nLocation == DefectLoc_ASG || pDefectResult->nLocation == DefectLoc_PAD || pDefectResult->nLocation == DefectLoc_C2C) { m_vecPadDefectResult.push_back(*pDefectResult); } else if(pDefectResult->nLocation == DefectLoc_Align) { m_vecAlignDefectResult.push_back(*pDefectResult); } //subtype else if(pDefectResult->nSubType == DefectSubType_MC || pDefectResult->nSubType == DefectSubType_Mask) { m_vecMaskDefectResult.push_back(*pDefectResult); } else if(pDefectResult->nSubType == DefectSubType_Common) { m_vecCommonDefectResult.push_back(*pDefectResult); } else { m_vecActiveDefectResult.push_back(*pDefectResult); } //rework, À§ ÄÚµå¿Í Áߺ¹°¡´ÉÇÔ. if(pDefectResult->bRework) { m_vecReworkDefectResult.push_back(*pDefectResult); } } BOOL CGlassResult::CheckReviewComplete(int nModuleIdx) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecReviewResult.begin(); it!=m_vecReviewResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhs] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pReviewResult = GetReviewResult(nModuleIdx); if (pReviewResult) { bRet = pReviewResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckUserComplete(int nModuleIdx) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecUserResult.begin(); it!=m_vecUserResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult) { bRet = pReviewResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckWsiComplete(int nModuleIdx) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecWsiResult.begin(); it!=m_vecWsiResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pWsiResult = GetWsiResult(nModuleIdx); if (pWsiResult) { bRet = pWsiResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckMeasureComplete(int nModuleIdx) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecMeasureResult.begin(); it!=m_vecMeasureResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pMeasureResult = GetMeasureResult(nModuleIdx); if (pMeasureResult) { bRet = pMeasureResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckReflowComplete( int nModuleIdx/*=-1*/ ) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecReflowResult.begin(); it!=m_vecReflowResult.end(); it++) { bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pReviewResult = GetReflowResult(nModuleIdx); if (pReviewResult) { bRet = pReviewResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckWsiReflowComplete(int nModuleIdx) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecWsiReflowResult.begin(); it!=m_vecWsiReflowResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pWsiResult = GetWsiReflowResult(nModuleIdx); if (pWsiResult) { bRet = pWsiResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::SetReviewResultData(int nModuleIdx, int nResultIdx, VectorImageData& vectorImageData, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult *pSReviewResult = GetSReviewResult(nModuleIdx, nResultIdx); if (pSReviewResult) { pSReviewResult->nResultCode = ReviewResult_Snap_Complete; pSReviewResult->nUMGrabPosX = nGlassPosX; pSReviewResult->nUMGrabPosY = nGlassPosY; pSReviewResult->dDurationTime = dDurationTime; pSReviewResult->vectorImageData = vectorImageData; //Modify by Juneki 2016-03-23 for(int i=0;i=MAX_IMAGEDATA) break; pSReviewResult->vectorImageData[i]= vectorImageData[i]; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetUserResultData(int nModuleIdx, int nResultIdx, VectorImageData& vectorImageData, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult *pSReviewResult = GetSUserResult(nModuleIdx, nResultIdx); if (pSReviewResult) { pSReviewResult->nResultCode = ReviewResult_Snap_Complete; pSReviewResult->nUMGrabPosX = nGlassPosX; pSReviewResult->nUMGrabPosY = nGlassPosY; pSReviewResult->dDurationTime = dDurationTime; //pSReviewResult->vectorImageData = vectorImageData; //Modify by Juneki 2016-03-23 for(int i=0;i=MAX_IMAGEDATA) break; pSReviewResult->vectorImageData[i]= vectorImageData[i]; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetMeasureResultData(int nModuleIdx, int nResultIdx, VectorImageData& vectorImageData, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult *pSReviewResult = GetSMeasureResult(nModuleIdx, nResultIdx); if (pSReviewResult) { pSReviewResult->nResultCode = ReviewResult_Snap_Complete; pSReviewResult->nUMGrabPosX = nGlassPosX; pSReviewResult->nUMGrabPosY = nGlassPosY; pSReviewResult->dDurationTime = dDurationTime; //pSReviewResult->vectorImageData = vectorImageData; //Modify by Juneki 2016-03-23 for(int i=0;i=MAX_IMAGEDATA) break; pSReviewResult->vectorImageData[i]= vectorImageData[i]; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetWsiResultData(int nModuleIdx, int nResultIdx, const SReviewResult& wsiResult, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult* pSWsiResult = GetSWsiResult(nModuleIdx, nResultIdx); if (pSWsiResult) { // nWsi_ResultCode ´©¶ô ¼öÁ¤ [6/20/2017 bhs] pSWsiResult->nWsi_ResultCode = wsiResult.nWsi_ResultCode; pSWsiResult->nWsi_Type = wsiResult.nWsi_Type; pSWsiResult->nWsi_SlopeWarn = wsiResult.nWsi_SlopeWarn; pSWsiResult->bBigSizeDefect = wsiResult.bBigSizeDefect; switch (wsiResult.nGlassType) { case 0://TFE pSWsiResult->nWsi_Type = wsiResult.nWsi_Type; pSWsiResult->bBigSizeDefect = wsiResult.bBigSizeDefect; pSWsiResult->fHeight = wsiResult.fHeight; pSWsiResult->fWidthX = wsiResult.fWidthX; pSWsiResult->fWidthY = wsiResult.fWidthY; pSWsiResult->fAratio = wsiResult.fAratio; break; case 1: //MN pSWsiResult->nDecisionZoneA = wsiResult.nDecisionZoneA; pSWsiResult->nDecisionZoneB = wsiResult.nDecisionZoneB; pSWsiResult->nDecisionZoneC = wsiResult.nDecisionZoneC; pSWsiResult->nDecisionZoneD = wsiResult.nDecisionZoneD; pSWsiResult->nDecisionZoneE = wsiResult.nDecisionZoneE; pSWsiResult->nDecisionZoneF = wsiResult.nDecisionZoneF; pSWsiResult->nPointIndex = wsiResult.nPointIndex; pSWsiResult->nDecisionZoneSlotB = wsiResult.nDecisionZoneSlotB; pSWsiResult->dDistFromRef = wsiResult.dDistFromRef; break; case 2: //QD pSWsiResult->nJugementR = wsiResult.nJugementR; pSWsiResult->nJugementG = wsiResult.nJugementG; pSWsiResult->nJugementB = wsiResult.nJugementB; pSWsiResult->dRZoneHeight = wsiResult.dRZoneHeight; pSWsiResult->dGZoneHeight = wsiResult.dGZoneHeight; pSWsiResult->dBZoneHeight = wsiResult.dBZoneHeight; pSWsiResult->dDefectHeight = wsiResult.dDefectHeight; pSWsiResult->nWsi_DefectType = wsiResult.nDefectType; // wsiResult.Ãß°¡ Çϼ¼¿ä= measureResut.nMultiShot; // wsiResult.Ãß°¡ Çϼ¼¿ä= measureResut.nCurrentShotNumber; break; case 3: //BANK pSWsiResult->dRZoneHeight = wsiResult.dRZoneHeight; pSWsiResult->dGZoneHeight = wsiResult.dGZoneHeight; pSWsiResult->dBZoneHeight = wsiResult.dBZoneHeight; pSWsiResult->dDefectHeight = wsiResult.dDefectHeight; pSWsiResult->nWsi_DefectType = wsiResult.nDefectType; // wsiResult.Ãß°¡ Çϼ¼¿ä= measureResut.nMultiShot; // wsiResult.Ãß°¡ Çϼ¼¿ä= measureResut.nCurrentShotNumber; break; case 4: //CS pSWsiResult->dCSHeight = wsiResult.dCSHeight; pSWsiResult->dDefectHeight = wsiResult.dDefectHeight; pSWsiResult->nWsi_DefectType = wsiResult.nDefectType; // wsiResult.Ãß°¡ Çϼ¼¿ä= measureResut.nMultiShot; break; } memcpy(pSWsiResult->pWsi_ResultData, wsiResult.pWsi_ResultData, sizeof(wsiResult.pWsi_ResultData)); // bug fix [6/20/2017 bhs] //if (wsiResult.nResultCode==1) if (pSWsiResult->nWsi_ResultCode == 1) { pSWsiResult->nResultCode = WsiResultSuccess; } else { pSWsiResult->nResultCode = WsiResult_Fail; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetReflowResultData(int nModuleIdx, int nResultIdx, VectorImageData& vectorImageData, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult *pSReviewResult = GetSReflowResult(nModuleIdx, nResultIdx); if (pSReviewResult) { pSReviewResult->nResultCode = ReviewResult_Snap_Complete; pSReviewResult->nUMGrabPosX = nGlassPosX; pSReviewResult->nUMGrabPosY = nGlassPosY; pSReviewResult->dDurationTime = dDurationTime; //pSReviewResult->vectorImageData = vectorImageData; //Modify by Juneki 2016-03-23 for(int i=0;i=MAX_IMAGEDATA) break; pSReviewResult->vectorImageData[i]= vectorImageData[i]; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } void CGlassResult::SetGlassSize(int nGlassSizeX, int nGlassSizeY) { m_nGlassSizeX = nGlassSizeX; m_nGlassSizeY = nGlassSizeY; } void CGlassResult::GetGlassSize(int& nGlassSizeX, int& nGlassSizeY) { nGlassSizeX = m_nGlassSizeX; nGlassSizeY = m_nGlassSizeY; } void CGlassResult::SetGlassOriginDirection(int nGlassOriginDirection) { m_nOriginDir = nGlassOriginDirection; } void CGlassResult::SetCornerCutDirection(int nCornerCutDirection) { m_nCornerCutDir = nCornerCutDirection; } void CGlassResult::SetGlassCenterCoordinate(BOOL bCenter) { m_bCenterCoordinate = bCenter; } void CGlassResult::SetGlassInverseCoordinate(BOOL bInverse) { m_bInverseCoordinate = bInverse; } // review result CReviewResult* CGlassResult::GetReviewResult(int nModuleIdx) { for (VectorReviewResultIt it=m_vecReviewResult.begin(); it!=m_vecReviewResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetReviewResult(int nModuleIdx) const { for (constVectorReviewResultIt it=m_vecReviewResult.begin(); it!=m_vecReviewResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSReviewResultCount() const { int nTotalCount = 0; int nModuleIdx = 0, nMIdx2 = 0; for (nModuleIdx=0, nMIdx2=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSReviewResultCount(int nModuleIdx) const { const CReviewResult* pReviewResult = GetReviewResult(nModuleIdx); if (pReviewResult==NULL) return -1; return pReviewResult->GetSReviewResultCount(); } SReviewResult* CGlassResult::GetSReviewResult(int nModuleIdx, int nResultIdx) { CReviewResult* pReviewResult = GetReviewResult(nModuleIdx); if (pReviewResult==NULL) return NULL; return pReviewResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSReviewResult(int nModuleIdx, int nResultIdx) const { const CReviewResult* pReviewResult = GetReviewResult(nModuleIdx); if (pReviewResult==NULL) return NULL; return pReviewResult->GetSReviewResult(nResultIdx); } void CGlassResult::AddReviewResult(const CReviewResult& cReviewResult) { m_vecReviewResult.push_back(cReviewResult); } void CGlassResult::AddSReviewResult(int nModuleIdx, const SReviewResult& sReviewResult) { CReviewResult* pReviewResult = GetReviewResult(nModuleIdx); if (pReviewResult==NULL) return ; pReviewResult->AddSReviewResult(sReviewResult); } // user result CReviewResult* CGlassResult::GetUserResult(int nModuleIdx) { for (VectorReviewResultIt it=m_vecUserResult.begin(); it!=m_vecUserResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetUserResult(int nModuleIdx) const { for (constVectorReviewResultIt it=m_vecUserResult.begin(); it!=m_vecUserResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSUserResultCount() const { int nTotalCount = 0; int nModuleIdx = 0, nMIdx2 = 0; for (nModuleIdx=0, nMIdx2 = 0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSUserResultCount(int nModuleIdx) const { const CReviewResult* pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult==NULL) return -1; return pReviewResult->GetSReviewResultCount(); } int CGlassResult::GetSUserCompleteResultCount(int nModuleIdx, int resultCode) const { const CReviewResult* pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult==NULL) return -1; return pReviewResult->GetSReviewResultCount(resultCode); } SReviewResult* CGlassResult::GetSUserResult(int nModuleIdx, int nResultIdx) { CReviewResult* pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult==NULL) return NULL; return pReviewResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSUserResult(int nModuleIdx, int nResultIdx) const { const CReviewResult* pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult==NULL) return NULL; return pReviewResult->GetSReviewResult(nResultIdx); } void CGlassResult::AddUserResult(const CReviewResult& cReviewResult) { m_vecUserResult.push_back(cReviewResult); } void CGlassResult::AddSUserResult(int nModuleIdx, const SReviewResult& sReviewResult) { CReviewResult* pReviewResult = GetUserResult(nModuleIdx); if (pReviewResult==NULL) return ; pReviewResult->AddSReviewResult(sReviewResult); } // wsi result CReviewResult* CGlassResult::GetWsiResult(int nModuleIdx) { for (VectorReviewResultIt it=m_vecWsiResult.begin(); it!=m_vecWsiResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetWsiResult(int nModuleIdx) const { for (constVectorReviewResultIt it=m_vecWsiResult.begin(); it!=m_vecWsiResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSWsiResultCount() const { int nTotalCount = 0; for (int nModuleIdx=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSWsiResultCount(int nModuleIdx) const { const CReviewResult* pWsiResult = GetWsiResult(nModuleIdx); if (pWsiResult==NULL) return -1; return pWsiResult->GetSReviewResultCount(); } SReviewResult* CGlassResult::GetSWsiResult(int nModuleIdx, int nResultIdx) { CReviewResult* pWsiResult = GetWsiResult(nModuleIdx); if (pWsiResult==NULL) return NULL; return pWsiResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSWsiResult(int nModuleIdx, int nResultIdx) const { for (constVectorReviewResultIt it=m_vecWsiResult.begin(); it!=m_vecWsiResult.end(); it++) { if (nModuleIdx==it->GetModuleIndex()) { return it->GetSReviewResult(nResultIdx); } } return NULL; } void CGlassResult::AddWsiResult(const CReviewResult& cReviewResult) { m_vecWsiResult.push_back(cReviewResult); } void CGlassResult::AddSWsiResult(int nModuleIdx, const SReviewResult& sReviewResult) { CReviewResult* pWsiResult = GetWsiResult(nModuleIdx); if (pWsiResult==NULL) return ; pWsiResult->AddSReviewResult(sReviewResult); } CReviewResult* CGlassResult::GetWsiMultiShotResult(int nModuleIdx) { for (VectorReviewResultIt it = m_vecWsiMultiShotResult.begin(); it != m_vecWsiMultiShotResult.end(); it++) { if (nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetWsiMultiShotResult(int nModuleIdx) const { for (constVectorReviewResultIt it = m_vecWsiMultiShotResult.begin(); it != m_vecWsiMultiShotResult.end(); it++) { if (nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSWsiMultiShotResultCount() const { int nTotalCount = 0; for (int nModuleIdx = 0; nModuleIdx < GetWsiMultiShotResultCount(); nModuleIdx++) { const CReviewResult *pNode = GetWsiMultiShotResult(nModuleIdx); if (pNode == NULL) continue; nTotalCount += pNode->GetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSWsiMultiShotResultCount(int nModuleIdx) const { const CReviewResult* pWsiMultiShotResult = GetWsiMultiShotResult(nModuleIdx); if (pWsiMultiShotResult == NULL) return -1; return pWsiMultiShotResult->GetSReviewResultCount(); } SReviewResult* CGlassResult::GetSWsiMultiShotResult(int nModuleIdx, int nResultIdx) { CReviewResult* pWsiMultiShotResult = GetWsiMultiShotResult(nModuleIdx); if (pWsiMultiShotResult == NULL) return NULL; return pWsiMultiShotResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSWsiMultiShotResult(int nModuleIdx, int nResultIdx) const { for (constVectorReviewResultIt it = m_vecWsiMultiShotResult.begin(); it != m_vecWsiMultiShotResult.end(); it++) { if (nModuleIdx == it->GetModuleIndex()) { return it->GetSReviewResult(nResultIdx); } } return NULL; } void CGlassResult::AddWsiMultiShotResult(const CReviewResult& cReviewResult) { m_vecWsiMultiShotResult.push_back(cReviewResult); } void CGlassResult::AddSWSIMultiShotResult(int nModuleIdx, const SReviewResult& sReviewResult) { CReviewResult* pWsiMultiShotResult = GetWsiResult(nModuleIdx); if (pWsiMultiShotResult == NULL) return; pWsiMultiShotResult->AddSReviewResult(sReviewResult); } // measure result CReviewResult* CGlassResult::GetMeasureResult(int nModuleIdx) { for(VectorReviewResultIt it = m_vecMeasureResult.begin(); it != m_vecMeasureResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetMeasureResult(int nModuleIdx) const { for(constVectorReviewResultIt it = m_vecMeasureResult.begin(); it != m_vecMeasureResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSMeasureResultCount() const { int nTotalCount = 0; for (int nModuleIdx=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSMeasureResultCount(int nModuleIdx) const { const CReviewResult* pMeasureResult = GetMeasureResult(nModuleIdx); if(pMeasureResult == NULL) return -1; return pMeasureResult->GetSReviewResultCount(); } SReviewResult* CGlassResult::GetSMeasureResult(int nModuleIdx, int nResultIdx) { CReviewResult* pMeasureResult = GetMeasureResult(nModuleIdx); if(pMeasureResult == NULL) return NULL; return pMeasureResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSMeasureResult(int nModuleIdx, int nResultIdx) const { const CReviewResult* pMeasureResult = GetMeasureResult(nModuleIdx); if(pMeasureResult == NULL) return NULL; return pMeasureResult->GetSReviewResult(nResultIdx); } void CGlassResult::AddMeasureResult(const CReviewResult& cReviewResult) { m_vecMeasureResult.push_back(cReviewResult); } void CGlassResult::AddSMeasureResult(int nModuleIdx, const SReviewResult& sReviewResult) { CReviewResult* pMeasureResult = GetMeasureResult(nModuleIdx); if(pMeasureResult == NULL) return; pMeasureResult->AddSReviewResult(sReviewResult); } // reflow result CReviewResult* CGlassResult::GetReflowResult( int nModuleIdx ) { for(VectorReviewResultIt it = m_vecReflowResult.begin(); it != m_vecReflowResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetReflowResult( int nModuleIdx ) const { for(constVectorReviewResultIt it = m_vecReflowResult.begin(); it != m_vecReflowResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSReflowResultCount() const { int nTotalCount = 0; for (int nModuleIdx=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSReflowResultCount( int nModuleIdx ) const { const CReviewResult* pResult = GetReflowResult(nModuleIdx); if(pResult == NULL) return -1; return pResult->GetSReviewResultCount(ReviewResult_Process_Complete); } SReviewResult* CGlassResult::GetSReflowResult( int nModuleIdx, int nResultIdx ) { CReviewResult* pResult = GetReflowResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSReflowResult( int nModuleIdx, int nResultIdx ) const { const CReviewResult* pResult = GetReflowResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } void CGlassResult::AddReflowResult( const CReviewResult& cReviewResult ) { m_vecReflowResult.push_back(cReviewResult); } void CGlassResult::AddSReflowResult( int nModuleIdx, const SReviewResult& sReviewResult ) { CReviewResult* pResult = GetReflowResult(nModuleIdx); if(pResult == NULL) return; pResult->AddSReviewResult(sReviewResult); } // wsi user result CReviewResult* CGlassResult::GetWsiUserResult( int nModuleIdx ) { for(VectorReviewResultIt it = m_vecWsiUserResult.begin(); it != m_vecWsiUserResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } CReviewResult* CGlassResult::GetWsiReflowResult( int nModuleIdx ) { for(VectorReviewResultIt it = m_vecWsiReflowResult.begin(); it != m_vecWsiReflowResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetWsiReflowResult( int nModuleIdx ) const { for(constVectorReviewResultIt it = m_vecWsiReflowResult.begin(); it != m_vecWsiReflowResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CReviewResult* CGlassResult::GetWsiUserResult( int nModuleIdx ) const { for(constVectorReviewResultIt it = m_vecWsiUserResult.begin(); it != m_vecWsiUserResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetTotalSWsiReflowResultCount() const { int nTotalCount = 0; for (int nModuleIdx=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetTotalSWsiUserResultCount() const { int nTotalCount = 0; for (int nModuleIdx=0; nModuleIdxGetSReviewResultCount(); } return nTotalCount; } int CGlassResult::GetSWsiReflowResultCount( int nModuleIdx ) const { const CReviewResult* pResult = GetWsiReflowResult(nModuleIdx); if(pResult == NULL) return -1; return pResult->GetSReviewResultCount(ReviewResult_Process_Complete); } SReviewResult* CGlassResult::GetSWsiReflowResult( int nModuleIdx, int nResultIdx ) { CReviewResult* pResult = GetWsiReflowResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSWsiReflowResult( int nModuleIdx, int nResultIdx ) const { const CReviewResult* pResult = GetWsiReflowResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } void CGlassResult::AddWsiReflowResult( const CReviewResult& cReviewResult ) { m_vecWsiReflowResult.push_back(cReviewResult); } const VectorReviewResult* CGlassResult::GetVectorUserWsiResult() const { return &m_vecWsiUserResult; } VectorReviewResult* CGlassResult::GetVectorUserWsiResult() { return &m_vecWsiUserResult; } void CGlassResult::AddWsiUserResult( const CReviewResult& cReviewResult ) { m_vecWsiUserResult.push_back(cReviewResult); } void CGlassResult::AddSWsiReflowResult( int nModuleIdx, const SReviewResult& sReviewResult ) { CReviewResult* pResult = GetWsiReflowResult(nModuleIdx); if(pResult == NULL) return; pResult->AddSReviewResult(sReviewResult); } // review schedule result CPathSchedulerResult* CGlassResult::GetReviewScheduleResult(int nModuleIdx) { for(VectorReviewScheduleResultIt it = m_vecReviewScheduleResult.begin(); it != m_vecReviewScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetReviewScheduleResult(int nModuleIdx) const { for(constVectorReviewScheduleResultIt it = m_vecReviewScheduleResult.begin(); it != m_vecReviewScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetReviewSSchedulerResultCount(int nModuleIdx) const { const CPathSchedulerResult* pReviewScheduleResult = GetReviewScheduleResult(nModuleIdx); if(pReviewScheduleResult == NULL) return -1; return pReviewScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetReviewSSchedulerResult(int nModuleIdx, int nResultIdx) { for(VectorReviewScheduleResultIt it = m_vecReviewScheduleResult.begin(); it != m_vecReviewScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return it->GetPathSchedulerResult(nResultIdx); } } return NULL; } const SSchedulerResult* CGlassResult::GetReviewSSchedulerResult(int nModuleIdx, int nResultIdx) const { for(constVectorReviewScheduleResultIt it = m_vecReviewScheduleResult.begin(); it != m_vecReviewScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return it->GetPathSchedulerResult(nResultIdx); } } return NULL; } // user schedule result CPathSchedulerResult* CGlassResult::GetUserScheduleResult(int nModuleIdx) { for(VectorReviewScheduleResultIt it = m_vecUserScheduleResult.begin(); it != m_vecUserScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetUserScheduleResult(int nModuleIdx) const { for(constVectorReviewScheduleResultIt it = m_vecUserScheduleResult.begin(); it != m_vecUserScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetUserSSchedulerResultCount(int nModuleIdx) const { const CPathSchedulerResult* pReviewScheduleResult = GetUserScheduleResult(nModuleIdx); if(pReviewScheduleResult == NULL) return -1; return pReviewScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetUserSSchedulerResult(int nModuleIdx, int nResultIdx) { for(VectorReviewScheduleResultIt it = m_vecUserScheduleResult.begin(); it != m_vecUserScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return it->GetPathSchedulerResult(nResultIdx); } } return NULL; } const SSchedulerResult* CGlassResult::GetUserSSchedulerResult(int nModuleIdx, int nResultIdx) const { for(constVectorReviewScheduleResultIt it = m_vecUserScheduleResult.begin(); it != m_vecUserScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return it->GetPathSchedulerResult(nResultIdx); } } return NULL; } // wsi schedule result CPathSchedulerResult* CGlassResult::GetWsiScheduleResult(int nModuleIdx) { for(VectorReviewScheduleResultIt it = m_vecWsiScheduleResult.begin(); it != m_vecWsiScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetWsiScheduleResult(int nModuleIdx) const { for(constVectorReviewScheduleResultIt it = m_vecWsiScheduleResult.begin(); it != m_vecWsiScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetWsiSSchedulerResultCount(int nModuleIdx) const { const CPathSchedulerResult* pWsiScheduleResult = GetWsiScheduleResult(nModuleIdx); if(pWsiScheduleResult == NULL) return -1; return pWsiScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetWsiSSchedulerResult(int nModuleIdx, int nResultIdx) { CPathSchedulerResult* pScheduleResult = GetWsiScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } const SSchedulerResult* CGlassResult::GetWsiSSchedulerResult(int nModuleIdx, int nResultIdx) const { const CPathSchedulerResult* pScheduleResult = GetWsiScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } // measure schedule result CPathSchedulerResult* CGlassResult::GetMeausreScheduleResult(int nModuleIdx) { for(VectorReviewScheduleResultIt it = m_vecMeasureScheduleResult.begin(); it != m_vecMeasureScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetMeausreScheduleResult(int nModuleIdx) const { for(constVectorReviewScheduleResultIt it = m_vecMeasureScheduleResult.begin(); it != m_vecMeasureScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetMeausreSSchedulerResultCount(int nModuleIdx) const { const CPathSchedulerResult* pReviewScheduleResult = GetMeausreScheduleResult(nModuleIdx); if(pReviewScheduleResult == NULL) return -1; return pReviewScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetMeausreSSchedulerResult(int nModuleIdx, int nResultIdx) { CPathSchedulerResult* pReviewScheduleResult = GetMeausreScheduleResult(nModuleIdx); if(pReviewScheduleResult == NULL) return NULL; return pReviewScheduleResult->GetPathSchedulerResult(nResultIdx); } const SSchedulerResult* CGlassResult::GetMeausreSSchedulerResult(int nModuleIdx, int nResultIdx) const { const CPathSchedulerResult* pReviewScheduleResult = GetMeausreScheduleResult(nModuleIdx); if(pReviewScheduleResult == NULL) return NULL; return pReviewScheduleResult->GetPathSchedulerResult(nResultIdx); } // reflow schedule result CPathSchedulerResult* CGlassResult::GetReflowScheduleResult( int nModuleIdx ) { for(VectorReviewScheduleResultIt it = m_vecReflowScheduleResult.begin(); it != m_vecReflowScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetReflowScheduleResult( int nModuleIdx ) const { for(constVectorReviewScheduleResultIt it = m_vecReflowScheduleResult.begin(); it != m_vecReflowScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetReflowSSchedulerResultCount( int nModuleIdx ) const { const CPathSchedulerResult* pScheduleResult = GetReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return -1; return pScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetReflowSSchedulerResult( int nModuleIdx, int nResultIdx ) { CPathSchedulerResult* pScheduleResult = GetReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } const SSchedulerResult* CGlassResult::GetReflowSSchedulerResult( int nModuleIdx, int nResultIdx ) const { const CPathSchedulerResult* pScheduleResult = GetReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } // wsi reflow schedule result CPathSchedulerResult* CGlassResult::GetWsiReflowScheduleResult( int nModuleIdx ) { for(VectorReviewScheduleResultIt it = m_vecWsiReflowScheduleResult.begin(); it != m_vecWsiReflowScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } const CPathSchedulerResult* CGlassResult::GetWsiReflowScheduleResult( int nModuleIdx ) const { for(constVectorReviewScheduleResultIt it = m_vecWsiReflowScheduleResult.begin(); it != m_vecWsiReflowScheduleResult.end(); it++) { if(nModuleIdx == it->GetModuleIndex()) { return static_cast(&(*it)); } } return NULL; } int CGlassResult::GetWsiReflowSSchedulerResultCount( int nModuleIdx ) const { const CPathSchedulerResult* pScheduleResult = GetWsiReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return -1; return pScheduleResult->GetPathSchedulerResultCount(); } SSchedulerResult* CGlassResult::GetWsiReflowSSchedulerResult( int nModuleIdx, int nResultIdx ) { CPathSchedulerResult* pScheduleResult = GetWsiReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } const SSchedulerResult* CGlassResult::GetWsiReflowSSchedulerResult( int nModuleIdx, int nResultIdx ) const { const CPathSchedulerResult* pScheduleResult = GetWsiReflowScheduleResult(nModuleIdx); if(pScheduleResult == NULL) return NULL; return pScheduleResult->GetPathSchedulerResult(nResultIdx); } // review result const VectorReviewResult* CGlassResult::GetVectorReviewResult() const { return &m_vecReviewResult; } VectorReviewResult* CGlassResult::GetVectorReviewResult() { return &m_vecReviewResult; } int CGlassResult::GetReviewResultCount() const { return (int)m_vecReviewResult.size(); } // user result const VectorReviewResult* CGlassResult::GetVectorUserResult() const { return &m_vecUserResult; } VectorReviewResult* CGlassResult::GetVectorUserResult() { return &m_vecUserResult; } int CGlassResult::GetUserResultCount() const { return (int)m_vecUserResult.size(); } // wsi result const VectorReviewResult* CGlassResult::GetVectorWsiResult() const { return &m_vecWsiResult; } VectorReviewResult* CGlassResult::GetVectorWsiResult() { return &m_vecWsiResult; } int CGlassResult::GetWsiResultCount() const { return (int)m_vecWsiResult.size(); } // measure result const VectorReviewResult* CGlassResult::GetVectorMeasureResult() const { return &m_vecMeasureResult; } VectorReviewResult* CGlassResult::GetVectorMeasureResult() { return &m_vecMeasureResult; } int CGlassResult::GetMeasureResultCount() const { return (int)m_vecMeasureResult.size(); } // reflow result const VectorReviewResult* CGlassResult::GetVectorReflowResult() const { return &m_vecReflowResult; } VectorReviewResult* CGlassResult::GetVectorReflowResult() { return &m_vecReflowResult; } int CGlassResult::GetReflowResultCount() const { return (int)m_vecReflowResult.size(); } // wsi reflow result const VectorReviewResult* CGlassResult::GetVectorWsiReflowResult() const { return &m_vecWsiReflowResult; } VectorReviewResult* CGlassResult::GetVectorWsiReflowResult() { return &m_vecWsiReflowResult; } int CGlassResult::GetWsiReflowResultCount() const { return (int)m_vecWsiReflowResult.size(); } int CGlassResult::GetWsiUserResultCount() const { return (int)m_vecWsiUserResult.size(); } //WSI MultilShot const VectorReviewResult* CGlassResult::GetVectorWsiMultiShotResult() const { return &m_vecWsiMultiShotResult; } VectorReviewResult* CGlassResult::GetVectorWsiMultiShotResult() { return &m_vecWsiMultiShotResult; } int CGlassResult::GetWsiMultiShotResultCount() const { return (int)m_vecWsiMultiShotResult.size(); } // review schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorReviewScheduleResult() const { return &m_vecReviewScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorReviewScheduleResult() { return &m_vecReviewScheduleResult; } int CGlassResult::GetReviewScheduleResultCount() const { return (int)m_vecReviewScheduleResult.size(); } // user schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorUserScheduleResult() const { return &m_vecUserScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorUserScheduleResult() { return &m_vecUserScheduleResult; } int CGlassResult::GetUserScheduleResultCount() const { return (int)m_vecUserScheduleResult.size(); } // wsi schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorWsiScheduleResult() const { return &m_vecWsiScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorWsiScheduleResult() { return &m_vecWsiScheduleResult; } int CGlassResult::GetWsiScheduleResultCount() const { return (int)m_vecWsiScheduleResult.size(); } // Measure schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorMeasureScheduleResult() const { return &m_vecMeasureScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorMeasureScheduleResult() { return &m_vecMeasureScheduleResult; } int CGlassResult::GetMeasureScheduleResultCount() const { return (int)m_vecMeasureScheduleResult.size(); } // reflow schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorReflowScheduleResult() const { return &m_vecReflowScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorReflowScheduleResult() { return &m_vecReflowScheduleResult; } int CGlassResult::GetReflowScheduleResultCount() const { return (int)m_vecReflowScheduleResult.size(); } // wsi reflow schedule result const VectorReviewScheduleResult* CGlassResult::GetVectorWsiReflowScheduleResult() const { return &m_vecWsiReflowScheduleResult; } VectorReviewScheduleResult* CGlassResult::GetVectorWsiReflowScheduleResult() { return &m_vecWsiReflowScheduleResult; } int CGlassResult::GetWsiReflowScheduleResultCount() const { return (int)m_vecWsiReflowScheduleResult.size(); } BOOL CGlassResult::SetWsiReflowResultData( int nModuleIdx, int nResultIdx, const SReviewResult& wsiResult, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime ) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult* pSWsiResult = GetSWsiReflowResult(nModuleIdx, nResultIdx); if (pSWsiResult) { // nWsi_ResultCode ´©¶ô ¼öÁ¤ [6/20/2017 bhs] pSWsiResult->nWsi_ResultCode = wsiResult.nWsi_ResultCode; pSWsiResult->dWsi_DamDistance = wsiResult.dWsi_DamDistance; for(int nCnt=0; nCnt < WsiReflowInfo_Result_Info_Count; nCnt++) { pSWsiResult->nWsi_pReflowResultData[nCnt] = wsiResult.nWsi_pReflowResultData[nCnt]; } // bug fix [6/20/2017 bhs] //if (wsiResult.nResultCode==1) if (pSWsiResult->nWsi_ResultCode == 1) { pSWsiResult->nResultCode = WsiResultSuccess; } else { pSWsiResult->nResultCode = WsiResult_Fail; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetUserWsiResultData( int nModuleIdx, int nResultIdx, const SReviewResult& wsiResult, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime ) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult* pSWsiResult = GetSWsiUserResult(nModuleIdx, nResultIdx); if (pSWsiResult) { // nWsi_ResultCode ´©¶ô ¼öÁ¤ [6/20/2017 bhs] pSWsiResult->nWsi_ResultCode = wsiResult.nWsi_ResultCode; pSWsiResult->nWsi_Type = wsiResult.nWsi_Type; pSWsiResult->nWsi_SlopeWarn = wsiResult.nWsi_SlopeWarn; pSWsiResult->bBigSizeDefect = wsiResult.bBigSizeDefect; memcpy(pSWsiResult->pWsi_ResultData, wsiResult.pWsi_ResultData, sizeof(wsiResult.pWsi_ResultData)); // bug fix [6/20/2017 bhs] //if (wsiResult.nResultCode==1) if (pSWsiResult->nWsi_ResultCode == 1) { pSWsiResult->nResultCode = WsiResultSuccess; } else { pSWsiResult->nResultCode = WsiResult_Fail; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } BOOL CGlassResult::SetWSIMultiShotResultData(int nModuleIdx, int nResultIdx, const SReviewResult& wsiResult, int nGlassPosX, int nGlassPosY, int nMotorPosX, int nMotorPosY, double dDurationTime) { EnterCriticalSection(&m_csProcess); BOOL bReturn = FALSE; SReviewResult* pSWsiMultiShotResult = GetSWsiMultiShotResult(nModuleIdx, nResultIdx); if (pSWsiMultiShotResult) { // nWsi_ResultCode ´©¶ô ¼öÁ¤ [6/20/2017 bhs] pSWsiMultiShotResult->nWsi_ResultCode = wsiResult.nWsi_ResultCode; pSWsiMultiShotResult->nWsi_Type = wsiResult.nWsi_Type; pSWsiMultiShotResult->nWsi_SlopeWarn = wsiResult.nWsi_SlopeWarn; pSWsiMultiShotResult->bBigSizeDefect = wsiResult.bBigSizeDefect; memcpy(pSWsiMultiShotResult->pWsi_ResultData, wsiResult.pWsi_ResultData, sizeof(wsiResult.pWsi_ResultData)); // bug fix [6/20/2017 bhs] //if (wsiResult.nResultCode==1) if (pSWsiMultiShotResult->nWsi_ResultCode == 1) { pSWsiMultiShotResult->nResultCode = WsiResultSuccess; } else { pSWsiMultiShotResult->nResultCode = WsiResult_Fail; } bReturn = TRUE; } LeaveCriticalSection(&m_csProcess); return bReturn; } SReviewResult* CGlassResult::GetSWsiUserResult( int nModuleIdx, int nResultIdx ) { CReviewResult* pResult = GetWsiUserResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } const SReviewResult* CGlassResult::GetSWsiUserResult( int nModuleIdx, int nResultIdx ) const { const CReviewResult* pResult = GetWsiUserResult(nModuleIdx); if(pResult == NULL) return NULL; return pResult->GetSReviewResult(nResultIdx); } BOOL CGlassResult::CheckWsiUserComplete( int nModuleIdx/*=-1*/ ) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx==-1) { for (constVectorReviewResultIt it=m_vecWsiUserResult.begin(); it!=m_vecWsiUserResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet==FALSE) break; } } else { bRet = FALSE; CReviewResult *pWsiResult = GetWsiUserResult(nModuleIdx); if (pWsiResult) { bRet = pWsiResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; } BOOL CGlassResult::CheckWsiMultiShotComplete(int nModuleIdx/*=-1*/) { EnterCriticalSection(&m_csProcess); BOOL bRet = TRUE; if (nModuleIdx == -1) { for (constVectorReviewResultIt it = m_vecWsiMultiShotResult.begin(); it != m_vecWsiMultiShotResult.end(); it++) { // Á¶°Ç¹® ¼öÁ¤ [6/20/2017 bhss] //bRet = bRet && it->CheckComplete(); bRet &= it->CheckComplete(); if (bRet == FALSE) break; } } else { bRet = FALSE; CReviewResult *pWsiResult = GetWsiMultiShotResult(nModuleIdx); if (pWsiResult) { bRet = pWsiResult->CheckComplete(); } } LeaveCriticalSection(&m_csProcess); return bRet; }