#pragma once
|
|
#include <vector>
|
#include "CHThreadPools/WorkThreadPools.h"
|
#include "CHReviewDefectFinder/ReviewDefectFinder.h"
|
#include "ModuleStatus.h"
|
#include "CHWsiControls/WsiControl.h"
|
|
#ifndef MAX_MOTOR_ADDRESS_SIZE
|
#define MAX_MOTOR_ADDRESS_SIZE 200
|
#endif
|
|
class CCHImageData;
|
class CGlassResult;
|
class CRsRcpDefectFindInfo;
|
class SReviewResult;
|
class CCameraControlReview;
|
class CModuleStatus;
|
class CWsiControl;
|
class CResultServerControl;
|
class CSequenceProcessor;
|
class CEdgeTriangle;
|
class CSignalControl;
|
struct SCameraControl;
|
struct SMotorPosition;
|
struct SMotorStatus;
|
struct SAxisIndex;
|
struct SCoordInfo;
|
struct SCameraInfo;
|
|
enum ReviewProcessStatus { ReviewProcessStatus_None=0,
|
ReviewProcessStatus_ReviewStart, ReviewProcessStatus_ReviewEnd,
|
ReviewProcessStatus_MeasureStart, ReviewProcessStatus_MeasureEnd,
|
ReviewProcessStatus_WSIStart, ReviewProcessStatus_WSIEnd,
|
ReviewProcessStatus_UserStart, ReviewProcessStatus_UserEnd,
|
ReviewProcessStatus_ReflowStart, ReviewProcessStatus_ReflowEnd,
|
ReviewProcessStatus_WSIReflowStart, ReviewProcessStatus_WSIReflowEnd,
|
ReviewProcessStatus_WSIUserStart, ReviewProcessStatus_WSIUserEnd,
|
ReviewProcessStatus_WSIMultiShotStart, ReviewProcessStatus_WSIMultiShotEnd
|
};
|
|
enum CalcFocusValueMethod { FocusValueMethod_Diff=0 };
|
|
typedef std::vector<CPoint> VectorPoint;
|
typedef std::vector<CPoint>::iterator VectorPointIt;
|
typedef std::vector<CPoint>::const_iterator constVectorPointIt;
|
|
interface IReviewProcessor2Parent
|
{
|
virtual int IRP2P_GetWSIControlCount() = 0;
|
virtual CWsiControl* IRP2P_GetWSIControl(int nIndex) = 0;
|
virtual int IRP2P_GetModuleStatusCount(int nModuleType=0) const = 0;
|
virtual CModuleStatus* IRP2P_GetModuleStatus(int nModuleIdx) = 0;
|
virtual BOOL IRP2P_GetCenterCoordinate(double& dPosX, double& dPosY) = 0;
|
virtual CSignalControl* IRP2P_GetSignalControl() = 0;
|
virtual CMotorControl* IRP2P_GetMotorControl() = 0;
|
virtual CCameraControlReview* IRP2P_GetReviewCameraControl(int nModuleIndex) = 0;
|
virtual int IRP2P_GetReviewCameraControlCount() = 0;
|
|
virtual void IRP2P_UpdateReviewResult(int nModuleIndex, const CGlassResult* pGlassResult, int nPlanIndex=0) = 0;
|
virtual void IRP2P_UpdateCameraControl(int nModuleIdx, const SCameraControl *pCameraControl, const SCameraInfo* pCameraInfo) = 0;
|
|
virtual const CRsRcpReviewInfo* IRP2P_Recipe_GetRsRcpReviewInfo() = 0;
|
virtual const CSystemInfo* IRP2P_GetReviewSysteminfo() = 0;
|
virtual CGlassResult* IRP2P_GetCurrentGlassResult() = 0;
|
virtual void IRP2P_DisplayMessage(const TCHAR* lpstrFormat, ...) = 0;
|
virtual CResultServerControl* IRP2P_GetResultServerControl() = 0;
|
|
virtual CSequenceProcessor* IRP2P_GetSequenceProcessor() = 0;
|
virtual CRecipeManager* IRP2P_GetEdgeRecipeManager() = 0;
|
|
virtual void IRP2P_CompletePlanIndex(int nReviewStatus, int nPlanIndex) = 0;
|
virtual void IRP2P_UpdateReviewProcessStatus(int nReviewStatus, int nPlanIndex=0) = 0;
|
|
virtual BOOL GetSimulationOn() = 0;
|
|
virtual void IRP2P_UpdateWSISelfDiagnosisResult();
|
|
};
|
|
typedef std::vector<CPoint> VectorPoint;
|
typedef std::vector<CPoint>::iterator VectorPointIt;
|
|
struct SProcessResult
|
{
|
SProcessResult() { Reset(); }
|
void Reset()
|
{
|
nInfoHeight = 120;
|
dResolution = 1.0; // um/pixel
|
dRulerGab = 100.0; // um
|
vectorPoint.clear();
|
vectorString.clear();
|
ptDefectPos = CPoint(0,0);
|
}
|
|
int nInfoHeight;
|
double dResolution;
|
double dRulerGab;
|
VectorPoint vectorPoint;
|
VectorString vectorString;
|
POINT ptDefectPos;
|
};
|
|
class CReviewProcessData : public CWorkThreadData
|
{
|
public:
|
CReviewProcessData(PVOID pPtr) : CWorkThreadData(pPtr)
|
{
|
nThreadIdx = -1;
|
pReviewResult = NULL;
|
}
|
|
virtual ~CReviewProcessData()
|
{
|
nThreadIdx = -1;
|
pReviewResult = NULL;
|
}
|
|
int nThreadIdx;
|
SReviewResult* pReviewResult;
|
};
|
|
// CReviewProcessor
|
class CReviewProcessor : public CWorkThreadPools,
|
public IUpdateReviewProcessStatus
|
{
|
public:
|
CReviewProcessor(int nThreadCount=1);
|
virtual ~CReviewProcessor(void);
|
virtual void UpdateReviewProcessStatus(int nReviewStatus, int nPlanIndex=0);
|
|
virtual void AddWsiResultData(int nModuleIndex, const SWsiResult& measureResut) = 0;
|
virtual void AddWsiReflowResultData(int nModuleIndex, const SWsiResult& measureResut) = 0;
|
virtual void AddWsiUserResultData(int nModuleIndex, const SWsiResult& measureResut) = 0;
|
virtual void AddWsiVLSIResultData(int nModuleIndex, const SWsiResult& measureResut)=0;
|
virtual void AddWsiMultiShotResultData(int nModuleIndex, const SWsiResult& measureResut)=0;
|
virtual void AddCameraImageData(int nModuleIndex, int nResultIndex, VectorImageData& vectorImageData) = 0;
|
virtual int AddReviewProcessData(SReviewResult* pReviewResult) = 0;
|
|
virtual int PostProcessReviewResult(int nThreadIdx, SReviewResult* pReviewResult) = 0;
|
virtual int PostProcessUserResult(int nThreadIdx, SReviewResult* pReviewResult) = 0;
|
virtual int PostProcessWsiResult(int nThreadIdx, SReviewResult* pReviewResult) = 0; // 누락? wsi 종료 프로세스 추가 [6/16/2017 bhs]
|
virtual int PostProcessMeasureResult(int nThreadIdx, SReviewResult* pReviewResult) = 0;
|
virtual int PostProcessWsiReflowResult(int nThreadIdx, SReviewResult* pReviewResult) = 0;
|
virtual int PostProcessWsiUserResult(int nThreadIdx, SReviewResult* pReviewResult) = 0;
|
virtual int PostProcessWsiMultiShotResult(int nThreadIdx, SReviewResult* pReviewResult)=0;
|
virtual int PostProcessWsiVLSIResult(int nThreadIdx, SReviewResult* pReviewResult)=0;
|
virtual int CheckMotionComplete() = 0;
|
|
virtual CString MakeWSIImageFileName( SReviewResult* pReviewResult )=0;
|
virtual double GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection)=0;
|
|
protected:
|
virtual void WorkThreadProcess(PVOID pParameter) = 0; // CWorkThreadPools
|
|
public:
|
int GetReviewProcessStatus() const { return m_nReviewProcessStatus; }
|
|
int LockThreadIndex();
|
void UnlockThreadIndex(int nIndex);
|
|
// setter
|
void SetView(CView *pView);
|
void SetRP2P(IReviewProcessor2Parent *pRP2P);
|
void SetLineMachineType(int nLineType, int nMachineType, CString strEqpID);
|
void SetJobID(const CString& strJobID);//메소드명, 변수명 변경 : SetGlassID -> SetJobID
|
void SetOperID(const CString& strOperID);
|
void SetReviewCount(int nCount=0);
|
void SetSaveImageBasePath(const CString& strPath);
|
BOOL SetReviewImageInfo(int nWidth, int nHeight, int nSize, int nQuality, int nStep, double dScale);
|
BOOL SetReviewImageInfo(int nWidth, int nHeight, int nSize, int nQuality, int nStep, double dScale, BOOL bOriginImg, int nImageRotate, int nImageFlip);
|
void SetDefectFindInfo(const CRsRcpDefectFindInfo* pDefectFindInfo);
|
void SetUploadImagePath(const CString& strImagePath);
|
void SetRTMSUploadImagePath(const CString& strImagePath);
|
|
void SetReviewImagePath(const CString& strReviewImagePath);
|
|
//Plan진행간 Count 표기
|
void SetPlanReviewCount(int ncount) {
|
nPlanReviewCount = ncount;
|
};
|
int GetPlanReviewCount() {
|
return nPlanReviewCount;
|
};
|
int nPlanReviewCount;
|
|
//Plan진행간 Count 표기
|
void SetPlanWSICount(int ncount) {
|
nPlanWSICount = ncount;
|
};
|
int GetPlanWSICount() {
|
return nPlanWSICount;
|
};
|
int nPlanWSICount;
|
|
// Getter
|
void GetSaveImageBasePath(CString& strPath);
|
CString GetUploadImagePath();
|
CString GetRTMSUploadImagePath();
|
|
CString GetReviewUploadImagePath();
|
|
|
// Cell function
|
void SetCellData(CGlassResult* pGlassResult);
|
virtual void ResetGantryDone() = 0;
|
protected:
|
// static
|
static void DrawRuler(CDC *pDC, int nWidth, int nHeight, double dResolution, double dRulerGab);
|
static void DrawText(CDC *pDC, int nWidth, int nHeight, const VectorPoint& vectorPoint, const VectorString& vectorString);
|
static void DrawDefectPosCursor(CDC* pDC, int nDefectPosX, int nDefectPosY);
|
static void DrawDefectRect(CDC* pDC, const CRect& rtRect);
|
static UINT64 SaveReviewImage(CCHImageData* pImageData, const CString& strFilename, UINT64 nMaxSize, int nQuality=50, int nStep=5);
|
static void DrawCenterLine(CDC *pDC, int nWidth, int nHeight);
|
static void DrawCenterRect(CDC *pDC, int nWidth, int nHeight, int nDrawWidth, int nDrawHeight, double dResolution);
|
|
// [2017:4:10]-[WEZASW] : 고객사 요청에 의한 bmp 파일 추가 저장. (임시사용)
|
static BOOL SaveReviewImage(CCHImageData* pImageData, const CString& strFilename);
|
|
// PCControl Control command
|
BOOL Signal_SendSignal(int nSignalIndex);
|
|
// Review Camera Control Command
|
void ReviewCamera_CameraControl(int nControlCmd);
|
BOOL ReviewCamera_CameraControl(int nModuleIndex, int nControlCmd);
|
int ReviewCamera_GetReviewCameraControlCount() const;
|
CCameraControlReview* ReviewCamera_GetReviewCameraControl(int nModuleIndex);
|
|
// WSI Control Command
|
BOOL WSI_SetWSIEnd();
|
BOOL WSI_SetWSITimeOver();
|
BOOL WSI_SetWSIEnd(int nModuleIndex);
|
BOOL WSI_SetWSITimeOver(int nModuleIndex);
|
|
// getter module status
|
int Module_GetModuleStatusCount(int nModuleType=0) const;
|
CModuleStatus* Module_GetModuleStatus(int nModuleIdx);
|
SCameraControl* Module_GetCameraControl(int nModuleIdx);
|
SMotorPosition* Module_GetMotorPosition(int nModuleIdx);
|
SMotorStatus* Module_GetMotorStatus(int nModuleIdx);
|
SAxisIndex* Module_GetAxisIndex(int nModuleIdx);
|
SCoordInfo* Module_GetCoordInfo(int nModuleIdx);
|
SCameraInfo* Module_GetCurrentCameraInfo(int nModuleIdx);
|
SCameraInfo* Module_GetCameraInfo(int nModuleIdx, int nZoomIdx=0);
|
|
// Cell function
|
int GetCellIdIdx(const CString& strCellID);
|
|
|
|
|
protected:
|
CView* m_pView;
|
IReviewProcessor2Parent* m_pRP2P;
|
|
// system line
|
int m_nLineType;
|
int m_nMachineType;
|
CString m_strEqpID;
|
|
// glass id
|
int m_nReviewProcessStatus;
|
int m_nReviewPlanIndex;
|
CString m_strJobID;// m_strGlassID -> strJobID 변경
|
CProcessTimer m_ProcessTimer;
|
CString m_strOperID;
|
|
// image path
|
CString m_strSaveImageBasePath;
|
CString m_strSaveImageUploadPath;
|
CString m_strSaveImageReviewPath;
|
CString m_strInspectImagePath;
|
CString m_strRTMSImagePath;
|
int m_nReviewCount; // [2017:5:21]-[WEZASW] : Review 이미지 네이밍 룰에 의한 SequenceNo 카운트(리뷰 포인트 순서)
|
|
// defect find info
|
BOOL m_bDefectFindProcess;
|
SReviewDefectFindParam m_ReviewDefectFindParam;
|
CReviewDefectFinder* m_pReviewDefectFinder;
|
bool* m_pUseThreadIndex;
|
|
// review image info
|
int m_nReviewResizeWidth;
|
int m_nReviewResizeHeight;
|
int m_nReviewImageSize;
|
int m_nReviewImageQuality;
|
int m_nReviewImageStep;
|
double m_dReviewImageScale;
|
int m_nImageRotate;
|
int m_nimageFlip;
|
|
BOOL m_bReviewOriginalImage; // Save Review Original Image
|
|
// edge triangle
|
CEdgeTriangle* m_pEdgeTriangle;
|
|
// Cell Index Vector
|
VectorInteger m_vecCellIndex;
|
VectorString m_vecCellId;
|
|
private:
|
CRITICAL_SECTION m_csUseThreadIndex;
|
};
|