SDC C-Project CF Review 프로그램
kojingeun
2023-07-14 f77e8008cac062596058fca2aeddda62b80bedbf
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
#pragma once
 
#include "ReviewProcessor.h"
#include "CHEdgeTriangle/EdgeTriangle.h"
#include "LineChecker/LineChecker.h"
 
#define ErrorCount 20
 
#define ImageCaptionStartX    10
#define ImageCaptionStartY    1900
 
enum CSOT_PROCESS_STATUS {CSOT_REVIEW_SUCCESS = 0, CSOT_USER_SUCCESS, CSOT_MEASURE_SUCCESS, CSOT_WSI_SUCCESS,CSOT_REFLOW_SUCCESS}; //kmj
#define GLASS_SIZE_WIDTH    1500000
#define GLASS_SIZE_HEIGHT    925000
enum RPCornerCutDirection    { RPCLeftTop=0, RPCRightTop, RPCLeftBottom,   RPCRightBottom };
enum RPOriginDirection    { RPOLeftTop=0, RPORightTop, RPOLeftBottom,   RPORightBottom };
 
class CReviewProcessor_CSOT : public CReviewProcessor
{
public:
    CReviewProcessor_CSOT(int nThreadCount=1);
    virtual ~CReviewProcessor_CSOT(void);
 
    virtual void    AddWsiResultData(int nModuleIndex, const SWsiResult& measureResut);
    virtual void    AddWsiReflowResultData(int nModuleIndex, const SWsiResult& measureResut);
    virtual void    AddWsiUserResultData(int nModuleIndex, const SWsiResult& measureResut);
    virtual void    AddCameraImageData(int nModuleIndex, int nResultIndex, VectorImageData& vectorImageData);
    virtual int        AddReviewProcessData(SReviewResult* pReviewResult);
 
    virtual int        PostProcessReviewResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessUserResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessWsiResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessMeasureResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessReflowResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessWsiReflowResult(int nThreadIdx, SReviewResult* pReviewResult);
    virtual int        PostProcessWsiUserResult(int nThreadIdx, SReviewResult* pReviewResult);
 
    BOOL            CheckProcessSuccess(CRsRcpReviewInfo* pRsRcpReviewInfo);
    void            ProcessSuccessReset();
 
protected:
    virtual void    WorkThreadProcess(PVOID pParameter);
    int                CheckMotionComplete();
 
private:
    int        ProcessReview(int nThreadIdx, SReviewResult* pReviewResult);
    int        ProcessMeasure(int nThreadIdx, SReviewResult* pReviewResult);
    int        ProcessWSI(int nThreadIdx, SReviewResult* pReviewResult);
    int        ProcessUser(int nThreadIdx, SReviewResult* pReviewResult);
    int        ProcessReflow(int nThreadIdx, SReviewResult* pReviewResult);
    int        ProcessWSIReflow(int nThreadIdx, SReviewResult* pReviewResult);
    int     ProcessWSIUser(int nThreadIdx, SReviewResult* pReviewResult);
    // ProcessReview
    BOOL    MakeReviewImageFileName(SReviewResult* pReviewResult);
    void    LoadAoiImage(const CString& strGlassID, int nOpticType, int nPosX, int nPosY, CCHImageData* pAoiDark, CCHImageData *pAoiBright);
    void    FindAoiDefectImagePath(const CString& strGlassID, int nOpticType, int nPosX, int nPosY,  CString& strDarkPath, CString& strBrightPath);
    void    FindDefectPos(int nThreadIdx, CCHImageData* pImageData, const SReviewDefectFindParam& findParam, SReviewDefectFindResult& findResult, SReviewResult* pReviewResult);
    BOOL    MakeUploadImage(CCHImageData *pUploadImage, CCHImageData *pReviewCam, CCHImageData *pAoiDark, CCHImageData *pAoiBright, const SReviewDefectFindResult& findResult, const SReviewResult* pReviewResult);
    void    MakeAoiImage(CCHImageData *pAoiDark, CCHImageData* pAoiBright,  CCHImageData* pAoiDark1, CCHImageData* pAoiBright1, CCHImageData* pAoiDark2, CCHImageData* pAoiBright2, int& nMaxWidth, int& nMaxHeight);
    void    DrawAoiImage(CDC *pDC, CCHImageData *pAoiDark1, CCHImageData* pAoiBright1, CCHImageData *pAoiDark2, CCHImageData* pAoiBright2, int nWidth, int nHeight);
    void    DrawDefectInfo(CDC *pDC, const SReviewDefectFindResult& findResult, const SReviewResult* pReviewResult);
 
    // ProcessMeasure
    BOOL    MakeMeasureImageFileName(SReviewResult* pReviewResult);
    BOOL    MakeUploadMeasureImage(CCHImageData *pUploadImage, CCHImageData *pReviewCam, const SReviewResult* pReviewResult, CResultTriangle * pResultTriangle, int nMeasureResult); //Modify by JuneKi 2016-02-29
 
    // ProcessUser
    BOOL    MakeUserImageFileName(SReviewResult* pReviewResult);    
 
    // ProcessReflow
    BOOL    MakeReflowImageFileName(SReviewResult* pReviewResult);
    
    // Checking Process Success    
    BOOL    bProcessSuccess[3]; //kmj
 
    // 190130 SJB, Plan Memory Update
    BOOL    UpdateMemoryReviewPlan(SReviewResult* pReviewResult);
    BOOL    UpdateMemoryUserPlan(SReviewResult* pReviewResult);
    BOOL    UpdateMemoryReflowPlan(SReviewResult* pReviewResult);
    BOOL    UpdateMemoryWsiPlan(SReviewResult* pReviewResult);
    BOOL    UpdateMemoryWsiReflowPlan(SReviewResult* pReviewResult);
    BOOL    UpdateMemoryWsiUserPlan(SReviewResult* pReviewResult);
 
    // process image
    double    CalcFocusValue(const char* pImageBuffer, int nImageWidth, int nImageHeight, int nMothod=FocusValueMethod_Diff);
 
public:
    CString MakeWSIImageFileName( SReviewResult* pReviewResult );
    double GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection);
    CString GetStepID(int nMachin);
    CString GetEQPID(int nMachin);
private:
    CRITICAL_SECTION    m_csUserCriticalSection;
 
    CMotorControlInfo* m_MotorControlInfo;
 
protected:
    CString                ErrorStringCode[ErrorCount];
};