#pragma once #include "ReviewProcessor.h" #include "CHEdgeTriangle/EdgeTriangle.h" #include "LineChecker/LineChecker.h" #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 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(); 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; protected: CString ErrorStringCode[ErrorCount]; };