SDC C-Project CF Review 프로그램
LYW
2021-06-09 754fa0614469b76fcd789a4f50f9bee59aa09e9b
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
#pragma once
 
#include "StdAfx.h"
#include "CHReviewResult/GlassResult.h"
#include "CHReviewRecipe/RsRcpReviewInfo.h"
#include "CHReviewRecipe/RsRcpMeasureInfo.h"
 
typedef std::vector<CDefectResult*>                    VectorDefectResultPtr;
typedef std::vector<CDefectResult*>::iterator        VectorDetectResultPrtIt;
 
interface IPrioritySorter2Parent
{
public:
    virtual int        PS2P_GetModuleStatusCount(int nModuleType = 0) = 0;
    virtual double    PS2P_GetCurrentModuleResolution(int nModuleIndex) = 0;
    virtual void    PS2P_GetCurrentModuleZoomData(int nModuleIndex, int& nZoomIdx, double& dZoomInfo) = 0;
};
 
class AFX_EXT_CLASS CPrioritySorter
{
public:
     CPrioritySorter(int nMaxPointCount=MAX_REVIEW_POINT_SIZE);
     virtual ~CPrioritySorter(void);
     void Reset();
     void SetPS2P(IPrioritySorter2Parent* pPS2P)        { m_pPS2P = pPS2P; }
 
    // getter 
    int GetSortingResultCount(void)                { return int(m_vecSortingResult.size()); }
    int GetSortingResultUserCount(void)            { return int(m_vecSortingResultUser.size()); }
    int GetSortingResultReflowCount(void)            { return int(m_vecSortingResultReflow.size()); }
    int GetSortingResultMeasureCount(void)        { return int(m_vecSortingResultMeasure.size()); }
    int GetSortingResultWsiReflowCount(void)        { return int(m_vecSortingResultWsiReflow.size()); }
    int GetSortingResultWsiCount(void)            { return int(m_vecSortingResultWsi.size()); }
    int GetSortingResultWsiUserCount(void)            { return int(m_vecSortingResultWsiUser.size()); }
    int GetSortingResultWsiMultiShotCount(void) { return int(m_vecSortingResultWsiMultiShot.size()); }
 
    SReviewResult*    GetSortingResult(int nIndex);
    SReviewResult*    GetSortingResultUser(int nIndex);
    SReviewResult*    GetSortingResultReflow(int nIndex);
    SReviewResult*    GetSortingResultMeasure(int nIndex);
    SReviewResult*    GetSortingResultWsi(int nIndex);
    SReviewResult*    GetSortingResultWsiReflow(int nIndex);
    SReviewResult*  GetSortingResultWsiUser(int nIndex);
    SReviewResult*  GetSortingResultWsiMutilShot(int nIndex);
 
    VectorSReviewResult* GetSortingVectorResult(void)        { return &m_vecSortingResult; }
    VectorSReviewResult* GetSortingVectorResultWsi(void)    { return &m_vecSortingResultWsi; }
    VectorSReviewResult* GetSortingVectorResultWsiMultiShot(void) { return &m_vecSortingResultWsiMultiShot; }
    
    // func
     virtual int    PrioritySorting(CGlassResult *pGlassResult, const CRsRcpReviewInfo* pRsRcpReviewInfo, const CRsRcpMeasureInfo *pRsRcpMesureInfo=NULL, BOOL bUseWSI=FALSE);
    virtual int SaveDefectPoint(VectorDefectResultPtr& vecDefectResultPtr, const CString& strFilename);
 
    // new func
    virtual int    FilteringAndSorting(CGlassResult *pGlassResult, const CRsRcpReviewInfo* pRsRcpReviewInfo, const CRsRcpMeasureInfo *pRsRcpMesureInfo=NULL, BOOL bUseWSI=FALSE);
 
protected:
    virtual int    PrioritySorting() = 0;
    virtual int    FilteringAndSorting() = 0;
 
    virtual int AddDefectPointPriority(int nPriorityData, const CRcpPriorityInfo *pRcpPriorityInfo) = 0;
    
    static BOOL CompareDefectSizeDescending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectSizeAscending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectPeakDescending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectPeakAscending(const CDefectResult* lhs, const CDefectResult* rhs);
 
    static BOOL CompareDefectCircleSizeDescending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectCircleSizeAscending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectCirclePeakDescending(const CDefectResult* lhs, const CDefectResult* rhs);
    static BOOL CompareDefectCirclePeakAscending(const CDefectResult* lhs, const CDefectResult* rhs);
    
    IPrioritySorter2Parent* m_pPS2P;
 
    int                            m_nMaxPointCount;
    BOOL                        m_bUseWSI;
    CGlassResult*                m_pGlassResult;
    const CRsRcpReviewInfo*        m_pRsRcpReviewInfo;
    const CRsRcpMeasureInfo*    m_pRsRcpMeasureInfo;
 
 
    VectorInteger                m_vecDefectIndex;
    VectorDefectResultPtr        m_vecDefectResultPtr;
    VectorDefectResultPtr        m_vecDefectResultPtrTemp;
 
    VectorSReviewResult            m_vecSortingResult;            // review
    VectorSReviewResult            m_vecSortingResultUser;        // user
    VectorSReviewResult            m_vecSortingResultReflow;        // Reflow
    VectorSReviewResult            m_vecSortingResultMeasure;    // measure
    VectorSReviewResult            m_vecSortingResultWsi;        // wsi
    VectorSReviewResult            m_vecSortingResultWsiReflow;// wsi Reflow
    VectorSReviewResult            m_vecSortingResultWsiUser;  // wsi user
    VectorSReviewResult            m_vecSortingResultWsiMultiShot;  // wsi user
};