#pragma once
|
|
#include "ReviewProcessor.h"
|
#include "CHEdgeTriangle/EdgeTriangle.h"
|
#include "LineChecker/LineChecker.h"
|
#include "CHThreadPools/TimerThreadPools.h" /* < KJG 20230630 - #4517 ADD Start >*/
|
|
#define ErrorCount 20
|
|
#define ImageCaptionStartX 10
|
#define ImageCaptionStartY 1900
|
|
enum CPJT_PROCESS_STATUS {CPJT_REVIEW_SUCCESS = 0, CPJT_USER_SUCCESS, CPJT_MEASURE_SUCCESS, CPJT_WSI_SUCCESS,CPJT_REFLOW_SUCCESS}; //kmj
|
#define GLASS_SIZE_WIDTH 2500000
|
#define GLASS_SIZE_HEIGHT 2200000
|
enum RPCornerCutDirection { RPCLeftTop=0, RPCRightTop, RPCLeftBottom, RPCRightBottom };
|
enum RPOriginDirection { RPOLeftTop=0, RPORightTop, RPOLeftBottom, RPORightBottom };
|
|
|
class CTimerThreadFileMonitor : public CTimerThreadPools /* < KJG 20230630 - #4517 ADD Start >*/
|
{
|
public:
|
explicit CTimerThreadFileMonitor(DWORD dwPeriod = 10000, int nThreadCount = 1);
|
~CTimerThreadFileMonitor() = default;
|
|
void SetParam(CDisplayMessage* pLog, CString strPath) { m_pLog = pLog; m_strFilePath = strPath; }
|
|
private:
|
CDisplayMessage* m_pLog;
|
CString m_strFilePath;
|
|
void TimerThreadProcess(PVOID pParameter);
|
|
};
|
|
class CReviewProcessor_CPJT : public CReviewProcessor
|
{
|
public:
|
CReviewProcessor_CPJT(int nThreadCount=1);
|
virtual ~CReviewProcessor_CPJT(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 AddWsiVLSIResultData(int nModuleIndex, const SWsiResult& measureResut);
|
virtual void AddWsiMultiShotResultData(int nModuleIndex, const SWsiResult& measureResut);
|
virtual void AddCameraImageData(int nModuleIndex, int nResultIndex, VectorImageData& vectorImageData);
|
virtual int AddReviewProcessData(SReviewResult* pReviewResult);
|
|
BOOL bLeftGantryReviewDone;
|
BOOL bRightGantryReviewDone;
|
|
void ResetGantryDone();
|
|
|
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);
|
virtual int PostProcessWsiMultiShotResult(int nThreadIdx, SReviewResult* pReviewResult);
|
virtual int PostProcessWsiVLSIResult(int nThreadIdx, SReviewResult* pReviewResult);
|
|
|
BOOL CheckProcessSuccess(CRsRcpReviewInfo* pRsRcpReviewInfo);
|
void ProcessSuccessReset();
|
|
void FileMonitorThreadStart() { m_threadFileMonitor.StartThread(); } /* < KJG 20230630 - #4517 ADD Start >*/
|
void FileMonitorThreadStop() { m_threadFileMonitor.StopThread(); } /* < KJG 20230630 - #4517 ADD Start >*/
|
|
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);
|
int ProcessWSIMultiShot(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);
|
BOOL UpdateMemoryWsiMutiShotPlan(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);
|
CString GetStackType(int nStackType);
|
private:
|
CRITICAL_SECTION m_csUserCriticalSection;
|
|
CMotorControlInfo* m_MotorControlInfo;
|
|
CString m_strReviewFirst;
|
CString m_strReviewSecned;
|
|
CTimerThreadFileMonitor m_threadFileMonitor; /* < KJG 20230630 - #4517 ADD Start >*/
|
|
protected:
|
CString ErrorStringCode[ErrorCount];
|
};
|