SDC C-Project CF Review 프로그램
LYW
2021-08-17 67bcdefa0aae33fcf16333967744a9aafcaf9433
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#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;
}