From 630eb072cca33a7c633f6429a0b5a531d1b83268 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 목, 08 7월 2021 17:09:08 +0900 Subject: [PATCH] Revert "Ongoing60 #3486CF AOI Review Review History 프로그램 테스트 및 적용" --- ReviewSystem/ReviewSystem/DitGlassRawClient.cpp | 13 ReviewSystem/ReviewSystem/DitGlassRawClient.h | 10 .gitignore | 4 DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp | 120 +- DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp | 31 DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h | 24 DitGlassRawMessenger/Extern/DitGlassRawClient.h | 10 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 563 +++++++------- ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h | 3 DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp | 76 - ReviewSystem/ReviewSystem/ReviewProcessor.h | 5 DitGlassRawMessenger/Extern/DitGlassRawClient.cpp | 13 DitGlassRawMessenger/Extern/DitGlassRawStruct.h | 280 +++---- /dev/null | 36 - DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h | 16 ReviewSystem/ReviewSystem/DitGlassRawStruct.h | 280 +++---- ReviewSystem/ReviewSystem/ReviewProcessor.cpp | 10 ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp | 345 ++++---- ReviewSystem/include/CHReviewResult/ReviewResult.h | 25 DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp | 274 ------- 20 files changed, 785 insertions(+), 1,353 deletions(-) diff --git a/.gitignore b/.gitignore index 3c46078..a87b361 100644 --- a/.gitignore +++ b/.gitignore @@ -29,10 +29,6 @@ DitGlassRawMessenger/lib/ DitGlassRawMessenger/Backup/ -ReviewHistory/.vs/ -ReviewHistory/bin/ -ReviewHistory/lib/ - *.sdf *.opensdf *.suo diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp index 4f22cb1..bf1c099 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp @@ -1,5 +1,5 @@ -// DitGlassRawMessengerDlg.cpp : 占쏙옙占쏙옙 占쏙옙占쏙옙 +// DitGlassRawMessengerDlg.cpp : 구현 파일 // #include "stdafx.h" @@ -23,20 +23,20 @@ #define GRID_TEXT_COLOR RGB(255,255,255) #define GRID_ALARM_TEXT_COLOR RGB(255,0,0) #define GRID_LINE_COLOR GRID_FIX_COLOR -// 占쏙옙占쏙옙 占쏙옙占싸그뤄옙 占쏙옙占쏙옙占쏙옙 占쏙옙占실댐옙 CAboutDlg 占쏙옙화 占쏙옙占쏙옙占쌉니댐옙. +// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다. class CAboutDlg : public CDialog { public: CAboutDlg(); -// 占쏙옙화 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쌉니댐옙. +// 대화 상자 데이터입니다. enum { IDD = IDD_ABOUTBOX }; protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 占쏙옙占쏙옙占쌉니댐옙. + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. -// 占쏙옙占쏙옙占쌉니댐옙. +// 구현입니다. protected: DECLARE_MESSAGE_MAP() }; @@ -54,7 +54,7 @@ END_MESSAGE_MAP() -// CDitGlassRawMessengerDlg 占쏙옙화 占쏙옙占쏙옙 +// CDitGlassRawMessengerDlg 대화 상자 @@ -127,7 +127,7 @@ m_vecStrGridDefectHeader.push_back("CellY(mm)"); m_vecStrGridDefectHeader.push_back("ScrtRatio"); m_vecStrGridDefectHeader.push_back("Density"); - //201207 CJH - Merge 占쏙옙占쏙옙 확占쏙옙 + //201207 CJH - Merge 여부 확인 m_vecStrGridDefectHeader.push_back("MergeState"); } @@ -192,16 +192,16 @@ if (timestruct.tm_mon>11 || timestruct.tm_mon<0 ) ASSERT(FALSE); } -// CDitGlassRawMessengerDlg 占쌨쏙옙占쏙옙 처占쏙옙占쏙옙 +// CDitGlassRawMessengerDlg 메시지 처리기 BOOL CDitGlassRawMessengerDlg::OnInitDialog() { CDialog::OnInitDialog(); DragAcceptFiles(TRUE); - // 占시쏙옙占쏙옙 占쌨댐옙占쏙옙 "占쏙옙占쏙옙..." 占쌨댐옙 占쌓몌옙占쏙옙 占쌩곤옙占쌌니댐옙. + // 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다. - // IDM_ABOUTBOX占쏙옙 占시쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌍억옙占� 占쌌니댐옙. + // IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); @@ -219,16 +219,16 @@ } } - // 占쏙옙 占쏙옙화 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. 占쏙옙占쏙옙 占쏙옙占싸그뤄옙占쏙옙 占쏙옙 창占쏙옙 占쏙옙화 占쏙옙占쌘곤옙 占싣댐옙 占쏙옙荑∽옙占� - // 占쏙옙占쏙옙占쌈울옙크占쏙옙 占쏙옙 占쌜억옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. - SetIcon(m_hIcon, TRUE); // 큰 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. - SetIcon(m_hIcon, FALSE); // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. + // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는 + // 프레임워크가 이 작업을 자동으로 수행합니다. + SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다. + SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다. - //트占쏙옙占싱억옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //트레이아이콘 구성 m_TrayIcon = FALSE; ResTrayIcon(); - //占쏙옙占� 占쏙옙占쏙옙 + //빌드 정보 { CString strBuild; tm tmBuild; @@ -237,7 +237,7 @@ SetDlgItemText(IDC_BUILDDATE, strBuild); } - //占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻억옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/20] + //설정파일 정보 읽어 오기 [김태현 2018/11/20] { m_strConfigFile; { @@ -268,7 +268,7 @@ SetDlgItemText(IDC_EDIT_STACK_PARAM2, m_ConfigOption.m_strStackParam2); } - //占싸깍옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/20] + //로그 관련 [김태현 2018/11/20] { CakFileUtil fileutil; char strPath[256]; @@ -371,30 +371,30 @@ if(m_Server.CreateServer(m_ConfigOption.m_nMaxDataNumCell, m_ConfigOption.m_nMaxDataNumDefect) == FALSE) { - AfxMessageBox("占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쌌니댐옙."); + AfxMessageBox("서버 생성 실패 종료 합니다."); exit(0); } - //占쏙옙占썹값 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/12] + //현재값 적용 [김태현 2019/1/12] { CDitGlassRawServer* pServer = (CDitGlassRawServer*) &m_Server; CgrmGlassRawData* pRawDataBuffer = &m_GlassRawDataBuffer; pRawDataBuffer->ImportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData()); } - //占쌜억옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + //작업 쓰레드 생성 [김태현 2018/11/13] { _beginthread(threadMain, NULL, this); } PostMessage(UM_GLASSRAW_CLIENTMESSAGE); - return TRUE; // 占쏙옙커占쏙옙占쏙옙 占쏙옙트占싼울옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 TRUE占쏙옙 占쏙옙환占쌌니댐옙. + return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다. } void CDitGlassRawMessengerDlg::OnBnClickedOk() { - // TODO: 占쏙옙占썩에 占쏙옙트占쏙옙 占싯몌옙 처占쏙옙占쏙옙 占쌘드를 占쌩곤옙占쌌니댐옙. + // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. OnOK(); } @@ -403,14 +403,14 @@ { NOTIFYICONDATA nid; nid.cbSize = sizeof(nid); - nid.hWnd = m_hWnd; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌘듸옙 - nid.uID = IDR_MAINFRAME; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쌀쏙옙 ID - nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 占시뤄옙占쏙옙 占쏙옙占쏙옙 - nid.uCallbackMessage = UM_TRAYICON_MSG; // 占쌥뱄옙聘占쏙옙占� 占쏙옙占쏙옙 - nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 占쏙옙占쏙옙占쏙옙 占싸듸옙 + nid.hWnd = m_hWnd; // 메인 윈도우 핸들 + nid.uID = IDR_MAINFRAME; // 아이콘 리소스 ID + nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그 설정 + nid.uCallbackMessage = UM_TRAYICON_MSG; // 콜백메시지 설정 + nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 아이콘 로드 char strTitle[256]; - GetWindowText(strTitle, sizeof(strTitle)); // 캡占실바울옙 占쏙옙쨉占� 占쏙옙占쌘울옙 占쏙옙占쏙옙 + GetWindowText(strTitle, sizeof(strTitle)); // 캡션바에 출력된 문자열 얻음 lstrcpy(nid.szTip, strTitle); Shell_NotifyIcon(NIM_ADD, &nid); SendMessage(WM_SETICON, (WPARAM)TRUE, (LPARAM)nid.hIcon); @@ -433,7 +433,7 @@ GetCursorPos(&pos); { HMENU hMenu = CreatePopupMenu(); - AppendMenu(hMenu, MF_STRING, 0, "占쏙옙占쏙옙占쏙옙2占쏙옙트占쏙옙품"); + AppendMenu(hMenu, MF_STRING, 0, "연구소2파트작품"); AppendMenu(hMenu, MF_STRING, WM_DESTROY, "Exit"); TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, 0, GetSafeHwnd(), NULL); } @@ -461,19 +461,19 @@ } } -// 占쏙옙화 占쏙옙占쌘울옙 占쌍쇽옙화 占쏙옙占쌩몌옙 占쌩곤옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙占쏙옙 占쌓몌옙占쏙옙占쏙옙 -// 占싣뤄옙 占쌘드가 占십울옙占쌌니댐옙. 占쏙옙占쏙옙/占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙求占� MFC 占쏙옙占쏙옙 占쏙옙占싸그뤄옙占쏙옙 占쏙옙荑∽옙占� -// 占쏙옙占쏙옙占쌈울옙크占쏙옙占쏙옙 占쏙옙 占쌜억옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌌니댐옙. +// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면 +// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는 +// 프레임워크에서 이 작업을 자동으로 수행합니다. void CDitGlassRawMessengerDlg::OnPaint() { if (IsIconic()) { - CPaintDC dc(this); // 占쌓몌옙占썩를 占쏙옙占쏙옙 占쏙옙占쏙옙決占� 占쏙옙占쌔쏙옙트 + CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); - // 클占쏙옙占싱억옙트 占썹각占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏘데占쏙옙 占쏙옙占쏙옙求占�. + // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; @@ -481,7 +481,7 @@ int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; - // 占쏙옙占쏙옙占쏙옙占쏙옙 占쌓몌옙占싹댐옙. + // 아이콘을 그립니다. dc.DrawIcon(x, y, m_hIcon); } else @@ -490,8 +490,8 @@ } } -// 占쏙옙占쏙옙微占� 占쌍쇽옙화占쏙옙 창占쏙옙 占쏙옙占� 占쏙옙占싫울옙 커占쏙옙占쏙옙 표占시되듸옙占쏙옙 占시쏙옙占쌜울옙占쏙옙 -// 占쏙옙 占쌉쇽옙占쏙옙 호占쏙옙占쌌니댐옙. +// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서 +// 이 함수를 호출합니다. HCURSOR CDitGlassRawMessengerDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); @@ -501,15 +501,15 @@ void CDitGlassRawMessengerDlg::OnDropFiles(HDROP hDropInfo) { int nFiles; - char szPathName[MAX_PATH]; // 占쏙옙占쏙옙 占쏙옙罐占쏙옙占� 占쏙옙載o옙占�. + char szPathName[MAX_PATH]; // 파일 경로면이 들어간다. CString strFileName; - // 占쏙옙撻占� 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 드롭된 파일의 갯수 nFiles = ::DragQueryFile( hDropInfo, 0xFFFFFFFF, szPathName, MAX_PATH ); - for(int i = nFiles-1 ; i >= 0; i--) //占쏙옙撻占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙큼 占쏙옙占쏙옙占쏙옙 占쏙옙占썽서 占쏙옙占쏙옙 占쏙옙罐占� 占쌨쇽옙占쏙옙 占쌘쏙옙占쏙옙 占쏙옙占� + for(int i = nFiles-1 ; i >= 0; i--) //드롭된 파일 갯수만큼 루프를 돌면서 파일 경로를 메세지 박스로 출력 { - // 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 + // 파일의 경로 얻어옴 ::DragQueryFile(hDropInfo, i, szPathName, MAX_PATH); SetDlgItemText(IDC_EDIT_RAWFILENAME, szPathName); @@ -601,18 +601,18 @@ if(pRawInfo->m_nCommandIdxWrite != pRawInfo->m_nCommandIdxRead) { - int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙占쏙옙 占싹놂옙 占쏙옙占쏙옙占쏙옙占싼쇽옙 占싻는댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/13] + int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //현재는 읽은 마지막 포인트임으로 하나 증가시켜서 읽는다. [김태현 2018/11/13] _grmDitCommand::_grmCommand* pCommand = &pRawInfo->m_nCommandBuffer[nReadIdx]; AKLOG("Recv Command ID:%d(r%d/w%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite); pRawInfo->m_nCommandIdxRead = nReadIdx; - if(pCommand->nResult == -1) //占쏙옙占� 占쏙옙占쏙옙 占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + if(pCommand->nResult == -1) //명령 수행 전 [김태현 2018/11/13] { pCommand->nResult = ProcessCommand( (emGlassRawCommand)pCommand->nCommand, pCommand->strParam ); } else { - //占싱뱄옙 처占쏙옙 占싫곤옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + //이미 처리 된거 [김태현 2018/11/13] } AKLOG("Recv Command ID:%d(r%d/w%d) Process End(Result:%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite, pCommand->nResult); @@ -658,7 +658,7 @@ { nResult = m_pGlassRawMaker->SequenceInspectEnd(pRawDataBuffer); pServer->GetGlassRawInfo()->m_ServerProcStep = APS_InspectEnd; - //Stack 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쌨모리울옙 占쌥울옙 占싹깍옙 占쏙옙占쏙옙 Export + //Stack 정보를 공유메모리에 반영 하기 위한 Export //pRawDataBuffer->ExportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData()); break; } @@ -677,7 +677,7 @@ case grcSequenceCustomReviewDataRead: { nResult = m_pGlassRawMaker->SequenceCustomizeReview(pRawDataBuffer); - ////Customize Review占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙트 + ////Customize Review를 위한 업데이트 //{ // memcpy(pServer->GetDefectData(0), pRawDataBuffer->GetDefectData(0), sizeof(_grmDefectData)*pServer->GetGlassRawInfo()->m_nDefectMaxDataNum); // memcpy(pServer->GetCellData(0), pRawDataBuffer->GetCellData(0), sizeof(_grmCellData)*pServer->GetGlassRawInfo()->m_nCellMaxDataNum); @@ -707,12 +707,6 @@ nResult = m_pGlassRawMaker->ReadBinFile(pRawDataBuffer); break; } - case grcReviewWriteBIn: - { - nResult = m_pGlassRawMaker->ReviewWriteBin(pRawDataBuffer); - break; - } - } PostMessage(UM_GLASSRAW_CLIENTMESSAGE, nCmd); @@ -777,14 +771,14 @@ if(m_pGlassRawMaker) delete m_pGlassRawMaker; - if(m_TrayIcon) // 占쏙옙占쏙옙 트占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占실억옙占쏙옙占쏙옙 확占쏙옙 + if(m_TrayIcon) // 현재 트레이 아이콘으로 설정되었는지 확인 { NOTIFYICONDATA nid; nid.cbSize = sizeof(nid); - nid.hWnd = m_hWnd; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌘듸옙 + nid.hWnd = m_hWnd; // 메인 윈도우 핸들 nid.uID = IDR_MAINFRAME; - // 占쌜억옙 표占쏙옙占쏙옙(TaskBar)占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + // 작업 표시줄(TaskBar)의 상태 영역에 아이콘을 삭제한다. Shell_NotifyIcon(NIM_DELETE, &nid); } @@ -942,7 +936,7 @@ BOOL CDitGlassRawMessengerDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { - // TODO: 占쏙옙占썩에 특占쏙옙화占쏙옙 占쌘드를 占쌩곤옙 占쏙옙/占실댐옙 占썩본 클占쏙옙占쏙옙占쏙옙 호占쏙옙占쌌니댐옙. + // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if (m_gridCellInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridCellInfo.GetDlgCtrlID()) { *pResult = 1; @@ -1264,7 +1258,7 @@ CString str; strItem = _T(" "); - // Panel x占쏙옙, y占쏙옙占쏙옙 占쌜라스울옙 占쌥댐옙 [6/9/2017 bhs] + // Panel x축, y축은 글라스와 반대 [6/9/2017 bhs] if(1)//g_pBasic->GetScanCoordination() == SC_XCoord) str.Format("% 5.3f", (double)pDefect->m_nUMCellX / 1000.0); else @@ -1287,7 +1281,7 @@ CString str; strItem = _T(" "); - // Panel x占쏙옙, y占쏙옙占쏙옙 占쌜라스울옙 占쌥댐옙 [6/9/2017 bhs] + // Panel x축, y축은 글라스와 반대 [6/9/2017 bhs] if(1)//g_pBasic->GetScanCoordination() == SC_XCoord) str.Format("% 5.3f", (double)pDefect->m_nUMCellY / 1000.0); else @@ -1439,7 +1433,7 @@ void CDitGlassRawMessengerDlg::OnBnClickedBtnImportRaw() { - AKLOG("占싱깍옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占십요가 占쌍겠놂옙.. 占쏙옙占쏙옙占쏙옙..."); + AKLOG("이기능은 가급적 필요가 있겠나.. 싶으네..."); PostMessage(UM_GLASSRAW_CLIENTMESSAGE); } @@ -1574,13 +1568,13 @@ - CString str = _T("All(*.*)|*.*|"); // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + CString str = _T("All(*.*)|*.*|"); // 선택할 파일 종류 CString File; CString strFileList; CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, str, this); - const int c_cMaxFiles = 400 /*占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙*/ ; // 占쌨몌옙 占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 확占쏙옙 占쏙옙占쏙옙占쌍몌옙 占쏘개 占쏙옙占쏙옙 + const int c_cMaxFiles = 400 /*선택할 파일 숫자*/ ; // 메모리 부족현상으로 확장 안해주면 몇개 못씀 const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1; dlg.GetOFN().lpstrFile = strFileList.GetBuffer(c_cbBuffSize); dlg.GetOFN().nMaxFile = c_cbBuffSize; @@ -1591,7 +1585,7 @@ { for(POSITION pos=dlg.GetStartPosition(); pos != NULL;) { - // 占쏙옙체占쏙옙占쏙옙占쏙옙 ResetContent + // 전체삭제는 ResetContent File = dlg.GetNextPathName(pos); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp index b8c7ebe..2b2092c 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp @@ -98,34 +98,3 @@ return TRUE; } - -BOOL CGlassRawBase::ReviewWriteBin(CgrmGlassRawData* pData) -{ - CString strFileName; - strFileName.Format("D:\\DIT_ResultData\\RawBin\\%s", pData->GetGlassData()->m_strFileName); - FILE* pf = fopen(strFileName.GetBuffer(0), "wb"); - if (pf) - { - fwrite(pData->GetMemInfo(), sizeof(_grmDitMemInfo), 1, pf); - - fwrite(pData->GetGlassData(), pData->GetMemInfo()->m_nSizeOfGlassData, sizeof(char), pf); - - for (int i = 0; i < pData->GetGlassData()->m_nCellNum; i++) - { - fwrite(pData->GetCellData(i), pData->GetMemInfo()->m_nSizeOfCellData, sizeof(char), pf); - } - - for (int i = 0; i < pData->GetGlassData()->m_nDefectNum; i++) - { - fwrite(pData->GetDefectData(i), pData->GetMemInfo()->m_nSizeOfDefectData, sizeof(char), pf); - } - - fclose(pf); - } - else - { - return FALSE; - } - - return TRUE; -} \ No newline at end of file diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h index 2f46477..68c99c0 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h @@ -3,13 +3,13 @@ #include "DitGlassRawStruct.h" ////////////////////////////////////////////////////////////////////////// -// Recipe占쏙옙占쏙옙 Server占쏙옙 Inspector占쏙옙 占쏙옙占쏙옙占싹댐옙 占쏙옙占쏙옙占쏙옙占쏙옙. +// Recipe에서 Server와 Inspector가 공유하는 설정정보. enum ThreadCount { Thread_1 = 0, Thread_2, Thread_4, Thread_6, Thread_8, Thread_11, Thread_12, Thread_22, Thread_24 }; enum CameraType { CamType_Unknown = 0, CamType_Transfer, CamType_Reflex }; -enum ScanCoordinate { SC_XCoord = 0, SC_YCoord }; // 占쏙옙캔占쏙옙占쏙옙. 占쏙옙占쏙옙 占쏙옙표 占쏙옙占쏙옙占� 占쌩울옙. -enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right }; // 占쌜억옙占쌘곤옙 占쏙옙 占쏙옙캔 占쏙옙占쏙옙. -enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 占쏙옙占쏙옙 Scan 占쏙옙占쏙옙. -enum ScanType { ST_SingleScan = 0, ST_DualScan }; // SingleScan - 占쌤뱄옙占쏙옙, DualScan - 占쏙옙占쏙옙占� +enum ScanCoordinate { SC_XCoord = 0, SC_YCoord }; // 스캔방향. 결함 좌표 연산시 중요. +enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right }; // 작업자가 본 스캔 방향. +enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 기준 Scan 방향. +enum ScanType { ST_SingleScan = 0, ST_DualScan }; // SingleScan - 단방향, DualScan - 양방향 enum GlassDirection { GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; enum AcqMode { Acq_Unknown = 0, Acq_Grab, Acq_Snap, Acq_Matrox, Acq_Simul }; enum FindBoundary { FB_NotFind = 0, FB_PitchMatching, FB_ManualMatching }; @@ -20,7 +20,7 @@ enum DefectFiltering { Filtering_NO = 0, Filtering_CO, Filtering_Cutoff, Filtering_DXDY, Filtering_TD, Filtering_FALSE }; // Filtering_CO : Cosmic Ray FALSE enum ALIGN_MARK_CLASSIFY { eAMC_First = 0, eAMC_Second }; ////////////////////////////////////////////////////////////////////////// -// Defect占쏙옙 占쏙옙占실댐옙 타占쌉듸옙. +// Defect에 사용되는 타입들. enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown }; enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; enum SERVER_DefectJudgementType { JudgementType_OK = 0, JudgementType_TR, JudgementType_PR, JudgementType_UNKNOWN }; @@ -34,7 +34,7 @@ enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 }; //choigudal jude fix 2012.03.07 -enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 占쌩곤옙 +enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 }; enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX }; enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX }; @@ -60,8 +60,6 @@ virtual BOOL WriteBinFile(CgrmGlassRawData* pData); virtual BOOL ReadBinFile(CgrmGlassRawData* pData); - - virtual BOOL ReviewWriteBin(CgrmGlassRawData* pData); virtual BOOL WriteAOIFile(CgrmGlassRawData* pData){return TRUE;}; virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp index 4b6b6bb..f165cb9 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp @@ -437,11 +437,11 @@ strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea strLine += strValue; strLine += "\n"; - strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 CORNER_GRAY_0 AVG_AMP_0 FFT_VAR_0 FFT_VAH_0 FFT_VAQ_0 FFT_PK_0 AVG_GRAY_1 PORTION_1 CORNER_GRAY_1 AVG_AMP_1 FFT_VAR_1 FFT_VAH_1 FFT_VAQ_1 FFT_PK_1 AVG_GRAY_2 PORTION_2 CORNER_GRAY_2 AVG_AMP_2 FFT_VAR_2 FFT_VAH_2 FFT_VAQ_2 FFT_PK_2 AVG_GRAY_3 PORTION_3 CORNER_GRAY_3 AVG_AMP_3 FFT_VAR_3 FFT_VAH_3 FFT_VAQ_3 FFT_PK_3"; //54ea 21-06-21 Mura Data 異붽� + strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 AVG_GRAY_1 PORTION_1 AVG_GRAY_2 PORTION_2 AVG_GRAY_3 PORTION_3"; //30ea 21-05-12 Mura Data 異붽� strLine += strValue; strLine += "\n"; //210405 //ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK - strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea + strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK"; //49ea strLine += strValue; } @@ -931,69 +931,8 @@ { SPRINTRAW(12, "*"); } - - //kyh 0622 - // 25 12 CORNER_GRAY_0 - if (strlen(pCellData->m_strCorner_Gray_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_0); - } - else - { - SPRINTRAW(12, "*"); - } - // 26 12 AVG_AMP_0 - if (strlen(pCellData->m_strAvgAmp_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 27 12 FFT_VAR_0 - if (strlen(pCellData->m_strFFTVar_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 28 12 FFT_VAH_0 - if (strlen(pCellData->m_strFFTVah_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 29 12 FFT_VAQ_0 - if (strlen(pCellData->m_strFFTVaq_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 30 12 FFT_PK_0 - if (strlen(pCellData->m_strFFTPK_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 31 12 AVG_GRAY_1 + // 25 12 AVG_GRAY_1 if (strlen(pCellData->m_strAvgGray_1)) { SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1); @@ -1002,7 +941,7 @@ { SPRINTRAW(12, "*"); } - // 32 12 PORTION_1 + // 26 12 PORTION_1 if (strlen(pCellData->m_strPortion_1)) { SPRINTRAW(12, "%s", pCellData->m_strPortion_1); @@ -1011,69 +950,7 @@ { SPRINTRAW(12, "*"); } - - //kyh 0622 - // 33 12 CORNER_GRAY_1 - if (strlen(pCellData->m_strCorner_Gray_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 34 12 AVG_AMP_1 - if (strlen(pCellData->m_strAvgAmp_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 35 12 FFT_VAR_1 - if (strlen(pCellData->m_strFFTVar_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 36 12 FFT_VAH_1 - if (strlen(pCellData->m_strFFTVah_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 37 12 FFT_VAQ_1 - if (strlen(pCellData->m_strFFTVaq_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 38 12 FFT_PK_1 - if (strlen(pCellData->m_strFFTPK_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 39 12 AVG_GRAY_2 + // 27 12 AVG_GRAY_2 if (strlen(pCellData->m_strAvgGray_2)) { SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2); @@ -1082,7 +959,7 @@ { SPRINTRAW(12, "*"); } - // 40 12 PORTION_2 + // 28 12 PORTION_2 if (strlen(pCellData->m_strPortion_2)) { SPRINTRAW(12, "%s", pCellData->m_strPortion_2); @@ -1091,69 +968,7 @@ { SPRINTRAW(12, "*"); } - - //kyh 0622 - // 41 12 CORNER_GRAY_2 - if (strlen(pCellData->m_strCorner_Gray_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 42 12 AVG_AMP_2 - if (strlen(pCellData->m_strAvgAmp_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 43 12 FFT_VAR_2 - if (strlen(pCellData->m_strFFTVar_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 44 12 FFT_VAH_2 - if (strlen(pCellData->m_strFFTVah_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 45 12 FFT_VAQ_2 - if (strlen(pCellData->m_strFFTVaq_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 46 12 FFT_PK_2 - if (strlen(pCellData->m_strFFTPK_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 47 12 AVG_GRAY_3 + // 29 12 AVG_GRAY_3 if (strlen(pCellData->m_strAvgGray_3)) { SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3); @@ -1162,71 +977,10 @@ { SPRINTRAW(12, "*"); } - // 48 12 PORTION_3 + // 30 12 PORTION_3 if (strlen(pCellData->m_strPortion_3)) { SPRINTRAW(12, "%s", pCellData->m_strPortion_3); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 49 12 CORNER_GRAY_3 - if (strlen(pCellData->m_strCorner_Gray_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 50 12 AVG_AMP_3 - if (strlen(pCellData->m_strAvgAmp_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 51 12 FFT_VAR_3 - if (strlen(pCellData->m_strFFTVar_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 52 12 FFT_VAH_3 - if (strlen(pCellData->m_strFFTVah_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 53 12 FFT_VAQ_3 - if (strlen(pCellData->m_strFFTVaq_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 54 12 FFT_PK_3 - if (strlen(pCellData->m_strFFTPK_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_3); } else { @@ -1416,7 +1170,6 @@ nValue = nValue << 1; } SPRINTRAW(12, "%04X", nValue); - // 22 12 DEFECT_SIZE // Common 04 遺덈웾 �겕湲� (L,H,M,S) if (pDefectData->m_DefectSizeType == SizeType_Small) { @@ -1636,17 +1389,6 @@ // 49 12 Frame Shrink �젙蹂� 異붽� SPRINTRAW(12, "%d", pDefectData->m_bShrinked); - // 50 12 CLASS_NO // Zone Classification NO - // Zone Data - nValue = 0; - for (int i = 15; i >= 0; i--) - { - if (pDefectData->m_sZoneClassPixelCount[i] > 0) - nValue += 1; - if (i > 0) - nValue = nValue << 1; - } - SPRINTRAW(12, "%04X", nValue); SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp index a7caac2..3423e3d 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp +++ b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp @@ -254,47 +254,16 @@ if (strlen(buffer) <= 0) continue; paser.process(buffer, " "); int nTokNum = paser.getTokNum(); - if (nTokNum < 52) continue; //kyh 31->52 + if (nTokNum < 31) continue; MacroSubPanel.PRO_IMAGE = paser.getTokStr(20); MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21); MacroSubPanel.PORTION_0 = paser.getTokStr(22); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_0 = paser.getTokStr(23); - MacroSubPanel.AVG_AMP_0 = paser.getTokStr(24); - MacroSubPanel.FFT_VAR_0 = paser.getTokStr(25); - MacroSubPanel.FFT_VAH_0 = paser.getTokStr(26); - MacroSubPanel.FFT_VAQ_0 = paser.getTokStr(27); - MacroSubPanel.FFT_PK_0 = paser.getTokStr(28); - - MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(29); - MacroSubPanel.PORTION_1 = paser.getTokStr(30); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_1 = paser.getTokStr(31); - MacroSubPanel.AVG_AMP_1 = paser.getTokStr(32); - MacroSubPanel.FFT_VAR_1 = paser.getTokStr(33); - MacroSubPanel.FFT_VAH_1 = paser.getTokStr(34); - MacroSubPanel.FFT_VAQ_1 = paser.getTokStr(35); - MacroSubPanel.FFT_PK_1 = paser.getTokStr(36); - - MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(37); - MacroSubPanel.PORTION_2 = paser.getTokStr(38); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_2 = paser.getTokStr(39); - MacroSubPanel.AVG_AMP_2 = paser.getTokStr(40); - MacroSubPanel.FFT_VAR_2 = paser.getTokStr(41); - MacroSubPanel.FFT_VAH_2 = paser.getTokStr(42); - MacroSubPanel.FFT_VAQ_2 = paser.getTokStr(43); - MacroSubPanel.FFT_PK_2 = paser.getTokStr(44); - - MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(45); - MacroSubPanel.PORTION_3 = paser.getTokStr(46); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_3 = paser.getTokStr(47); - MacroSubPanel.AVG_AMP_3 = paser.getTokStr(48); - MacroSubPanel.FFT_VAR_3 = paser.getTokStr(49); - MacroSubPanel.FFT_VAH_3 = paser.getTokStr(50); - MacroSubPanel.FFT_VAQ_3 = paser.getTokStr(51); - MacroSubPanel.FFT_PK_3 = paser.getTokStr(52); + MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(24); + MacroSubPanel.PORTION_1 = paser.getTokStr(25); + MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(27); + MacroSubPanel.PORTION_2 = paser.getTokStr(28); + MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(30); + MacroSubPanel.PORTION_3 = paser.getTokStr(31); vecMacroSubPanel.push_back(MacroSubPanel); } @@ -311,43 +280,12 @@ strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE.GetBuffer(0)); strcpy(pGrmMura->m_strAvgGray_0, m_vecMacroSubPanel[i].AVG_GRAY_0.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_0, m_vecMacroSubPanel[i].PORTION_0.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_0, m_vecMacroSubPanel[i].CORNER_GRAY_0.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_0, m_vecMacroSubPanel[i].AVG_AMP_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_0, m_vecMacroSubPanel[i].FFT_VAR_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_0, m_vecMacroSubPanel[i].FFT_VAH_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_0, m_vecMacroSubPanel[i].FFT_VAQ_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_0, m_vecMacroSubPanel[i].FFT_PK_0.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgGray_1, m_vecMacroSubPanel[i].AVG_GRAY_1.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_1, m_vecMacroSubPanel[i].PORTION_1.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_1, m_vecMacroSubPanel[i].CORNER_GRAY_1.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_1, m_vecMacroSubPanel[i].AVG_AMP_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_1, m_vecMacroSubPanel[i].FFT_VAR_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_1, m_vecMacroSubPanel[i].FFT_VAH_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_1, m_vecMacroSubPanel[i].FFT_VAQ_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_1, m_vecMacroSubPanel[i].FFT_PK_1.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgGray_2, m_vecMacroSubPanel[i].AVG_GRAY_2.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_2, m_vecMacroSubPanel[i].PORTION_2.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_2, m_vecMacroSubPanel[i].CORNER_GRAY_2.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_2, m_vecMacroSubPanel[i].AVG_AMP_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_2, m_vecMacroSubPanel[i].FFT_VAR_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_2, m_vecMacroSubPanel[i].FFT_VAH_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_2, m_vecMacroSubPanel[i].FFT_VAQ_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_2, m_vecMacroSubPanel[i].FFT_PK_2.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgGray_3, m_vecMacroSubPanel[i].AVG_GRAY_3.GetBuffer(0)); strcpy(pGrmMura->m_strPortion_3, m_vecMacroSubPanel[i].PORTION_3.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_3, m_vecMacroSubPanel[i].CORNER_GRAY_3.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_3, m_vecMacroSubPanel[i].AVG_AMP_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_3, m_vecMacroSubPanel[i].FFT_VAR_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_3, m_vecMacroSubPanel[i].FFT_VAH_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_3, m_vecMacroSubPanel[i].FFT_VAQ_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_3, m_vecMacroSubPanel[i].FFT_PK_3.GetBuffer(0)); } strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0)); strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0)); diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h index f746014..fdd2ee2 100644 --- a/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h +++ b/DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h @@ -127,36 +127,12 @@ CString PRO_IMAGE; CString AVG_GRAY_0; // 0 Scan 0 Model CString PORTION_0; - CString CORNER_GRAY_0; // kyh 결과파일 포맷 수정 - CString AVG_AMP_0; - CString FFT_VAR_0; - CString FFT_VAH_0; - CString FFT_VAQ_0; - CString FFT_PK_0; // kyh end CString AVG_GRAY_1; // 0 Scan 1 Model CString PORTION_1; - CString CORNER_GRAY_1; // kyh 결과파일 포맷 수정 - CString AVG_AMP_1; - CString FFT_VAR_1; - CString FFT_VAH_1; - CString FFT_VAQ_1; - CString FFT_PK_1; // kyh end CString AVG_GRAY_2; // 1 Scan 0 Model CString PORTION_2; - CString CORNER_GRAY_2; // kyh 결과파일 포맷 수정 - CString AVG_AMP_2; - CString FFT_VAR_2; - CString FFT_VAH_2; - CString FFT_VAQ_2; - CString FFT_PK_2; // kyh end CString AVG_GRAY_3; // 1 Scan 1 Model CString PORTION_3; - CString CORNER_GRAY_3; // kyh 결과파일 포맷 수정 - CString AVG_AMP_3; - CString FFT_VAR_3; - CString FFT_VAH_3; - CString FFT_VAQ_3; - CString FFT_PK_3; // kyh end }; class CMacroResultFile diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp index c37e6e5..d72362f 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.cpp @@ -119,11 +119,6 @@ return SetCommand(grcReadBin); } -BOOL CDitGlassRawClient::WriteReviewRawBinFile() -{ - return SetCommand(grcReviewWriteBIn); -} - BOOL CDitGlassRawClient::SetCommand( emGlassRawCommand nCmd ) { if(m_pGlassRawInfo == NULL) return FALSE; @@ -132,14 +127,14 @@ int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; - if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] + if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//둘이 같다는것은 서큘러 버퍼가 한바퀴 돌았다는것!! [김태현 2018/11/12] { - m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] + m_pGlassRawInfo->m_nCommandIdxRead++;//가장 오래된 명령 하나를 삭제한다. [김태현 2018/11/12] } m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1수행전, 0실패, 1성공 [김태현 2018/11/13] m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; @@ -200,7 +195,7 @@ void CDitGlassRawClient::RemoveReviewDefects() { int nDefectNum = m_pGlassData->m_nDefectNum; - int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int nRightDefectNum = 0;//기준점 오른쪽에 위치한 결함 갯수 int nDefectDeleteNum = 0; for(int i=nDefectNum-1; i>=0; i--) { diff --git a/DitGlassRawMessenger/Extern/DitGlassRawClient.h b/DitGlassRawMessenger/Extern/DitGlassRawClient.h index 82a185a..ca3b45b 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawClient.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawClient.h @@ -22,7 +22,7 @@ BOOL SetReviewComtomize(); - void RemoveReviewDefects();//AOI占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싹곤옙, 占쏙옙占썰에占쏙옙 占쏙옙占쏙옙占쏙옙 User 혹占쏙옙 Reflow 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + void RemoveReviewDefects();//AOI에서 생성한 디펙 정보를 제외하고, 리뷰에서 생성한 User 혹은 Reflow 결함을 제외한다. _grmDitMemInfo* GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;}; _grmGlassData* GetGlassData(){return m_pGlassData;}; @@ -31,16 +31,14 @@ _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; - //占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占� [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과 파일 강제 쓰기 명령 [김태현 2018/11/12] BOOL WriteAOIRawFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占쏙옙占승뤄옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과파일 강제 바이너리 형태로 쓰기 [김태현 2018/11/12] BOOL WriteAOIRawBinFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占싻깍옙 + //결과파일 강제 바이너리 읽기 BOOL ReadAOIRawBinFile(); - - BOOL WriteReviewRawBinFile(); protected: BOOL ConnectGlassRawInfo(); diff --git a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h index e84fb29..600196e 100644 --- a/DitGlassRawMessenger/Extern/DitGlassRawStruct.h +++ b/DitGlassRawMessenger/Extern/DitGlassRawStruct.h @@ -47,7 +47,7 @@ memset(this, 0, sizeof(_grmGlassData)); } - //Glass 占쏙옙占쏙옙 + //Glass 정보 char m_strFileName[64]; char m_strPath[256]; @@ -56,12 +56,12 @@ int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; int m_nConerCutDirection; - int m_nScanCoordinateY; //占쏙옙占썩가 0占싱몌옙 占싹뱄옙, 1占싱몌옙 Scan占쏙옙占쏙옙占쏙옙 y占쏙옙(占쏙옙 scan占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙, offline 占쏙옙占쏙옙 占쏙옙占쏙옙) + int m_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) int m_nGlassSizeWidth; int m_nGlassSizeHeight; - //占쏙옙占쏙옙占쏙옙占쏙옙 + //설비정보 char m_strLine[32]; char m_strEquipType[32]; char m_strEquipID[32]; @@ -74,7 +74,7 @@ CTime m_tmReviewLoading; CTime m_tmReviewEnd; - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 + //기본 물류정보 char m_strGlassID[32]; //Glass ID char m_strPPID[32]; char m_strEPPID[32]; @@ -91,7 +91,7 @@ char m_strVCRGlassID[32]; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -126,14 +126,14 @@ int m_nDefectNumStackSP; - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - //占쏙옙占쏙옙占� 占쏙옙占쏙옙 um[占쏙옙占쏙옙占쏙옙 2018/12/10] + //얼라인 정보 um[김태현 2018/12/10] double m_nAlignCcdTheta; double m_nAlignCcdShitftX; double m_nAlignCcdShitftY; @@ -143,11 +143,8 @@ double m_nAlignBasicTheta; double m_nAlignBasicShitftX; double m_nAlignBasicShitftY; - char m_strAlignFirst[64]; - char m_strAlignSecond[64]; -// char m_strAlignPath[256]; - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //CSOT용 물류 정보 [김태현 2018/12/5] char m_strCassetteSequenceNo[16]; char m_strOwnerCode[16]; //2. OWNER_CODE char m_strOwnerType[16]; //3. OWNER_TYPE @@ -162,7 +159,7 @@ char m_strGroupID[16]; //14.GROUP_ID char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // CPRJ용 물류 정보 char m_strProdType[3]; char m_strBatchID[13]; char m_strPairHPanelID[13]; @@ -188,17 +185,17 @@ BYTE m_nGlassDataBitSignal[4]; bool m_bJob_end; - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 + //201217 CJH - 찍은 Defect Review 개수 int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� + //201221 CJH - 파싱한 Stack 결과 int m_nStackNum; BOOL m_bStackRead; - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 + //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + //210323 CJH - Server/Frame Shrink 정보 추가 char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; }; @@ -222,7 +219,7 @@ } int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? + short m_nModelIdx; // 몇 번째 모델인가? char m_strCellName[32]; int m_rectCellLeft; @@ -235,7 +232,7 @@ int m_nJudgeGlade; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -259,43 +256,12 @@ char m_strProImage[32]; char m_strAvgGray_0[12]; char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_0[12]; - char m_strAvgAmp_0[12]; - char m_strFFTVar_0[12]; - char m_strFFTVah_0[12]; - char m_strFFTVaq_0[12]; - char m_strFFTPK_0[12]; - char m_strAvgGray_1[12]; char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_1[12]; - char m_strAvgAmp_1[12]; - char m_strFFTVar_1[12]; - char m_strFFTVah_1[12]; - char m_strFFTVaq_1[12]; - char m_strFFTPK_1[12]; - char m_strAvgGray_2[12]; char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_2[12]; - char m_strAvgAmp_2[12]; - char m_strFFTVar_2[12]; - char m_strFFTVah_2[12]; - char m_strFFTVaq_2[12]; - char m_strFFTPK_2[12]; - char m_strAvgGray_3[12]; char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_3[12]; - char m_strAvgAmp_3[12]; - char m_strFFTVar_3[12]; - char m_strFFTVah_3[12]; - char m_strFFTVaq_3[12]; - char m_strFFTPK_3[12]; int m_nDefectNumJudgeOKWhite; int m_nDefectNumJudgeOKBlack; @@ -308,17 +274,17 @@ int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 + // Filtering된 Stack별 수 int m_nDefectTDCount; int m_nDefectSDCount; int m_nDefectPDCount; int m_nDefectSPCount; - // Gate/Data 占쏙옙 占쏙옙占쏙옙 + // Gate/Data 총 갯수 int m_nGateNum; int m_nDataNum; - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 + // 210129 CJH - Cell Origin 방향 int m_nCellXDir; int m_nCellYDir; }; @@ -331,27 +297,26 @@ } ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; float m_fManification; float m_fManificResoultion; char m_strRevImageName[256]; - char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 + // Measure 영역 int m_nMeasure_Index; int m_nMeasure_ResultCode; //0:None, 1:Success float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY ////////////////////////////////////////////////////////////////////////// - // WSI占쏙옙占쏙옙 + // WSI영역 int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + int m_nWsi_Type; // 함몰 / 돌기 float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width char m_strWsi_2DImageFilename[256]; char m_strWsi_3DImageFilename[256]; @@ -359,14 +324,14 @@ int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH + double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 + float m_fWsiManification; // WSI 배율 ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 + // Reflow 영역 int m_nReflow_Index; - int m_nReflow_ResultCode; //0:None, // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side + int m_nReflow_ResultCode; //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side float m_fReflow_LinePosData[8]; int m_nReflow_Side; int m_nReflow_InspectionMode; @@ -382,108 +347,107 @@ short m_nDefectID; short m_nCameraID; short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //short m_nDefectIdx; // 카메라에서의 결함 인덱스 + int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 + int m_nPixelConv; // pixel 단위 좌표 + int m_nPixelScan; // pixel 단위 좌표 - short m_nPixelSize; // 占쏙옙占쏙옙크占쏙옙 ---------------------------------PS - short/*SERVER_DefectType*/ m_DefectType; // 占쏙옙占쏙옙 타占쏙옙 ---------------------------------DT - short/*SERVER_DefectSubType*/ m_DefectSubType; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - short/*SERVER_DefectBDType*/ m_DefectBDType; // 占쏙옙占쏙옙 타占쏙옙 - Bright, Dark, Both + short m_nPixelSize; // 결함크기 ---------------------------------PS + short/*SERVER_DefectType*/ m_DefectType; // 결함 타입 ---------------------------------DT + short/*SERVER_DefectSubType*/ m_DefectSubType; // 결함의 판정상태. + short/*SERVER_DefectBDType*/ m_DefectBDType; // 결함 타입 - Bright, Dark, Both - short m_sPixelWidth; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占십븝옙 - short m_sPixelHeight; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - short m_nLevelSrcMin; // 占쏙옙占쏙옙 占쏙옙占� Min -----------------------------SN - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA + short m_sPixelWidth; // 픽셀단위 결함 너비 + short m_sPixelHeight; // 픽셀단위 결함 높이 + short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN + short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX + short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA + short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN + short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX + short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA + short m_nLevelDiffMin; // 비교차 Min ---------------------------------DN + short m_nLevelDiffMax; // 비교차 Max ---------------------------------DX + short m_nLevelDiffAvg; // 비교차 Avg ---------------------------------DA - int m_nDefectRScale; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 -------------------------RS - short m_sThreshold; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold - short m_sThresholdAvg; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold AVG - short m_sDefectPeak; // 占쏙옙占쏙옙占쏙옙 Peak. - short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 占쏙옙청占쏙옙占쏙옙 + int m_nDefectRScale; // 픽셀단위 결함 높이 -------------------------RS + short m_sThreshold; // 결함을 검출할 때의 Threshold + short m_sThresholdAvg; // 결함을 검출할 때의 Threshold AVG + short m_sDefectPeak; // 결함의 Peak. + short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 요청사항 - int m_nPixelGlassStart; // Glass 占쏙옙占쏙옙 占싫쇽옙 + int m_nPixelGlassStart; // Glass 시작 픽셀 short m_sDefectLoc; - short m_sZoneClassPixelCount[16]; - short m_sZonePixelCount[16]; // Zone占쏙옙 占쏙옙占쏙옙 Pixel 占쏙옙 - short m_sZoneValueMin[16]; // Zone占쏙옙 占쏙옙占쏙옙 Min - short m_sZoneValueMax[16]; // Zone占쏙옙 占쏙옙占쏙옙 Max - short m_sZoneValueAvg[16]; // Zone占쏙옙 占쏙옙占쏙옙 Avg + short m_sZonePixelCount[16]; // Zone별 결함 Pixel 수 + short m_sZoneValueMin[16]; // Zone별 결함 Min + short m_sZoneValueMax[16]; // Zone별 결함 Max + short m_sZoneValueAvg[16]; // Zone별 결함 Avg short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF - //210127 CJH - Zone占쏙옙 Source Gray 占쌉뤄옙 - short m_sZoneValueSrcMin[16]; // Zone占쏙옙 Source Min - short m_sZoneValueSrcMax[16]; // Zone占쏙옙 Source Max - short m_sZoneValueSrcAvg[16]; // Zone占쏙옙 Source Avg + //210127 CJH - Zone별 Source Gray 입력 + short m_sZoneValueSrcMin[16]; // Zone별 Source Min + short m_sZoneValueSrcMax[16]; // Zone별 Source Max + short m_sZoneValueSrcAvg[16]; // Zone별 Source Avg - int m_nUMOriginX; // um占쏙옙占쏙옙 x占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMOriginY; // um占쏙옙占쏙옙 y占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMCenterAlignX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterAlignY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMSizeX; // um占쏙옙占쏙옙 X 크占쏙옙 -----------------------------UX - int m_nUMSizeY; // um占쏙옙占쏙옙 Y 크占쏙옙 -----------------------------UY - int m_nUMSize; // um占쏙옙占쏙옙 크占쏙옙. - CRect m_RectUM; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. + int m_nUMOriginX; // um단위 x좌표 (원점기준) + int m_nUMOriginY; // um단위 y조표 (원점기준) + int m_nUMCenterAlignX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 후) + int m_nUMCenterAlignY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) + int m_nUMCenterX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 전) + int m_nUMCenterY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 전) + int m_nUMSizeX; // um단위 X 크기 -----------------------------UX + int m_nUMSizeY; // um단위 Y 크기 -----------------------------UY + int m_nUMSize; // um단위 크기. + CRect m_RectUM; // 디펙 센터 기준 사각형. - short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 占쏙옙占쏙옙 크占쏙옙 占쏙옙占쏙옙enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; - short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak占쏙옙 占쏙옙占쏙옙. - short/*Judgement*/ m_DefectJudgement; // 占쏙옙占쏙옙 占쏙옙占쏙옙. - BOOL m_bDefectCutoff; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙(TRUE= Cutoff, FALSE) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16占쏙옙占� 占쏙옙占쏙옙 - int m_nPadRegionIdx; // PAD 占쏙옙占쏙옙 占싸듸옙占쏙옙 + short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 결함 크기 종류enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; + short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak의 종류. + short/*Judgement*/ m_DefectJudgement; // 결함 판정. + BOOL m_bDefectCutoff; // 컷 오프 디펙(TRUE= Cutoff, FALSE) + short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16등분 구분 + int m_nPadRegionIdx; // PAD 영역 인덱스 - int m_nUMCellX; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 x 占쏙옙표 - int m_nUMCellY; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 y 占쏙옙표 - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? - short m_nCellIdx; // 占쏙옙占승� 占쏙옙占싸곤옙? - short m_nCellGate; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellData; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellGateAlign; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellDataAlign; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) + int m_nUMCellX; // 셀 원점 기준 x 좌표 + int m_nUMCellY; // 셀 원점 기준 y 좌표 + short m_nModelIdx; // 몇 번째 모델인가? + short m_nCellIdx; // 몇번째 셀인가? + short m_nCellGate; // 셀별 Gate라인(얼라인 보정 전) + short m_nCellData; // 셀별 Data라인(얼라인 보정 전) + short m_nCellGateAlign; // 셀별 Gate라인(얼라인 보정 후) + short m_nCellDataAlign; // 셀별 Data라인(얼라인 보정 후) - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. + int m_nUMShotX; // 샷 기준 X좌표 + int m_nUMShotY; // 샷 기준 Y좌표 + short m_nMaskDefectIdx; // 한 Glass에서 발견된 마스크결함 묶음의 인덱스. + short m_nShotIdx; // 노광샷 번호 + short m_nMatchShotCount; // 동일한 마스크 결함의 수. + short m_nMatchMaxSize; // 동일한 마스크 중 가장 큰 결함의 크기. - short m_nRepeatCount; // 占쏙옙占쌈곤옙占쌉발곤옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙표 占쌥븝옙占쏙옙 + short m_nRepeatCount; // 연속결함발견위한 동일좌표 반복수 short m_nMaskRepeatCount; int m_StackInfo; // Stack Flag - BOOL m_bRealStack; // Stack 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 TD(TRUE) 占쏙옙占쏙옙, 占쏙옙占싶몌옙占쏙옙 占쏙옙占쏙옙 TD(FALSE)占쏙옙占쏙옙占쏙옙 占쏙옙 占쌍댐옙. - short m_nStackStepCount; // Stack 占쏙옙 - short m_nStackColorIdx; // Color占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. + BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. + short m_nStackStepCount; // Stack 수 + short m_nStackColorIdx; // Color를 선택하는 인덱스. //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 + char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes + char m_strUnitID[16]; // 유닛아이디 - int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI占쏙옙 TFE占쏙옙 占쌩곤옙 占싻뤄옙 占싯곤옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占�. - int m_nAtomWidth; // TFE 占쏙옙 占십븝옙 - int m_nAtomHeight; // TFE 占쏙옙 占쏙옙占쏙옙 - short/*ReKind*/ m_DefectKind; // 占쏙옙占쏙옙 占쏙옙占쏙옙 + int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류 알고리즘 적용 결과. + int m_nAtomWidth; // TFE 핵 너비 + int m_nAtomHeight; // TFE 핵 높이 + short/*ReKind*/ m_DefectKind; // 결함 종류 char m_strDefectCode[32]; // Defect Code BOOL m_bMergeState; // Merge Status char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - int m_nDefectMerge; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int m_nDefectMerge; // 현재 디펙의 머지 여부 int m_nPixelSizeOrigin; int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] + int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] char m_strDefectName[16]; char m_strDefectType[16]; @@ -491,27 +455,19 @@ double m_dScanResolution; double m_dConvResolution; - int m_nAngle; // 占쏙옙占쏙옙 - int m_nMajor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Long) - int m_nMinor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Short) - int m_nCompact; // Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占싹댐옙 占쏙옙占쏙옙 占쏙옙占싱울옙 Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 - int m_nThickness; // Blob 占쏙옙占싱울옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 (Area / Major) + int m_nAngle; // 각도 + int m_nMajor; // 장축 길이(Long) + int m_nMinor; // 단축 길이(Short) + int m_nCompact; // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율 + int m_nThickness; // Blob 넓이와 장축의 비율 (Area / Major) - short m_nHliLevelIdx; // 占쏙옙 占쏙옙째 占쏙옙占쏙옙(채占쏙옙)占싸곤옙? - int m_nHliLayers; // 占쌔댐옙占쏙옙篤占� 占쏙옙占쌉듸옙 占쏙옙占싱억옙 bit처占쏙옙 + short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? + int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 - - char m_strAoiImagePath[255]; - char m_strReviewImagePath[255]; - - int m_nAlignRectLeft; - int m_nAlignRectTop; - int m_nAlignRectBottom; - int m_nAlignRectRight; + BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //리뷰 디펙 정보 [김태현 2019/1/19] _grmDefectReviewData m_ReviewDefect; }; @@ -535,8 +491,6 @@ grcWriteBin = 201, grcReadBin = 202, - grcReviewWriteBIn = 301, - grcGlassRawCommand }; @@ -556,7 +510,7 @@ struct _grmDitMemInfo { - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; @@ -564,7 +518,7 @@ int m_nDefectMaxDataNum; int m_nStackMaxDataNum; - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; @@ -580,8 +534,8 @@ struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� + emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 + emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 }; class CgrmGlassRawData @@ -668,7 +622,7 @@ { if(pInfo == NULL || pData == NULL) return FALSE; - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� + if(1) //new type //메모리 총 공간 크기에 상관없이 { //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; diff --git a/ReviewHistory/ReveiwHistory/AlignDlg.cpp b/ReviewHistory/ReveiwHistory/AlignDlg.cpp deleted file mode 100644 index 479c1ec..0000000 --- a/ReviewHistory/ReveiwHistory/AlignDlg.cpp +++ /dev/null @@ -1,515 +0,0 @@ -癤�// DefectListDlg.cpp: 援ы쁽 �뙆�씪 -// - -#include "stdafx.h" -#include "ReveiwHistory.h" -#include "AlignDlg.h" -#include "afxdialogex.h" -#include <algorithm> -#include <functional> - -// CFormtListDlg ���솕 �긽�옄 - -IMPLEMENT_DYNAMIC(CAlignDlg, CDialog) - -enum { FORMLIST_POPUP_FORMALL = 15000, FORMLIST_POPUP_FORMSELECT, FORMLIST_POPUP_End }; - - -CAlignDlg::CAlignDlg(CWnd* pParent /*=nullptr*/) - : CDialog(IDD_DLG_ALIGN, pParent) -{ - m_pDefectFormation = NULL; - m_bAsending = FALSE; - m_nLastSortCol = 0; - m_nSelectedCol = 0; - m_nSelectedRow = 0; - m_nSelectedFormIdRclick = -1; -} - -CAlignDlg::~CAlignDlg() -{ -} - -void CAlignDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); -} - -BOOL CAlignDlg::Create(CWnd * pParentWnd) -{ - return CDialog::Create(IDD, pParentWnd); -} - -BOOL CAlignDlg::PreTranslateMessage(MSG * pMsg) -{ - if (pMsg->message == WM_KEYDOWN) - { - if (pMsg->wParam == VK_ESCAPE) - { - ShowWindow(SW_HIDE); - - return TRUE; - } - } - - return __super::PreTranslateMessage(pMsg); -} - -void CAlignDlg::OnDestroy() -{ - CDialog::OnDestroy(); -} - -void CAlignDlg::OnShowWindow(BOOL bShow, UINT nStatus) -{ - __super::OnShowWindow(bShow, nStatus); - - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (TRUE == bShow) - { - } -} - - -BEGIN_MESSAGE_MAP(CAlignDlg, CDialog) - ON_BN_CLICKED(IDOK, &CAlignDlg::OnBnClickedOk) - ON_CONTROL_RANGE(BN_CLICKED, FORMLIST_POPUP_FORMALL, FORMLIST_POPUP_End, OnPopupMenuFormList) - ON_WM_SIZE() -END_MESSAGE_MAP() - - -// CFormtListDlg 硫붿떆吏� 泥섎━湲� - - -void CAlignDlg::OnBnClickedOk() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CDialog::OnOK(); -} - - -BOOL CAlignDlg::OnInitDialog() -{ - CDialog::OnInitDialog(); - - // TODO: �뿬湲곗뿉 異붽� 珥덇린�솕 �옉�뾽�쓣 異붽��빀�땲�떎. - - m_vecStrGridDefectHeader.push_back(" "); - m_vecStrGridDefectHeader.push_back("1st X Pos"); - m_vecStrGridDefectHeader.push_back("1st Y Pos"); - m_vecStrGridDefectHeader.push_back("2nd X Pos"); - m_vecStrGridDefectHeader.push_back("2nd Y Pos"); - - CakGridCtrl* pGrid = &m_gridFormInfo; - { - std::vector<CString>* pVecHeader = &m_vecStrGridDefectHeader; - - CRect rectGrid; - GetDlgItem(IDC_STATIC_GRID_ALIGN)->GetWindowRect(&rectGrid); - ScreenToClient(&rectGrid); - pGrid->Create(rectGrid, this, IDC_STATIC_GRID_ALIGN); - - - pGrid->GetDefaultCell(TRUE, FALSE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, TRUE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, FALSE)->SetBackClr(GRID_COLOR); - pGrid->SetFixedBkColor(GRID_FIX_COLOR); - pGrid->SetGridLines(GVL_BOTH); - - - pGrid->SetVirtualMode(TRUE); - pGrid->SetCallbackFunc(NULL, 0); - pGrid->AllowReorderColumn(FALSE); // implemented now only if m_bCallback - pGrid->EnableDragRowMode(FALSE); - - pGrid->SetColumnCount((int)pVecHeader->size()); - pGrid->SetDoubleBuffering(TRUE); - pGrid->SetRowCount(2); - pGrid->SetFixedRowCount(1); - pGrid->SetFixedColumnCount(0); - - pGrid->SetEditable(FALSE); - pGrid->EnableSelection(TRUE); - pGrid->SetFixedRowSelection(TRUE); - pGrid->SetHeaderSort(FALSE); - - // fill it up with stuff - pGrid->SetEditable(TRUE); - pGrid->EnableDragAndDrop(TRUE); - - - pGrid->AutoSize(); - pGrid->Invalidate(); - } - - m_WndArrange.setParentWnd(this); - m_WndArrange.addChildWnd(&m_gridFormInfo, WA_RESIZE_WIDTH | WA_RESIZE_HEIGHT); - - GetDlgItem(IDC_IMG_ALIGN1)->GetWindowRect(m_picture_rect); - GetDlgItem(IDC_IMG_ALIGN2)->GetWindowRect(m_picture_rect2); - - ScreenToClient(m_picture_rect); - ScreenToClient(m_picture_rect2); - - return TRUE; // return TRUE unless you set the focus to a control - // �삁�쇅: OCX �냽�꽦 �럹�씠吏��뒗 FALSE瑜� 諛섑솚�빐�빞 �빀�땲�떎. -} - - -BOOL CAlignDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) -{ - // TODO: �뿬湲곗뿉 �듅�닔�솕�맂 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯 �겢�옒�뒪瑜� �샇異쒗빀�땲�떎. - if (m_gridFormInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridFormInfo.GetDlgCtrlID()) - { - *pResult = 1; - GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam; - if (GVN_GETDISPINFO == pDispInfo->hdr.code) - { - getDispInfoDefect(pDispInfo->item.col, pDispInfo->item.row, &pDispInfo->item.strText); - - return TRUE; - } - else if (NM_CLICK == pDispInfo->hdr.code) - { - if (pDispInfo->item.row == 0) - { - SortListDefect(pDispInfo->item.col); - m_gridFormInfo.Refresh(); - } - else if (pDispInfo->item.row > 0) - { - if (pDispInfo->item.row <= m_vecSortForm.size()) - { - int nFormID = m_vecSortForm[pDispInfo->item.row - 1]->m_nFormLabel; - GetParent()->PostMessage(UM_FORMLIST_FORMSELECT, nFormID); - } - - } - m_nSelectedCol = pDispInfo->item.col; - } - else if (NM_RCLICK == pDispInfo->hdr.code) - { - if (pDispInfo->item.row>0 && pDispInfo->item.row <= m_vecSortForm.size()) - { - m_nSelectedFormIdRclick = m_vecSortForm[pDispInfo->item.row - 1]->m_nFormLabel; - } - else if (pDispInfo->item.row == 0) - { - m_nSelectedFormIdRclick = -1; - } - else - { - m_nSelectedFormIdRclick = -1; - } - - -// { -// CString strText; -// CMenu menu; -// VERIFY(menu.CreatePopupMenu()); -// -// menu.AppendMenu(MF_STRING, FORMLIST_POPUP_FORMALL, (LPCTSTR)"�쟾泥대낫湲�"); -// -// if (m_nSelectedFormIdRclick < 0) -// { -// -// } -// else if (m_nSelectedFormIdRclick >= 0) -// { -// strText.Format("Form%d 蹂닿린", m_nSelectedFormIdRclick); -// menu.AppendMenu(MF_STRING, FORMLIST_POPUP_FORMSELECT, (LPCTSTR)strText); -// } -// -// -// CPoint ptPoint; -// GetCursorPos(&ptPoint); -// -// menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, ptPoint.x, ptPoint.y, this); -// -// } - - } - else if (GVN_ODCACHEHINT == pDispInfo->hdr.code) - { - GV_CACHEHINT *pCacheHint = (GV_CACHEHINT*)pDispInfo; - } - } - return CDialog::OnNotify(wParam, lParam, pResult); -} - -void CAlignDlg::setFormShow(int nFormID, BOOL bEnsureVisible) -{ - const int nDefectCol = 1; - - if (nFormID >= 0) - { - int iRow = m_nSelectedRow;//for (int iRow = 0; iRow < m_gridDefectInfo.GetRowCount(); iRow++) - { - for (int iCol = 0; iCol < m_gridFormInfo.GetColumnCount(); iCol++) - { - m_gridFormInfo.SetItemState(iRow, iCol, m_gridFormInfo.GetItemState(iRow, iCol) & ~GVIS_SELECTED /*& ~GVIS_FOCUSED*/); - } - } - } - for (int i = 0; i < m_vecSortForm.size(); i++) - { - if (m_vecSortForm[i]->m_nFormLabel == nFormID) - { - int iRow = i+1; - for (int iCol = 0; iCol < m_gridFormInfo.GetColumnCount(); iCol++) - { - m_gridFormInfo.SetItemState(iRow, iCol, LVIS_SELECTED); - } - m_nSelectedRow = iRow; - if (bEnsureVisible) - { - m_gridFormInfo.EnsureVisible(iRow, m_nSelectedCol); - } - break; - } - } - - m_gridFormInfo.Invalidate(); -} - -void CAlignDlg::getDispInfoDefect(int nCol, int nRow, CString* pStrData) -{ - if (nRow < 0) return; - - if (nRow == 0) //header - { - *pStrData = m_vecStrGridDefectHeader[nCol]; - } - else - { - if (m_pDefectFormation == NULL) return; - - int nDataIndex = nRow - 1; - - if (nDataIndex >= m_vecSortForm.size()) return; - - _akFormation* pForm = m_vecSortForm[nDataIndex]; - - if (pForm == NULL) - return; - - CString strItem; - BOOL bPixel = FALSE; - - - switch (nCol) - { - case 0: strItem.Format("%d", nRow); break; - case 1: strItem.Format("%d", pForm->m_nFormLabel); break; - case 2: - { - if (pForm->m_nFormJudge == 0) strItem = ""; - else if (pForm->m_nFormJudge == 1) strItem = "�젣嫄�"; - }break; - case 3: - { - if (pForm->m_nFormType == 0) strItem = "ROUND"; - else if (pForm->m_nFormType == 1) strItem = "LINE"; - }break; - case 4: strItem.Format("%d", pForm->m_vecForms.size()); break; - case 5: strItem.Format("%d", pForm->m_nDefectNumS); break; - case 6: strItem.Format("%d", pForm->m_nDefectNumM); break; - case 7: strItem.Format("%d", pForm->m_nDefectNumL); break; - - case 8: strItem.Format("%.3lf", pForm->m_dSizeAvg); break; - case 9: strItem.Format("%.3lf", pForm->m_dSizeStdDev); break; - - case 10: strItem.Format("%d", pForm->m_nDefectNum1Px); break; - case 11: strItem.Format("%d", pForm->m_nDefectNumWhite); break; - case 12: strItem.Format("%d", pForm->m_nDefectNumBlack); break; - case 13: strItem.Format("%d", pForm->m_nDefectNum1PxWhite); break; - - case 14: strItem.Format("%.0lf", 100.0* ((double)pForm->m_nDefectNum1Px /(double)pForm->m_vecForms.size())); break; - case 15: strItem.Format("%.0lf", 100.0* ((double)pForm->m_nDefectNumWhite / (double)pForm->m_vecForms.size())); break; - case 16: strItem.Format("%.0lf", 100.0* ((double)pForm->m_nDefectNumBlack / (double)pForm->m_vecForms.size())); break; - case 17: strItem.Format("%.0lf", 100.0* ((double)pForm->m_nDefectNum1PxWhite / (double)pForm->m_vecForms.size())); break; - - case 18: strItem.Format("%.3lf", pForm->m_dDiffStdDev); break; - case 19: strItem.Format("%.3lf", pForm->m_dDiffStdDevAbs); break; - } - - - - *pStrData = strItem; - } -} - -void CAlignDlg::updateDefectInfo() -{ - if (m_pDefectFormation && m_pDefectDisplayOption) - { - int nFormType; - int nFormLabel; - m_vecSortForm.clear(); - for (int i = 0; i < m_pDefectFormation->m_vecFormation.size(); i++) - { - nFormType = m_pDefectFormation->m_vecFormation[i].m_nFormType; - nFormLabel = i; - - if (nFormLabel >= 0) - { - nFormType = m_pDefectFormation->m_vecFormation[i].m_nFormType; - } - - if (m_pDefectDisplayOption->m_bShowDefectNormal == FALSE) - { - if (nFormType < 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupRound == FALSE) - { - if (nFormType == 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupLine == FALSE) - { - if (nFormType == 1) continue;; - } - if (m_pDefectDisplayOption->m_nShowLabel >= 0) - { - if (nFormLabel != m_pDefectDisplayOption->m_nShowLabel) continue;; - } - - m_vecSortForm.push_back(&m_pDefectFormation->m_vecFormation[i]); - } - if(m_nLastSortCol>0) SortListDefect(m_nLastSortCol); - m_gridFormInfo.SetRowCount(m_vecSortForm.size()+1); - m_gridFormInfo.Invalidate(); - } -} - - -void CAlignDlg::OnSize(UINT nType, int cx, int cy) -{ - CDialog::OnSize(nType, cx, cy); - - m_WndArrange.process(cx, cy); -} - -void CAlignDlg::OnPopupMenuFormList(UINT nID) -{ - if (nID == FORMLIST_POPUP_FORMALL) - { - GetParent()->PostMessage(UM_FORMLIST_FORMSELECT, -1, 1); - } - else if(nID == FORMLIST_POPUP_FORMSELECT) - { - GetParent()->PostMessage(UM_FORMLIST_FORMSELECT, m_nSelectedFormIdRclick, 1); - } - -} - -void CAlignDlg::SortListDefect(int nCol) -{ - if (nCol == 0) - return; - - if (m_pDefectFormation == NULL) return; - - m_bAsending = !m_bAsending; - - { - _akFormation *pForm; - std::vector< std::pair<CString, _akFormation*> > vecString; - std::vector< std::pair<double, _akFormation*> > vecValue; - CString strValue; - double dValue; - - for (int i = 0; i < m_vecSortForm.size(); i++) - { - pForm = m_vecSortForm[i]; - - switch (nCol) - { - case 1: dValue = pForm->m_nFormLabel; break; - case 2: dValue = pForm->m_nFormJudge; break; - case 3: dValue = pForm->m_nFormType; break; - case 4: dValue = pForm->m_vecForms.size(); break; - case 5: dValue = pForm->m_nDefectNumS; break; - case 6: dValue = pForm->m_nDefectNumM; break; - case 7: dValue = pForm->m_nDefectNumL; break; - case 8: dValue = pForm->m_dSizeAvg; break; - case 9: dValue = pForm->m_dSizeStdDev; break; - case 10: dValue = pForm->m_nDefectNum1Px; break; - case 11: dValue = pForm->m_nDefectNumWhite; break; - case 12: dValue = pForm->m_nDefectNumBlack; break; - case 13: dValue = pForm->m_nDefectNum1PxWhite; break; - - case 14: dValue = pForm->m_nDefectNum1Px; break; - case 15: dValue = pForm->m_nDefectNumWhite ; break; - case 16: dValue = pForm->m_nDefectNumBlack ; break; - case 17: dValue = pForm->m_nDefectNum1PxWhite ; break; - - case 18: dValue = pForm->m_dDiffStdDev; break; - case 19: dValue = pForm->m_dDiffStdDevAbs; break; - - } - - if(strValue.IsEmpty() == FALSE) vecString.push_back(std::make_pair(strValue, pForm)); - else vecValue.push_back(std::make_pair(dValue, pForm)); - } - - if (!vecString.empty()) - { - if (m_bAsending == TRUE) - std::sort(vecString.begin(), vecString.end(), std::greater< std::pair<CString, _akFormation*> >()); - else - std::sort(vecString.begin(), vecString.end(), std::less< std::pair<CString, _akFormation*> >()); - - m_vecSortForm.clear(); - std::vector< std::pair<CString, _akFormation*> >::iterator itVec; - for (itVec = vecString.begin(); itVec != vecString.end(); ++itVec) - { - m_vecSortForm.push_back(itVec->second); - } - } - else//if (!vecString.empty()) - { - if (m_bAsending == TRUE) - std::sort(vecValue.begin(), vecValue.end(), std::greater< std::pair<double, _akFormation*> >()); - else - std::sort(vecValue.begin(), vecValue.end(), std::less< std::pair<double, _akFormation*> >()); - - m_vecSortForm.clear(); - std::vector< std::pair<double, _akFormation*> >::iterator itVec; - for (itVec = vecValue.begin(); itVec != vecValue.end(); ++itVec) - { - m_vecSortForm.push_back(itVec->second); - } - } - } - - m_nLastSortCol = nCol; -} - -void CAlignDlg::DrawnoImage() -{ - CPaintDC dc(this); - - m_AlignImage.Destroy(); - m_AlignImage2.Destroy(); - - CString DeftectPath; - CFileStatus FileOn; - TCHAR chFilePath[256] = { 0, }; - GetModuleFileName(NULL, chFilePath, 256); - CString strFolderPath(chFilePath); - strFolderPath = strFolderPath.Left(strFolderPath.ReverseFind('\\')); - - strFolderPath = strFolderPath + "\\no-image.png"; - m_AlignImage.Load(strFolderPath); - m_AlignImage2.Load(strFolderPath); - - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - InvalidateRect(m_picture_rect, FALSE); - InvalidateRect(m_picture_rect2, FALSE); - - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignImage.Draw(dc, m_picture_rect); - m_AlignImage2.Draw(dc, m_picture_rect2); -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/AlignDlg.h b/ReviewHistory/ReveiwHistory/AlignDlg.h deleted file mode 100644 index 1384db3..0000000 --- a/ReviewHistory/ReveiwHistory/AlignDlg.h +++ /dev/null @@ -1,71 +0,0 @@ -癤�#pragma once - - -// CFormtListDlg ���솕 �긽�옄 -#include "akGridCtrl/akGridCtrl.h" -#include "akDefectFormation.h" -#include "akWndArrange.h" -#include "Singleton.h" - -#define UM_FORMLIST_FORMSELECT WM_USER+0x3101 - - -class CAlignDlg : public CDialog, public CSingleton< CAlignDlg > -{ - DECLARE_DYNAMIC(CAlignDlg) - -public: - CAlignDlg(CWnd* pParent = nullptr); // �몴以� �깮�꽦�옄�엯�땲�떎. - virtual ~CAlignDlg(); - -// ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎. -//#ifdef AFX_DESIGN_TIME - enum { IDD = IDD_DLG_ALIGN }; -//#endif - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 吏��썝�엯�땲�떎. - - DECLARE_MESSAGE_MAP() - -public: - virtual BOOL Create(CWnd* pParentWnd = NULL); - virtual BOOL PreTranslateMessage(MSG* pMsg); - - afx_msg void OnDestroy(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - - void setFormShow(int nDefectID, BOOL bEnsureVisible); - void getDispInfoDefect(int nCol, int nRow, CString* pStrData); - void updateDefectInfo(); - void SortListDefect(int nCol); - void DrawnoImage(); -public: - CakGridCtrl m_gridFormInfo; - std::vector<CString> m_vecStrGridDefectHeader; - //std::vector<int> m_vecGridColDataType;//0:string, 1:int, 2:double, 11:string to int, 12:string to double - akDefectFormation* m_pDefectFormation; - CakWndArrange m_WndArrange; - std::vector<_akFormation*> m_vecSortForm; - BOOL m_bAsending; - _DefectDisplayOption* m_pDefectDisplayOption; - int m_nLastSortCol; - int m_nSelectedCol; - int m_nSelectedRow; - - CImage m_AlignImage; - CImage m_AlignImage2; - - CRect m_picture_rect; - CRect m_picture_rect2; - - int m_nSelectedFormIdRclick; -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult); - afx_msg void OnSize(UINT nType, int cx, int cy); - afx_msg void OnPopupMenuFormList(UINT nID); - -}; - diff --git a/ReviewHistory/ReveiwHistory/AnaResultFile.cpp b/ReviewHistory/ReveiwHistory/AnaResultFile.cpp deleted file mode 100644 index bc0cf34..0000000 --- a/ReviewHistory/ReveiwHistory/AnaResultFile.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#include "StdAfx.h" -#include "AnaResultFile.h" -#include "akCore/akFileDB.h" -#include "akLoggerExt.h" -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -CAnaResultFile::CAnaResultFile(void) -{ -} - -CAnaResultFile::~CAnaResultFile(void) -{ -} - -BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData) -{ - //return TRUE; - - CString strFilePathName; - strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if (pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); - fprintf(pf, "m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i); - //210123 CJH - Zone별 min, max, avg 값 표기 - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMin%02d", i); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMax%02d", i); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffAvg%02d", i); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcMin%02d", i); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcMax%02d", i); - for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcAvg%02d", i); - fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState, Angle, Major, Minor, Compact, Thickness"); - fprintf(pf, "\n"); - - for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if (pData->GetGlassData()->m_nScanCoordinateY == 1) //분판설비의 경우 XY반전 - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - //210123 CJH - Zone별 min, max, avg 값 표기 - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueMin[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueMax[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueAvg[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMin[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMax[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcAvg[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - else - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - //210123 CJH - Zone별 min, max, avg 값 표기 - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueMin[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueMax[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueAvg[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMin[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMax[iz]); - } - for (int iz = 0; iz < MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZoneValueSrcAvg[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - } - AKLOG("MakeAnaFile Complete %s", strFilePathName); - fclose(pf); - - return TRUE; -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/AnaResultFile.h b/ReviewHistory/ReveiwHistory/AnaResultFile.h deleted file mode 100644 index 78a5fb5..0000000 --- a/ReviewHistory/ReveiwHistory/AnaResultFile.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "DitGlassRawStruct.h" - -class CAnaResultFile -{ -public: - CAnaResultFile(void); - virtual ~CAnaResultFile(void); - -public: - BOOL MakeAnaFile(CgrmGlassRawData* pData); - - - -}; - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReviewHistory/ReveiwHistory/CHRectTracker.cpp b/ReviewHistory/ReveiwHistory/CHRectTracker.cpp deleted file mode 100644 index 9a5da83..0000000 --- a/ReviewHistory/ReveiwHistory/CHRectTracker.cpp +++ /dev/null @@ -1,316 +0,0 @@ -#include "StdAfx.h" -#include "CHRectTracker.h" - -AFX_STATIC_DATA HCURSOR _afxCursors[10] = { 0, }; -AFX_STATIC_DATA HBRUSH _afxHatchBrush = 0; -AFX_STATIC_DATA HPEN _afxBlackDottedPen = 0; -AFX_STATIC_DATA int _afxHandleSize = 0; - -CCHRectTracker::CCHRectTracker(void) -{ -} - -CCHRectTracker::CCHRectTracker(LPCRECT lpSrcRect, UINT nStyle) -{ - CRectTracker(lpSrcRect, nStyle); -} - -CCHRectTracker::~CCHRectTracker(void) -{ -} - -BOOL CCHRectTracker::TrackRubberBand(CWnd* pWnd, CPoint point, BOOL bAllowInvert) -{ - // simply call helper function to track from bottom right handle - m_bAllowInvert = bAllowInvert; - m_rect.SetRect(point.x, point.y, point.x, point.y); - - return TrackHandle(hitBottomRight, pWnd, point, NULL); -} - -BOOL CCHRectTracker::Track(CWnd* pWnd, CPoint point, BOOL bAllowInvert, CWnd* pWndClipTo) -{ - // perform hit testing on the handles - int nHandle = HitTestHandles(point); - if (nHandle < 0) - { - // didn't hit a handle, so just return FALSE - return FALSE; - } - - // otherwise, call helper function to do the tracking - m_bAllowInvert = bAllowInvert; - - return TrackHandle(nHandle, pWnd, point, pWndClipTo); -} - -void CCHRectTracker::Draw(CDC* pDC) const -{ - // set initial DC state - VERIFY(pDC->SaveDC() != 0); -#ifndef _AFX_NO_GDITRANSFORM_SUPPORT - pDC->SetMapMode(MM_TEXT); - pDC->SetViewportOrg(0, 0); - pDC->SetWindowOrg(0, 0); -#endif // !_AFX_NO_GDITRANSFORM_SUPPORT - // get normalized rectangle - CRect rect = m_rect; - rect.NormalizeRect(); - - CPen* pOldPen = NULL; - CBrush* pOldBrush = NULL; - CGdiObject* pTemp; - int nOldROP; - - CPen pen; - //pen.CreatePen(PS_DOT, 1, RGB(255,255,255)); - pen.CreatePen(PS_DOT, 1, RGB(255,0,0)); - - rect.InflateRect(+1, +1); // borders are one pixel outside - - // draw lines - if ((m_nStyle & (dottedLine|solidLine)) != 0) - { - if (m_nStyle & dottedLine) - pOldPen = pDC->SelectObject(&pen); - //pOldPen = (CPen*)pDC->SelectStockObject(WHITE_PEN); - else - pOldPen = (CPen*)pDC->SelectStockObject(BLACK_PEN); - pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH); - nOldROP = pDC->SetROP2(R2_COPYPEN); - - // rect - pDC->Rectangle(rect.left, rect.top, rect.right, rect.bottom); - - // cross line - if ((m_nStyle & (crossLine)) != 0) - { - pDC->MoveTo(rect.left+rect.Width()/2, rect.top); - pDC->LineTo(rect.left+rect.Width()/2, rect.bottom); - pDC->MoveTo(rect.left, rect.top+rect.Height()/2); - pDC->LineTo(rect.right, rect.top+rect.Height()/2); - } - - // x line - if ((m_nStyle & (xLine)) != 0) - { - pDC->MoveTo(rect.left, rect.top); - pDC->LineTo(rect.right, rect.bottom); - pDC->MoveTo(rect.right, rect.top); - pDC->LineTo(rect.left, rect.bottom); - } - - pDC->SetROP2(nOldROP); - } - - -#ifndef _WIN32_WCE // unsupported win32 api call to UnrealizeObject - // if hatchBrush is going to be used, need to unrealize it - if ((m_nStyle & (hatchInside|hatchedBorder)) != 0) - UnrealizeObject(_afxHatchBrush); -#endif // !_WIN32_WCE - - // hatch inside - if ((m_nStyle & hatchInside) != 0) - { - pTemp = pDC->SelectStockObject(NULL_PEN); - if (pOldPen == NULL) - pOldPen = (CPen*)pTemp; - pTemp = pDC->SelectObject(CBrush::FromHandle(_afxHatchBrush)); - if (pOldBrush == NULL) - pOldBrush = (CBrush*)pTemp; - pDC->SetBkMode(TRANSPARENT); - nOldROP = pDC->SetROP2(R2_MASKNOTPEN); - pDC->Rectangle(rect.left+1, rect.top+1, rect.right, rect.bottom); - pDC->SetROP2(nOldROP); - } - - // draw hatched border - if ((m_nStyle & hatchedBorder) != 0) - { - pTemp = pDC->SelectObject(CBrush::FromHandle(_afxHatchBrush)); - if (pOldBrush == NULL) - pOldBrush = (CBrush*)pTemp; - pDC->SetBkMode(OPAQUE); - CRect rectTrue; - GetTrueRect(&rectTrue); - pDC->PatBlt(rectTrue.left, rectTrue.top, rectTrue.Width(), - rect.top-rectTrue.top, 0x000F0001 /* Pn */); - pDC->PatBlt(rectTrue.left, rect.bottom, - rectTrue.Width(), rectTrue.bottom-rect.bottom, 0x000F0001 /* Pn */); - pDC->PatBlt(rectTrue.left, rect.top, rect.left-rectTrue.left, - rect.Height(), 0x000F0001 /* Pn */); - pDC->PatBlt(rect.right, rect.top, rectTrue.right-rect.right, - rect.Height(), 0x000F0001 /* Pn */); - } - - // draw resize handles - if ((m_nStyle & (resizeInside|resizeOutside)) != 0) - { - UINT mask = GetHandleMask(); - for (int i = 0; i < 8; ++i) - { - if (mask & (1<<i)) - { - GetHandleRect((TrackerHit)i, &rect); - pDC->FillSolidRect(rect, RGB(255, 255, 255)); - } - } - } - - // cleanup pDC state - if (pOldPen != NULL) - pDC->SelectObject(pOldPen); - if (pOldBrush != NULL) - pDC->SelectObject(pOldBrush); - VERIFY(pDC->RestoreDC(-1)); -} - -BOOL CCHRectTracker::TrackHandle(int nHandle, CWnd* pWnd, CPoint point, CWnd* pWndClipTo) -{ - ASSERT(nHandle >= 0); - ASSERT(nHandle <= 8); // handle 8 is inside the rect - - // don't handle if capture already set - if (::GetCapture() != NULL) - return FALSE; - - AfxLockTempMaps(); // protect maps while looping - - ASSERT(!m_bFinalErase); - - // save original width & height in pixels - int nWidth = m_rect.Width(); - int nHeight = m_rect.Height(); - - // set capture to the window which received this message - pWnd->SetCapture(); - ASSERT(pWnd == CWnd::GetCapture()); - pWnd->UpdateWindow(); - if (pWndClipTo != NULL) - pWndClipTo->UpdateWindow(); - CRect rectSave = m_rect; - - // find out what x/y coords we are supposed to modify - int *px, *py; - int xDiff, yDiff; - GetModifyPointers(nHandle, &px, &py, &xDiff, &yDiff); - xDiff = point.x - xDiff; - yDiff = point.y - yDiff; - - // get DC for drawing - CDC* pDrawDC; - if (pWndClipTo != NULL) - { - // clip to arbitrary window by using adjusted Window DC - pDrawDC = pWndClipTo->GetDCEx(NULL, DCX_CACHE); - } - else - { - // otherwise, just use normal DC - pDrawDC = pWnd->GetDC(); - } - ENSURE_VALID(pDrawDC); - - CRect rectOld; - BOOL bMoved = FALSE; - - // get messages until capture lost or cancelled/accepted - for (;;) - { - MSG msg; - VERIFY(::GetMessage(&msg, NULL, 0, 0)); - - if (CWnd::GetCapture() != pWnd) - break; - - switch (msg.message) - { - // handle movement/accept messages - case WM_LBUTTONUP: - { - if (pWnd) - pWnd->SendMessage(WM_LBUTTONUP, static_cast<WPARAM>(0), MAKELPARAM(0, 0)); - } - case WM_MOUSEMOVE: - rectOld = m_rect; - // handle resize cases (and part of move) - if (px != NULL) - *px = GET_X_LPARAM(msg.lParam) - xDiff; - if (py != NULL) - *py = GET_Y_LPARAM(msg.lParam) - yDiff; - - // handle move case - if (nHandle == hitMiddle) - { - m_rect.right = m_rect.left + nWidth; - m_rect.bottom = m_rect.top + nHeight; - } - // allow caller to adjust the rectangle if necessary - AdjustRect(nHandle, &m_rect); - - // only redraw and callback if the rect actually changed! - m_bFinalErase = (msg.message == WM_LBUTTONUP); - if (!rectOld.EqualRect(&m_rect) || m_bFinalErase) - { - if (bMoved) - { - m_bErase = TRUE; - DrawTrackerRect(&rectOld, pWndClipTo, pDrawDC, pWnd); - } - OnChangedRect(rectOld); - if (msg.message != WM_LBUTTONUP) - bMoved = TRUE; - } - if (m_bFinalErase) - goto ExitLoop; - - if (!rectOld.EqualRect(&m_rect)) - { - m_bErase = FALSE; - DrawTrackerRect(&m_rect, pWndClipTo, pDrawDC, pWnd); - } - break; - - // handle cancel messages - case WM_KEYDOWN: - if (msg.wParam != VK_ESCAPE) - break; - case WM_RBUTTONDOWN: - if (bMoved) - { - m_bErase = m_bFinalErase = TRUE; - DrawTrackerRect(&m_rect, pWndClipTo, pDrawDC, pWnd); - } - m_rect = rectSave; - goto ExitLoop; - - case WM_LBUTTONDBLCLK: - if (pWnd) - pWnd->SendMessage(WM_LBUTTONDBLCLK, static_cast<WPARAM>(0), MAKELPARAM(0, 0)); - break; - // just dispatch rest of the messages - default: - DispatchMessage(&msg); - break; - } - } - -ExitLoop: - if (pWndClipTo != NULL) - pWndClipTo->ReleaseDC(pDrawDC); - else - pWnd->ReleaseDC(pDrawDC); - ReleaseCapture(); - - AfxUnlockTempMaps(FALSE); - - // restore rect in case bMoved is still FALSE - if (!bMoved) - m_rect = rectSave; - m_bFinalErase = FALSE; - m_bErase = FALSE; - - // return TRUE only if rect has changed - return !rectSave.EqualRect(&m_rect); -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/CHRectTracker.h b/ReviewHistory/ReveiwHistory/CHRectTracker.h deleted file mode 100644 index 2a7d67b..0000000 --- a/ReviewHistory/ReveiwHistory/CHRectTracker.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#include "afxext.h" - - -enum CHStyleFlags -{ -// solidLine = 1, dottedLine = 2, hatchedBorder = 4, -// resizeInside = 8, resizeOutside = 16, hatchInside = 32, - - crossLine = 64, xLine = 128, -}; - - -class AFX_EXT_CLASS CCHRectTracker : public CRectTracker -{ -public: - CCHRectTracker(); - CCHRectTracker(LPCRECT lpSrcRect, UINT nStyle); - BOOL Track(CWnd* pWnd, CPoint point, BOOL bAllowInvert, CWnd* pWndClipTo=NULL); - BOOL TrackRubberBand(CWnd* pWnd, CPoint point, BOOL bAllowInvert); - void Draw(CDC* pDC) const; - virtual ~CCHRectTracker(void); - -protected: - BOOL TrackHandle(int nHandle, CWnd* pWnd, CPoint point, CWnd* pWndClipTo); -}; diff --git a/ReviewHistory/ReveiwHistory/CHTrackerView.cpp b/ReviewHistory/ReveiwHistory/CHTrackerView.cpp deleted file mode 100644 index b8eabda..0000000 --- a/ReviewHistory/ReveiwHistory/CHTrackerView.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// CHTrackerView.cpp : 구현 파일입니다. -// - -#include "stdafx.h" -#include "CHTrackerView.h" -#include "CHBufferDC.h" - -// CCHTrackerView - -IMPLEMENT_DYNAMIC(CCHTrackerView, CCHImageView) - -CCHTrackerView::CCHTrackerView() : CCHImageView() -{ - m_rectTracker.m_rect = CRect(0,0,0,0); - m_rectTracker.m_nStyle = CRectTracker::dottedLine | CRectTracker::resizeOutside; - m_rectTracker.m_sizeMin = CSize(8,8); - m_bDrawTracker = FALSE; -} - - -CCHTrackerView::CCHTrackerView(CWnd *pParentWnd) : CCHImageView(pParentWnd) -{ - m_rectTracker.m_rect = CRect(0,0,0,0); - m_rectTracker.m_nStyle = CRectTracker::dottedLine | CRectTracker::resizeOutside; - m_rectTracker.m_sizeMin = CSize(8,8); - m_bDrawTracker = FALSE; -} - -CCHTrackerView::~CCHTrackerView() -{ - -} - - -BEGIN_MESSAGE_MAP(CCHTrackerView, CCHImageView) - ON_WM_SETCURSOR() - ON_WM_PAINT() - ON_WM_LBUTTONDOWN() -END_MESSAGE_MAP() - - - -// CCHTrackerView 메시지 처리기입니다. - -BOOL CCHTrackerView::GetTrackerRect(CRect& rtRect) -{ - if (m_rectTracker.m_rect.Width()<0 || m_rectTracker.m_rect.Height()<0) - { - return FALSE; - } - - rtRect = m_rectTracker.m_rect; - - return TRUE; -} - -void CCHTrackerView::SetTrackerRect(const CRect& rtRect) -{ - m_rectTracker.m_rect = rtRect; - Invalidate(TRUE); -} - -void CCHTrackerView::ClearTrackerRect() -{ - m_rectTracker.m_rect = CRect(0,0,0,0); - Invalidate(TRUE); -} - -BOOL CCHTrackerView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) -{ - // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. - if (m_rectTracker.SetCursor(this, nHitTest)) - return TRUE; - - return CCHImageView::OnSetCursor(pWnd, nHitTest, message); -} - -void CCHTrackerView::OnPaint() -{ - - CCHBufferDC *pDC = new CCHBufferDC(this); // device context for painting - - UpdateImageView(pDC); - - m_rectTracker.m_rect.NormalizeRect(); - - if (m_rectTracker.m_rect.left>0 && m_rectTracker.m_rect.right<GetWidth()) - { - if (m_rectTracker.m_rect.top>0 && m_rectTracker.m_rect.bottom<GetHeight()) - { - m_rectTracker.Draw(pDC); - } - } - - delete pDC; - -} - -void CCHTrackerView::OnLButtonDown(UINT nFlags, CPoint point) -{ - // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. - - if (m_pParentWnd==NULL || !GetImageExist()) return; - - if (point.x > -1 && point.x < GetScaleWidth() && - point.y > -1 && point.y < GetScaleHeight() ) - { - if (m_rectTracker.HitTest(point) < 0) - { - // just to demonstrate CRectTracker::TrackRubberBand - if (m_rectTracker.TrackRubberBand(this, point, TRUE)) - { - Invalidate(); - } - } - else if (m_rectTracker.Track(this, point, TRUE)) - { - Invalidate(); - } - } - - CCHImageView::OnLButtonDown(nFlags, point); -} - diff --git a/ReviewHistory/ReveiwHistory/CHTrackerView.h b/ReviewHistory/ReveiwHistory/CHTrackerView.h deleted file mode 100644 index e83d077..0000000 --- a/ReviewHistory/ReveiwHistory/CHTrackerView.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - - -// CCHTrackerView -#include "CHImageView.h" - -class AFX_EXT_CLASS CCHTrackerView : public CCHImageView -{ - DECLARE_DYNAMIC(CCHTrackerView) - -public: - CCHTrackerView(); - CCHTrackerView(CWnd *pParentWnd); - virtual ~CCHTrackerView(); - - BOOL GetTrackerRect(CRect& rtRect); - void SetTrackerRect(const CRect& rtRect); - void ClearTrackerRect(); - -protected: - // tracker - BOOL m_bDrawTracker; - CPoint m_ptTrackerStart; - CCHRectTracker m_rectTracker; - -protected: - - DECLARE_MESSAGE_MAP() -public: - afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); - afx_msg void OnPaint(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); -}; - - diff --git a/ReviewHistory/ReveiwHistory/CameraImageView.cpp b/ReviewHistory/ReveiwHistory/CameraImageView.cpp deleted file mode 100644 index dc8370e..0000000 --- a/ReviewHistory/ReveiwHistory/CameraImageView.cpp +++ /dev/null @@ -1,985 +0,0 @@ -癤�// CameraImageView.cpp : 援ы쁽 �뙆�씪�엯�땲�떎. -// - -#include "stdafx.h" -#include "ReveiwHistory.h" -#include "CameraImageView.h" -#include "CHImageControls/CHBufferDC.h" - -using namespace CHImageControls; -// CDlgReviewCamera ���솕 �긽�옄�엯�땲�떎. - -// CCameraImageView - -IMPLEMENT_DYNAMIC(CCameraImageView, CWnd) - -CCameraImageView::CCameraImageView(CWnd *pParentWnd) -{ - m_strViewName = _T(""); - m_pParentWnd = pParentWnd; - - m_nHScroll = 0; - m_nVScroll = 0; - - m_nMaxHScroll = 0; - m_nMaxVScroll = 0; - m_nDrawMode = 0; - - m_rtClientRect = CRect(0,0,0,0); - m_bDrawCenterLine = FALSE; - m_bDrawRuler = FALSE; - m_bDrawViewName = FALSE; - m_nViewBand = BandTypeColor; - m_nDrawMode = 1; - - m_dWidthScale = 1.0; - m_dHeightScale = 1.0; - m_nScaleWidth = 0; - m_nScaleHeight = 0; - - m_dResolution = 1.0; // um - m_dRulerGab = 100.0; //um - - m_pCIV2P = NULL; - - InitializeCriticalSection(&m_csImageData); - -} - -CCameraImageView::~CCameraImageView() -{ - DeleteCriticalSection(&m_csImageData); -} - -// CCameraImageView 硫붿떆吏� 泥섎━湲곗엯�땲�떎. -BEGIN_MESSAGE_MAP(CCameraImageView, CWnd) - - ON_COMMAND(IDR_LOAD_IMAGE, &CCameraImageView::OnLoadImage) - ON_COMMAND(IDR_SAVE_IMAGE, &CCameraImageView::OnSaveImage) - ON_COMMAND(IDR_CENTER_LINE, &CCameraImageView::OnCenterLine) - ON_COMMAND(IDR_RULER, &CCameraImageView::OnRuler) - ON_COMMAND(IDR_VIEW_ORIGIN, &CCameraImageView::OnViewOrigin) - ON_COMMAND(IDR_VIEW_FIT, &CCameraImageView::OnViewFit) - - ON_COMMAND(IDR_VIEW_COLOR, &CCameraImageView::OnViewColor) - ON_COMMAND(IDR_VIEW_GRAY,&CCameraImageView::OnViewGray) - ON_COMMAND(IDR_VIEW_RED, &CCameraImageView::OnViewRed) - ON_COMMAND(IDR_VIEW_GREEN, &CCameraImageView::OnViewGreen) - ON_COMMAND(IDR_VIEW_BLUE, &CCameraImageView::OnViewBlue) - - ON_WM_PAINT() - ON_WM_MOUSEMOVE() - ON_WM_LBUTTONDOWN() - ON_WM_LBUTTONUP() - ON_WM_RBUTTONDOWN() - ON_WM_RBUTTONUP() - ON_WM_DESTROY() - ON_WM_HSCROLL() - ON_WM_VSCROLL() - ON_WM_LBUTTONDBLCLK() - ON_WM_RBUTTONDBLCLK() - ON_WM_CREATE() -END_MESSAGE_MAP() - - -// CCHImageView 硫붿떆吏� 泥섎━湲곗엯�땲�떎. -void CCameraImageView::OnPaint() -{ - CCHBufferDC *pDC = new CCHBufferDC(this); // device context for painting - - UpdateImageView(pDC); - - delete pDC; -} - -void CCameraImageView::UpdateImageView(CDC *pDC) -{ - CRect rtCurrentRect , rtSourceRect; - GetClientRect(rtCurrentRect); - - //DrawText(CPoint(30, 30), RGB(255,255,0), _T("Defect Size")); - - if (GetImageExist()) - { - if (m_rtClientRect!=rtCurrentRect) SetDrawMode(m_nDrawMode); - - int nSrcWidth = GetWidth(); - int nSrcHeight = GetHeight(); - - int nWidth = int(double(nSrcWidth) * m_dWidthScale + 0.5); - int nHeight = int(double(nSrcHeight) * m_dHeightScale + 0.5); - - if (m_nScaleWidth!=nWidth || m_nScaleHeight!=nHeight) - { - SetDrawMode(m_nDrawMode); - } - - switch(m_nDrawMode) - { - case 0: - pDC->SelectStockObject(GRAY_BRUSH); - pDC->Rectangle(rtCurrentRect); - ShowImage(pDC->m_hDC, 0, 0, rtCurrentRect.Width(), rtCurrentRect.Height(), m_nHScroll, m_nVScroll); - break; - - case 1: - ShowImage(pDC->m_hDC, rtCurrentRect); - break; - } - } - else - { - pDC->SelectStockObject(GRAY_BRUSH); - pDC->Rectangle(rtCurrentRect); - } - - if (m_bDrawCenterLine) DrawCenterLine(pDC); - - if (m_bDrawRuler) DrawRuler(pDC); - - if (m_bDrawViewName) DrawViewName(pDC); - -} - -void CCameraImageView::OnMouseMove(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - CRect rect; - this->GetClientRect(rect); - - point.x += m_nHScroll; - point.y += m_nVScroll; - - if (point.x > 0 && point.x < this->GetScaleWidth()-1 && - point.y > 0 && point.y < this->GetScaleHeight()-1 && nFlags == MK_LBUTTON) - { - m_pParentWnd->SendMessage(WM_MOUSEMOVE, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - } - - __super::OnMouseMove(nFlags, point); -} - -void CCameraImageView::OnLButtonDown(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - CRect rect; - this->GetClientRect(rect); - - point.x += m_nHScroll; - point.y += m_nVScroll; - - if (point.x > 0 && point.x < this->GetScaleWidth()-1 && - point.y > 0 && point.y < this->GetScaleHeight()-1 ) - { - m_pParentWnd->SendMessage(WM_LBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - } - - __super::OnLButtonDown(nFlags, point); -} - -void CCameraImageView::OnLButtonUp(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - CRect rect; - this->GetClientRect(rect); - - point.x += m_nHScroll; - point.y += m_nVScroll; - - if (point.x > 0 && point.x < this->GetScaleWidth()-1 && - point.y > 0 && point.y < this->GetScaleHeight()-1 ) - { - m_pParentWnd->SendMessage(WM_LBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - } - - __super::OnLButtonUp(nFlags, point); -} - -void CCameraImageView::OnLButtonDblClk(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - point.x += m_nHScroll; - point.y += m_nVScroll; - m_pParentWnd->SendMessage(WM_LBUTTONDBLCLK, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - - __super::OnLButtonDblClk(nFlags, point); -} - -void CCameraImageView::OnRButtonDown(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - CMenu menu; - CMenu popMenu; - menu.CreateMenu(); // 理쒖긽�쐞 堉덈� 硫붾돱 - popMenu.CreatePopupMenu(); // �뙘�뾽硫붾돱 - BOOL bAddMenu = FALSE; - - popMenu.AppendMenu(MF_STRING, IDR_LOAD_IMAGE, _T("Load Image")); - popMenu.AppendMenu(MF_STRING, IDR_SAVE_IMAGE, _T("Save Image")); // �깋�긽�쓽 �꽌釉뚮찓�돱 異붽� - popMenu.AppendMenu(MF_SEPARATOR); - popMenu.AppendMenu(MF_STRING, IDR_CENTER_LINE, _T("Center Line")); - popMenu.AppendMenu(MF_STRING, IDR_RULER, _T("Ruler")); - popMenu.AppendMenu(MF_SEPARATOR); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_ORIGIN, _T("1:1 View")); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_FIT, _T("Fit View")); // �깋�긽�쓽 �꽌釉뚮찓�돱 異붽� - popMenu.AppendMenu(MF_SEPARATOR); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_COLOR, _T("Color")); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_GRAY, _T("Gray")); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_RED, _T("Red")); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_GREEN, _T("Green")); - popMenu.AppendMenu(MF_STRING, IDR_VIEW_BLUE, _T("Blue")); - - // 硫붾돱 �긽�깭 泥섎━ - if (m_bDrawCenterLine) - { - popMenu.CheckMenuItem(IDR_CENTER_LINE, MF_CHECKED); - } - - if (m_bDrawRuler) - { - popMenu.CheckMenuItem(IDR_RULER, MF_CHECKED); - } - - - switch(m_nDrawMode) - { - case 0: - popMenu.CheckMenuItem(IDR_VIEW_ORIGIN, MF_CHECKED); - break; - case 1: - popMenu.CheckMenuItem(IDR_VIEW_FIT, MF_CHECKED); - break; - } - - // 硫붾돱 �긽�깭 泥섎━ - switch(m_nViewBand) - { - case BandTypeRed: - popMenu.CheckMenuItem(IDR_VIEW_RED, MF_CHECKED); - break; - case BandTypeGreen: - popMenu.CheckMenuItem(IDR_VIEW_GREEN, MF_CHECKED); - break; - case BandTypeBlue: - popMenu.CheckMenuItem(IDR_VIEW_BLUE, MF_CHECKED); - break; - case BandTypeGray: - popMenu.CheckMenuItem(IDR_VIEW_GRAY, MF_CHECKED); - break; - default: - popMenu.CheckMenuItem(IDR_VIEW_COLOR, MF_CHECKED); - break; - } - - // 而⑦뀓�뒪�듃 硫붾돱 �샇異� - CRect rect; - GetWindowRect(rect); - int nX = rect.left + point.x; - int nY = rect.top + point.y; - - popMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, nX, nY, this); - - if (m_pParentWnd==NULL) return; - point.x += m_nHScroll; - point.y += m_nVScroll; - m_pParentWnd->SendMessage(WM_RBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - - __super::OnRButtonDown(nFlags, point); -} - -void CCameraImageView::OnRButtonUp(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - point.x += m_nHScroll; - point.y += m_nVScroll; - m_pParentWnd->SendMessage(WM_RBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - - __super::OnRButtonUp(nFlags, point); -} - -void CCameraImageView::OnRButtonDblClk(UINT nFlags, CPoint point) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (m_pParentWnd==NULL) return; - - point.x += m_nHScroll; - point.y += m_nVScroll; - m_pParentWnd->SendMessage(WM_RBUTTONDBLCLK, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); - - __super::OnRButtonDblClk(nFlags, point); -} - - -void CCameraImageView::SetDrawCenterLine(BOOL bDraw) -{ - m_bDrawCenterLine = bDraw; - Invalidate(TRUE); -} - -void CCameraImageView::SetDrawRuler(BOOL bDraw) -{ - m_bDrawRuler = bDraw; - Invalidate(TRUE); -} - -void CCameraImageView::SetDrawMode(int nDrawMode) -{ - m_nDrawMode = nDrawMode; - - GetClientRect(m_rtClientRect); - - m_nScaleWidth = GetScaleWidth(); - m_nScaleHeight = GetScaleHeight(); - - switch(m_nDrawMode) - { - case 0: - if (m_rtClientRect.Width() >= m_nScaleWidth) - { - m_nMaxHScroll = 0; - } - else - { - m_nMaxHScroll = m_nScaleWidth - (m_rtClientRect.Width()+17); - if (m_nMaxHScroll < 0) - { - m_nMaxHScroll = 0; - } - else - { - m_nMaxHScroll += 17; - } - } - - if (m_rtClientRect.Height() >= m_nScaleHeight) - { - m_nMaxVScroll = 0; - } - else - { - m_nMaxVScroll = m_nScaleHeight - (m_rtClientRect.Height()+17); - if (m_nMaxVScroll < 0) - { - m_nMaxVScroll = 0; - } - else - { - m_nMaxVScroll += 17; - } - - } - break; - - case 1: - m_nMaxHScroll = m_nMaxVScroll = 0; - break; - } - - m_nHScroll = m_nVScroll = 0; - - SetScrollRange(SB_HORZ, 0, m_nMaxHScroll); - SetScrollRange(SB_VERT, 0, m_nMaxVScroll); - SetScrollPos(SB_HORZ, m_nHScroll); - SetScrollPos(SB_VERT, m_nVScroll); - -} - -void CCameraImageView::DrawCenterLine(CDC *pDC) -{ - if (m_rtClientRect.Width()==0 || m_rtClientRect.Height()==0) return; - - CRect rtDraw = m_rtClientRect; - if (m_nDrawMode==0) - { - rtDraw.right = GetWidth(); - rtDraw.bottom = GetHeight(); - } - - rtDraw.left -= m_nHScroll; - rtDraw.top -= m_nVScroll; - rtDraw.right -= m_nHScroll; - rtDraw.bottom -= m_nVScroll; - - CPen pen, *pPen=NULL; - pen.CreatePen(PS_SOLID, 2, RGB(255,0,0)); - pDC->SelectObject(&pen); - - //pDC->SelectStockObject(WHITE_PEN); - - // center line - pDC->MoveTo( (rtDraw.Width()/2)-m_nHScroll, 0); - pDC->LineTo((rtDraw.Width()/2)-m_nHScroll, rtDraw.Height()); - pDC->MoveTo(0, (rtDraw.Height()/2)-m_nVScroll); - pDC->LineTo(rtDraw.Width(), (rtDraw.Height()/2)-m_nVScroll); -} - -void CCameraImageView::DrawRuler(CDC *pDC) -{ - if (m_dRulerGab==0.0) return; - - if (m_rtClientRect.Width()==0 || m_rtClientRect.Height()==0) return; - - CRect rtDraw = m_rtClientRect; - if (m_nDrawMode==0) - { - rtDraw.right = GetWidth(); - rtDraw.bottom = GetHeight(); - } - - rtDraw.left -= m_nHScroll; - rtDraw.top -= m_nVScroll; - rtDraw.right -= m_nHScroll; - rtDraw.bottom -= m_nVScroll; - - pDC->SelectStockObject(WHITE_PEN); - - CFont font; - VERIFY(font.CreateFont( - 10, // nHeight - 5, // nWidth - 0, // nEscapement - 0, // nOrientation - FW_NORMAL, // nWeight - FALSE, // bItalic - FALSE, // bUnderline - 0, // cStrikeOut - ANSI_CHARSET, // nCharSet - OUT_DEFAULT_PRECIS, // nOutPrecision - CLIP_DEFAULT_PRECIS, // nClipPrecision - DEFAULT_QUALITY, // nQuality - DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily - _T("Arial"))); // lpszFacename - - // Do something with the font just created... - CFont* def_font = pDC->SelectObject(&font); - pDC->SetTextColor(RGB(255,255,255)); - pDC->SetBkMode(TRANSPARENT); - - // ruler - double dResX = m_dResolution / m_dWidthScale; - double dResY = m_dResolution / m_dHeightScale; - double dGabX = m_dRulerGab / dResX; // um - double dGabY = m_dRulerGab / dResY; // um - - if (dGabX<=0.0 || dGabY<=0.0) return; - - double dWidth = GetScaleWidth(); - double dHeight = GetScaleHeight(); - - double dCenterX = rtDraw.Width()/2; - double dCenterY = rtDraw.Height()/2; - - // x direction - CString strValue = _T(""); - strValue.Format(_T("%.1lf um"), m_dRulerGab); - pDC->TextOut(-m_nHScroll+5, rtDraw.Height()/2-m_nVScroll+5, strValue); - for (double dPos=dCenterX; dPos>=0.0; dPos-=dGabX) - { - pDC->MoveTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll); - pDC->LineTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll+6); - } - for (double dPos=dCenterX+dGabX; dPos<dWidth; dPos+=dGabX) - { - pDC->MoveTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll); - pDC->LineTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll+6); - } - - // y direction - strValue.Format(_T("%.1lf um"), m_dRulerGab); - pDC->TextOut(rtDraw.Width()/2-m_nHScroll+5, 5-m_nVScroll, strValue); - for (double dPos=dCenterY; dPos>0.0; dPos-=dGabY) - { - pDC->MoveTo(-m_nHScroll, (int)(dPos+0.5)-m_nVScroll); - pDC->LineTo(-m_nHScroll+6, (int)(dPos+0.5)-m_nVScroll); - } - for (double dPos=dCenterY+dGabY; dPos<dHeight; dPos+=dGabY) - { - pDC->MoveTo(-m_nHScroll, (int)(dPos+0.5)-m_nVScroll); - pDC->LineTo(-m_nHScroll+6, (int)(dPos+0.5)-m_nVScroll); - } -} - -BOOL CCameraImageView::SetViewImage(CCHImageData* pImageData) -{ - if (pImageData==NULL) return FALSE; - - if (!pImageData->GetImageExist()) return FALSE; - - EnterCriticalSection(&m_csImageData); - - this->CopyImageFrom(pImageData); - - LeaveCriticalSection(&m_csImageData); - - this->Invalidate(TRUE); - - return TRUE; -} - -BOOL CCameraImageView::SetOriginImage(CCHImageData* pImageData) -{ - if (pImageData==NULL) return FALSE; - - if (!pImageData->GetImageExist()) return FALSE; - - EnterCriticalSection(&m_csImageData); - - m_OriginImage.CopyImageFrom(pImageData); - - m_OriginImage.GetBandImage(m_nViewBand, this); - - LeaveCriticalSection(&m_csImageData); - - this->Invalidate(TRUE); - - return TRUE; -} - -BOOL CCameraImageView::SetOriginImage(int nWidth, int nHeight, int nChannels, int nWidthStep, const BYTE* pBuffer) -{ - if (nWidth<0 || nHeight<0 || nChannels<0 || pBuffer==NULL) return FALSE; - - EnterCriticalSection(&m_csImageData); - - if (nWidth!=m_OriginImage.GetWidth() || nHeight!=m_OriginImage.GetHeight() || nChannels!=m_OriginImage.GetChannels()) - { - if (m_OriginImage.CreateImage(nWidth, nHeight, 8, nChannels)==FALSE) - { - LeaveCriticalSection(&m_csImageData); - return FALSE; - } - } - - memcpy(m_OriginImage.GetImageBuffer(), pBuffer, nWidthStep*nHeight); - - if (nChannels==1) m_nViewBand = BandTypeGray; - - BOOL bResult = m_OriginImage.GetBandImage(m_nViewBand, this); - - LeaveCriticalSection(&m_csImageData); - - return bResult; -} - - -BOOL CCameraImageView::GetViewImage(CCHImageData* pImageData) -{ - if (pImageData==NULL) return FALSE; - - EnterCriticalSection(&m_csImageData); - - BOOL bReturn = this->CopyImageTo(pImageData); - - LeaveCriticalSection(&m_csImageData); - - return bReturn; -} - -BOOL CCameraImageView::GetOriginImage(CCHImageData* pImageData) -{ - if (pImageData==NULL) return FALSE; - - EnterCriticalSection(&m_csImageData); - - BOOL bReturn = m_OriginImage.CopyImageTo(pImageData); - - LeaveCriticalSection(&m_csImageData); - - return TRUE; -} - -void CCameraImageView::DrawViewName(CDC *pDC) -{ - CFont font; - VERIFY(font.CreateFont( - 20, // nHeight - 10, // nWidth - 0, // nEscapement - 0, // nOrientation - FW_NORMAL, // nWeight - FALSE, // bItalic - FALSE, // bUnderline - 0, // cStrikeOut - ANSI_CHARSET, // nCharSet - OUT_DEFAULT_PRECIS, // nOutPrecision - CLIP_DEFAULT_PRECIS, // nClipPrecision - DEFAULT_QUALITY, // nQuality - DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily - _T("Arial"))); // lpszFacename - - // Do something with the font just created... - CFont* def_font = pDC->SelectObject(&font); - pDC->SetTextColor(RGB(255,255,255)); - pDC->SetBkMode(TRANSPARENT); - - int nStrLength = (m_strViewName.GetLength() * 10); - - pDC->TextOut(m_rtClientRect.Width() - nStrLength - 30, 5, m_strViewName); - pDC->SelectObject(def_font); -} - -int CCameraImageView::GetScaleWidth() -{ - CRect rect; - int nWidth = GetWidth(); - - switch(m_nDrawMode) - { - case 0: - m_dWidthScale = 1.0; - return nWidth; - - case 1: - GetClientRect(rect); - if (nWidth!=0) - m_dWidthScale = double(rect.Width()) / double(nWidth); - return int(double(nWidth) * m_dWidthScale + 0.5); - } - - return 0; -} - -int CCameraImageView::GetScaleHeight() -{ - CRect rect; - int nHeight = GetHeight(); - - switch(m_nDrawMode) - { - case 0: - m_dHeightScale = 1.0; - return nHeight; - - case 1: - GetClientRect(rect); - if (nHeight!=0) - m_dHeightScale = double(rect.Height()) / double(nHeight); - return int(double(nHeight) * m_dHeightScale + 0.5); - } - - return 0; -} - -int CCameraImageView::GetHScrollPos(void) -{ - return m_nHScroll; -} - -int CCameraImageView::GetVScrollPos(void) -{ - return m_nVScroll; -} - -void CCameraImageView::SetViewName(const CString strViewName) -{ - m_strViewName = strViewName; -} - -void CCameraImageView::SetParentWnd(CWnd* pParentWnd) -{ - m_pParentWnd = pParentWnd; -} - -BOOL CCameraImageView::LoadImage(const CString& strFilename) -{ - if (!CCHImageData::LoadImage(strFilename)) - { - m_nHScroll = m_nVScroll = 0; - m_nMaxHScroll = m_nMaxVScroll = 0; - SetScrollRange(SB_HORZ, 0, m_nMaxHScroll); - SetScrollRange(SB_VERT, 0, m_nMaxVScroll); - SetScrollPos(SB_HORZ, m_nHScroll); - SetScrollPos(SB_VERT, m_nVScroll); - return FALSE; - } - - SetDrawMode(m_nDrawMode); - - return TRUE; -} - -void CCameraImageView::OnDestroy() -{ - __super::OnDestroy(); -} - -void CCameraImageView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - switch (nSBCode) - { - case SB_LEFT: // Scroll to far left. - break; - case SB_RIGHT: // Scroll to far right. - break; - case SB_ENDSCROLL: // End scroll. - break; - case SB_LINELEFT: // Scroll left. - if (m_nHScroll > 0) - m_nHScroll--; - break; - case SB_LINERIGHT: // Scroll right. - if (m_nHScroll < m_nMaxHScroll) - m_nHScroll++; - break; - case SB_PAGELEFT: // Scroll one page left. - if (5 < m_nMaxHScroll / 256) - m_nHScroll -= 20;//m_nHScroll -= 5; - else - m_nHScroll -= 10;//m_nHScroll -= m_nMaxHScroll / 256; - - if (m_nHScroll < 0) - m_nHScroll = 0; - break; - case SB_PAGERIGHT: // Scroll one page right. - if (5 < m_nMaxHScroll / 256) - m_nHScroll += 20;//m_nHScroll += 5; - else - m_nHScroll += 10;//m_nHScroll += m_nMaxHScroll / 256; - - if (m_nHScroll > m_nMaxHScroll) - m_nHScroll = m_nMaxHScroll; - break; - case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position - break; - case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the - m_nHScroll = nPos; - break; - } - - // Set the new position of the thumb (scroll box). - SetScrollPos(SB_HORZ, m_nHScroll); - - Invalidate(FALSE); - - __super::OnHScroll(nSBCode, nPos, pScrollBar); -} - -void CCameraImageView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - switch (nSBCode) - { - case SB_BOTTOM: // Scroll to bottom. - break; - case SB_ENDSCROLL: // End scroll. - break; - case SB_LINEDOWN: // Scroll one line down. - if (m_nVScroll < m_nMaxVScroll) - m_nVScroll++; - break; - case SB_LINEUP: // Scroll one line up. - if (m_nVScroll > 0) - m_nVScroll--; - break; - case SB_PAGEDOWN: // Scroll one page down. - if (5 < m_nMaxVScroll / 256) - m_nVScroll += 20;//m_nVScroll += 5; - else - m_nVScroll += 10;//m_nVScroll += (m_nMaxVScroll / 256); - - if (m_nVScroll > m_nMaxVScroll) - m_nVScroll = m_nMaxVScroll; - break; - case SB_PAGEUP: // Scroll one page up. - if (5 < m_nMaxVScroll / 256) - m_nVScroll -= 20;//m_nVScroll -= 5; - else - m_nVScroll -= 10;//m_nVScroll -= (m_nMaxVScroll / 256); - - if (m_nVScroll < 0) - m_nVScroll = 0; - break; - case SB_THUMBPOSITION: // Scroll to the absolute position. The current position is provided in nPos. - break; - case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is provided in nPos. - m_nVScroll = nPos; - break; - case SB_TOP: // Scroll to top. - break; - } - - // Set the new position of the thumb (scroll box). - SetScrollPos(SB_VERT, m_nVScroll); - - Invalidate(FALSE); - - __super::OnVScroll(nSBCode, nPos, pScrollBar); -} - - -void CCameraImageView::OnLoadImage() -{ - //CString szFilter = _T("All Files(*.*)|*.*||"); - CString szFilter = _T("BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| All Files(*.*)|*.*||"); - - CString strPath; - CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter); - dlg.m_ofn.lpstrTitle = _T("Load Image"); - - if(dlg.DoModal() == IDOK) - { - if (m_OriginImage.LoadImage(dlg.GetPathName())) - { - if (m_nViewBand==4) - { - m_OriginImage.CopyImageTo(this); - } - else - { - m_OriginImage.GetBandImage(m_nViewBand, this); - } - - Invalidate(TRUE); - } - } -} - -void CCameraImageView::OnSaveImage() -{ - CString szFilter = _T("BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| All Files(*.*)|*.*||"); - - CString strPath; - CFileDialog dlg(FALSE, szFilter, NULL, OFN_HIDEREADONLY, szFilter); - dlg.m_ofn.lpstrTitle = _T("Save Image"); - - if(dlg.DoModal() == IDOK) - { - if (SaveImage(dlg.GetPathName())) - { - - } - } -} - -void CCameraImageView::OnCenterLine() -{ - m_bDrawCenterLine = !m_bDrawCenterLine; - Invalidate(TRUE); -} - -void CCameraImageView::OnRuler() -{ - m_bDrawRuler = !m_bDrawRuler; - Invalidate(TRUE); -} - -void CCameraImageView::OnViewOrigin() -{ - m_nDrawMode = 0; - - SetDrawMode(m_nDrawMode); - Invalidate(TRUE); -} - -void CCameraImageView::OnViewFit() -{ - m_nDrawMode = 1; - - SetDrawMode(m_nDrawMode); - Invalidate(TRUE); -} - -void CCameraImageView::OnViewColor() -{ - if (m_OriginImage.GetChannels()==1) - { - m_nViewBand = BandTypeGray; - return; - } - - if (m_nViewBand == BandTypeColor) return; - - if (m_OriginImage.CopyImageTo(this)) - { - m_nViewBand = BandTypeColor; - Invalidate(TRUE); - } -} - -void CCameraImageView::OnViewGray() -{ - if (m_nViewBand == BandTypeGray) return; - - if (m_OriginImage.GetBandImage(BandTypeGray, this)) - { - m_nViewBand = BandTypeGray; - Invalidate(TRUE); - } -} - -void CCameraImageView::OnViewRed() -{ - if (m_OriginImage.GetChannels()==1) - { - m_nViewBand = BandTypeGray; - return; - } - - if (m_nViewBand == BandTypeRed) return; - - if (m_OriginImage.GetBandImage(BandTypeRed, this)) - { - m_nViewBand = BandTypeRed; - Invalidate(TRUE); - } -} - -void CCameraImageView::OnViewGreen() -{ - if (m_OriginImage.GetChannels()==1) - { - m_nViewBand = BandTypeGray; - return; - } - - if (m_nViewBand == BandTypeGreen) return; - - if (m_OriginImage.GetBandImage(BandTypeGreen, this)) - { - m_nViewBand = BandTypeGreen; - Invalidate(TRUE); - } -} - -void CCameraImageView::OnViewBlue() -{ - if (m_OriginImage.GetChannels()==1) - { - m_nViewBand = BandTypeGray; - return; - } - - if (m_nViewBand == BandTypeBlue) return; - - if (m_OriginImage.GetBandImage(BandTypeBlue, this)) - { - m_nViewBand = BandTypeBlue; - Invalidate(TRUE); - } -} - -void CCameraImageView::SetResolution(double dRes) -{ - if (dRes<0.0) return; - - m_dResolution = dRes; -} - -void CCameraImageView::SetRulerGab(double dGab) -{ - if (dGab<0.0) return; - - m_dRulerGab = dGab; -} - diff --git a/ReviewHistory/ReveiwHistory/CameraImageView.h b/ReviewHistory/ReveiwHistory/CameraImageView.h deleted file mode 100644 index 8bf8388..0000000 --- a/ReviewHistory/ReveiwHistory/CameraImageView.h +++ /dev/null @@ -1,139 +0,0 @@ -癤�#pragma once - -#include "CHImageControls/CHImageData.h" - -#define IDR_LOAD_IMAGE 9000 -#define IDR_SAVE_IMAGE 9001 -#define IDR_ONLY_SAVE_IMAGE 9002 - -#define IDR_CENTER_LINE 9100 -#define IDR_RULER 9101 -#define IDR_ROI_RECT 9102 -#define IDR_CLEAR_ROI_RECT 9103 -#define IDR_SAVE_ROI_RECT 9104 - -#define IDR_VIEW_ORIGIN 9200 -#define IDR_VIEW_FIT 9201 - -#define IDR_VIEW_COLOR 9300 -#define IDR_VIEW_GRAY 9301 -#define IDR_VIEW_RED 9302 -#define IDR_VIEW_BLUE 9303 -#define IDR_VIEW_GREEN 9304 - - -// CDlgHistory ���솕 �긽�옄�엯�땲�떎. -interface ICameraImageView2Parent -{ - virtual void CIV2P_GetImagePathName(CString& strFilename) = 0; - virtual void CIV2P_ManualSimulation(CCHImageData* pImageData) = 0; -}; - -class CCameraImageView : public CWnd, public CCHImageData -{ - DECLARE_DYNAMIC(CCameraImageView) - -public: - CCameraImageView(CWnd *pParentWnd); - virtual ~CCameraImageView(); - void SetCIV2P(ICameraImageView2Parent* pCIV2P) { m_pCIV2P = pCIV2P; } - - BOOL GetViewImage(CCHImageData* pImageData); - BOOL GetOriginImage(CCHImageData* pImageData); - BOOL SetViewImage(CCHImageData* pImageData); - BOOL SetOriginImage(CCHImageData* pImageData); - BOOL SetOriginImage(int nWidth, int nHeight, int nChannels, int nWidthStep, const BYTE* pBuffer); - - // getter - int GetScaleWidth(void); - int GetScaleHeight(void); - int GetHScrollPos(void); - int GetVScrollPos(void); - double GetWidthScale() { return m_dWidthScale; } - double GetHeightScale() { return m_dHeightScale; } - - // setter - void SetDrawObject(BOOL bDraw); - void SetDrawMode(int nDrawMode); - void SetViewName(const CString strViewName); - void SetParentWnd(CWnd* pParentWnd); - void SetDrawCenterLine(BOOL bDraw); - void SetDrawRuler(BOOL bDraw); - - void SetResolution(double dRes); - void SetRulerGab(double dGab); - - BOOL LoadImage(const CString& strFilename); - -protected: - void UpdateImageView(CDC *pDC); - void DrawCenterLine(CDC *pDC); - void DrawRuler(CDC *pDC); - void DrawViewName(CDC *pDC); - - ICameraImageView2Parent* m_pCIV2P; - - CRITICAL_SECTION m_csImageData; - CWnd *m_pParentWnd; - CString m_strViewName; - CCHImageData m_OriginImage; - - // pre draw info - int m_nViewBand; - CRect m_rtClientRect; - int m_nScaleWidth; - int m_nScaleHeight; - double m_dWidthScale; - double m_dHeightScale; - - // Scroll Pos - int m_nVScroll; - int m_nHScroll; - // Max Scroll Pos - int m_nMaxVScroll; - int m_nMaxHScroll; - - // image draw - int m_nDrawMode; - BOOL m_bDrawViewName; - - BOOL m_bDrawCenterLine; - BOOL m_bDrawRuler; - double m_dRulerGab; - double m_dResolution; - -protected: - DECLARE_MESSAGE_MAP() - afx_msg void OnLoadImage(); - afx_msg void OnSaveImage(); - afx_msg void OnCenterLine(); - afx_msg void OnRuler(); - afx_msg void OnViewOrigin(); - afx_msg void OnViewFit(); - afx_msg void OnViewColor(); - afx_msg void OnViewGray(); - afx_msg void OnViewRed(); - afx_msg void OnViewGreen(); - afx_msg void OnViewBlue(); - afx_msg void OnDestroy(); - afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); - afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); - - afx_msg void OnPaint(); - - afx_msg void OnMouseMove(UINT nFlags, CPoint point); - - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnLButtonUp(UINT nFlags, CPoint point); - afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); - - afx_msg void OnRButtonDown(UINT nFlags, CPoint point); - afx_msg void OnRButtonUp(UINT nFlags, CPoint point); - afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point); - -public: - -}; - -// typedef std::vector<CCameraImageView*> VectorCameraImageView; -// typedef std::vector<CCameraImageView*>::iterator VectorCameraImageViewIt; diff --git a/ReviewHistory/ReveiwHistory/CustomizeReview.cpp b/ReviewHistory/ReveiwHistory/CustomizeReview.cpp deleted file mode 100644 index 8eb3b22..0000000 --- a/ReviewHistory/ReveiwHistory/CustomizeReview.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "StdAfx.h" -#include "CustomizeReview.h" -#include "akCore/akFileDB.h" -#include "akGridData.h" - -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -#define CUSTOMIZE_RECIPE_PATH "C:\\DIT_Review\\Recipe" - -CCustomizeReview::CCustomizeReview(void) -{ - m_bReadSuccess = FALSE; -} - -CCustomizeReview::~CCustomizeReview(void) -{ - m_vecCustomizeReview.clear(); -} - -BOOL CCustomizeReview::openFile( char* pRecipeName ) -{ - m_bReadSuccess = FALSE; - m_nCustomizePlanType = 0; - m_vecCustomizeReview.clear(); - - CString strFileName; - { - CString strRecipeFileName; - strRecipeFileName.Format("%s\\%s.rcp", CUSTOMIZE_RECIPE_PATH, pRecipeName); - if(PathFileExists(strRecipeFileName)) - { - strFileName.Format("%s\\%s.cri", CUSTOMIZE_RECIPE_PATH, pRecipeName); - } - else - { - strFileName.Format("%s\\%s.cri", CUSTOMIZE_RECIPE_PATH, "Default"); - } - } - - - char* pFileName = strFileName.GetBuffer(0); - FILE* pf = fopen(pFileName, "r"); - - if(pf == NULL) - return FALSE; - - std::vector<_CustomizeReview> vecCustomizeReview; - _CustomizeReview CustomizeReviewData; - char buffer[1024]; - - char* pReadPoint = NULL; - char *pStr; - - CakParser akParser; - pStr = fgets(buffer, 1024, pf); - m_nCustomizePlanType = atoi(pStr); //customize type - while(!feof(pf)) - { - pStr = fgets(buffer, 1024, pf); - - if(strlen(buffer) <= 0 || pStr == NULL) - break; - - akParser.process(pStr, " \r\n\t,^"); - if(akParser.getTokNum() <= 0) break; - - CustomizeReviewData.m_nCustomizeDefectType = atoi( akParser.getTokStr(0) ); - CustomizeReviewData.m_dCustomizeDefectPosXmm = atof( akParser.getTokStr(1) ); - CustomizeReviewData.m_dCustomizeDefectPosYmm = atof( akParser.getTokStr(2) ); - CustomizeReviewData.m_nCustomizeParam1 = atoi( akParser.getTokStr(3) ); - CustomizeReviewData.m_nCustomizeParam2 = atoi( akParser.getTokStr(4) ); - vecCustomizeReview.push_back(CustomizeReviewData); - } - - fclose(pf); - - m_vecCustomizeReview = vecCustomizeReview; - m_bReadSuccess = TRUE; - return TRUE; -} diff --git a/ReviewHistory/ReveiwHistory/CustomizeReview.h b/ReviewHistory/ReveiwHistory/CustomizeReview.h deleted file mode 100644 index e898cd4..0000000 --- a/ReviewHistory/ReveiwHistory/CustomizeReview.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include <vector> - -struct _CustomizeReview -{ - int m_nCustomizeDefectType ;//0:Location(User, Fiexed) Review, 1:reflower, 2:Wsi - double m_dCustomizeDefectPosXmm; //mm 단위 x 코너 좌표 [김태현 2019/1/17] - double m_dCustomizeDefectPosYmm; //mm 단위 y 코너 좌표 - int m_nCustomizeParam1 ; - int m_nCustomizeParam2 ; -}; - -class CCustomizeReview -{ -public: - CCustomizeReview(void); - virtual ~CCustomizeReview(void); - -public: - BOOL openFile(char* pRecipeName); - BOOL IsRead() { return m_bReadSuccess; } - int GetCustomizeReviewNum() { return (int)m_vecCustomizeReview.size();} - _CustomizeReview* GetCustomizeReivew(int i) { return &m_vecCustomizeReview[i]; } - int GetCustomizeType(){return m_nCustomizePlanType;}; -public: - CString m_strCustomizeReviewRecipePath; - - DWORD m_dwMacroReadTime; - -protected: - char* getParsingData(char* pBuf, int nLen, CString* pOutData); - char* getParsingData(char* pBuf, int nLen, int* pOutData); - -protected: - BOOL m_bReadSuccess; - int m_nCustomizePlanType; - std::vector<_CustomizeReview> m_vecCustomizeReview; -}; - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp deleted file mode 100644 index c37e6e5..0000000 --- a/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp +++ /dev/null @@ -1,223 +0,0 @@ -#include "StdAfx.h" -#include "DitGlassRawClient.h" - -CDitGlassRawClient::CDitGlassRawClient(void) -: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) -{ - m_hMapBasicInfo = NULL; - m_hMapGlassData = NULL; - - m_pGlassRawInfo = NULL; - m_pGlassRawData = NULL; - - m_nLastCommandIdx = -1; -} - -CDitGlassRawClient::~CDitGlassRawClient(void) -{ - if (m_hMapBasicInfo!=NULL) - { - ::UnmapViewOfFile(m_hMapBasicInfo); - m_pGlassRawInfo = NULL; - } - - if (m_hMapGlassData!=NULL) - { - ::UnmapViewOfFile(m_hMapGlassData); - m_pGlassRawData = NULL; - } -} - -BOOL CDitGlassRawClient::ConnectServer() -{ - if(isConnect()) return TRUE; - - if(ConnectGlassRawInfo() == FALSE) - { - return FALSE; - } - - if(ConnectGlassRawData() == FALSE) - { - return FALSE; - } - - return TRUE; -} - -BOOL CDitGlassRawClient::ConnectGlassRawInfo() -{ - if(m_hMapBasicInfo == NULL) - { - m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO); - - if (m_hMapBasicInfo) - { - m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo)); - } - - if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL) - { - if (m_hMapBasicInfo!=NULL) - { - ::UnmapViewOfFile(m_hMapBasicInfo); - m_pGlassRawInfo = NULL; - } - m_pGlassRawInfo = NULL; - return FALSE; - } - } - - return TRUE; -} - -BOOL CDitGlassRawClient::ConnectGlassRawData() -{ - SIZE_T nGlassRawSharedSize = m_pGlassRawInfo->m_nGlassRawDataSize; - - if(m_hMapGlassData == NULL) - { - m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA); - - if (m_hMapGlassData) - { - m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize); - } - - if(m_hMapGlassData == NULL || m_pGlassRawData == NULL) - { - if (m_hMapGlassData != NULL) - { - ::UnmapViewOfFile(m_hMapGlassData); - m_pGlassRawData = NULL; - } - m_pGlassRawData = NULL; - return FALSE; - } - } - m_pGlassData = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint]; - m_pBlockData = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint]; - m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; - m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; - m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; - - return TRUE; -} - -BOOL CDitGlassRawClient::WriteAOIRawFile() -{ - return SetCommand(grcWriteRaw); -} - -BOOL CDitGlassRawClient::WriteAOIRawBinFile() -{ - return SetCommand(grcWriteBin); -} - -BOOL CDitGlassRawClient::ReadAOIRawBinFile() -{ - return SetCommand(grcReadBin); -} - -BOOL CDitGlassRawClient::WriteReviewRawBinFile() -{ - return SetCommand(grcReviewWriteBIn); -} - -BOOL CDitGlassRawClient::SetCommand( emGlassRawCommand nCmd ) -{ - if(m_pGlassRawInfo == NULL) return FALSE; - - m_mxCommandProcess.Lock(); - - int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; - - if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] - { - m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] - } - - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] - - - m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; - - m_mxCommandProcess.Unlock(); - - return TRUE; -} - -emAOIProcStep CDitGlassRawClient::GetProcessStep() -{ - if(isConnect() == FALSE) return APS_None; - - if(m_pGlassRawInfo) - { - return m_pGlassRawInfo->m_ClientProcStep; - } - - return APS_None; -} - -BOOL CDitGlassRawClient::SetGlassLoading() -{ - if(isConnect() == FALSE) return FALSE; - m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; - m_pGlassData->m_bStackRead = FALSE; - return SetCommand(grcSequenceGlassLoading); -} - -BOOL CDitGlassRawClient::SetInspectEnd() -{ - if(isConnect() == FALSE) return FALSE; - m_pGlassRawInfo->m_ClientProcStep = APS_InspectEnd; - return SetCommand(grcSequenceInspectEnd); -} - -BOOL CDitGlassRawClient::SetReviewStart() -{ - if(isConnect() == FALSE) return FALSE; - m_pGlassRawInfo->m_ClientProcStep = APS_ReviewStart; - return SetCommand(grcSequenceReviewStart); -} - -BOOL CDitGlassRawClient::SetReviewEnd() -{ - if(isConnect() == FALSE) return FALSE; - m_pGlassRawInfo->m_ClientProcStep = APS_ReviewEnd; - return SetCommand(grcSequenceReviewEnd); -} - -BOOL CDitGlassRawClient::SetReviewComtomize() -{ - if(isConnect() == FALSE) return FALSE; - m_pGlassRawInfo->m_ClientProcStep = APS_CustomReviewRead; - return SetCommand(grcSequenceCustomReviewDataRead); -} - -void CDitGlassRawClient::RemoveReviewDefects() -{ - int nDefectNum = m_pGlassData->m_nDefectNum; - int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - int nDefectDeleteNum = 0; - for(int i=nDefectNum-1; i>=0; i--) - { - if(m_pDefectData[i].m_ReviewDefect.m_nPlanType > 0 && - m_pDefectData[i].m_ReviewDefect.m_nPlanType != 1000 ) - { - nDefectDeleteNum++; - if(nRightDefectNum) - { - memcpy(&m_pDefectData[i], &m_pDefectData[i+1], sizeof(_grmDefectData)*nRightDefectNum); - } - } - else - { - nRightDefectNum++; - } - } - - m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum; -} diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawClient.h b/ReviewHistory/ReveiwHistory/DitGlassRawClient.h deleted file mode 100644 index 82a185a..0000000 --- a/ReviewHistory/ReveiwHistory/DitGlassRawClient.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#include "DitGlassRawStruct.h" - -class CDitGlassRawClient -{ -public: - CDitGlassRawClient(void); - ~CDitGlassRawClient(void); - -public: - BOOL ConnectServer(); - BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;}; - - emAOIProcStep GetProcessStep(); - - BOOL SetGlassLoading(); - BOOL SetInspectEnd(); - - BOOL SetReviewStart(); - BOOL SetReviewEnd(); - - BOOL SetReviewComtomize(); - - void RemoveReviewDefects();//AOI占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싹곤옙, 占쏙옙占썰에占쏙옙 占쏙옙占쏙옙占쏙옙 User 혹占쏙옙 Reflow 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. - - _grmDitMemInfo* GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;}; - _grmGlassData* GetGlassData(){return m_pGlassData;}; - _grmBlockData* GetBlockData(){return m_pBlockData;}; - _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; - _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; - _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; - - //占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占� [占쏙옙占쏙옙占쏙옙 2018/11/12] - BOOL WriteAOIRawFile(); - - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占쏙옙占승뤄옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] - BOOL WriteAOIRawBinFile(); - - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占싻깍옙 - BOOL ReadAOIRawBinFile(); - - BOOL WriteReviewRawBinFile(); - -protected: - BOOL ConnectGlassRawInfo(); - BOOL ConnectGlassRawData(); - BOOL SetCommand(emGlassRawCommand nCmd); - -protected: - _grmGlassData* m_pGlassData; - _grmBlockData* m_pBlockData; - _grmCellData* m_pCellData; - _grmDefectData* m_pDefectData; - _grmDefectData* m_pStackData; - -protected: - HANDLE m_hMapBasicInfo; - HANDLE m_hMapGlassData; - _grmDitGlassRawInfo* m_pGlassRawInfo; - char* m_pGlassRawData; - - CMutex m_mxCommandProcess; - int m_nLastCommandIdx; - -}; diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp deleted file mode 100644 index 85f4cab..0000000 --- a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include "StdAfx.h" -#include "DitGlassRawServer.h" - -CDitGlassRawServer::CDitGlassRawServer(void) -: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) -{ - m_hMapBasicInfo = NULL; - m_hMapGlassData = NULL; - - m_pGlassRawInfo = NULL; - m_pGlassRawData = NULL; - - m_nLastCommandIdx = -1; -} - -CDitGlassRawServer::~CDitGlassRawServer(void) -{ - if (m_hMapBasicInfo!=NULL) - { - ::UnmapViewOfFile(m_hMapBasicInfo); - m_pGlassRawInfo = NULL; - } - - if (m_hMapGlassData!=NULL) - { - ::UnmapViewOfFile(m_hMapGlassData); - m_pGlassRawData = NULL; - } -} - - -BOOL CDitGlassRawServer::CreateServer( int nCellNum /*= 100*/, int nDefectNum /*= 2000*/ ) -{ - if(CreateGlassRawInfo() == FALSE) - { - return FALSE; - } - - - if(sizeof(_grmGlassData) != m_pGlassRawInfo->m_nSizeOfGlassData - || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData - || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData - || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData - || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData) - { - return FALSE; - } - - m_pGlassRawInfo->m_nGlassMaxDataNum = 1; - m_pGlassRawInfo->m_nBlockMaxDataNum = 1; - m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; - m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; - m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; - - m_pGlassRawInfo->m_nGlassRawDataSize; - { - int nDataNum = 0; - - m_pGlassRawInfo->m_nGlassDataPoint = nDataNum; - nDataNum += m_pGlassRawInfo->m_nSizeOfGlassData + m_pGlassRawInfo->m_nSizeOfGlassData%4; - - m_pGlassRawInfo->m_nBlockDataPoint = nDataNum; - nDataNum += m_pGlassRawInfo->m_nSizeOfBlockData + m_pGlassRawInfo->m_nSizeOfBlockData%4; - - m_pGlassRawInfo->m_nCellDataPoint = nDataNum; - nDataNum += (m_pGlassRawInfo->m_nSizeOfCellData + m_pGlassRawInfo->m_nSizeOfCellData%4)*nCellNum; - - m_pGlassRawInfo->m_nDefectDataPoint = nDataNum; - nDataNum += (m_pGlassRawInfo->m_nSizeOfDefectData + m_pGlassRawInfo->m_nSizeOfDefectData%4)*nDefectNum; - - m_pGlassRawInfo->m_nStackDataPoint = nDataNum; - nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; - - m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; - } - - - if(CreateGlassRawData() == FALSE) - { - return FALSE; - } - - return TRUE; -} - - -BOOL CDitGlassRawServer::CreateGlassRawInfo() -{ - if(m_hMapBasicInfo == NULL) - { - BOOL bCreateMem = TRUE; - - m_hMapBasicInfo = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE - , 0, sizeof(_grmDitGlassRawInfo), SHAREDMEMNAME_BASICINFO); - - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO); - bCreateMem = FALSE; - } - - if (m_hMapBasicInfo) - { - m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo)); - } - - if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL) - { - if (m_hMapBasicInfo!=NULL) - { - ::UnmapViewOfFile(m_hMapBasicInfo); - m_pGlassRawInfo = NULL; - } - m_pGlassRawInfo = NULL; - return FALSE; - } - - //0으로 초기화 - if(bCreateMem && m_pGlassRawInfo) - { - ZeroMemory(m_pGlassRawInfo,sizeof(_grmDitGlassRawInfo)); - - m_pGlassRawInfo->m_nSizeOfGlassData = sizeof(_grmGlassData) ; - m_pGlassRawInfo->m_nSizeOfBlockData = sizeof(_grmBlockData); - m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); - m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); - m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); - - int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; - } - - } - - - - return TRUE; -} - -BOOL CDitGlassRawServer::CreateGlassRawData() -{ - int nGlassRawSharedSize = (int)(m_pGlassRawInfo->m_nGlassRawDataSize); - - if(m_hMapGlassData == NULL) - { - BOOL bCreateMem = TRUE; - - m_hMapGlassData = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE - , 0, nGlassRawSharedSize, SHAREDMEMNAME_GLASSDATA); - - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA); - bCreateMem = FALSE; - } - - if (m_hMapGlassData) - { - m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize); - } - - if(m_hMapGlassData == NULL || m_pGlassRawData == NULL) - { - if (m_hMapGlassData != NULL) - { - ::UnmapViewOfFile(m_hMapGlassData); - m_pGlassRawData = NULL; - } - m_pGlassRawData = NULL; - return FALSE; - } - - //0으로 초기화 - if(bCreateMem && m_pGlassRawData) ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize); - } - - m_pGlassData = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint]; - m_pBlockData = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint]; - m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; - m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; - m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; - - return TRUE; -} diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.h b/ReviewHistory/ReveiwHistory/DitGlassRawServer.h deleted file mode 100644 index cda09f0..0000000 --- a/ReviewHistory/ReveiwHistory/DitGlassRawServer.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include "DitGlassRawStruct.h" - - - -class CDitGlassRawServer -{ -public: - CDitGlassRawServer(void); - ~CDitGlassRawServer(void); - -public: - BOOL CreateServer(int nCellNum = 200, int nDefectNum = 12000); - - _grmGlassData* GetGlassData(){return m_pGlassData;}; - _grmBlockData* GetBlockData(){return m_pBlockData;}; - _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; - _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; - _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; - - _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;}; - -protected: - BOOL CreateGlassRawInfo(); - BOOL CreateGlassRawData(); - -protected: - _grmGlassData* m_pGlassData; - _grmBlockData* m_pBlockData; - _grmCellData* m_pCellData; - _grmDefectData* m_pDefectData; - _grmDefectData* m_pStackData; - - -protected: - HANDLE m_hMapBasicInfo; - HANDLE m_hMapGlassData; - _grmDitGlassRawInfo* m_pGlassRawInfo; - char* m_pGlassRawData; - - CMutex m_mxCommandProcess; - int m_nLastCommandIdx; - -}; diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h deleted file mode 100644 index e84fb29..0000000 --- a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h +++ /dev/null @@ -1,745 +0,0 @@ -#pragma once - -#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO") -#define SHAREDMEMNAME_GLASSDATA _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA") -#define MUTEX_RAWMESSENGER _T("MUTEX_RAWMESSENGER_IPC") - -#define COMMAND_MAXCOUNT 8 - -#define RAWMESSENGER_MAXCAMNUM 30 -#define RAWMESSENGER_MAXSCANNUM 20 - -#define MAX_ZONE_NUM 16 - -namespace ditRaw -{ - enum ReviewPlanType - { - RPT_Review = 0, - RPT_User, - RTP_WSI, - RTP_PlanMeasure, - RTP_Reflow, - RTP_WsiReflow, - RTP_UserWsi, - RPT_AOICustom = 1000, - }; -}; -enum emAOIProcStep -{ - APS_None = 0, - - //AOI - APS_GlassLoading, - APS_InspectEnd, - //Review - APS_CustomReviewRead, - APS_ReviewStart, - APS_ReviewEnd, - - RPS_StepNum -}; - -struct _grmGlassData -{ - void clear() - { - memset(this, 0, sizeof(_grmGlassData)); - } - - //Glass 占쏙옙占쏙옙 - char m_strFileName[64]; - char m_strPath[256]; - - int m_nCellNum; - int m_nDefectNum; - - int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; - int m_nConerCutDirection; - int m_nScanCoordinateY; //占쏙옙占썩가 0占싱몌옙 占싹뱄옙, 1占싱몌옙 Scan占쏙옙占쏙옙占쏙옙 y占쏙옙(占쏙옙 scan占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙, offline 占쏙옙占쏙옙 占쏙옙占쏙옙) - - int m_nGlassSizeWidth; - int m_nGlassSizeHeight; - - //占쏙옙占쏙옙占쏙옙占쏙옙 - char m_strLine[32]; - char m_strEquipType[32]; - char m_strEquipID[32]; - char m_strStepID[32]; - char m_strOperID[32]; - - CTime m_tmGlassLoading; //3. START_TIME - CTime m_tmInspectionStart; //3. START_TIME - CTime m_tmInspectionEND; //4. END_TIME - CTime m_tmReviewLoading; - CTime m_tmReviewEnd; - - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 - char m_strGlassID[32]; //Glass ID - char m_strPPID[32]; - char m_strEPPID[32]; - char m_strLotID[32]; //LOT_ID - char m_strSLotID[32]; //SLOT_ID - char m_strRecipeName[32]; //RECIPE_NAME - char m_strGlassJudge[32]; //GLASS_JUDGE - char m_strGlassCode[32]; //Grade or Code - char m_strProductID[16]; //4. PRODUCT_ID - - //VCR - int m_nVcrResultCode; - char m_strVCRResult[32]; - char m_strVCRGlassID[32]; - - - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - int m_nDefectNumSizeSmall; - int m_nDefectNumSizeMid; - int m_nDefectNumSizeLarge; - int m_nDefectNumSizeHuge; - int m_nDefectNumSizeUltra; - - int m_nDefectNumLocActive; - int m_nDefectNumLocPad; - int m_nDefectNumLocCrack; - int m_nDefectNumLocBM; - - int m_nDefectNumTypeTB; - int m_nDefectNumTypeTW; - int m_nDefectNumTypeRB; - int m_nDefectNumTypeRW; - int m_nDefectNumTypeMD; - int m_nDefectNumTypeCD; - int m_nDefectNumTypeMC; - - int m_nDefectNumJudgeOKWhite; - int m_nDefectNumJudgeOKBlack; - int m_nDefectNumJudgeNG; - int m_nDefectNumJudgeRW; - int m_nDefectNumJudgeRP; - int m_nDefectNumJudgeRV; - int m_nDefectNumJudgeTR; - int m_nDefectNumJudgePR; - - int m_nDefectNumStackTD; - int m_nDefectNumStackSD; - int m_nDefectNumStackPD; - int m_nDefectNumStackSP; - - - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] - short m_nCameraNum; - short m_nScanNum; - unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - - //占쏙옙占쏙옙占� 占쏙옙占쏙옙 um[占쏙옙占쏙옙占쏙옙 2018/12/10] - double m_nAlignCcdTheta; - double m_nAlignCcdShitftX; - double m_nAlignCcdShitftY; - double m_nAlignPreTheta; - double m_nAlignPreShitftX; - double m_nAlignPreShitftY; - double m_nAlignBasicTheta; - double m_nAlignBasicShitftX; - double m_nAlignBasicShitftY; - char m_strAlignFirst[64]; - char m_strAlignSecond[64]; -// char m_strAlignPath[256]; - - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] - char m_strCassetteSequenceNo[16]; - char m_strOwnerCode[16]; //2. OWNER_CODE - char m_strOwnerType[16]; //3. OWNER_TYPE - - char m_strProcessID[21]; //5. PROCESS_ID - char m_strProductGroup[16]; //6. PRODUCT_GROUP - char m_strCSTID[16]; //8. CST_ID - char m_strPreProcessID[16]; //10.PRE_PROCESS_ID - char m_strPreEQPID[16]; //11.PRE_EQP_ID - char m_strPreChamerID[16]; //12.PRE_CHAMBER_ID - char m_strPreRecipeID[32]; //13.PRE_RECIPE_ID - char m_strGroupID[16]; //14.GROUP_ID - char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - char m_strProdType[3]; - char m_strBatchID[13]; - char m_strPairHPanelID[13]; - char m_strGlassThickNess[2]; - char m_strCompCount[2]; - char m_strGlassState[2]; - char m_strInsFlag[2]; - char m_strPanelPosition[2]; - char m_strFlowHistory[2]; - char m_strCount1[2]; - char m_strCount2[2]; - - //Mura Data 0412 nwh - char m_strMaxAvgGray[12]; - char m_strMaxPortion[12]; - - - //1226NWH - char m_strReadingFlag[2]; - BYTE m_nUniqueID[4]; - int m_nSlot_No; - - BYTE m_nGlassDataBitSignal[4]; - bool m_bJob_end; - - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 - int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� - int m_nStackNum; - BOOL m_bStackRead; - - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 - int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 - char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� - BOOL m_bRawCutoff; - -}; -struct _grmBlockData -{ - void clear() - { - memset(this, 0, sizeof(_grmBlockData)); - } - char m_strBlockID[16]; //1. BLOCK_ID - char m_cBlockJudgeAOI; //2. BLOCK_JUDGE_AOI - char m_cBlockJudgeATS; //4. BLOCK_JUDGE_ATS - char m_cBlockJudgeTEG; //5. BLOCK_JUDGE_TEG - int m_nGlassIdDCR; //22. GLASS_ID_DCR -}; -struct _grmCellData -{ - void clear() - { - memset(this, 0, sizeof(_grmCellData)); - } - int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; - int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? - - char m_strCellName[32]; - int m_rectCellLeft; - int m_rectCellTop; - int m_rectCellRight; - int m_rectCellBottom; - - int/*Judgement*/ m_nJudgement; - int m_nJudgeFlag; - int m_nJudgeGlade; - - - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - int m_nDefectNumSizeSmall; - int m_nDefectNumSizeMid; - int m_nDefectNumSizeLarge; - int m_nDefectNumSizeHuge; - int m_nDefectNumSizeUltra; - - int m_nDefectNumLocActive; - int m_nDefectNumLocPad; - int m_nDefectNumLocCrack; - int m_nDefectNumLocBM; - - int m_nDefectNumTypeTB; - int m_nDefectNumTypeTW; - int m_nDefectNumTypeRB; - int m_nDefectNumTypeRW; - int m_nDefectNumTypeMD; - int m_nDefectNumTypeCD; - int m_nDefectNumTypeMC; - - //Mura Data nwh 0404 - char m_strProImage[32]; - char m_strAvgGray_0[12]; - char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_0[12]; - char m_strAvgAmp_0[12]; - char m_strFFTVar_0[12]; - char m_strFFTVah_0[12]; - char m_strFFTVaq_0[12]; - char m_strFFTPK_0[12]; - - char m_strAvgGray_1[12]; - char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_1[12]; - char m_strAvgAmp_1[12]; - char m_strFFTVar_1[12]; - char m_strFFTVah_1[12]; - char m_strFFTVaq_1[12]; - char m_strFFTPK_1[12]; - - char m_strAvgGray_2[12]; - char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_2[12]; - char m_strAvgAmp_2[12]; - char m_strFFTVar_2[12]; - char m_strFFTVah_2[12]; - char m_strFFTVaq_2[12]; - char m_strFFTPK_2[12]; - - char m_strAvgGray_3[12]; - char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_3[12]; - char m_strAvgAmp_3[12]; - char m_strFFTVar_3[12]; - char m_strFFTVah_3[12]; - char m_strFFTVaq_3[12]; - char m_strFFTPK_3[12]; - - int m_nDefectNumJudgeOKWhite; - int m_nDefectNumJudgeOKBlack; - int m_nDefectNumJudgeNG; - int m_nDefectNumJudgeRW; - int m_nDefectNumJudgeRP; - int m_nDefectNumJudgeRV; - int m_nDefectNumJudgeTR; - int m_nDefectNumJudgePR; - - int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 - int m_nDefectTDCount; - int m_nDefectSDCount; - int m_nDefectPDCount; - int m_nDefectSPCount; - - // Gate/Data 占쏙옙 占쏙옙占쏙옙 - int m_nGateNum; - int m_nDataNum; - - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 - int m_nCellXDir; - int m_nCellYDir; -}; - -struct _grmDefectReviewData -{ - void clear() - { - memset(this, 0, sizeof(_grmDefectReviewData)); - } - - ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] - ditRaw::ReviewPlanType m_nPlanType ; - int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] - int m_nModuleIndex; - int m_nMagnificIndex; - float m_fManification; - float m_fManificResoultion; - char m_strRevImageName[256]; - char m_strRevImagePath[256]; - - ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 - int m_nMeasure_Index; - int m_nMeasure_ResultCode; //0:None, 1:Success - float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY - - ////////////////////////////////////////////////////////////////////////// - // WSI占쏙옙占쏙옙 - int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 - float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width - char m_strWsi_2DImageFilename[256]; - char m_strWsi_3DImageFilename[256]; - int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex - int m_nWsi_pReflowResultData[8]; - double m_dWsi_DamDistance; - - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH - double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 - - ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 - int m_nReflow_Index; - int m_nReflow_ResultCode; //0:None, // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side - float m_fReflow_LinePosData[8]; - int m_nReflow_Side; - int m_nReflow_InspectionMode; -}; - -struct _grmDefectData -{ - void clear() - { - memset(this, 0, sizeof(_grmDefectData)); - } - - short m_nDefectID; - short m_nCameraID; - short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 - - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 - - short m_nPixelSize; // 占쏙옙占쏙옙크占쏙옙 ---------------------------------PS - short/*SERVER_DefectType*/ m_DefectType; // 占쏙옙占쏙옙 타占쏙옙 ---------------------------------DT - short/*SERVER_DefectSubType*/ m_DefectSubType; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - short/*SERVER_DefectBDType*/ m_DefectBDType; // 占쏙옙占쏙옙 타占쏙옙 - Bright, Dark, Both - - short m_sPixelWidth; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占십븝옙 - short m_sPixelHeight; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - short m_nLevelSrcMin; // 占쏙옙占쏙옙 占쏙옙占� Min -----------------------------SN - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA - - int m_nDefectRScale; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 -------------------------RS - short m_sThreshold; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold - short m_sThresholdAvg; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold AVG - short m_sDefectPeak; // 占쏙옙占쏙옙占쏙옙 Peak. - short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 占쏙옙청占쏙옙占쏙옙 - - int m_nPixelGlassStart; // Glass 占쏙옙占쏙옙 占싫쇽옙 - short m_sDefectLoc; - - short m_sZoneClassPixelCount[16]; - short m_sZonePixelCount[16]; // Zone占쏙옙 占쏙옙占쏙옙 Pixel 占쏙옙 - short m_sZoneValueMin[16]; // Zone占쏙옙 占쏙옙占쏙옙 Min - short m_sZoneValueMax[16]; // Zone占쏙옙 占쏙옙占쏙옙 Max - short m_sZoneValueAvg[16]; // Zone占쏙옙 占쏙옙占쏙옙 Avg - short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF - - //210127 CJH - Zone占쏙옙 Source Gray 占쌉뤄옙 - short m_sZoneValueSrcMin[16]; // Zone占쏙옙 Source Min - short m_sZoneValueSrcMax[16]; // Zone占쏙옙 Source Max - short m_sZoneValueSrcAvg[16]; // Zone占쏙옙 Source Avg - - int m_nUMOriginX; // um占쏙옙占쏙옙 x占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMOriginY; // um占쏙옙占쏙옙 y占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMCenterAlignX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterAlignY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMSizeX; // um占쏙옙占쏙옙 X 크占쏙옙 -----------------------------UX - int m_nUMSizeY; // um占쏙옙占쏙옙 Y 크占쏙옙 -----------------------------UY - int m_nUMSize; // um占쏙옙占쏙옙 크占쏙옙. - CRect m_RectUM; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. - - short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 占쏙옙占쏙옙 크占쏙옙 占쏙옙占쏙옙enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; - short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak占쏙옙 占쏙옙占쏙옙. - short/*Judgement*/ m_DefectJudgement; // 占쏙옙占쏙옙 占쏙옙占쏙옙. - BOOL m_bDefectCutoff; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙(TRUE= Cutoff, FALSE) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16占쏙옙占� 占쏙옙占쏙옙 - int m_nPadRegionIdx; // PAD 占쏙옙占쏙옙 占싸듸옙占쏙옙 - - int m_nUMCellX; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 x 占쏙옙표 - int m_nUMCellY; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 y 占쏙옙표 - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? - short m_nCellIdx; // 占쏙옙占승� 占쏙옙占싸곤옙? - short m_nCellGate; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellData; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellGateAlign; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellDataAlign; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. - - short m_nRepeatCount; // 占쏙옙占쌈곤옙占쌉발곤옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙표 占쌥븝옙占쏙옙 - short m_nMaskRepeatCount; - int m_StackInfo; // Stack Flag - BOOL m_bRealStack; // Stack 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 TD(TRUE) 占쏙옙占쏙옙, 占쏙옙占싶몌옙占쏙옙 占쏙옙占쏙옙 TD(FALSE)占쏙옙占쏙옙占쏙옙 占쏙옙 占쌍댐옙. - short m_nStackStepCount; // Stack 占쏙옙 - short m_nStackColorIdx; // Color占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. - //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 - - int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI占쏙옙 TFE占쏙옙 占쌩곤옙 占싻뤄옙 占싯곤옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占�. - int m_nAtomWidth; // TFE 占쏙옙 占십븝옙 - int m_nAtomHeight; // TFE 占쏙옙 占쏙옙占쏙옙 - short/*ReKind*/ m_DefectKind; // 占쏙옙占쏙옙 占쏙옙占쏙옙 - - char m_strDefectCode[32]; // Defect Code - BOOL m_bMergeState; // Merge Status - char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - int m_nDefectMerge; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - - - int m_nPixelSizeOrigin; - int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] - - char m_strDefectName[16]; - char m_strDefectType[16]; - - double m_dScanResolution; - double m_dConvResolution; - - int m_nAngle; // 占쏙옙占쏙옙 - int m_nMajor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Long) - int m_nMinor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Short) - int m_nCompact; // Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占싹댐옙 占쏙옙占쏙옙 占쏙옙占싱울옙 Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 - int m_nThickness; // Blob 占쏙옙占싱울옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 (Area / Major) - - short m_nHliLevelIdx; // 占쏙옙 占쏙옙째 占쏙옙占쏙옙(채占쏙옙)占싸곤옙? - int m_nHliLayers; // 占쌔댐옙占쏙옙篤占� 占쏙옙占쌉듸옙 占쏙옙占싱억옙 bit처占쏙옙 - - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 - - char m_strAoiImagePath[255]; - char m_strReviewImagePath[255]; - - int m_nAlignRectLeft; - int m_nAlignRectTop; - int m_nAlignRectBottom; - int m_nAlignRectRight; - - - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] - _grmDefectReviewData m_ReviewDefect; -}; - - -enum emGlassRawCommand -{ - grcNone = 0, - - //AOI Sequence - grcSequenceGlassLoading = 1, - grcSequenceInspectEnd = 2, - //Review Sequence - grcSequenceReviewStart = 3, - grcSequenceReviewEnd = 4, - - grcSequenceCustomReviewDataRead = 10, - - grcWriteRaw = 101, - grcReadRaw = 102, - - grcWriteBin = 201, - grcReadBin = 202, - - grcReviewWriteBIn = 301, - - grcGlassRawCommand -}; - - -struct _grmDitCommand -{ - struct _grmCommand - { - int nCommand; - char strParam[256]; - short nResult; - }; - short m_nCommandIdxWrite; - short m_nCommandIdxRead; - _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; -}; - -struct _grmDitMemInfo -{ - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] - size_t m_nGlassRawDataSize; - int m_nGlassMaxDataNum; - int m_nBlockMaxDataNum; - int m_nCellMaxDataNum; - int m_nDefectMaxDataNum; - int m_nStackMaxDataNum; - - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] - int m_nGlassDataPoint; - int m_nBlockDataPoint; - int m_nCellDataPoint; - int m_nDefectDataPoint; - int m_nStackDataPoint; - - int m_nSizeOfGlassData; - int m_nSizeOfBlockData; - int m_nSizeOfCellData; - int m_nSizeOfDefectData; - int m_nSizeOfStackData; -}; -struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand -{ - size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� -}; - -class CgrmGlassRawData -{ -public: - CgrmGlassRawData() - { - m_pGlassRawData = NULL; - m_bRefAlloc = FALSE; - }; - - ~CgrmGlassRawData() - { - clear(); - }; - - void clear() - { - if(m_bRefAlloc) { m_pGlassRawData = NULL; return;} - - if(m_pGlassRawData) - { - delete [] m_pGlassRawData; - m_pGlassRawData = NULL; - } - }; - BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false) - { - if(pInfo == NULL) return FALSE; - - if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); - - if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ]; - - m_MemInfo = *pInfo; - - m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize; - - m_nGlassMaxDataNum = pInfo->m_nGlassMaxDataNum ; - m_nBlockMaxDataNum = pInfo->m_nBlockMaxDataNum ; - m_nCellMaxDataNum = pInfo->m_nCellMaxDataNum ; - m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum; - m_nStackMaxDataNum = pInfo->m_nStackMaxDataNum ; - - m_nGlassDataPoint = pInfo->m_nGlassDataPoint ; - m_nBlockDataPoint = pInfo->m_nBlockDataPoint ; - m_nCellDataPoint = pInfo->m_nCellDataPoint ; - m_nDefectDataPoint = pInfo->m_nDefectDataPoint ; - m_nStackDataPoint = pInfo->m_nStackDataPoint ; - - m_nSizeOfGlassData = pInfo->m_nSizeOfGlassData ; - m_nSizeOfBlockData = pInfo->m_nBlockDataPoint ; - m_nSizeOfCellData = pInfo->m_nSizeOfCellData ; - m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData; - m_nSizeOfStackData = pInfo->m_nSizeOfStackData ; - - if(bRefAlloc) - { - m_pGlassRawData = pData; - } - else - { - if(pData) - { - memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize); - } - else - { - memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize ); - } - } - - - m_pGlassData = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint]; - m_pBlockData = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint]; - m_pCellData = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint]; - m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint]; - m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint]; - - m_bRefAlloc = bRefAlloc; - return TRUE; - }; - BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData) - { - if(pInfo == NULL || pData == NULL) return FALSE; - - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� - { - //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; - - if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE; - if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE; - if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE; - if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE; - if(pInfo->m_nSizeOfStackData != m_MemInfo.m_nSizeOfStackData) return FALSE; - - if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE; - if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE; - if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE; - - memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData, pInfo->m_nSizeOfGlassData* 1); - memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData, pInfo->m_nSizeOfBlockData* 1); - memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData, pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum); - memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum); - memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum); - } - else //if() //type old - { - if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; - - if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE; - if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE; - if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE; - if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE; - - memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize); - } - - - return TRUE; - }; - - _grmGlassData* GetGlassData(){return m_pGlassData;}; - _grmBlockData* GetBlockData(int nIndex){return &m_pBlockData[nIndex];}; - _grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];}; - _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; - _grmDitMemInfo* GetMemInfo(){return &m_MemInfo;}; - _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; }; -protected: - _grmDitMemInfo m_MemInfo; - char* m_pGlassRawData; - - _grmGlassData* m_pGlassData; - _grmBlockData* m_pBlockData; - _grmCellData* m_pCellData; - _grmDefectData* m_pDefectData; - _grmDefectData* m_pStackData; - - size_t m_nGlassRawDataSize; - - int m_nGlassMaxDataNum; - int m_nBlockMaxDataNum; - int m_nCellMaxDataNum; - int m_nDefectMaxDataNum; - int m_nStackMaxDataNum; - - int m_nGlassDataPoint; - int m_nBlockDataPoint; - int m_nCellDataPoint; - int m_nDefectDataPoint; - int m_nStackDataPoint; - - int m_nSizeOfGlassData; - int m_nSizeOfBlockData; - int m_nSizeOfCellData; - int m_nSizeOfDefectData; - int m_nSizeOfStackData; - -private: - bool m_bRefAlloc; -}; \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/GlassRawBase.cpp b/ReviewHistory/ReveiwHistory/GlassRawBase.cpp deleted file mode 100644 index b8c7ebe..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawBase.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "StdAfx.h" -#include "GlassRawBase.h" - -#include "akLoggerExt.h" - -CGlassRawBase::CGlassRawBase(void) -{ -} - -CGlassRawBase::~CGlassRawBase(void) -{ -} - -BOOL CGlassRawBase::WriteBinFile( CgrmGlassRawData* pData ) -{ - AKLOG("WriteBinFile Start"); - CString strFileName; - strFileName.Format("%s\\%s", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - FILE* pf = fopen(strFileName.GetBuffer(0), "wb"); - if(pf) - { - fwrite(pData->GetMemInfo(), sizeof(_grmDitMemInfo), 1, pf); - - fwrite(pData->GetGlassData(), pData->GetMemInfo()->m_nSizeOfGlassData, sizeof(char), pf); - - for(int i=0; i<pData->GetGlassData()->m_nCellNum; i++) - { - fwrite(pData->GetCellData(i), pData->GetMemInfo()->m_nSizeOfCellData, sizeof(char), pf); - } - - for(int i=0; i<pData->GetGlassData()->m_nDefectNum; i++) - { - fwrite(pData->GetDefectData(i), pData->GetMemInfo()->m_nSizeOfDefectData, sizeof(char), pf); - } - - fclose(pf); - } - else - { - AKLOG("WriteBinFile Fail"); - return FALSE; - } - AKLOG("WriteBinFile Finish"); - return TRUE; -} - -BOOL CGlassRawBase::ReadBinFile( CgrmGlassRawData* pData ) -{ - CString strFileName; - strFileName.Format("%s\\%s", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - FILE* pf = fopen(strFileName.GetBuffer(0), "rb"); - if(pf) - { - _grmDitMemInfo MemInfo; - fread(&MemInfo, sizeof(_grmDitMemInfo), 1, pf); - - //pData->ImportGlassRaw(pData->GetMemInfo(), NULL); - BOOL bFileFormDiff = FALSE; - bFileFormDiff = FALSE; - { - if(pData->GetMemInfo()->m_nSizeOfGlassData != MemInfo.m_nSizeOfGlassData) bFileFormDiff |= TRUE; - if(pData->GetMemInfo()->m_nSizeOfBlockData != MemInfo.m_nSizeOfBlockData) bFileFormDiff |= TRUE; - if(pData->GetMemInfo()->m_nSizeOfCellData != MemInfo.m_nSizeOfCellData) bFileFormDiff |= TRUE; - if(pData->GetMemInfo()->m_nSizeOfDefectData != MemInfo.m_nSizeOfDefectData) bFileFormDiff |= TRUE; - - //if(pData->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE; - //if(pData->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE; - - if(bFileFormDiff) {fclose(pf); return FALSE;} - } - - fread(pData->GetGlassData(), pData->GetMemInfo()->m_nSizeOfGlassData, sizeof(char), pf); - - bFileFormDiff = FALSE; - { - if(pData->GetMemInfo()->m_nCellMaxDataNum < pData->GetGlassData()->m_nCellNum) bFileFormDiff |= TRUE; - if(pData->GetMemInfo()->m_nDefectMaxDataNum < pData->GetGlassData()->m_nDefectNum) bFileFormDiff |= TRUE; - - if(bFileFormDiff) {fclose(pf); return FALSE;} - } - - for(int i=0; i<pData->GetGlassData()->m_nCellNum; i++) - { - fread(pData->GetCellData(i), pData->GetMemInfo()->m_nSizeOfCellData, sizeof(char), pf); - } - - for(int i=0; i<pData->GetGlassData()->m_nDefectNum; i++) - { - fread(pData->GetDefectData(i), pData->GetMemInfo()->m_nSizeOfDefectData, sizeof(char), pf); - } - - fclose(pf); - } - else - { - return FALSE; - } - - return TRUE; -} - -BOOL CGlassRawBase::ReviewWriteBin(CgrmGlassRawData* pData) -{ - CString strFileName; - strFileName.Format("D:\\DIT_ResultData\\RawBin\\%s", pData->GetGlassData()->m_strFileName); - FILE* pf = fopen(strFileName.GetBuffer(0), "wb"); - if (pf) - { - fwrite(pData->GetMemInfo(), sizeof(_grmDitMemInfo), 1, pf); - - fwrite(pData->GetGlassData(), pData->GetMemInfo()->m_nSizeOfGlassData, sizeof(char), pf); - - for (int i = 0; i < pData->GetGlassData()->m_nCellNum; i++) - { - fwrite(pData->GetCellData(i), pData->GetMemInfo()->m_nSizeOfCellData, sizeof(char), pf); - } - - for (int i = 0; i < pData->GetGlassData()->m_nDefectNum; i++) - { - fwrite(pData->GetDefectData(i), pData->GetMemInfo()->m_nSizeOfDefectData, sizeof(char), pf); - } - - fclose(pf); - } - else - { - return FALSE; - } - - return TRUE; -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/GlassRawBase.h b/ReviewHistory/ReveiwHistory/GlassRawBase.h deleted file mode 100644 index 2f46477..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawBase.h +++ /dev/null @@ -1,75 +0,0 @@ -#pragma once - -#include "DitGlassRawStruct.h" - -////////////////////////////////////////////////////////////////////////// -// Recipe占쏙옙占쏙옙 Server占쏙옙 Inspector占쏙옙 占쏙옙占쏙옙占싹댐옙 占쏙옙占쏙옙占쏙옙占쏙옙. -enum ThreadCount { Thread_1 = 0, Thread_2, Thread_4, Thread_6, Thread_8, Thread_11, Thread_12, Thread_22, Thread_24 }; -enum CameraType { CamType_Unknown = 0, CamType_Transfer, CamType_Reflex }; -enum ScanCoordinate { SC_XCoord = 0, SC_YCoord }; // 占쏙옙캔占쏙옙占쏙옙. 占쏙옙占쏙옙 占쏙옙표 占쏙옙占쏙옙占� 占쌩울옙. -enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right }; // 占쌜억옙占쌘곤옙 占쏙옙 占쏙옙캔 占쏙옙占쏙옙. -enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 占쏙옙占쏙옙 Scan 占쏙옙占쏙옙. -enum ScanType { ST_SingleScan = 0, ST_DualScan }; // SingleScan - 占쌤뱄옙占쏙옙, DualScan - 占쏙옙占쏙옙占� -enum GlassDirection { GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; -enum AcqMode { Acq_Unknown = 0, Acq_Grab, Acq_Snap, Acq_Matrox, Acq_Simul }; -enum FindBoundary { FB_NotFind = 0, FB_PitchMatching, FB_ManualMatching }; -enum InspectionMethod { IM_Convolution = 0, IM_HProjection, IM_VProjection, IM_ImageMatching }; -enum DefectLocation { DefectLoc_Pattern = 0, DefectLoc_Crack, DefectLoc_BM, DefectLoc_ASG, DefectLoc_PAD, DefectLoc_C2C, DefectLoc_EdgeLine, DefectLoc_Proj, DefectLoc_Chip, DefectLoc_Corner }; -enum CellLineType { CellLine_Gate = 0, CellLine_Data }; -enum XByXType { OneByOne = 0, TwoByTwo }; -enum DefectFiltering { Filtering_NO = 0, Filtering_CO, Filtering_Cutoff, Filtering_DXDY, Filtering_TD, Filtering_FALSE }; // Filtering_CO : Cosmic Ray FALSE -enum ALIGN_MARK_CLASSIFY { eAMC_First = 0, eAMC_Second }; -////////////////////////////////////////////////////////////////////////// -// Defect占쏙옙 占쏙옙占실댐옙 타占쌉듸옙. -enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown }; -enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; -enum SERVER_DefectJudgementType { JudgementType_OK = 0, JudgementType_TR, JudgementType_PR, JudgementType_UNKNOWN }; -enum SERVER_DefectSubType { DefectSubType_Normal = 0, DefectSubType_MC, DefectSubType_Mask, DefectSubType_Common, DefectSubType_NoDefect }; -enum SERVER_DefectBDType { DefectBDType_Unknown = 0, DefectBDType_Bright = 1, DefectBDType_Dark = 2, DefectBDType_Both = 64, DefectBDType_Both_B = 65 }; -enum SERVER_DefectPeakType { PeakType_Unknown = 0, PeakType_Low, PeakType_Center, PeakType_High, PeakType_OverHigh }; -enum StackInfo { Stack_Unknown = 0, Stack_TD, Stack_SD, Stack_PD, Stack_SP, Stack_CD }; // lmk 2012.12.21 CD (A2E CurrentData) -enum DefectShowOption { DefectShow_Type, DefectShow_StackFlag, DefectShow_StackStep, DefectShow_Size, DefectShow_Judgement, DefectShow_Code }; - -enum ClassificationType { ClassType_None = 0, ClassType_PI_Over = 1, ClassType_PI_Under = 2, ClassType_TFE_Circle = 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle }; -enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 }; - -//choigudal jude fix 2012.03.07 -enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 占쌩곤옙 -enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 }; -enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX }; -enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX }; -enum GlassCode_TSP { A_SET = 0, B_SET, C_SET, D_SET, MAX_SET };//2016.07.11 LHS -enum DefectShape { CIRCLE = 0, LINE };//2016.07.13 LHS -enum AAILightSource { TRANSLIGHT = 5, REFLIGHT, BACKLIGHT };//2016.07.12 LHS - -enum CAMTYPE { _eCT_Reflex = 0, _eCT_Transfer }; - -class CGlassRawBase -{ -public: - CGlassRawBase(void); - virtual ~CGlassRawBase(void); - - static char* GetClassName(){return "Base";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData){return TRUE;}; - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData){return TRUE;}; - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData){return TRUE;}; - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData){return TRUE;}; - virtual BOOL SequenceCustomizeReview(CgrmGlassRawData* pData){return TRUE;}; - - virtual BOOL WriteBinFile(CgrmGlassRawData* pData); - virtual BOOL ReadBinFile(CgrmGlassRawData* pData); - - virtual BOOL ReviewWriteBin(CgrmGlassRawData* pData); - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData){return TRUE;}; - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - virtual BOOL SequenceFtpUpload(char* pRawFileName){return TRUE;}; - - virtual void NotifyUpdateOptionInfo(){}; - - - -}; diff --git a/ReviewHistory/ReveiwHistory/GlassRawCEC.cpp b/ReviewHistory/ReveiwHistory/GlassRawCEC.cpp deleted file mode 100644 index f51188a..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCEC.cpp +++ /dev/null @@ -1,96 +0,0 @@ -#include "StdAfx.h" -#include "GlassRawCEC.h" -#include "akLoggerExt.h" - -CGlassRawCEC::CGlassRawCEC(void) -{ -} - -CGlassRawCEC::~CGlassRawCEC(void) -{ -} - -BOOL CGlassRawCEC::SequenceGlassLoading( CgrmGlassRawData* pData ) -{ - //나중에 스택파일 읽기 처리도 여기서 하게 하면 좋을듯 [김태현 2018/11/14] - return TRUE; -} - -BOOL CGlassRawCEC::SequenceInspectEnd( CgrmGlassRawData* pData ) -{ - WriteAOIFile(pData); - - return TRUE; -} - -BOOL CGlassRawCEC::SequenceReviewStart( CgrmGlassRawData* pData ) -{ - return TRUE; -} - -BOOL CGlassRawCEC::SequenceReviewEnd( CgrmGlassRawData* pData ) -{ - WriteAOIFile(pData); - - return TRUE; -} - - -BOOL CGlassRawCEC::WriteAOIFile( CgrmGlassRawData* pData ) -{ - BOOL bResult = TRUE; - - - bResult &= MakeAOIFile(pData); - bResult &= MakeAnaFile(pData); - - AKLOG("WriteAOIFile Complete"); - return TRUE; -} - -BOOL CGlassRawCEC::MakeAOIFile( CgrmGlassRawData* pData ) -{ - CString strFilePathName; - strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) return FALSE; - - for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) - { - _grmCellData* pCell = pData->GetCellData(iCell); - - fprintCell(pf, pCell); - } - - fprintf(pf, "<HEAD DEFECE> sdlkfjlsd sdlkflsdkjf sdlkfjslkdjf sldkfjsdf\n"); - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - - fprintDefect(pf, pDefect); - } - - AKLOG("MakeAOIFile Complete"); - fclose(pf); - return TRUE; -} - -BOOL CGlassRawCEC::MakeAnaFile( CgrmGlassRawData* pData ) -{ - CString strFilePathName; - strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - - AKLOG("MakeAnaFile Complete"); - return TRUE; -} - -void CGlassRawCEC::fprintDefect( FILE* pf, _grmDefectData* pData ) -{ - //defect pos - fprintf(pf, "%d ", pData->m_nUMCenterAlignX); //defect pos - - fprintf(pf, "%d ", pData->m_nUMCenterAlignX); - - fprintf(pf, "\n"); -} diff --git a/ReviewHistory/ReveiwHistory/GlassRawCEC.h b/ReviewHistory/ReveiwHistory/GlassRawCEC.h deleted file mode 100644 index 41dfd07..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCEC.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" - -class CGlassRawCEC : public CGlassRawBase -{ -public: - CGlassRawCEC(void); - ~CGlassRawCEC(void); - - static char* GetClassName(){return "CEC_PANDA";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData); - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData); - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData); - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - BOOL MakeAOIFile(CgrmGlassRawData* pData); - BOOL MakeAnaFile(CgrmGlassRawData* pData); - - void fprintCell(FILE* pf, _grmCellData* pData){}; - void fprintDefect(FILE* pf, _grmDefectData* pData); -}; diff --git a/ReviewHistory/ReveiwHistory/GlassRawCPJT.cpp b/ReviewHistory/ReveiwHistory/GlassRawCPJT.cpp deleted file mode 100644 index 4b6b6bb..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCPJT.cpp +++ /dev/null @@ -1,2279 +0,0 @@ -癤�#include "StdAfx.h" -#include "GlassRawCPJT.h" -#include "akLoggerExt.h" -#include "MacroResultFile.h" -#include "akCore/akFileUtil.h" -#include "akGridData.h" - -//#include "AOIDefinitionType.h" -//#include "AOIDefinition.h" - -#define LOCAL_INDEX_PATH "D:\\DIT_ResultData\\Index\\" -#define LOCAL_REV_IMAGE_PATH "D:\\ResultData\\UploadImage\\" -#define LOCAL_AOI_IMAGE_PATH "D:\\Image\\Defect\\" -#define LOCAL_MURA_IMAGE_PATH "D:\\DIT_ResultData\\Mura\\IMG\\" -#define LOCAL_DEEP_PATH "D:\\DIT_ResultData\\Deeplearning\\" - -#define LOCAL_RTMS_INFO_PATH "D:\\RTMS_TEMP\\" - -#define LOCAL_RAWPATH_INFO_INI_PATH "D:\\ResultData\\" -#define RAWINFO_FILE_NAME "RESULT_INFO.ini" - -#define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" -#define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" -#define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" -#define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" - -#define NETWORK_AOIRAWFILE_SUB_PATH "\\\\126.100.100.1\\d\\Raw_im\\" -#define NETWORK_AOI_IMAGE_PATH "\\\\126.100.100.1\\d\\Image\\Defect\\" -//0404NWH -#define NETWORK_MURARAW_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\RAW" //0405nwh -#define NETWORK_MURA_IMAGE_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\IMG" //0405nwh - -char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - -void _TimeDelay(int delay) -{ - MSG msg; - BOOL fRst = FALSE; - - clock_t lBlockTime = delay + clock(); - - while (lBlockTime > clock()) - { - fRst = (BOOL)PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); - if (fRst) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - Sleep(10); - } -} - -CGlassRawCPJT::CGlassRawCPJT(void) -{ - CreateDirectory("D:\\RTMS_Signal", NULL); - CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL); - CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL); - CreateDirectory("D:\\Raw_im", NULL); - m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); - - m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); - m_nWriteRawDefectIdx = 1; - m_bReviewEndCheck = FALSE; -} - -CGlassRawCPJT::~CGlassRawCPJT(void) -{ -} - -BOOL CGlassRawCPJT::SequenceGlassLoading( CgrmGlassRawData* pData ) -{ - //�뒪�깮湲곕뒫 - if(m_StackResult.getStackUse()) - { - //201218 CJH - Stack Download �떆�룄 - SendMessageFTPDownloadStack(pData->GetGlassData()); - - m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID); - } - - - return TRUE; -} - -BOOL CGlassRawCPJT::SequenceInspectEnd( CgrmGlassRawData* pData ) -{ - m_bReviewEndCheck = FALSE; - //210128 - m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); - pData->GetGlassData()->m_tmReviewEnd = m_tmReviewEnd; // Insp End �떆 Raw �뾽濡쒕뱶濡�, E_TIME, LD_TIME �엯�젰 [ 21-03-18 KJG ] - m_tmFileCreateTime = CTime::GetCurrentTime(); - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - { - _grmGlassData* pGlassData = pData->GetGlassData(); - CTime CurrTime = pGlassData->m_tmGlassLoading; - CString strTime=_T(""), strFileName=_T(""); - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.bin", pGlassData->m_strGlassID, pGlassData->m_strStepID, strTime.GetBuffer(0)); - - strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0)); - } - strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - - if(!WriteBinFile(pData)) - return FALSE; - - - if (1) ReadMuraFile(pData); - - - if (WriteAOIFile(pData) == FALSE) - return FALSE; - - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - _TimeDelay(5000); // �씠誘몄� 蹂듭궗 �떆媛� ��湲� - //210218 CJH - 寃��궗 醫낅즺�떆 寃곌낵�뙆�씪 諛� CCD Image �뾽濡쒕뱶 - SendMessageFTPUploadRaw(pData->GetGlassData()); - SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh - - return TRUE; -} - -BOOL CGlassRawCPJT::SequenceReviewStart( CgrmGlassRawData* pData ) -{ - //210128 - m_tmReviewStart = m_tmReviewEnd = CTime::GetCurrentTime(); - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH); - - //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - CString strFindFile; - int nCloseTime = 600*100000;//sec - int nReTryTime = 30; - { - CTime tmReviewLoading = CTime::GetCurrentTime(); - CString strWild; - - strWild.Format("%s\\%s_%s_*.bin", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID,pData->GetGlassData()->m_strStepID); - CakFileUtil akFileFinder; - while(nReTryTime--) - { - akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); - VECFINDDATA* pFindData = akFileFinder.getFindData(); - int nFileNamePos = strlen(akFileFinder.getProcessPath()); - std::map<LONGLONG, CString> mapSpanFileName; - for(int i=0; i<pFindData->size(); i++) - { - char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; - { - CakParser parser; - parser.process(pFileName, "_."); - if(parser.getTokNum() < 4) continue; - - int nDataTime[8]={}; - { - int nTokIndex=0; - const char* pGlassId = parser.getTokStr(nTokIndex++); - const char* pStepId = parser.getTokStr(nTokIndex++); - char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; - char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; - - nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; - nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; - nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; - nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; - nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; - nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; - } - - CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] ); - CTimeSpan tmSpan = tmReviewLoading-tmTemp; - mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); - } - } - - if(mapSpanFileName.empty() == FALSE) - { - if(mapSpanFileName.begin()->first < nCloseTime) - { - //媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17] - strFindFile = mapSpanFileName.begin()->second; - break; - } - } - akFileFinder.clear(); - Sleep(100); - } - } - - if(strFindFile.IsEmpty()) return FALSE; - - strcpy(pData->GetGlassData()->m_strFileName, strFindFile.GetBuffer(0)); - - - if(!ReadBinFile(pData)) - return FALSE; - - strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - pData->GetGlassData()->m_tmReviewLoading = m_tmReviewStart; - - return TRUE; -} - - -BOOL CGlassRawCPJT::SequenceReviewEnd( CgrmGlassRawData* pData ) -{ - m_bReviewEndCheck = TRUE; - m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); - m_tmFileCreateTime = CTime::GetCurrentTime(); - pData->GetGlassData()->m_tmReviewEnd = m_tmReviewEnd; - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH); - - if(1) ReadMuraFile(pData); - - if(WriteAOIFile(pData) == FALSE) - return FALSE; - - //210126 CJH - Review End�뿉�꽌留� RTMS 寃곌낵�뙆�씪 �깮�꽦�븯�룄濡� 蹂�寃� - if (m_GlassRawRTMS.WriteAOIFile(pData) == FALSE) - return FALSE; - - if(1) - { - _grmGlassData* pGlassData = pData->GetGlassData(); - - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE);//0405nwh - - } - - - - - return TRUE; -} - -BOOL CGlassRawCPJT::SequenceFtpUpload(char* pRawFilePathName) -{ - // Manual Upload 湲곕뒫 [21-02-05 KJG] - CTime tmFileCreate; - _grmGlassData GlassData; - _grmGlassData* pGlassData = &GlassData; - - //�젙蹂� �뼸�뼱�삤湲� [源��깭�쁽 2019/1/25] - char* pFileName = CakFileUtil::getFileName(pRawFilePathName); - char* pext = CakFileUtil::getFileExt(pRawFilePathName); - - if (!strcmp(pext, "") == FALSE) return FALSE; // �솗�옣�옄媛� �뾾�쓬 - - CakParser parser; - FILE* pf = fopen(pRawFilePathName, "r"); - if (pf) - { - CString strParse, strLDTime; - char buffer[512]; - fgets(buffer, 512, pf); - fgets(buffer, 512, pf); - fgets(buffer, 512, pf); - fgets(buffer, 512, pf); - parser.process(buffer, " "); - - if (parser.getTokNum() < 20) return FALSE; - strParse = parser.getTokStr(0); - if (strParse != "DATA") return FALSE; - strParse = parser.getTokStr(1); - if (strParse != "PANEL") return FALSE; - - strcpy(pGlassData->m_strProcessID, ""); - strcpy(pGlassData->m_strProductID, ""); - strcpy(pGlassData->m_strLotID, ""); - strcpy(pGlassData->m_strStepID, ""); - strcpy(pGlassData->m_strGlassID, ""); - - strcpy(pGlassData->m_strProcessID, parser.getTokStr(4)); - strcpy(pGlassData->m_strProductID, parser.getTokStr(5)); - strcpy(pGlassData->m_strLotID, parser.getTokStr(5)); // C-PJT - m_strLotID = m_strProductID - strcpy(pGlassData->m_strStepID, parser.getTokStr(6)); - strcpy(pGlassData->m_strGlassID, parser.getTokStr(9)); - strLDTime = parser.getTokStr(19); - - if (pGlassData->m_strProcessID == "" || pGlassData->m_strProductID == "" || pGlassData->m_strLotID == "" || pGlassData->m_strStepID == "" || pGlassData->m_strGlassID == "") - { - AKLOG("Manual Upload Fail : Parsing Data is Empty"); - return FALSE; - } - int nYear = _ttoi(strLDTime.Left(4)); - int nMon = _ttoi(strLDTime.Mid(4, 2)); - int nDay = _ttoi(strLDTime.Mid(6, 2)); - int nHour = _ttoi(strLDTime.Mid(8, 2)); - int nMin = _ttoi(strLDTime.Mid(10, 2)); - int nSec = _ttoi(strLDTime.Mid(12, 2)); - pGlassData->m_tmGlassLoading = CTime(nYear, nMon, nDay, nHour, nMin, nSec); - - m_tmFileCreateTime = CTime::GetCurrentTime(); - strcpy(pGlassData->m_strPath, NETWORK_AOIRAWDFS_PATH); - - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - AKLOG("Manual Success : %s File Send FTPUploader Command", pRawFilePathName); - - } - else - { - AKLOG("Manual Upload Fail : Can't Open File"); - return FALSE; - } - - fclose(pf); - - - return TRUE; -} - - -BOOL CGlassRawCPJT::WriteAOIFile( CgrmGlassRawData* pData ) -{ - BOOL bResult = TRUE; - - bResult &= MakeAOIFile(pData); - - m_GlassRawAna.MakeAnaFile(pData); - //m_GlassRawRTMS.WriteAOIFile(pData); - - AKLOG("WriteAOIFile Complete"); - return bResult; -} - -BOOL CGlassRawCPJT::MakeAOIFile( CgrmGlassRawData* pData ) -{ - AKLOG("MakeAOIFile Start"); - m_nWriteRawDefectIdx = 1; - - _grmGlassData* pGlass = pData->GetGlassData(); - CString strFilePathName; - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmReviewEnd; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s", pGlass->m_strGlassID); // �떊湲곕� �봽濡� �슂泥� �솗�옣�옄 �궘�젣 - } - - strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); - - // 湲��씪�뒪 ID留� 議댁옱�븯�뿬 �옱寃��궗 �떆 �뙆�씪 �깮�꽦 �떎�뙣. �궘�젣�븳�떎 - DeleteFile(strFilePathName); - //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - - - CString strBuffer; - CString strLine; - - ////////////////////////////////////////////////////////////////////////// - //HEDER ITEM - { - makeDataHeader(strLine, pGlass); - fprintf(pf, "%s\n", strLine.GetBuffer(0)); - } - - - ////////////////////////////////////////////////////////////////////////// - //GLASSDATA - { - makeDataGlass(strLine, pGlass); - fprintf(pf, "%s\n", strLine.GetBuffer(0)); - } - - ////////////////////////////////////////////////////////////////////////// - //CELL & DEFECT DATA - { - - //make - { - for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) - { - _grmCellData* pCell = pData->GetCellData(iCell); - makeDataCell(strLine, pData, pCell); - fprintf(pf, "%s\n", strLine); - - for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if (pDefect->m_nCellIdx != iCell) continue; - //210203 CJH - CutOff ���긽 寃곌낵�뙆�씪 �옉�꽦 �젣�쇅 - if (pDefect->m_bDefectCutoff == TRUE) continue; - - if (makeDataDefect(strLine, pData, pDefect)) - { - fprintf(pf, "%s\n", strLine); - } - } - - } - } - } - - - - - - AKLOG("MakeAOIFile Complete : [%s]", strFilePathName.GetBuffer(0)); - fclose(pf); - return TRUE; -} - -void CGlassRawCPJT::makeDataHeader( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - CString strValue; - - strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea - strLine += strValue; strLine += "\n"; - strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 CORNER_GRAY_0 AVG_AMP_0 FFT_VAR_0 FFT_VAH_0 FFT_VAQ_0 FFT_PK_0 AVG_GRAY_1 PORTION_1 CORNER_GRAY_1 AVG_AMP_1 FFT_VAR_1 FFT_VAH_1 FFT_VAQ_1 FFT_PK_1 AVG_GRAY_2 PORTION_2 CORNER_GRAY_2 AVG_AMP_2 FFT_VAR_2 FFT_VAH_2 FFT_VAQ_2 FFT_PK_2 AVG_GRAY_3 PORTION_3 CORNER_GRAY_3 AVG_AMP_3 FFT_VAR_3 FFT_VAH_3 FFT_VAQ_3 FFT_PK_3"; //54ea 21-06-21 Mura Data 異붽� - strLine += strValue; strLine += "\n"; - //210405 - //ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK - strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea - strLine += strValue; - -} -#define SPRINTRAWSTART char strItemValue[1024];int nItemValueLen, nItemValuePos = 0;memset(strItemValue, ' ', sizeof(char)*1024) -#define SPRINTRAW(ITEMSIZE, fmt, ...) nItemValueLen = sprintf(strItemValue+nItemValuePos, fmt,##__VA_ARGS__); strItemValue[nItemValuePos+ nItemValueLen] = ' ';nItemValuePos+=ITEMSIZE+1 -#define SPRINTRAWEND strItemValue[nItemValuePos - 1] = 0; strLine = strItemValue -void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) -{ - SPRINTRAWSTART; - - CString strValue; - - /* PANEL ITEM - 01 4 ITEM // ITEM Separator - 02 5 PANEL // PANEL Separator - 03 5 MODULETYPE // Module Type - 04 27 MODULEID // Module ID - 05 20 PROCESSID // ProcessID - 06 20 PRODUCTID // ProductID - 07 10 STEPID // StepID - 08 2 PROD_TYPE // Prod Type - 09 12 BATCHID // Batch ID - 10 12 H_PANELID // Host Panel ID - 11 12 E_PANELID // Panel ID Reading by VCR - 12 12 P_PANELID // Pair Panel ID - 13 16 OPERID // Perator ID or Module ID - 14 3 COMP_COUNT // Cell Count - 15 16 PPID // PPID (Recipe Name) - 16 4 GRADE // Grade (Judgement) - 17 4 CODE // Grade Code (Judgement Code) - 18 4 R_GRADE // Grade by Operator (Re-Judgement) - 19 16 MAP_IMAGE // Map Image File Name - 20 14 L_TIME // Cassette or Conveyor�뿉�꽌 OUT�맂 �떆媛� - 21 14 U_TIME // Cassette or Conveyor�뿉�꽌 IN�맂 �떆媛� - 22 14 S_TIME // Stage�뿉�꽌 寃��궗/怨꾩륫 �떆�옉�맂 �떆媛� - 23 14 E_TIME // Stage�뿉�꽌 寃��궗/怨꾩륫 醫낅즺�맂 �떆媛� - 24 12 T_DEFECT // Common Item 1 - Total Defect Count - 25 12 TR // Panel �젙蹂� 02 - 26 12 PR // Panel �젙蹂� 03 - 27 12 TB // Panel �젙蹂� 04 - 28 12 TW // Panel �젙蹂� 05 - 29 12 RB // Panel �젙蹂� 06 - 30 12 RW // Panel �젙蹂� 07 - 31 12 T_STACK // SD+SP �닔 - 32 12 BMDF // Panel �젙蹂� 09 -> 蹂�寃� MAX_AVG_GRAY 04/12 - 33 12 CJ // Panel �젙蹂� 10 -> 蹂�寃� MAX_PORTION 04/12 - 34 12 OK_CELL // OK Cell Count - 35 12 RJ_CELL // RJ Cell Count - 36 12 RW_CELL // RW Cell Count - 37 12 NR_CELL // NR Cell Count - 38 12 MASK_CELL // MASK Cell Count - CST ID - 39 12 A_CELL // �씠�긽 Cell Count - SLOT NO - 40 12 P_CELL // Pattern Shift Cell Count - JOB END - 41 12 TD_DEFECT // Total Defect Count -> TD Defect Count - 42 12 SD_DEFECT // SD Defect Count - 43 12 PD_DEFECT // PD Defect Count - 44 12 SP_DEFECT // SP Defect Count - 45 12 PAD_GATE // PAD Gate 遺덈웾 �닔 - 46 12 PAD_DATA // PAD Data 遺덈웾 �닔 - 47 12 M_DEFECT // MASK 遺덈웾 �닔 - 48 12 C_DEFECT // COMMON 遺덈웾 - 49 12 BR_DEFECT // SCRATCH 遺덈웾 �닔 - 50 12 CRACK // Crack 遺덈웾 �닔 - Image 珥ъ긽 媛��닔 - 51 12 P_SHIFT // Pattern Shift 遺덈웾 �닔 - �젅�떆�뵾 �씠由� - */ - - ////////////////////////////////////////////////////////////////////////// - // [源��깭�쁽2020/9/15] - // SPRINTRAW(�뜲�씠�꽣 �겕湲�, "VALUE"); - - // 01 4 ITEM // ITEM Separator - SPRINTRAW(4, "DATA"); - // 02 5 PANEL // PANEL Separator - SPRINTRAW(5, "PANEL"); - // 03 5 MODULETYPE // Module Type - /*SPRINTRAW(5, "*");*/ - if (strlen(pGlassData->m_strEquipID) == 0) - { - SPRINTRAW(5, "*"); - } - else - { - CString temp = pGlassData->m_strEquipID; - SPRINTRAW(5, "%s", temp.Left(5)); - } - // 04 27 MODULEID // Module ID - if (strlen(pGlassData->m_strOperID) == 0) - { - SPRINTRAW(27, "*"); - } - else - { - SPRINTRAW(27, "%s", pGlassData->m_strOperID); - } - // 05 20 PROCESSID // ProcessID - if (strlen(pGlassData->m_strProcessID) == 0) - { - SPRINTRAW(20, "*"); - } - else - { - SPRINTRAW(20, "%s", pGlassData->m_strProcessID); - } - // 06 20 PRODUCTID // ProductID - if (strlen(pGlassData->m_strProductID) == 0) - { - SPRINTRAW(20, "*"); - } - else - { - SPRINTRAW(20, "%s", pGlassData->m_strProductID); - } - // 07 10 STEPID // StepID - if (strlen(pGlassData->m_strStepID) == 0) - { - SPRINTRAW(10, "*"); - } - else - { - SPRINTRAW(10, "%s", pGlassData->m_strStepID); - } - // 08 2 PROD_TYPE // Prod Type - if (strlen(pGlassData->m_strProdType) == 0) - { - SPRINTRAW(2, "*"); - } - else - { - SPRINTRAW(2, "%s", pGlassData->m_strProdType); - } - // 09 12 BATCHID // Batch ID - Glass ID �븵 6�옄由� - strValue = pGlassData->m_strGlassID; - SPRINTRAW(12, "%s", strValue.Left(6)); - // 10 12 H_PANELID // Host Panel ID - if (strlen(pGlassData->m_strGlassID) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strGlassID); - } - // 11 12 E_PANELID // Panel ID Reading by VCR - if (strlen(pGlassData->m_strEPPID) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strEPPID); - } - // 12 12 P_PANELID // Pair Panel ID - if (strlen(pGlassData->m_strPairHPanelID) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strPairHPanelID); - } - // 13 16 OPERID // Perator ID or Module ID - if (strlen(pGlassData->m_strOperID) == 0) - { - SPRINTRAW(16, "*"); - } - else - { - SPRINTRAW(16, "%s", pGlassData->m_strOperID); - } - // 14 3 COMP_COUNT // Cell Count - SPRINTRAW(3, "%d", pGlassData->m_nCellNum); - // 15 16 PPID // PPID (Recipe Name) - if (strlen(pGlassData->m_strPPID) == 0) - { - SPRINTRAW(16, "*"); - } - else - { - SPRINTRAW(16, "%s", pGlassData->m_strPPID); - } - // 16 4 GRADE // Grade (Judgement) - if (strlen(pGlassData->m_strGlassJudge) == 0) - { - SPRINTRAW(4, "*"); - } - else - { - SPRINTRAW(4, "%s", pGlassData->m_strGlassJudge); - } - // 17 4 CODE // Grade Code (Judgement Code) - if (strlen(pGlassData->m_strGlassCode) == 0) - { - SPRINTRAW(4, "*"); - } - else - { - SPRINTRAW(4, "%s", pGlassData->m_strGlassCode); - } - // 18 4 R_GRADE // Grade by Operator (Re-Judgement) - SPRINTRAW(4, "*"); - // 19 16 MAP_IMAGE // Map Image File Name -// if (strlen(pGlassData->m_strFileName) == 0) -// { -// SPRINTRAW(16, "*"); -// } -// else -// { -// SPRINTRAW(16, "%s", pGlassData->m_strFileName); -// } - SPRINTRAW(16, "map01.jpg"); //Defect Map �옄由우닔媛� 20�옄由ш� �꽆�뒗�떎.. - // 20 14 L_TIME // Cassette or Conveyor�뿉�꽌 OUT�맂 �떆媛� - strValue.Format("%04d%02d%02d%02d%02d%02d" // START_TIME - , pGlassData->m_tmGlassLoading.GetYear() - , pGlassData->m_tmGlassLoading.GetMonth() - , pGlassData->m_tmGlassLoading.GetDay() - , pGlassData->m_tmGlassLoading.GetHour() - , pGlassData->m_tmGlassLoading.GetMinute() - , pGlassData->m_tmGlassLoading.GetSecond()); - SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); - // 21 14 U_TIME // Cassette or Conveyor�뿉�꽌 IN�맂 �떆媛� - strValue.Format("%04d%02d%02d%02d%02d%02d" // E_TIME - , pGlassData->m_tmReviewEnd.GetYear() - , pGlassData->m_tmReviewEnd.GetMonth() - , pGlassData->m_tmReviewEnd.GetDay() - , pGlassData->m_tmReviewEnd.GetHour() - , pGlassData->m_tmReviewEnd.GetMinute() - , pGlassData->m_tmReviewEnd.GetSecond()); - SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); - // 22 14 S_TIME // Stage�뿉�꽌 寃��궗/怨꾩륫 �떆�옉�맂 �떆媛� - strValue.Format("%04d%02d%02d%02d%02d%02d" // START_TIME - , pGlassData->m_tmInspectionStart.GetYear() - , pGlassData->m_tmInspectionStart.GetMonth() - , pGlassData->m_tmInspectionStart.GetDay() - , pGlassData->m_tmInspectionStart.GetHour() - , pGlassData->m_tmInspectionStart.GetMinute() - , pGlassData->m_tmInspectionStart.GetSecond()); - SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); - // 23 14 E_TIME // Stage�뿉�꽌 寃��궗/怨꾩륫 醫낅즺�맂 �떆媛� - strValue.Format("%04d%02d%02d%02d%02d%02d" // E_TIME - , pGlassData->m_tmReviewEnd.GetYear() - , pGlassData->m_tmReviewEnd.GetMonth() - , pGlassData->m_tmReviewEnd.GetDay() - , pGlassData->m_tmReviewEnd.GetHour() - , pGlassData->m_tmReviewEnd.GetMinute() - , pGlassData->m_tmReviewEnd.GetSecond()); - SPRINTRAW(14, "%s", (LPSTR)(LPCTSTR)strValue); - // 24 6 T_DEFECT // Common Item 1 - Total Defect Count - SPRINTRAW(12, "%d", pGlassData->m_nDefectNum - pGlassData->m_nCutOffDefectNum); //210203 CJH - Cutoff 寃고븿�� �쟾泥닿컻�닔�뿉�꽌 �젣�쇅�빐以��떎. - // 25 6 TR // Panel �젙蹂� 02 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeTR); - // 26 6 PR // Panel �젙蹂� 03 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgePR); - // 27 6 TB // Panel �젙蹂� 04 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTB); - // 28 6 TW // Panel �젙蹂� 05 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTW); - // 29 6 RB // Panel �젙蹂� 06 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRB); - // 30 6 RW // Panel �젙蹂� 07 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRW); - // 31 6 T_STACK // Panel �젙蹂� 08 SD+SP �닔 �엯�젰 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD + pGlassData->m_nDefectNumStackSP); - //32 6 BMDF // Panel �젙蹂� 09 -> 蹂�寃� MAX_AVG_GRAY 04/12 nwh - if (strlen(pGlassData->m_strMaxAvgGray) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray); - } - // 33 6 CJ // Panel �젙蹂� 10 -> 蹂�寃� MAX_PORTION 04/12 nwh - if (strlen(pGlassData->m_strMaxPortion) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strMaxPortion); - } - // 34 6 OK_CELL // OK Cell Count - SPRINTRAW(12, "*"); - // 35 6 RJ_CELL // RJ Cell Count - SPRINTRAW(12, "*"); - // 36 6 RW_CELL // RW Cell Count - SPRINTRAW(12, "*"); - // 37 6 NR_CELL // NR Cell Count - SPRINTRAW(12, "*"); - // 38 6 MASK_CELL // MASK Cell Count //201215 CJH - CSTID濡� 蹂�寃� - if (strlen(pGlassData->m_strCSTID) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strCSTID); - } - - SPRINTRAW(12, "%d", pGlassData->m_nSlot_No); // SLot_No 異붽� [ 21-03-18 KJG ] - - SPRINTRAW(12, "%d", pGlassData->m_bJob_end); // Job_end 異붽� [ 21-03-18 KJG ] - - // 41 6 TD_DEFECT // TD Defect Count -> �쁽怨듭젙�뿉�꽌 �굹�삩 紐⑤뱺 寃고븿 : Total - SD - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackTD); - // 42 6 SD_DEFECT // SD Defect Count -> TD 寃고븿�뿉�꽌 Stack 寃고븿�쓣 �젣�쇅�븳 寃고븿(�슦由� �꽕鍮꾩뿉�꽌 泥� 諛쒓껄�맂 寃고븿) - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD); - // 43 6 PD_DEFECT // PD Defect Count -> �쁽�옱 怨듭젙�뿉�꽌 寃�異쒕맂 �듅�젙 Partial 寃고븿(�궗�뼇�꽌 �긽�뿉�뒗 Zone�씠�씪 �릺�뼱�엳�쑝�굹 �떎吏덉쟻�쑝濡쒕뒗 Classfication�뿉 �넻怨쇰맂 寃고븿) - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackPD); - // 44 6 SP_DEFECT // SP Defect Count -> �쁽�옱 怨듭젙�뿉�꽌 寃�異쒕맂 �듅�젙 Partial 寃고븿 以�, �씠�쟾 怨듭젙�쓽 Partial 寃고븿�쓣 �젣�쇅�븳 寃고븿 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSP); - // 45 6 PAD_GATE // PAD Gate 遺덈웾 �닔 - SPRINTRAW(12, "*"); - // 46 6 PAD_DATA // PAD Data 遺덈웾 �닔 - SPRINTRAW(12, "*"); - // 47 6 M_DEFECT // MASK 遺덈웾 �닔 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeMD); - // 48 6 C_DEFECT // COMMON 遺덈웾 - SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeCD); - // 49 6 S_DEFECT // SCRATCH 遺덈웾 �닔 - SPRINTRAW(12, "*"); - // 50 6 CRACK // Crack 遺덈웾 �닔 //201217 CJH - Image 珥ъ긽 媛쒖닔濡� 蹂�寃� - //SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack); - SPRINTRAW(12, "%d", pGlassData->m_nReviewNum); - // 51 6 P_SHIFT // Pattern Shift 遺덈웾 �닔 //201217 CJH - Recipe濡� 蹂�寃� - if (strlen(pGlassData->m_strRecipeName) == 0) - { - SPRINTRAW(16, "*"); - } - else if(strlen(pGlassData->m_strRecipeName) <= 16) - { - SPRINTRAW(16, "%s", pGlassData->m_strRecipeName); - } - else if (strlen(pGlassData->m_strRecipeName) > 16) - { - CString temp = pGlassData->m_strRecipeName; // �젅�떆�뵾 17�옄由� �꽆�뼱媛�硫� DCOLL 諛쒖깮�쑝濡� �삁�쇅泥섎━ [ 21-06-02 KJG ] - temp = temp.Left(16); - SPRINTRAW(16, "%s", temp.GetBuffer(0)); - } - - // 52 12 SHRINK // Server or Frame Shrink �룞�옉 �뿬遺� - if (strlen(pGlassData->m_strShrinked) == 0) - { - SPRINTRAW(12, "*"); - } - else - { - SPRINTRAW(12, "%s", pGlassData->m_strShrinked); - } - // 53 12 RAW_CUT // RAW �엯�젰 Defect �닔�웾 �긽�븳 �궗�슜�뿬遺� - if (pGlassData->m_bRawCutoff) - { - SPRINTRAW(12, "USE"); - } - else - { - SPRINTRAW(12, "UNUSE"); - } - - SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] -} - -void CGlassRawCPJT::makeDataCell( CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData ) -{ - SPRINTRAWSTART; - - /* SUBPanel ITEM - 01 4 ITEM // ITEM - 02 8 SUBPANEL // SUBPANEL - 03 12 SUBPANELID // Subpanel ID - 04 7 COORD_X // X Beginnign Coord - 05 7 COORD_Y // Y Beginning Coord - 06 7 SIZE_X // X-axis Size - 07 7 SIZE_Y // Y-axis Size - 08 6 GATELINE // GateLine - 09 6 DATALINE // DataLine - 10 4 GRADE // Grade (Judgement) - 11 4 CODE // Grade Code (Judgement) - 12 4 R_GRADE // Grade by Operator (Re-Judgement) - 13 12 T_DEFECT // Total Defect Count - 14 12 TD_DEFECT // TD Defect Count - 15 12 SD_DEFECT // SD Defect Count - 16 12 PD_DEFECT // PD Defect Count - 17 12 SP_DEFECT // SP Defect Coun - 18 12 PAD_GATE // PAD Gate Defect Count - 19 12 PAD_DATA // PAD Data Defect Count - 20 12 M_DEFECT // MASK Defect Count - 21 12 C_DEFECT // COMMON Defect Count - 22 12 S_DEFECT // SCRATCH Defect Count - 23 12 CRACK // CRACK Defect Count - 24 12 P_SHIFT // Pattern Shift Defect Count - */ - - // 01 4 ITEM // ITEM - SPRINTRAW(4, "DATA"); - // 02 8 SUBPANEL // SUBPANEL - SPRINTRAW(8, "SUBPANEL"); - // 03 12 SUBPANELID // Subpanel ID - //SPRINTRAW(12, "%d", pCellData->m_nCellID); - SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]); - - // 湲��씪�뒪 �썝�젏 湲곗� Y醫뚰몴 諛섎� - // 肄붾꼫而� 湲곗��쑝濡� 寃곌낵�뙆�씪 醫뚰몴媛� �깮�꽦�릺�뒗�뜲 怨좉컼�궗�뿉 紐낇솗�븳 �솗�씤 �븘�슂 - // Server�뒗 紐⑤뱺 醫뚰몴瑜� 湲��씪�뒪 �썝�젏 湲곗��쑝濡� �븯�뒗�뜲 肄붾꼫而� 湲곗��씠 �릺�뼱�빞�븯�뒗吏� 遊먯빞�븿 - // �� �쐞移섎뒗 湲��씪�뒪 �썝�젏, 醫뚰몴�뒗 肄붾꼫而�??? - // 210129 CJH - �� �썝�젏 �쐞移섏뿉 �뵲�씪 醫뚰몴�쐞移� 蹂�寃� LeftTop(1,-1) RightTop(-1,-1) LeftBottom(1,1) RightBottom(-1,1) - if (pCellData->m_nCellXDir == 1) - { - // 04 7 COORD_X // X Beginning Coord - SPRINTRAW(8, "%d", pCellData->m_rectCellLeft); - } - else - { - // 04 7 COORD_X // X Beginning Coord - SPRINTRAW(8, "%d", pCellData->m_rectCellRight); - } - - if (pCellData->m_nCellYDir == 1) - { - // 05 7 COORD_Y // Y Beginning Coord //Top�쓣 �빐�빞 �젣��濡� 媛믪씠 �뱾�뼱媛�...Rect遺��꽣 �옒紐� �뱾�뼱媛��뒗�벏 - SPRINTRAW(8, "%d", pCellData->m_rectCellTop * -1); - } - else - { - // 05 7 COORD_Y // Y Beginning Coord - SPRINTRAW(8, "%d", pCellData->m_rectCellBottom * -1); - } - // 06 7 SIZE_X // X-axis Size - SPRINTRAW(7, "%d", pCellData->m_rectCellRight - pCellData->m_rectCellLeft); - // 07 7 SIZE_Y // Y-axis Size - SPRINTRAW(7, "%d", pCellData->m_rectCellBottom - pCellData->m_rectCellTop); - // 08 6 GATELINE // 珥� GateLine �닔 - SPRINTRAW(6, "%d", pCellData->m_nGateNum); - // 09 6 DATALINE // 珥� DataLine �닔 - SPRINTRAW(6, "%d", pCellData->m_nDataNum); - // 10 4 GRADE // Grade (Judgement) - SPRINTRAW(4, "%s", GetDefectInfoToString(DMT_DefectJudge, pCellData->m_nJudgement)); - - // 11 4 CODE // Grade Code (Judgement) - SPRINTRAW(4, "OOOO"); - // 12 4 R_GRADE // Grade by Operator (Re-Judgement) - SPRINTRAW(4, "*"); - // 13 6 T_DEFECT // Total Defect Count - SPRINTRAW(12, "%d", pCellData->getTotalDefectNum()); - // 14 6 TD_DEFECT // TD Defect Count - total defect - SPRINTRAW(12, "%d", pCellData->m_nDefectTDCount); - // 15 6 SD_DEFECT // SD Defect Count - stack defect - SPRINTRAW(12, "%d", pCellData->m_nDefectSDCount); - // 16 6 PD_DEFECT // PD Defect Count - partial defect - SPRINTRAW(12, "%d", pCellData->m_nDefectPDCount); - // 17 6 SP_DEFECT // SP Defect Count - stack partial - SPRINTRAW(12, "%d", pCellData->m_nDefectSPCount); - // 18 6 PAD_GATE // PAD Gate Defect Count - SPRINTRAW(12, "*"); - // 19 6 PAD_DATA // PAD Data Defect Count - SPRINTRAW(12, "*"); - // 20 6 M_DEFECT // MASK Defect Count - SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeMD); - // 21 6 C_DEFECT // COMMON Defect Count - SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeCD); - - // 22 6 S_DEFECT -> 22 6 PRO_IMAGE 蹂�寃� nwh0404 - if (strlen(pCellData->m_strProImage)) - { - SPRINTRAW(12, "%s", pCellData->m_strProImage); - } - else - { - SPRINTRAW(12,"*"); - } - - // 23 12 AVG_GRAY_0 - if (strlen(pCellData->m_strAvgGray_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 24 12 PORTION_0 - if (strlen(pCellData->m_strPortion_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_0); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 25 12 CORNER_GRAY_0 - if (strlen(pCellData->m_strCorner_Gray_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 26 12 AVG_AMP_0 - if (strlen(pCellData->m_strAvgAmp_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 27 12 FFT_VAR_0 - if (strlen(pCellData->m_strFFTVar_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 28 12 FFT_VAH_0 - if (strlen(pCellData->m_strFFTVah_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 29 12 FFT_VAQ_0 - if (strlen(pCellData->m_strFFTVaq_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 30 12 FFT_PK_0 - if (strlen(pCellData->m_strFFTPK_0)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_0); - } - else - { - SPRINTRAW(12, "*"); - } - - // 31 12 AVG_GRAY_1 - if (strlen(pCellData->m_strAvgGray_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1); - } - else - { - SPRINTRAW(12, "*"); - } - // 32 12 PORTION_1 - if (strlen(pCellData->m_strPortion_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_1); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 33 12 CORNER_GRAY_1 - if (strlen(pCellData->m_strCorner_Gray_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 34 12 AVG_AMP_1 - if (strlen(pCellData->m_strAvgAmp_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 35 12 FFT_VAR_1 - if (strlen(pCellData->m_strFFTVar_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 36 12 FFT_VAH_1 - if (strlen(pCellData->m_strFFTVah_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 37 12 FFT_VAQ_1 - if (strlen(pCellData->m_strFFTVaq_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 38 12 FFT_PK_1 - if (strlen(pCellData->m_strFFTPK_1)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_1); - } - else - { - SPRINTRAW(12, "*"); - } - - // 39 12 AVG_GRAY_2 - if (strlen(pCellData->m_strAvgGray_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2); - } - else - { - SPRINTRAW(12, "*"); - } - // 40 12 PORTION_2 - if (strlen(pCellData->m_strPortion_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_2); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 41 12 CORNER_GRAY_2 - if (strlen(pCellData->m_strCorner_Gray_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 42 12 AVG_AMP_2 - if (strlen(pCellData->m_strAvgAmp_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 43 12 FFT_VAR_2 - if (strlen(pCellData->m_strFFTVar_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 44 12 FFT_VAH_2 - if (strlen(pCellData->m_strFFTVah_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 45 12 FFT_VAQ_2 - if (strlen(pCellData->m_strFFTVaq_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 46 12 FFT_PK_2 - if (strlen(pCellData->m_strFFTPK_2)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_2); - } - else - { - SPRINTRAW(12, "*"); - } - - // 47 12 AVG_GRAY_3 - if (strlen(pCellData->m_strAvgGray_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3); - } - else - { - SPRINTRAW(12, "*"); - } - // 48 12 PORTION_3 - if (strlen(pCellData->m_strPortion_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strPortion_3); - } - else - { - SPRINTRAW(12, "*"); - } - - //kyh 0622 - // 49 12 CORNER_GRAY_3 - if (strlen(pCellData->m_strCorner_Gray_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 50 12 AVG_AMP_3 - if (strlen(pCellData->m_strAvgAmp_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 51 12 FFT_VAR_3 - if (strlen(pCellData->m_strFFTVar_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVar_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 52 12 FFT_VAH_3 - if (strlen(pCellData->m_strFFTVah_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVah_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 53 12 FFT_VAQ_3 - if (strlen(pCellData->m_strFFTVaq_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_3); - } - else - { - SPRINTRAW(12, "*"); - } - - // 54 12 FFT_PK_3 - if (strlen(pCellData->m_strFFTPK_3)) - { - SPRINTRAW(12, "%s", pCellData->m_strFFTPK_3); - } - else - { - SPRINTRAW(12, "*"); - } - - SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] -} - -BOOL CGlassRawCPJT::makeDataDefect( CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData ) -{ - SPRINTRAWSTART; - CString strItem; - /* DEFECT ITEM - // 01 4 ITEM // ITEM - // 02 6 DEFECT // DEFECT - // 03 12 ID // Subpanel ID - // 04 5 DEF_NO // Defect Number of Panel - // 05 7 COORD_X // Defect Location from origin point X - // 06 7 COORD_Y // Defect Location from origin point Y - // 07 6 GATELINE // Defect Gateline - // 08 6 DATALINE // Defect Dataline - // 09 4 SIZE_S // Defect Size (Square) - // 10 4 SIZE_W // Defect Size (Width) - // 11 4 SIZE_L // Defect Size (Length) - // 12 4 SIZE_H // Defect Size (Height) - // 13 4 GRADE // Defect Grade - // 14 4 CODE // Defect Code - // 15 2 STACK_FLAG // Current Defect Flag - // 16 2 STACK_COUNT // Count of Defect detected step - // 17 60 STACK_STEP // Flow(Step) of defect detection - // 18 16 IMAGE_FILE // Image file Name - // 19 12 DSC Code - // 20 12 Image 遺꾨쪟 Code - // 21 12 遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰 - // 22 12 遺덈웾 �겕湲� (L,H,M,S) - // 23 12 M/N/C/S/K/* - // 24 12 誘몄궗�슜 - // 25 12 誘몄궗�슜 - // 26 12 �쟾 STEP �뙋�젙 D/F �쑀臾� - // 27 12 Gray Min - // 28 12 Gray Max - // 29 12 Gray Average - // 30 12 Defect Peak - // 31 12 誘몄궗�슜 - // 32 12 誘몄궗�슜 - // 33 12 Scan 踰덊샇 - // 34 12 Camera ID - // 35 12 誘몄궗�슜 - // 36 12 R_SRC_MIN - // 37 12 R_SRC_MAX - // 38 12 R_SRC_AVG - // 39 12 Scan AI 遺꾨쪟寃곌낵 - // 40 12 Review AI 遺꾨쪟寃곌낵 - // 41 12 寃�異쒕え�뱶 (Dark or Bright) - // 42 12 寃�異쒖콈�꼸 RGB - */ - - // 01 4 ITEM // ITEM - SPRINTRAW(4, "DATA"); - // 02 6 DEFECT // DEFECT - SPRINTRAW(6, "DEFECT"); - // 03 12 ID // Subpanel ID - SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]); - // 04 5 DEF_NO // Defect Number of Panel - // RAW �뙆�씪�슜 Defect Index - //SPRINTRAW(5, "%d", pDefectData->m_nDefectIdx); - SPRINTRAW(5, "%d", m_nWriteRawDefectIdx++); - // 05 8 COORD_X // Defect Location from origin point X - SPRINTRAW(8, "%d", pDefectData->m_nUMCenterAlignX); - // 06 8 COORD_Y // Defect Location from origin point Y - // �떊湲곕��봽濡� �슂泥� �엫�떆 �닔�젙 - SPRINTRAW(8, "%d", pDefectData->m_nUMCenterAlignY*-1); - // 07 6 GATELINE // Defect Gateline - SPRINTRAW(6, "%d", pDefectData->m_nCellGate); - // 08 6 DATALINE // Defect Dataline - SPRINTRAW(6, "%d", pDefectData->m_nCellData); - // 09 4 SIZE_S // Defect Size (Square) - if (abs(pDefectData->m_nPixelSize) > 9999) { - SPRINTRAW(4, "%d",9999); - } - else - { - SPRINTRAW(4, "%d", pDefectData->m_nPixelSize); - } - - // 10 4 SIZE_W // Defect Size (Width) - if (abs(pDefectData->m_nUMSizeX) > 9999) { - SPRINTRAW(4, "%d", 9999); - } - else - { - - SPRINTRAW(4, "%d", pDefectData->m_nUMSizeX); - } - - // 11 4 SIZE_L // Defect Size (Length) - if (abs(pDefectData->m_nUMSizeY) > 9999) { - SPRINTRAW(4, "%d", 9999); - } - else - { - SPRINTRAW(4, "%d", pDefectData->m_nUMSizeY); - - } - - // 12 4 SIZE_H // Defect Size (Height) - if (abs(pDefectData->m_nDefectRScale) > 9999) { - SPRINTRAW(4, "%d", 9999); - } - else - { - strItem.Format("%d", pDefectData->m_nDefectRScale); - SPRINTRAW(4, "%.4s", strItem.GetBuffer(0)); - } - - - // 13 4 GRADE // Defect Grade - SPRINTRAW(4, "%s", GetDefectInfoToString(DMT_DefectJudge, pDefectData->m_DefectJudgement)); - // 14 4 CODE // Defect Code - if (strlen(pDefectData->m_strDefectCode)) - { - SPRINTRAW(4, "%.4s", pDefectData->m_strDefectCode); - } - else - { - SPRINTRAW(4, "*"); - } - // 15 2 STACK_FLAG // Current Defect Flag //201221 CJH - TD/SD/PD/SP - if (pDefectData->m_StackInfo == Stack_Unknown) - { - SPRINTRAW(2, "%s", "UK"); - } - else if (pDefectData->m_StackInfo == Stack_TD) - { - SPRINTRAW(2, "%s", "TD"); - } - else if (pDefectData->m_StackInfo == Stack_SD) - { - SPRINTRAW(2, "%s", "SD"); - } - else if (pDefectData->m_StackInfo == Stack_PD) - { - SPRINTRAW(2, "%s", "PD"); - } - else if (pDefectData->m_StackInfo == Stack_SP) - { - SPRINTRAW(2, "%s", "SP"); - } - else - { - SPRINTRAW(2, "*"); - } - // 16 2 STACK_COUNT // Count of Defect detected step - SPRINTRAW(2, "%2d", pDefectData->m_nStackStepCount); - // 17 60 STACK_STEP // Flow(Step) of defect detection - if (strlen(pDefectData->m_strStackFirst)) - { - SPRINTRAW(60, "%s", pDefectData->m_strStackFirst); - } - else - { - SPRINTRAW(60, "*"); - } - // 18 16 IMAGE_FILE // Image file Name - // 寃��궗 �씠誘몄� 誘몄궗�슜 - if (strlen(pDefectData->m_ReviewDefect.m_strRevImageName)) - { - SPRINTRAW(16, "%s", pDefectData->m_ReviewDefect.m_strRevImageName); - } - else - { - SPRINTRAW(16, "*"); - } - // 19 12 DSC_CODE // Common 01 DSC Code - SPRINTRAW(12, "*"); - // 20 12 VC_CODE // Common 02 Image 遺꾨쪟 Code - SPRINTRAW(12, "*"); - // 21 12 ZONE_NO // Common 03 遺덈웾�씠 �쐞移섑븳 Zone No �엯�젰 - // Zone Data - int nValue = 0; - for (int i = 15; i >= 0; i--) - { - if (pDefectData->m_sZonePixelCount[i] > 0) - nValue += 1; - if (i > 0) - nValue = nValue << 1; - } - SPRINTRAW(12, "%04X", nValue); - - // 22 12 DEFECT_SIZE // Common 04 遺덈웾 �겕湲� (L,H,M,S) - if (pDefectData->m_DefectSizeType == SizeType_Small) - { - SPRINTRAW(12, "S"); - } - else if (pDefectData->m_DefectSizeType == SizeType_Mid) - { - SPRINTRAW(12, "M"); - } - else if (pDefectData->m_DefectSizeType == SizeType_Large) - { - SPRINTRAW(12, "L"); - } - else if (pDefectData->m_DefectSizeType == SizeType_Huge) - { - SPRINTRAW(12, "H"); - } - else if (pDefectData->m_DefectSizeType == SizeType_Ultra) - { - SPRINTRAW(12, "U"); - } - else - { - SPRINTRAW(12, "S"); - } - //SizeType_Small - // 23 12 REPEAT_DEFECT // Common 05 M/N/C/S/K/* - if (pDefectData->m_DefectSubType == DefectSubType_MC) - { - SPRINTRAW(12, "MC"); - } - else if (pDefectData->m_DefectSubType == DefectSubType_Mask) - { - SPRINTRAW(12, "MD"); - } - else if (pDefectData->m_DefectSubType == DefectSubType_Common) - { - SPRINTRAW(12, "CD"); - } - else if (pDefectData->m_DefectSubType == DefectSubType_NoDefect) - { - SPRINTRAW(12, "NO"); - } - else - { - SPRINTRAW(12, "N"); - } - // 24 12 // Common 06 誘몄궗�슜 -> WSI �넂�씠 湲곗엯 - //m_nPlanType == ditRaw::RTP_WSI �씠嫄몃줈 鍮꾧탳�븯�땲源� 媛��걫 鍮꾧탳�븞�릺怨� �꽆�뼱媛� 210205 - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - SPRINTRAW(12, "%.03lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[1]); - - } - else - { - SPRINTRAW(12, "*"); - } - // 25 12 // Common 07 誘몄궗�슜 -> CS �넂�씠 湲곗엯 - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - SPRINTRAW(12, "%.03lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[3]); - - } - else - { - SPRINTRAW(12, "*"); - } - // 26 12 // Common 08 �쟾 STEP �뙋�젙 D/F �쑀臾� - SPRINTRAW(12, "*"); - // 27 12 GRAY_MIN // Common 09 Gray Min - SPRINTRAW(12, "%d", pDefectData->m_nLevelSrcMin); - // 28 12 GRAY_MAX // Common 10 Gray Max - SPRINTRAW(12, "%d", pDefectData->m_nLevelSrcMax); - // 29 12 GRAY_AVG // Common 11 Gray Average - SPRINTRAW(12, "%d", pDefectData->m_nLevelSrcAvg); - // 30 12 GRAY_DEF // Common 12 Defect Peak - if (static_cast<int>(pDefectData->m_sDefectPeak) == 0) - { - SPRINTRAW(12, "1"); - } - else - { - SPRINTRAW(12, "%d", pDefectData->m_sDefectPeak); - } - - // 31 NO USE -> WSI Image Name - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - if (strlen(pDefectData->m_ReviewDefect.m_strWsi_3DImageFilename)) - { - SPRINTRAW(12, "%s", pDefectData->m_ReviewDefect.m_strWsi_3DImageFilename); - } - else - { - SPRINTRAW(12, "*"); - } - } - else - { - SPRINTRAW(12, "*"); - } - // 32 NO USE -> CCD Image �쑀臾� - if (strlen(pDefectData->m_strAoiImageName)) - { - SPRINTRAW(12, "O"); - } - else - { - SPRINTRAW(12, "X"); - } - // 33 12 CAM_POSITION // Common 15 Scan 踰덊샇 - SPRINTRAW(12, "%d", pDefectData->m_nScanIdx); - // 34 12 CAM_POSITION // Common 16 Camera ID - SPRINTRAW(12, "%d", pDefectData->m_nCameraID); - // 35 12 Defect Idx // Common 25 Defect Idx - SPRINTRAW(12, "%d", pDefectData->m_nDefectIdx); - // 36 12 R_SRC_MIN // Common 18 R_SRC_MIN - SPRINTRAW(12, "%d", pDefectData->m_nLevelRefMin); - // 37 12 R_SRC_MAX // Common 19 R_SRC_MAX - SPRINTRAW(12, "%d", pDefectData->m_nLevelRefMax); - // 38 12 R_SRC_AVG // Common 20 R_SRC_AVG - SPRINTRAW(12, "%d", pDefectData->m_nLevelRefAvg); - // 39 12 Scan AI 遺꾨쪟寃곌낵 // Common 21 怨좉컼�궗 �엯�젰==>>>> 0405蹂�寃폳SI R Height//210405 - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - SPRINTRAW(12, "%.03lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[4]); - - } - else - { - SPRINTRAW(12, "*"); - } - // 40 12 Review AI 遺꾨쪟寃곌낵 // Common 22 怨좉컼�궗 �엯�젰==>>>> 0405蹂�寃폳SI G Height//210405 - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - SPRINTRAW(12, "%.03lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[5]); - - } - else - { - SPRINTRAW(12, "*"); - } - // 41 12 寃�異쒕え�뱶 (Dark or Bright) // Common 23 怨좉컼�궗 �엯�젰==>>>> 0405蹂�寃폳SI B Height//210405 - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - SPRINTRAW(12, "%.03lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[6]); - - } - else - { - SPRINTRAW(12, "*"); - } - // 42 12 寃�異쒖콈�꼸 RGB // Common 24 怨좉컼�궗 �엯�젰 - CString strData; // 寃�異� 梨꾨꼸 異붽� ex) 0, 1, 2 [ 21-03-23 KJG ] - int nLayers = pDefectData->m_nHliLayers; - strItem = _T(""); - for (int i = 0; i < 8; i++) - { - if (nLayers & 1) - { - if (strItem.IsEmpty()) strData.Format("%d", i); - else strData.Format(",%d", i); - strItem += strData; - } - nLayers = nLayers >> 1; - } - SPRINTRAW(12, "%s", strItem); - - // 43 12 Compactness //201215 CJH - 43~46 �떊洹� Defect Feature 寃곌낵�뙆�씪 異붽� - SPRINTRAW(12, "%d", pDefectData->m_nCompact); - // 44 12 Thickness - SPRINTRAW(12, "%d", pDefectData->m_nThickness); - // 45 12 Major - SPRINTRAW(12, "%d", pDefectData->m_nMajor); - // 46 12 Minor - SPRINTRAW(12, "%d", pDefectData->m_nMinor); - // 47 12 WSI Defect Type 0 normal 1 metal 2Huge 3diffuse 4 trashy - if (pDefectData->m_ReviewDefect.m_nWsi_Type == 2) - { - if (strlen(GetWsiDefectType(pDefectData->m_ReviewDefect.m_fWsi_ResultData[0]))) - { - SPRINTRAW(12, "%s", GetWsiDefectType(pDefectData->m_ReviewDefect.m_fWsi_ResultData[0])); - } - else - { - SPRINTRAW(12, "*"); - } - } - else - { - SPRINTRAW(12, "*"); - } - - // 48 12 Defect Type 異붽� [ 21-03-23 KJG ] - if (pDefectData->m_DefectType == DefectType_RBlack) - { - SPRINTRAW(12, "RB"); - } - else if (pDefectData->m_DefectType == DefectType_RWhite) - { - SPRINTRAW(12, "RW"); - } - else if (pDefectData->m_DefectType == DefectType_TBlack) - { - SPRINTRAW(12, "TB"); - } - else if (pDefectData->m_DefectType == DefectType_TWhite) - { - SPRINTRAW(12, "TW"); - } - else - { - SPRINTRAW(12, "UN"); - } - - // 49 12 Frame Shrink �젙蹂� 異붽� - SPRINTRAW(12, "%d", pDefectData->m_bShrinked); - - // 50 12 CLASS_NO // Zone Classification NO - // Zone Data - nValue = 0; - for (int i = 15; i >= 0; i--) - { - if (pDefectData->m_sZoneClassPixelCount[i] > 0) - nValue += 1; - if (i > 0) - nValue = nValue << 1; - } - SPRINTRAW(12, "%04X", nValue); - - SPRINTRAWEND; //以묒슂!!! �젮 留덉�留됱뿉 瑗� �엳�뼱�빞�븿!!!(�궘�젣湲덉�) [源��깭�쁽2020/9/23] - - return TRUE; -} - -BOOL CGlassRawCPJT::ReadMuraFile( CgrmGlassRawData* pData )//0404nwh -{ - CString strMacroFilePath; - { - strMacroFilePath.Format("%s\\%s", NETWORK_MURARAW_PATH, pData->GetGlassData()->m_strGlassID); - - CFileFind FF; - - if (FF.FindFile(strMacroFilePath)) - { - FF.FindNextFile(); - strMacroFilePath = FF.GetFilePath(); - FF.Close(); - } - else - { - AKLOG("Find Macro File Fail. [%s]", strMacroFilePath); - return FALSE; - } - } - ////Mura Image Server �듅�젙 �뤃�뜑�뿉 ���옣 - CString strMacroImageSrcPath; - CString strMacroImageTarPath; - - strMacroImageSrcPath.Format("%s\\%s", NETWORK_MURA_IMAGE_PATH, pData->GetGlassData()->m_strGlassID); - strMacroImageTarPath.Format("%s\\%s\\MuraImage", NETWORK_AOI_IMAGE_PATH, pData->GetGlassData()->m_strGlassID); //�깮媛곸��빐蹂댁옄 - - //CreateDirectory("D:\\Image\\Defect\\Mura",NULL); �븞�빐�룄�맆嫄곌컳�쓬 - if (strMacroImageSrcPath.IsEmpty() == FALSE) - { - AKLOG("Macro Image File Copy Start[%s]", strMacroImageTarPath); - CakFileUtil::CopyFolder(strMacroImageSrcPath.GetBuffer(0), strMacroImageTarPath.GetBuffer(0), FALSE); - - if (m_bReviewEndCheck == TRUE) - { - CakFileUtil::DeleteFolder(strMacroImageSrcPath.GetBuffer(0), FALSE); - } - AKLOG("Macro Image File Copy End"); - } - - ///Mura 寃곌낵�뙆�씪 �씫怨� �벐湲� �궘�젣 - if (m_MuraResultFile.openFile_Mura(strMacroFilePath.GetBuffer(0)) == TRUE) - { - AKLOG("Macro File Read Success : %dItem", m_MuraResultFile.GetSubPanelNum()); - if (m_bReviewEndCheck == TRUE) - { - DeleteFile(strMacroFilePath); - } - } - else - { - AKLOG("Macro File Read Fail[%s]", strMacroFilePath); - //DeleteFile(strMacroResultTargetPath); - return FALSE; - } - return TRUE; -} - - -void CGlassRawCPJT::SendMessageFTPUploadRaw( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - char strRTMSFile[32] = {}; - char strServerRawFileSubPath[256] = {}; - char strServer_SubFileName[32] = {}; - - GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName,pGlassData); //taek 201211 - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SubFilePath, strServerRawFileSubPath); - strcpy(upParam.m_strServer_SubFileName, strServer_SubFileName); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - strcpy(upParam.m_strRTMS_FileName, ""); //taek 201211 - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Raw; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 30000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CGlassRawCPJT::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - char strRTMSFile[32] = {}; - char strServerRawFileSubPath[256] = {}; - char strServer_SubFileName[256] = {}; - - GetFormatDescription(FTPCMD_STACK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName,pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - strcpy(upParam.m_strRTMS_FileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Stack; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawCPJT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - { - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); - sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); - sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); - sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); - } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Unknown; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawCPJT::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[32];// = "*.*"; - char strLocalFolder[256] = {}; - char strLocalFile[32];// = "*.*"; - char strRTMSFile[256] = {}; //taek 201211 - char strServerRawFileSubPath[256] = {}; - char strServer_SubFileName[256] = {}; - - GetFormatDescription(sort, strServerFolder, strServerFile, strLocalFolder, strLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName,pGlassData); //taek 201211 - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, strLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - strcpy(upParam.m_strRTMS_FileName, strRTMSFile); //taek 201211 - upParam.m_nCreateSignalFile = FALSE; - upParam.m_nSendResultCode = FALSE; - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Image; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_ImageUpload; // FTP Uploader�뿉�꽌�뒗 援щ텇�릺�뼱 �엳吏� �븡�쓬! - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - - -BOOL CGlassRawCPJT::SendMessageFTPUploadIndexFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) - return FALSE; - - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return FALSE; - - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - char strRTMSFile[32] = {}; - char strServerRawFileSubPath[256]; - char strServer_SubFileName[256] = {}; - - GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData); - - - // if(0)//test - // { - // sprintf(strServerFolder, "HDD1/DIT/TestC"); - // ServerFile = "ftptestfile.txt"; - // - // sprintf(strLocalFolder, "D:"); - // pLocalFile = "ftptestfile.txt"; - // } - - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - strcpy(upParam.m_strRTMS_FileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Index; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - return TRUE; -} - -void CGlassRawCPJT::GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, char* pRTMSFile, char* pServerFileSubPath, char* pServerFileSubName, _grmGlassData* pGlassData) //taek 201211 -{ - CString strGlassID = pGlassData->m_strGlassID; - //For test - //if (strlen(strGlassID) == 0) strGlassID = "HPANELID"; - - CString strGlassIDLevel6th = strGlassID.Left(6); - CString strGlassIDLevel5th = strGlassID.Left(5); - CString strGlassIDLevel8th = strGlassID.Left(8); - - CString strLotID = pGlassData->m_strLotID; - CString strStepID = pGlassData->m_strStepID; - CString strProcessID = pGlassData->m_strProcessID; - //For test - //if (strlen(strStepID) == 0) strStepID = "F11112"; - - strLotID.MakeLower(); - strStepID.MakeLower(); - strGlassID.MakeLower(); - strGlassIDLevel6th.MakeLower(); - strProcessID.MakeLower(); - - switch(sort) - { - case FTPCMD_AOI_IMAGE: - { - if(strGlassID.GetLength() > 6) - sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); - else - sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); - - sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_REVIEW_IMAGE: - { - CTime time = m_tmFileCreateTime; - - CString strTime = NULL; - CString strInsEndTime = NULL; - - strTime = pGlassData->m_tmGlassLoading.Format("%Y%m%d%H%M%S"); - strInsEndTime = pGlassData->m_tmInspectionEND.Format("%Y%m%d%H%M%S"); - - if (strGlassID.GetLength() > 6) - sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); - else - sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); - - sprintf(pLocalPath, "%s%s_%s", LOCAL_REV_IMAGE_PATH, strGlassID.GetBuffer(0), strTime); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - //Result ini 由щ럭 �씠誘몄� path 梨꾩슦湲� - CString strRawFilePathName = NULL; - CString strLine = NULL; - CString strPath = NULL; - strRawFilePathName += LOCAL_RAWPATH_INFO_INI_PATH; - strRawFilePathName += RAWINFO_FILE_NAME; - FILE* pf = fopen(strRawFilePathName.GetBuffer(0), "a"); - if(pf != NULL) - { - strLine = pServerPath; - strPath = strLine.Left(strLine.GetLength() - 1); - fprintf(pf, "IMGPATH= Z:\%s\n", strPath.GetBuffer(0)); - fprintf(pf, "DISK=FILESERVER\n"); - fclose(pf); - } - - //RTMS 寃곌낵 �뙆�씪 �뾽濡쒕뱶 - CString strRTMSPathFileName = NULL; - CString strRTMSFileName = NULL; - - strRTMSFileName.Format("%s#%s#%04d%02d%02d%02d%02d%02d.Signal", pGlassData->m_strEquipID, pGlassData->m_strProductID, time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); - - strRTMSPathFileName += LOCAL_RTMS_INFO_PATH; - strRTMSPathFileName += strRTMSFileName; - - // strRTMSFileName = strRawFilePath.Left(strRawFilePath.GetLength()-1); //taek 留덉�留� 媛� 鍮쇨퀬 媛��졇�삤湲� test - - FILE* pfile = fopen(strRTMSPathFileName.GetBuffer(0), "a"); - - sprintf(pRTMSFile, "%s", strRTMSPathFileName); //taek 201211 - - if (pfile != NULL) - { - fprintf(pfile, "MODULE_ID = %s\n", pGlassData->m_strEquipID); - fprintf(pfile, "PRODUCT_ID = %s\n", pGlassData->m_strProductID); - fprintf(pfile, "PROCESS_ID = %s\n", pGlassData->m_strProcessID); - fprintf(pfile, "STEP_ID = %s\n", pGlassData->m_strStepID); - fprintf(pfile, "PANEL_ID = %s\n", pGlassData->m_strGlassID); - fprintf(pfile, "RESULT = *\n"); - fprintf(pfile, "REASON_CODE = *\n"); - fprintf(pfile, "RDP_PATH_RAW = \\cfq1raw1cai1coi%s\n", GetRawFilePath()); - fprintf(pfile, "RDP_PATH_IMAGE = \\cfq1img1cai1coi%s\n", strLine.Left(strLine.GetLength() - 1)); - fprintf(pfile, "INSP_TIME = %s\n", strInsEndTime); - fclose(pfile); - } - } - break; - case FTPCMD_RAW: - { - CTime time = m_tmFileCreateTime; - SetRawFilePath(""); - - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - // �떆媛�, �솗�옣�옄 �뾾�빊 [11/20/2020 Server] - strFileName.Format("%s", pGlassData->m_strGlassID); - strFileName.MakeLower(); - } - /*sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); */ - - //if (strGlassID.GetLength() > 6) - // sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strLotID, strStepID, strGlassIDLevel6th, strGlassID); - //else - sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - - CString strServerSubRawFilePath= NULL; - CString strServerSubRawFileName = NULL; - { - strServerSubRawFilePath += NETWORK_AOIRAWFILE_SUB_PATH; - - CString strTime; - CTime CurrTime = m_tmFileCreateTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - // �떆媛�, �솗�옣�옄 �뾾�빊 [11/20/2020 Server] - strServerSubRawFileName.Format("\\%s_%s", pGlassData->m_strGlassID, strTime); - //strServerSubRawFilePath += strServerSubRawFileName; - BOOL bIsBDI = strcmp((pGlassData->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE; // BDI �씤 寃쎌슦 InspectorEnd �떆�뿉 SubFile �깮�꽦 [ 21-03-23 KJG ] - if (m_bReviewEndCheck || bIsBDI) // InspectEnd �떆�뿉�뒗 SubFile 誘몄깮�꽦 蹂�寃� [ 21-03-18 KJG ] - { - sprintf(pServerFileSubName, "%s", strServerSubRawFileName.GetBuffer(0)); - sprintf(pServerFileSubPath, "%s", strServerSubRawFilePath.GetBuffer(0)); - } - else - { - sprintf(pServerFileSubName, "%s", ""); - sprintf(pServerFileSubPath, "%s", ""); - } - - } - - //Result ini raw �뙆�씪�씠由�(path�룷�븿)write - CString strRawFilePathName = NULL; - CString strLine = NULL; - strRawFilePathName += LOCAL_RAWPATH_INFO_INI_PATH; - strRawFilePathName += RAWINFO_FILE_NAME; - FILE* pf = fopen(strRawFilePathName.GetBuffer(0), "w"); - if(pf != NULL) - { - strLine = pServerPath + strFileName; - fprintf(pf, "[RESULT_PATH]\n"); - fprintf(pf, "RAWPATH= X:\%s\n", strLine.GetBuffer(0)); - SetRawFilePath(strLine.GetBuffer(0)); - fprintf(pf, "SUMPATH= \n"); - fclose(pf); - } - } - break; - case FTPCMD_STACK: - { - //201218 CJH - Stack Download 寃쎈줈 �꽕�젙 - sprintf(pServerPath, "\\stack\\%s\\%s\\%s", strProcessID, - strStepID, - strGlassIDLevel6th.GetBuffer(0)); - - sprintf(pServerFile, "%s", - strGlassID); - - sprintf(pLocalPath, "%s", m_StackResult.getStackLocalPath()); - sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); - } - break; - - case FTPCMD_MURA_IMAGE: //0404nwh - { // - /*CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*");*/ - - if (strGlassID.GetLength() > 6) - sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID); - else - sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - - break; - case FTPCMD_INDEX: - { - CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "INDEX\\%s", pGlassData->m_strEquipID); - sprintf(pServerFile, "%04d%02d%02d_%s.csv", time.GetYear(), time.GetMonth(), time.GetDay(), pGlassData->m_strStepID); - - sprintf(pLocalPath, "%s", LOCAL_INDEX_PATH); - sprintf(pLocalFile, "%s", pServerFile); - } - break; - - case FTPCMD_LINK: - { - CTime time = m_tmFileCreateTime; - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%s\\%s\\%s\\%s", "LINK", pGlassData->m_strEquipID, - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - } - - -} - - - -CString CGlassRawCPJT::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) -{ - CString sStr; - switch(nDefectInfoType) - { - case DMT_DefectJudge:// Judge - { - switch (nParam) - { - case Judge_OK: sStr.Format("OK"); - break; - case Judge_RP: sStr.Format("RP"); - break; - case Judge_NG: sStr.Format("NG"); - break; - case Judge_TR: sStr.Format("TR"); - break; - case Judge_PR: sStr.Format("PR"); - break; - case Judge_PT: sStr.Format("PT"); - break; - case Judge_Review: sStr.Format("RV"); - break; - case Judge_RC: sStr.Format("RC"); - break; - case Judge_Size: sStr.Format("SZ"); - break; - case Judge_VI: sStr.Format("VI"); - break; - case Judge_Rework: sStr.Format("RW"); - break; - case Judge_Unknown: sStr.Format("OK");//sStr.Format("Unknown"); //Unknown�룄 �씪�떒 OK - break; - default: sStr.Format("OK");//sStr.Format("Ets"); - break; - } - } - break; - - case DMT_DefectSizeType: - { - sStr = "S"; - switch(nParam) - { - //case SizeType_Unknown: sStr.Format("U"); break; - case 1/*SizeType_Small*/: sStr.Format("S"); - break; - case 2/*SizeType_Mid*/: sStr.Format("M"); - break; - case 3/*SizeType_Large*/: sStr.Format("L"); - break; - case 4/*SizeType_Huge*/: sStr.Format("O"); - break; - //case SizeType_Ultra: sStr.Format("Ultra"); break; - //default: sStr.Format("Ets"); break; - } - } - break; - - - } - return sStr; -} - -CString CGlassRawCPJT::GetWsiDefectType(int nType) -{ - CString strDefectType=_T(""); - switch (nType) - { - case 0: strDefectType.Format("normal"); - break; - case 1: strDefectType.Format("metal"); - break; - case 2: strDefectType.Format("huge"); - break; - case 3: strDefectType.Format("diffuse"); - break; - case 4: strDefectType.Format("trashy"); - break; - } - return strDefectType; -} - diff --git a/ReviewHistory/ReveiwHistory/GlassRawCPJT.h b/ReviewHistory/ReveiwHistory/GlassRawCPJT.h deleted file mode 100644 index 88b6901..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCPJT.h +++ /dev/null @@ -1,134 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" -#include "GlassRawRTMS.h" -#include "StackResultCPJT.h" -#include "AnaResultFile.h" -#include "MacroResultFile.h" -#include "CustomizeReview.h" -#include "InterfaceFTP.h" - -class CGlassRawCPJT : public CGlassRawBase, public CInterfaceFTP -{ -public: - enum emDefectMemberType - { - DMT_DefectJudge = 0, - DMT_DefectSizeType - }; - -public: - CGlassRawCPJT(void); - ~CGlassRawCPJT(void); - - static char* GetClassName(){return "C-PJT";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData); - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData); - - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData); - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - virtual BOOL SequenceFtpUpload(char* pRawFileName); - - virtual void NotifyUpdateOptionInfo(){/*m_StackResult.readOptionFile();*/}; - - -protected: - - virtual void SendMessageFTPUploadRaw(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadStack(_grmGlassData* pGlassData); - virtual void SendMessageFTPUploadImage(_grmGlassData* pGlassData, emFTPCommand sort); - virtual BOOL SendMessageFTPUploadIndexFile(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData); - virtual void GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, char* pRTMSFile,char* pServerFileSubPath, char* pServerFileSubName,_grmGlassData* pGlassData); - - - BOOL ReadMuraFile(CgrmGlassRawData* pData); - BOOL MakeAOIFile(CgrmGlassRawData* pData); - - void SetRawFilePath(CString strPath) { m_strRawFilePath = strPath; } - CString GetRawFilePath() { return m_strRawFilePath; } - - void makeDataHeader(CString& strLine, _grmGlassData* pGlassData); - void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); - void makeDataCell(CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData); - BOOL makeDataDefect(CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData); - - CString GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam); - -public: - void SetEquipType(int nType){m_nEquipType = nType;}; - CString GetWsiDefectType(int nType); -protected: - -protected: - int m_nEquipType; // 0:Inline, 1:Offline - - CString m_strRawFilePath; - - CAnaResultFile m_GlassRawAna; //디펙분석용결과파일 [김태현2020/9/15] - CGlassRawRTMS m_GlassRawRTMS;//RTMS용 결과파일 생성관리 [김태현 2018/12/5] - CMacroResultFile m_MuraResultFile; //무라용 결과파일 생성관리 [김태현 2018/12/5] - - CStackResultCPJT m_StackResult; - BOOL m_bReviewEndCheck; // InspectEnd 시에 Raw_im 폴더에 SubFile 생성 안하기 위해 사용 [ 21-03-18 KJG ] - CTime m_tmReviewStart; - CTime m_tmReviewEnd; - - int m_nWriteRawDefectIdx; -}; - -struct stCellData -{ - int iModel; - int ixCell, iyCell; - void SetIndex(int im, int ix, int iy) - { - iModel = im; - ixCell = ix; - iyCell = iy; - } - BOOL AddDefect(_grmDefectData* pDefect) - { - if (iModel == pDefect->m_nModelIdx)// edge crack은 포함안되게.. 모델이 패턴부인지 확인작업 줄이기. - { - m_Defects.push_back(pDefect); - return TRUE; - } - return FALSE; - } - _grmDefectData* GetDefect(int i) { return m_Defects[i]; } - int GetDefectCount() { return (int)m_Defects.size(); } - std::vector<_grmDefectData*> m_Defects; -}; -struct stCellStorage -{ - stCellData *m_pCells; - int m_nCell; - stCellStorage(int n) - { - m_nCell = n; - m_pCells = new stCellData[n]; - } - ~stCellStorage() - { - delete[] m_pCells; - } - stCellData* GetCellData(int iCell) - { - return m_pCells + iCell; - } - BOOL AddDefect(_grmDefectData *pDefect) - { - if (pDefect->m_nCellIdx < 0) - { - return FALSE; - } - return GetCellData(pDefect->m_nCellIdx)->AddDefect(pDefect); - } - int GetCellCount() { return m_nCell; } -}; \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/GlassRawCSOT.cpp b/ReviewHistory/ReveiwHistory/GlassRawCSOT.cpp deleted file mode 100644 index c10d4fe..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCSOT.cpp +++ /dev/null @@ -1,1696 +0,0 @@ -#include "StdAfx.h" -#include "GlassRawCSOT.h" -#include "akLoggerExt.h" -#include "MacroResultFile.h" -#include "akCore/akFileUtil.h" -#include "akGridData.h" - -//#include "AOIDefinitionType.h" -//#include "AOIDefinition.h" - -#define FTPCopyDataCmd_RawDownload 1 -#define FTPCopyDataCmd_RawUpload 2 -#define FTPCopyDataCmd_LotUpload 3 -#define FTPCopyDataCmd_ImageUpload 4 - -#define MAX_PATH_NUM 255 -#define MAX_FILE_NUM 100 - -#define LOCAL_INDEX_PATH "D:\\DIT_ResultData\\Index\\" -#define LOCAL_REV_IMAGE_PATH "D:\\ResultData\\Upload\\Image\\" -#define LOCAL_AOI_IMAGE_PATH "D:\\Image\\Defect\\" -#define LOCAL_MURA_IMAGE_PATH "D:\\DIT_ResultData\\Mura\\IMG\\" -#define LOCAL_DEEP_PATH "D:\\DIT_ResultData\\Deeplearning\\" - -enum FTPProcessType { FTPProcessType_DownFile=0, FTPProcessType_UpFile, FTPProcessType_Count }; -class CFTPCopyDataParam -{ -public: - CFTPCopyDataParam() { Reset(); } - virtual ~CFTPCopyDataParam() { Reset(); } - void Reset() - { - memset(this, 0, sizeof(CFTPCopyDataParam)); - m_hSenderWnd = GetCurrentProcessWndHandle(); - } - - const HWND GetSenderWnd() const { return m_hSenderWnd; } - void SetSenderWnd(HWND hWnd) { m_hSenderWnd = hWnd; } - -public: - int m_nProcessType; // 프로세스 타입 - int m_nCreateSignalFile; // 시그널 파일 생성유무 - int m_bFirstPriority; // 최상위 우선순위유무 - int m_nSendResultCode; // 보낸 결과 코드 - - TCHAR m_strServer_FolderName[MAX_PATH_NUM]; // 서버 경로명 - TCHAR m_strServer_FileName[MAX_FILE_NUM]; // 서버 파일명 - - TCHAR m_strLocal_FolderName[MAX_PATH_NUM]; // 로컬 경로명 - TCHAR m_strLocal_FileName[MAX_FILE_NUM]; // 로컬 파일명 - - TCHAR m_strServer_SignalFolderName[MAX_PATH_NUM]; // 서버 시그널 경로명 - TCHAR m_strServer_SignalFileName[MAX_FILE_NUM]; // 서버 시그널 파일명 - -protected: - HWND m_hSenderWnd; // 보낸 프로그램 윈도우 - - static HWND GetCurrentProcessWndHandle() - { - DWORD dwPID = GetCurrentProcessId(); - HWND hWnd = FindWindow(NULL, NULL); - while (hWnd != NULL) - { - if (GetParent(hWnd) == NULL){ - DWORD dwProcId; - GetWindowThreadProcessId(hWnd, &dwProcId); - if (dwPID == dwProcId){ - return hWnd; - } - } - hWnd = GetWindow(hWnd, GW_HWNDNEXT); - } - return NULL; - } -}; - - -CGlassRawCSOT::CGlassRawCSOT(void) -{ - m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); -} - -CGlassRawCSOT::~CGlassRawCSOT(void) -{ -} - -BOOL CGlassRawCSOT::SequenceGlassLoading( CgrmGlassRawData* pData ) -{ - if(m_StackResult.getStackUse()) - { - SendMessageFTPDownloadStack(pData->GetGlassData()); //스택파일 다운 요청 [김태현 2019/1/12] - m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID); - } - - SendMessageFTPDownloadDataFile(pData->GetGlassData()); - return TRUE; -} - -BOOL CGlassRawCSOT::SequenceInspectEnd( CgrmGlassRawData* pData ) -{ - m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); - - - if(m_StackResult.getStackUse()) - { - m_StackResult.StackFileReadStop(); - } - - ReadMuraFile(pData); - - if(0) //이제 end시점에 파일 생성하지 않음(파일시간때문에 두번 올라갈수잇음) [김태현 2019/1/15] - { - if(!WriteAOIFile(pData)) - return FALSE; - - SendMessageFTPUploadRaw(pData->GetGlassData()); - } - - return TRUE; -} - -BOOL CGlassRawCSOT::SequenceReviewStart( CgrmGlassRawData* pData ) -{ - m_tmReviewStart = m_tmReviewEnd = CTime::GetCurrentTime(); - - SequenceCustomizeReview(pData); - - - return TRUE; -} - - -BOOL CGlassRawCSOT::SequenceCustomizeReview( CgrmGlassRawData* pData ) -{ - _grmGlassData* pGlass = pData->GetGlassData(); - /* - //이전 생성된 커스터 마이징 데이터 삭제 - { - pGlass->m_nDefectNum; - for(int i=pGlass->m_nDefectNum-1; i>=0; i--) - { - if(pData->GetDefectData(i)->m_nCustomizeDefectType == 0 - || pData->GetDefectData(i)->m_nCustomizeDefectType == 1000) - { - pGlass->m_nDefectNum = i+1; - break; - } - } - } - - //커스터마이즈 데이터 로드 - { - if(m_CustomizeReview.openFile(pGlass->m_strRecipeName)) - { - pGlass->m_nCustomizePlanType = m_CustomizeReview.GetCustomizeType(); - int nCustomReviewNum = m_CustomizeReview.GetCustomizeReviewNum(); - - int nDefectStpoint = pGlass->m_nDefectNum; - if(pGlass->m_nCustomizePlanType == 2) nDefectStpoint = 0; - int nRealDefectIndex; - _grmDefectData* pGrmDefect; - _CustomizeReview* pCustomizeReview; - for(int i=0; i<nCustomReviewNum; i++) - { - nRealDefectIndex = nDefectStpoint+i; - pGrmDefect = pData->GetDefectData(nRealDefectIndex); - pCustomizeReview = m_CustomizeReview.GetCustomizeReivew(i); - - pGrmDefect->m_nCustomizeDefectType = pCustomizeReview->m_nCustomizeDefectType; - pGrmDefect->m_dCustomizeDefectPosXmm = pCustomizeReview->m_dCustomizeDefectPosXmm; - pGrmDefect->m_dCustomizeDefectPosYmm = pCustomizeReview->m_dCustomizeDefectPosYmm; - pGrmDefect->m_nCustomizeParam1 = pCustomizeReview->m_nCustomizeParam1; - pGrmDefect->m_nCustomizeParam2 = pCustomizeReview->m_nCustomizeParam2; - } - pGlass->m_nDefectNum = nDefectStpoint+nCustomReviewNum; - - pGlass->m_nCustomizeDataReadResult = 1; - } - else - { - pGlass->m_nCustomizeDataReadResult = 2; - } - } - - if(pGlass->m_nCustomizeDataReadResult == 1) return TRUE; - */ - - return FALSE; -} - - -BOOL CGlassRawCSOT::SequenceReviewEnd( CgrmGlassRawData* pData ) -{ - m_tmReviewEnd = CTime::GetCurrentTime(); - - if(WriteAOIFile(pData) == FALSE) - return FALSE; - - _grmGlassData* pGlassData = pData->GetGlassData(); - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - if(m_MuraResultFile.IsRead()) SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE); - SendMessageFTPUploadLinkFile(pGlassData); - - if(WriteIndexFile(pGlassData)) - { - SendMessageFTPUploadIndexFile(pGlassData); - } - - return TRUE; -} - -BOOL CGlassRawCSOT::SequenceFtpUpload( char* pRawFilePathName ) -{ - - CTime tmFileCreate; - _grmGlassData GlassData; - _grmGlassData* pGlassData = &GlassData; - - //정보 얻어오기 [김태현 2019/1/25] - { - //"D:\\DIT_ResultData\\Raw\\"; - //6CCF01P7_HPANELID_20190125_002545.csv - - char* pFileName = CakFileUtil::getFileName(pRawFilePathName); - char* pext = CakFileUtil::getFileExt(pRawFilePathName); - - if(!strcmp(pext, "csv") == FALSE) return FALSE; - - CakParser parser; - parser.process(pFileName, "_."); - if(parser.getTokNum() < 5) return FALSE; - - strcpy(pGlassData->m_strOperID, parser.getTokStr(0)); - strcpy(pGlassData->m_strGlassID, parser.getTokStr(1)); - char* pDate = &pFileName[parser.getTokPos(2)]; - char* pTime = &pFileName[parser.getTokPos(3)]; - int nData[8]={}; - nData[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; - nData[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; - nData[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; - nData[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; - nData[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; - nData[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; - - CTime tmTemp(nData[0], nData[1], nData[2], nData[3], nData[4], nData[5] ); - tmFileCreate = tmTemp; - - FILE* pf = fopen(pRawFilePathName, "r"); - if(pf) - { - char buffer[512]; - fgets(buffer, 512, pf); - if(buffer[0] != 'H') return FALSE; - fgets(buffer, 512, pf); - fgets(buffer, 512, pf); - - fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; - strcpy(pGlassData->m_strEquipID, &buffer[strlen("EQUIP_TYPE:")]); - - fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; - strcpy(pGlassData->m_strStepID, &buffer[strlen("EQUIP_ID:")]); - } - else - { - return FALSE; - } - - - CakFileUtil::getPath(pGlassData->m_strPath, 256, pRawFilePathName); - - } - - - - m_tmReviewEnd = m_tmReviewStart = tmFileCreate; - - - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE);//없으면 실패 하겠지 - SendMessageFTPUploadLinkFile(pGlassData); - - if(WriteIndexFile(pGlassData)) - { - SendMessageFTPUploadIndexFile(pGlassData); - } - - return TRUE; -} - - -BOOL CGlassRawCSOT::WriteAOIFile( CgrmGlassRawData* pData ) -{ - BOOL bResult = TRUE; - - bResult &= MakeAOIFile(pData); - bResult &= MakeAnaFile(pData); - - m_GlassRawRTMS.WriteAOIFile(pData); - - AKLOG("WriteAOIFile Complete"); - return bResult; -} - -BOOL CGlassRawCSOT::MakeAOIFile( CgrmGlassRawData* pData ) -{ - _grmGlassData* pGlass = pData->GetGlassData(); - CString strFilePathName; - CString strFileName;//파일생성 시간 때문에 여기서 정확하게 파일명 다시 정정 - { - //Glass 정보 - CTime CurrTime = m_tmReviewEnd; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlass->m_strOperID, pGlass->m_strGlassID, strTime.GetBuffer(0)); - } - - strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); - - - //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - - - CString strBuffer; - CString strLine; - - ////////////////////////////////////////////////////////////////////////// - //HEDER - fprintf(pf, "HEADER_BEGIN\n"); - { - makeDataHeader(strLine, pGlass); - fprintf(pf, "%s", strLine); - } - fprintf(pf, "HEADER_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //GLASS_DATA - fprintf(pf, "GLASS_DATA_BEGIN\n"); - { - fprintf(pf, "GLASS_ID,OWNER_CODE,OWNER_TYPE,PRODUCT_ID,PROCESS_ID,PRODUCT_GROUP,LOT_ID,CST_ID,SLOT_ID,PRE_PROCESS_ID,PRE_EQP_ID,PRE_CHAMBER_ID,PRE_RECIPE_ID,GROUP_ID,AUTOSAMPLEFLAG\n"); - - makeDataGlass(strLine, pGlass); - fprintf(pf, "%s\n", strLine); - } - fprintf(pf, "GLASS_DATA_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //EQP_GLASS_DATA - fprintf(pf, "EQP_GLASS_DATA_BEGIN\n"); - { - fprintf(pf, "RECIPE_NO,RECIPE_NAME,START_TIME,END_TIME,TACT_TIME,GLASS_YIELD,TOTAL_PANEL_CNT,OK_PANEL,NG_PANEL,X1_PANEL,X2_PANEL,X3_PANEL,X4_PANEL,X5_PANEL,X6_PANEL,X7_PANEL,X8_PANEL,X9_PANEL,TT_DEFECT_CNT,S_SIZE_DEFECT_CNT,M_SIZE_DEFECT_CNT,L_SIZE_DEFECT_CNT,GLASS_ID_DCR,TT_MURA_CNT,POINT_MURA_CNT,LINE_MURA_CNT,AREA_MURA_CNT,POINT_1,POINT_2,POINT_3,POINT_4,POINT_5,GLASS_JUDGE,GLASS_GRADE\n"); - - makeDataEQPGlass(strLine, pData); - fprintf(pf, "%s\n", strLine); - } - fprintf(pf, "EQP_GLASS_DATA_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //BLOCK_SUMMARY - fprintf(pf, "BLOCK_SUMMARY_BEGIN\n"); - { - fprintf(pf, "BLOCK_ID,BLOCK_JUDGE_AOI,BLOCK_JUDGE_MURA,BLOCK_JUDGE_ATS,BLOCK_JUDGE_TEG,TT_PANEL,OK_PANEL,NG_PANEL,X1_PANEL,X2_PANEL,X3_PANEL,X4_PANEL,X5_PANEL,X6_PANEL,X7_PANEL,X8_PANEL,X9_PANEL,TT_DEFECT_CNT,S_SIZE_DEFECT_CNT,M_SIZE_DEFECT_CNT,L_SIZE_DEFECT_CNT,TT_MURA_CNT,POINT_MURA_CNT,LINE_MURA_CNT,AREA_MURA_CNT,GLASS_ID_DCR,POINT_1,POINT_2,POINT_3,POINT_4,POINT_5\n"); - - int nBlockNum = 1; - for(int i=0; i<nBlockNum; i++) - { - makeDataBlock(strLine, pData->GetBlockData(i)); - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "BLOCK_SUMMARY_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //PANEL_SUMMARY - fprintf(pf, "PANEL_SUMMARY_BEGIN\n"); - { - fprintf(pf, "PANEL_ID,PANEL_JUDGE_AOI,PANEL_JUDGE_MURA,PANEL_JUDGE,TT_DEFECT,TT_MURA,PANEL_ID_2D,PANEL_FLAG,PANEL_GRADE,X_D,Y_D,X_A,Y_A,DELTA_X,DELTA_Y,OK_DEFECT,NG_DEFECT,X1_DEFECT,X2_DEFECT,X3_DEFECT,X4_DEFECT,X5_DEFECT,X6_DEFECT,X7_DEFECT,X8_DEFECT,X9_DEFECT,IJP1,IJP2,IJP3,IJP4,IJP5,IJP6,IJP7,IJP8,Mark1,Mark2,Mark3,Mark4,Mark5,Mark6,Mark7,Mark8\n"); - - for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) - { - _grmCellData* pCell = pData->GetCellData(iCell); - makeDataCell(strLine, pData, pCell); - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "PANEL_SUMMARY_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //DEFECT_DATA - fprintf(pf, "DEFECT_DATA_BEGIN\n"); - { - fprintf(pf, "PANEL_ID,DEFECT_NO1,DEFECT_NO2,UPDATE_TIME,STEP_1ST,RECIPE_1ST,STEP_CURRENT,RECIPE_CURRENT,GATE1,DATA1,"); - fprintf(pf, "GATE2,DATA2,X1,Y1,X2,Y2,AOI_DEFECT_TYPE,AOI_GRAY_H,AOI_GRAY_L,AOI_GRAY_AVE,"); - fprintf(pf, "AOI_DEFECT_AREA,AOI_DEFECT_LGT,AOI_DEFECT_WID,AOI_DEFECT_HGT,AOI_DEFECT_WIH,AOI_DEFECT_SIZE,DEFECT_PIX,MASK_DEFECT,REPEAT_DEFECT,DEFECT_IMAGE_DATA,"); - fprintf(pf, "AOI_CCD_NO,AOI_REVIEW_NO,OP_ID_1ST,OP_ID_2ND,OP_ID_CURRENT,DEFECT_JUGDE_1ST,DEFECT_JUGDE_2ND,DEFECT_JUGDE_CURRENT,DEFECT_REASON1,DEFECT_REASON2,"); - fprintf(pf, "DEFECT_REASON3,WSI_JUDGE,MURA_GRAY_H,MURA_GRAY_L,MURA_GRAY_AVE,MURA_AREA,MURA_LGT,MURA_WID,MURA_HGT,MURA_SIZE,"); - fprintf(pf, "MURA_PIX,MURA_TYPE,MURA_JUDGE,MURA_GRADE,MURA_IMAGE_DATA,RSRV1,RSRV2,RSRV3,RSRV4,RSRV5,"); - fprintf(pf, "RSRV6,RSRV7,RSRV8,RSRV9,FILE_NAME\n"); - - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(makeDataDefect(strLine, pData, pDefect)) - { - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "DEFECT_DATA_END\n\n"); - } - - - AKLOG("MakeAOIFile Complete : [%s]", strFilePathName.GetBuffer(0)); - fclose(pf); - return TRUE; -} - -BOOL CGlassRawCSOT::MakeAnaFile( CgrmGlassRawData* pData ) -{ - return TRUE; - - CString strFilePathName; - strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); - fprintf(pf, "m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); - for(int i=0; i<MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i); - fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState"); - fprintf(pf, "\n"); - - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(pData->GetGlassData()->m_nScanCoordinateY == 1) //분판설비의 경우 XY반전 - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for(int iz=0; iz<MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - else - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for(int iz=0; iz<MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - } - AKLOG("MakeAnaFile Complete %s", strFilePathName); - fclose(pf); - - return TRUE; -} - -void CGlassRawCSOT::makeDataHeader( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - CString strCurDateTime; - { - CTime Time = m_tmReviewEnd; - strCurDateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - } - strValue.Format("FILE_VERSION:%.1lf\n", 1.0); - strLine += strValue; - strValue.Format("FILE_CREATED_TIME:%s\n", strCurDateTime); - strLine += strValue; - strValue.Format("EQUIP_TYPE:%s\n", pGlassData->m_strEquipID); - strLine += strValue; - strValue.Format("EQUIP_ID:%s\n", pGlassData->m_strStepID); - strLine += strValue; - strValue.Format("CONTENT:%s\n", _T("GLASS_DATA/EQP_GLASS_DATA/BLOCK_SUMMARY/PANEL_SUMMARY/DEFECT_DATA")); - strLine += strValue; -} -void CGlassRawCSOT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - //물류정보 파싱해서 가지고 오기 CString strProcessID, strProductID, strLotID, strSlotID; - { - std::map<CString, CString> mapTransData; - - CString strTemp; - strTemp.Format("D:\\DIT_ResultData\\DownloadData\\%s.dat", pGlassData->m_strGlassID); - - FILE *pFile = fopen(strTemp.GetBuffer(0), "r"); - if(pFile) - { - const int MAX_BUFFER = 1024; - char buffer[MAX_BUFFER]; - CString strKey; - CString strValue; - char* pFlagPos; - char* pEndFlagPos; - char* pTest = "』"; - while (fgets(buffer, MAX_BUFFER, pFile) != '\0') - { - pFlagPos = strchr(buffer, '='); - - if(pFlagPos == NULL) continue; - - if(pEndFlagPos = strchr(pFlagPos, -29)) //"』"끝에 있는 end문자열 제거 - pEndFlagPos[0] = 0; - - pFlagPos[0] = 0; // = 이걸 0으로 만들어서 Key, Value 분리 - - strKey = buffer; - strValue = &pFlagPos[1]; - - strValue.Remove(' ');//혹시 모를 공백 제거 [김태현 2019/1/31] - - mapTransData.insert(std::make_pair(strKey, strValue)); - } - fclose(pFile); - } - - - //GlassData에 값을 넣어줌 [김태현 2019/1/31] - strcpy(pGlassData->m_strSLotID, mapTransData["Slot_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strProductID, mapTransData["Product_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strProcessID, mapTransData["Process_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strLotID, mapTransData["Lot_ID"].GetBuffer(0)); - } - - - strValue.Format("%s", pGlassData->m_strGlassID); //1. Glass ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strOwnerCode); //2. OWNER_CODE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strOwnerType); //3. OWNER_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProductID); //4. PRODUCT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProcessID); //5. PROCESS_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProductGroup); //6. PRODUCT_GROUP - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strLotID); //7. LOT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strCSTID); //8. CST_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strSLotID); //9.SLOT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProcessID); //10.PRE_PROCESS_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strEquipID); //11.PRE_EQP_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strPreChamerID); //12.PRE_CHAMBER_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strPreRecipeID); //13.PRE_RECIPE_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGroupID); //14.GROUP_ID - strLine += strValue+strDiv; - strValue.Format("%c", pGlassData->m_cAutoSampleFlag); //15.AUTOSAMPLEFLAG - strLine += strValue; - - -} - -void CGlassRawCSOT::makeDataEQPGlass( CString& strLine, CgrmGlassRawData* pData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - _grmGlassData *pGlassData = pData->GetGlassData(); - CString strStartTime, strEndTime; - { - CTime Time; - Time = pGlassData->m_tmGlassLoading; - strStartTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - Time = pGlassData->m_tmInspectionEND; - strEndTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - } - - strValue.Format("%s", pGlassData->m_strPPID); //1. RECIPE_NO - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); //2. RECIPE_NAME - strLine += strValue+strDiv; - strValue.Format("%s", strStartTime); //3. START_TIME - strLine += strValue+strDiv; - strValue.Format("%s", strEndTime); //4. END_TIME - strLine += strValue+strDiv; - strValue.Format("%d", strEndTime - strStartTime); //5. TACT_TIME - strLine += strValue+strDiv; - strValue.Format("%s", "0000"); //6. GLASS_YIELD - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nCellNum); //7. TOTAL_PANEL_CNT(CELL COUNT) - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumJudgeOKBlack+pGlassData->m_nDefectNumJudgeOKWhite); //8. OK_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumJudgeNG); //9. NG_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //10. X1_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //11. X2_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //12. X3_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //13. X4_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //14. X5_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //15. X6_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //16. X7_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //17. X8_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumSizeHuge); //18. X9_PANEL(Count) //190116 고객사가 키큰여자 여기에다가 ol갯수 적어 달라고 요청 - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNum); //19. TT_DEFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumSizeSmall); //20. S_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumSizeMid); //21. M_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nDefectNumSizeLarge); //22. L_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%s", "AAAA"); //23. GLASS_ID_DCR - strLine += strValue+strDiv; - strValue.Format("%d", m_MuraResultFile.GetDefectNum()); //24. TT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //25. POINT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //26. LINE_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //27. AREA_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //28. POINT_1 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //29. POINT_2 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //30. POINT_3 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //31. POINT_4 - strLine += strValue+strDiv; - strValue.Format("%d", 1); //32. POINT_5 - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGlassJudge); //33. GLASS_JUDGE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGlassCode); //34. GLASS_GRADE - strLine += strValue; - -} - -void CGlassRawCSOT::makeDataBlock( CString& strLine, _grmBlockData* pBlockData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - strValue.Format("%s", pBlockData->m_strBlockID); //1. BLOCK_ID - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeAOI); //2. BLOCK_JUDGE_AOI - strLine += strValue+strDiv; - strValue.Format("%c", 'G'); //3. BLOCK_JUDGE_MURA - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeATS); //4. BLOCK_JUDGE_ATS - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeTEG); //5. BLOCK_JUDGE_TEG - strLine += strValue+strDiv; - strValue.Format("%d", 0); //6. TT_PANEL - strLine += strValue+strDiv; - strValue.Format("%d", 0); //7. OK_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //8. NG_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //9. X1_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //10. X2_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //11. X3_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //12. X4_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //13. X5_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //14. X6_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //15. X7_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //16. X8_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //17. X9_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //18. TT_DEFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //19. S_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //20. M_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //21. L_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //22. GLASS_ID_DCR - strLine += strValue+strDiv; - strValue.Format("%d", 0); //23. TT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //24. POINT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //25. LINE_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //26. AREA_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //27. POINT_1 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //28. POINT_2 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //29. POINT_3 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //30. POINT_4 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //31. POINT_5 - strLine += strValue; -} - - -void CGlassRawCSOT::makeDataCell( CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - CString strJudgeCode = "O"; - CString strLastCode = "O"; - { - switch (pCellData->m_nJudgement) - { - case 0: strJudgeCode = "G"; break; - case 2: strJudgeCode = "N"; break; - case 10: strJudgeCode = "O"; break; - case 1: strJudgeCode = "O"; break; - case 6: strJudgeCode = "O"; break; - case 7: strJudgeCode = "O"; break; - } - } - strLastCode = strJudgeCode; - - strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. PANEL_ID - strLine += strValue+strDiv; - strValue.Format("%s", strJudgeCode); //2. PANEL_JUDGE_AOI - strLine += strValue+strDiv; - strValue.Format("%s", "O"); //3. PANEL_JUDGE_MURA - strLine += strValue+strDiv; - strValue.Format("%s", strLastCode); //4. PANEL_JUDGE - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->getTotalDefectNum()); //5. tt_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", m_MuraResultFile.GetDefectNum(pCellData->m_nCellID)); //6. tt_MURA - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //7. PANEL_ID_2D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nJudgeFlag); //8. PANEL_FLAG - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nJudgeGlade); //9. PANEL_GRADE - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellLeft); //10. X_D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellTop); //11. Y_D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellRight-pCellData->m_rectCellLeft); //12. X_A - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellBottom-pCellData->m_rectCellTop); //13. Y_A - strLine += strValue+strDiv; - strValue.Format("%d", 0); //14. DELTA_X - strLine += strValue+strDiv; - strValue.Format("%d", 0); //15. DELTA_Y - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nDefectNumJudgeOKWhite + pCellData->m_nDefectNumJudgeOKBlack); //16. OK_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nDefectNumJudgeNG); //17. NG_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //18. X1_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //19. X2_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //20. X3_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //21. X4_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //22. X5_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //23. X6_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //24. X7_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //25. X8_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //26. X9_DEFECT - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //27. IJP1 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //28. IJP2 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //29. IJP3 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //30. IJP4 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //31. IJP5 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //32. IJP6 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //33. IJP7 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //34. IJP8 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //35. Mark1 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //36. Mark2 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //37. Mark3 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //38. Mark4 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //39. Mark5 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //40. Mark6 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //41. Mark7 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //42. Mark8 - strLine += strValue; - -} - -BOOL CGlassRawCSOT::makeDataDefect( CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - _grmGlassData* pGlassData = pData->GetGlassData(); - _grmCellData* pCellData = pData->GetCellData(pDefectData->m_nCellIdx); - - if(pDefectData->m_ReviewDefect.m_nPlanType == 1000 //aoi결함 - //pDefectData->m_ReviewDefect.m_nPlanType == 999 - ) return FALSE; - - CString strUpdateTime; - { - CTime Time = pGlassData->m_tmInspectionEND; - strUpdateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - -// CTime Time = pGlassData->m_tmInspectionEND; -// strUpdateTime.Format("%04d%02d%02d%02d%02d", -// Time.GetYear(), Time.GetMonth(), Time.GetDay(), -// Time.GetHour(), Time.GetMinute()); - } - - CString strStepFirst;//첫번째 스택 [김태현 2018/12/5] - { - if(pDefectData->m_strStackFirst[0]) - { - strStepFirst =pDefectData->m_strStackFirst; - } - else - { - strStepFirst = pGlassData->m_strStepID; - } - } - - strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. CELL ID - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectID); //2. DEFECT_NO1 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectID); //3. DEFECT_NO2 - strLine += strValue+strDiv; - strValue.Format("%s", strUpdateTime); //4. UPDATE_TIME - strLine += strValue+strDiv; - strValue.Format("%s", strStepFirst); //5. STEP_1ST - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); //6. RECIPE_1ST - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strStepID); //7. STEP_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); //8. RECIPE_CURRENT - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGate); //9. GATE1, 셀별 Gate라인(얼라인 보정 전) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellData); //10. DATA1, 셀별 Data라인(얼라인 보정 전) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGateAlign); //11. GATE2, 셀별 Gate라인(얼라인 보정 후) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellDataAlign); //12. DATA2, 셀별 Data라인(얼라인 보정 후) - strLine += strValue+strDiv; - - - - //_grmGlassData* pGlass = pData->GetGlassData(); - - - - // x,y좌표 mm단위 소수점 세자리까지 표현 (고객사 요청) - 2019-01-30 HJH - if(pGlassData->m_nScanCoordinateY == 1) //분판설비의 경우 XY반전 - { - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //13. X1, um단위 X좌표 (Glass Center 기준, 얼라인보정 후) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //14. Y1, um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //15. X2, 셀 원점 기준 x 좌표 - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //16. Y2, 셀 원점 기준 y 좌표 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 결함 밝기 Max - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 결함 밝기 Min - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 결함 밝기 Avg - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 결함 길이 - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID , <- 190106 고객 담당자 요청 키큰여자 사이즈타입으로로 변경 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_sPixelWidth); //24. AOI_DEFECT_HGT - } - else - { - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //13. X1, um단위 X좌표 (Glass Center 기준, 얼라인보정 후) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //14. Y1, um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //15. X2, 셀 원점 기준 x 좌표 - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //16. Y2, 셀 원점 기준 y 좌표 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 결함 밝기 Max - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 결함 밝기 Min - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 결함 밝기 Avg - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 결함 길이 - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID, <- 190106 고객 담당자 요청 키큰여자 사이즈타입으로로 변경 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_sPixelHeight); //24. AOI_DEFECT_HGT - } - - - - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSizeType); //25. AOI_DEFECT_WIH, SERVER_DefectSizeType - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMSize); //26. AOI_DEFECT_SIZE - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //27. DEFECT_PIX - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSubType == 2 ? 1:0); //28. MASK_DEFECT, 한 Glass에서 발견된 마스크결함 묶음의 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSubType == 3 ? 1:0); //29. REPEAT_DEFECT, 연속결함발견위한 동일좌표 반복수 - strLine += strValue+strDiv; - strValue.Format("%s", pDefectData->m_ReviewDefect.m_strRevImageName); //30. DEFECT_IMAGE_DATA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectIdx); //31. AOI_CCD_NO - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_ReviewDefect.m_nShotIndex); //32. AOI_REVIEW_NO - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //33. OP_ID_1ST - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //34. OP_ID_2ND - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //35. OP_ID_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //36. DEFECT_JUGDE_1ST - strLine += strValue+strDiv; - strValue.Format("%s", "O"); //37. DEFECT_JUGDE_2ND - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //38. DEFECT_JUGDE_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //39. DEFECT_REASON1 - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //40. DEFECT_REASON2 - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //41. DEFECT_REASON3 - strLine += strValue+strDiv; - strValue.Format("%.2lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[1]);//42. WSI_JUDGE - strLine += strValue+strDiv; - //KMS - 20190128 MuraDefect 내용 추가 - _MacroDefect* pMuraDefect = m_MuraResultFile.FindDefect(pDefectData->m_nUMCenterAlignX, pDefectData->m_nUMCenterAlignY); - _MacroDefect MuraDefect; - if(pMuraDefect) MuraDefect = *pMuraDefect; - strValue.Format("%d", MuraDefect.G_MAX); //43. MURA_GRAY_H - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.G_MIN); //44. MURA_GRAY_L - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.G_AVG); //45. MURA_GRAY_AVE - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_S); //46. MURA_AREA - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_L); //47. MURA_LGT - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_W); //48. MURA_WID - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.COORD_Y1); //49. MURA_HGT - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_S); //50. MURA_SIZE - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.COORD_PX1); //51. MURA_PIX - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.MAIN_TYPE.GetBuffer(0)); //52. MURA_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.JUDGE.GetBuffer(0)); //53. MURA_JUDGE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.SUB_TYPE.GetBuffer(0)); //54. MURA_GRADE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.IMG_FILE_NAME.GetBuffer(0)); //55. MURA_IMAGE_DATA - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //56. RSRV1 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //57. RSRV2 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //58. RSRV3 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //59. RSRV4 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //60. RSRV5 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //61. RSRV6 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //62. RSRV7 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //63. RSRV8 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //64. RSRV9 - strLine += strValue+strDiv; - strValue.Format("%s", pDefectData->m_strAoiImageName); //65. FILE_NAME - strLine += strValue; - - return TRUE; -} - -BOOL CGlassRawCSOT::ReadMuraFile( CgrmGlassRawData* pData ) -{ - if(m_MuraResultFile.m_strServerResultRawPath.IsEmpty() == FALSE)//읽은 결과 파일 복사,삭제 태현[2017/3/29] - { - CString strMacroFilePath; - { - strMacroFilePath.Format("%s\\%s_*.dat", m_MuraResultFile.m_strMacroResultRawPath, pData->GetGlassData()->m_strGlassID); - - CFileFind FF; - - if (FF.FindFile(strMacroFilePath)) - { - FF.FindNextFile(); - strMacroFilePath = FF.GetFilePath(); - FF.Close(); - } - else - { - AKLOG("Find Macro File Fail. [%s]", strMacroFilePath); - return FALSE; - } - } - - - CString strMacroResultTargetPath; - strMacroResultTargetPath.Format("%s\\%s.dat", m_MuraResultFile.m_strServerResultRawPath, pData->GetGlassData()->m_strGlassID); - - if(TRUE == CopyFile(strMacroFilePath,strMacroResultTargetPath,FALSE)) - { - if(m_MuraResultFile.openFile(strMacroResultTargetPath.GetBuffer(0)) == TRUE) - { - AKLOG("Macro File Read Success : %dItem", m_MuraResultFile.GetDefectNum()); - //DeleteFile(strMacroResultTargetPath); //삭제는 hddspacectrl이 하는 것으로 통일 - } - else - { - AKLOG("Macro File Read Fail[%s]", strMacroFilePath); - //DeleteFile(strMacroResultTargetPath); //삭제는 hddspacectrl이 하는 것으로 통일 - return FALSE; - } - } - } - - //무라 이미지 복사(ftp업로드를 위함) [김태현 2018/12/5] - if(m_MuraResultFile.m_strMacroResultImagePath.IsEmpty() == FALSE && m_MuraResultFile.m_strServerResultImagePath.IsEmpty() == FALSE)//이미지 파일 복사 태현[2017/3/29] - { - CString strMacroImageSrcPath; - CString strMacroImageTarPath; - - strMacroImageSrcPath.Format("%s\\%s", m_MuraResultFile.m_strMacroResultImagePath, pData->GetGlassData()->m_strGlassID); - strMacroImageTarPath.Format("%s\\%s", m_MuraResultFile.m_strServerResultImagePath, pData->GetGlassData()->m_strGlassID); - - AKLOG("Macro Image File Copy Start[%s]", strMacroImageTarPath); - CakFileUtil::CopyFolder(strMacroImageSrcPath.GetBuffer(0), strMacroImageTarPath.GetBuffer(0), FALSE); - AKLOG("Macro Image File Copy End"); - } - - return TRUE; -} - - -void CGlassRawCSOT::SendMessageFTPUploadLinkFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_LINK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CGlassRawCSOT::SendMessageFTPUploadRaw( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CGlassRawCSOT::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_STACK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawCSOT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - { - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); - sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); - sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); - sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); - } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawCSOT::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[32];// = "*.*"; - char strLocalFolder[256] = {}; - char strLocalFile[32];// = "*.*"; - - GetFormatDescription(sort, strServerFolder, strServerFile, strLocalFolder, strLocalFile, pGlassData); - -// if(0)//test -// { -// sprintf(strServerFolder, "HDD1/DIT/TestC"); -// } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, strLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE; - upParam.m_nSendResultCode = FALSE; - upParam.m_nProcessType = FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawUpload; //<--요건 나중에 구분 - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - - -BOOL CGlassRawCSOT::SendMessageFTPUploadIndexFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) - return FALSE; - - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return FALSE; - - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - - // if(0)//test - // { - // sprintf(strServerFolder, "HDD1/DIT/TestC"); - // ServerFile = "ftptestfile.txt"; - // - // sprintf(strLocalFolder, "D:"); - // pLocalFile = "ftptestfile.txt"; - // } - - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - return TRUE; -} - -void CGlassRawCSOT::GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData) -{ - - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - CString strGlassIDLevel5th = strGlassID.Left(5); - CString strGlassIDLevel8th = strGlassID.Left(8); - - switch(sort) - { - case FTPCMD_AOI_IMAGE: - { - CTime time = m_tmReviewEnd; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_REVIEW_IMAGE: - { - CTime time = m_tmReviewEnd; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_REV_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_RAW: - { - CTime time = m_tmReviewEnd; - CString strFileName;//파일생성 시간 때문에 여기서 정확하게 파일명 다시 정정 - { - //Glass 정보 - CTime CurrTime = m_tmReviewEnd; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - case FTPCMD_STACK: - { - CTime time = pGlassData->m_tmGlassLoading; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", m_StackResult.getStackEquipID(), time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - //가장 최근걸 찾아야 하나? [김태현 2019/1/12] - sprintf(pServerFile, "%s_%s_*.csv", - m_StackResult.getStackOperID(), - pGlassData->m_strGlassID); - - sprintf(pLocalPath, "%s", m_StackResult.getStackLocalPath()); - sprintf(pLocalFile, "%s.txt", strGlassID.GetBuffer(0)); - } - break; - case FTPCMD_MURA_IMAGE: - { - CTime time = m_tmReviewEnd; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_INDEX: - { - CTime time = m_tmReviewEnd; - sprintf(pServerPath, "INDEX\\%s", pGlassData->m_strEquipID); - sprintf(pServerFile, "%04d%02d%02d_%s.csv", time.GetYear(), time.GetMonth(), time.GetDay(), pGlassData->m_strStepID); - - sprintf(pLocalPath, "%s", LOCAL_INDEX_PATH); - sprintf(pLocalFile, "%s", pServerFile); - } - break; - - case FTPCMD_LINK: - { - CTime time = m_tmReviewEnd; - CString strFileName;//파일생성 시간 때문에 여기서 정확하게 파일명 다시 정정 - { - //Glass 정보 - CTime CurrTime = m_tmReviewEnd; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%s\\%s\\%s\\%s", "LINK", pGlassData->m_strEquipID, - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - } - - -} - - -BOOL CGlassRawCSOT::WriteIndexFile( _grmGlassData* pGlassData) -{ - CTime time = CTime::GetCurrentTime();//m_tmReviewEnd; - - CString strLocalIndexFileName; - strLocalIndexFileName.Format("%s\\%04d%02d%02d_%s.csv", LOCAL_INDEX_PATH, - time.GetYear(), time.GetMonth(), time.GetDay(), - pGlassData->m_strStepID); - - - if(!PathFileExists(strLocalIndexFileName))//처음생성되는 파일인지 체크 해서 헤더 라인 넣어줌 - { - FILE* pFile = fopen(strLocalIndexFileName.GetBuffer(0), "w"); - if(pFile) - { - fprintf(pFile, "Date_Time, Path\n"); - fclose(pFile); - } - } - - - FILE* fp = fopen(strLocalIndexFileName.GetBuffer(0), "a"); - if(fp == NULL) - return FALSE; - - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - CString strDate; - strDate.Format("%04d/%02d/%02d %02d:%02d:%02d", time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); - - char* pHomePath = "/EL"; - //Review Image File - { - GetFormatDescription(FTPCMD_REVIEW_IMAGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strLocal_FindPath; - CString strServer_Path; - - strLocal_FindPath.Format("%s\\*.*", strLocalFolder); - strServer_Path.Format("\\%s\\",strServerFolder); - - CFileFind finder; - BOOL bFind = finder.FindFile(strLocal_FindPath); - strServer_Path.Replace('\\', '/'); - while(bFind) - { - bFind = finder.FindNextFile(); - - if (finder.IsDots()) continue; - if (finder.IsDirectory()) continue; - - - fprintf(fp, "%s,%s%s%s\n", strDate, pHomePath, strServer_Path.GetBuffer(0), finder.GetFileName().GetBuffer(0)); - } - finder.Close(); - } - // Inspector Image - { - GetFormatDescription(FTPCMD_AOI_IMAGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strLocal_FindPath; - CString strServer_Path; - - strLocal_FindPath.Format("%s\\*.*", strLocalFolder); - strServer_Path.Format("\\%s\\",strServerFolder); - - CFileFind finder; - BOOL bFind = finder.FindFile(strLocal_FindPath); - strServer_Path.Replace('\\', '/'); - while(bFind) - { - bFind = finder.FindNextFile(); - - if (finder.IsDots()) continue; - if (finder.IsDirectory()) continue; - - - fprintf(fp, "%s,%s%s%s\n", strDate, pHomePath, strServer_Path.GetBuffer(0), finder.GetFileName().GetBuffer(0)); - } - finder.Close(); - } - // RAW - { - GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strServerPath = strServerFolder; - strServerPath.Replace('\\', '/'); - fprintf(fp, "%s,%s/%s/%s\n", strDate, pHomePath, strServerPath.GetBuffer(0), strServerFile); - } - if(m_MuraResultFile.IsRead())// MURA [김태현 2019/1/10] - { - GetFormatDescription(FTPCMD_MURA_IMAGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strLocal_FindPath; - CString strServer_Path; - - strLocal_FindPath.Format("%s\\*.*", strLocalFolder); - strServer_Path.Format("\\%s\\",strServerFolder); - - CFileFind finder; - BOOL bFind = finder.FindFile(strLocal_FindPath); - strServer_Path.Replace('\\', '/'); - while(bFind) - { - bFind = finder.FindNextFile(); - - if (finder.IsDots()) continue; - if (finder.IsDirectory()) continue; - - - fprintf(fp, "%s,%s/%s%s\n", strDate, pHomePath, strServer_Path.GetBuffer(0), finder.GetFileName().GetBuffer(0)); - } - finder.Close(); - } - - // Link File - { - GetFormatDescription(FTPCMD_LINK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strServerPath = strServerFolder; - strServerPath.Replace('\\', '/'); - fprintf(fp, "%s,%s/%s/%s\n", strDate, pHomePath, strServerPath.GetBuffer(0), strServerFile); - } - - // Index - { - GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - CString strServerPath = strServerFolder; - strServerPath.Replace('\\', '/'); - fprintf(fp, "%s,%s/%s/%s\n", strDate, pHomePath, strServerPath.GetBuffer(0), strServerFile); - } - - - fclose(fp); - return TRUE; - -} - -CString CGlassRawCSOT::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) -{ - CString sStr; - switch(nDefectInfoType) - { - case DMT_DefectJudge:// Judge - { - sStr = "O"; - switch(nParam) - { - case 0: sStr.Format("O"); - break; - } - } - break; - - case DMT_DefectSizeType: - { - sStr = "S"; - switch(nParam) - { - //case SizeType_Unknown: sStr.Format("U"); break; - case 1: sStr.Format("S"); - break; - case 2: sStr.Format("M"); - break; - case 3: sStr.Format("L"); - break; - case 4: sStr.Format("O"); - break; - } - } - break; - - - } - return sStr; -} diff --git a/ReviewHistory/ReveiwHistory/GlassRawCSOT.h b/ReviewHistory/ReveiwHistory/GlassRawCSOT.h deleted file mode 100644 index ce9952f..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawCSOT.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" -#include "GlassRawRTMS.h" -#include "StackResultCSOT.h" -#include "MacroResultFile.h" -#include "CustomizeReview.h" - -enum emFTPCommand -{ - FTPCMD_REVIEW_IMAGE =0, - FTPCMD_RAW , - FTPCMD_INDEX , - FTPCMD_AOI_IMAGE , - FTPCMD_MURA_RAW , - FTPCMD_MURA_IMAGE , - FTPCMD_STACK , - FTPCMD_LINK , - FILESORT_NUM -}; - - - -class CGlassRawCSOT : public CGlassRawBase -{ -public: - enum emDefectMemberType - { - DMT_DefectJudge = 0, - DMT_DefectSizeType - }; - -public: - CGlassRawCSOT(void); - ~CGlassRawCSOT(void); - - static char* GetClassName(){return "CSOT T4";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData); - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceCustomizeReview(CgrmGlassRawData* pData); - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData); - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - virtual BOOL SequenceFtpUpload(char* pRawFileName); - - virtual void NotifyUpdateOptionInfo(){m_StackResult.readOptionFile();}; - - - - void SendMessageFTPUploadRaw(_grmGlassData* pGlassData); - void SendMessageFTPDownloadStack(_grmGlassData* pGlassData); - void SendMessageFTPUploadImage(_grmGlassData* pGlassData, emFTPCommand sort); - BOOL SendMessageFTPUploadIndexFile(_grmGlassData* pGlassData); - void SendMessageFTPUploadLinkFile(_grmGlassData* pGlassData); - void SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData); - - - BOOL ReadMuraFile(CgrmGlassRawData* pData); - BOOL MakeAOIFile(CgrmGlassRawData* pData); - BOOL MakeAnaFile(CgrmGlassRawData* pData); - BOOL WriteIndexFile(_grmGlassData* pGlassData); - - void makeDataHeader(CString& strLine, _grmGlassData* pGlassData); - void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); - void makeDataEQPGlass(CString& strLine, CgrmGlassRawData* pData); - void makeDataBlock(CString& strLine, _grmBlockData* pBlockData); - void makeDataCell(CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData); - BOOL makeDataDefect(CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData); - - void GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData); - CString GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam); - - -public: - CMacroResultFile* GetmuraResultFile(){return &m_MuraResultFile;} // RTMS에서 Mura 데이터 사용 - - -protected: - CGlassRawRTMS m_GlassRawRTMS;//RTMS용 결과파일 생성관리 [김태현 2018/12/5] - CMacroResultFile m_MuraResultFile; //무라용 결과파일 생성관리 [김태현 2018/12/5] - CStackResultCSOT m_StackResult; - CCustomizeReview m_CustomizeReview; - - CTime m_tmReviewStart; - CTime m_tmReviewEnd; -}; - - - diff --git a/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp b/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp deleted file mode 100644 index d7e5708..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp +++ /dev/null @@ -1,1432 +0,0 @@ -癤�#include "StdAfx.h" -#include "GlassRawDemo.h" -#include "akLoggerExt.h" -#include "MacroResultFile.h" -#include "akCore/akFileUtil.h" -#include "akGridData.h" - -//#include "AOIDefinitionType.h" -//#include "AOIDefinition.h" - -#define LOCAL_INDEX_PATH "D:\\DIT_ResultData\\Index\\" -#define LOCAL_REV_IMAGE_PATH "D:\\ResultData\\Upload\\Image\\" -#define LOCAL_AOI_IMAGE_PATH "D:\\Image\\Defect\\" -#define LOCAL_MURA_IMAGE_PATH "D:\\DIT_ResultData\\Mura\\IMG\\" -#define LOCAL_DEEP_PATH "D:\\DIT_ResultData\\Deeplearning\\" - -#define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" -#define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" -#define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" -#define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" - - - -CGlassRawDemo::CGlassRawDemo(void) -{ - CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL); - CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL); - m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); - - m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); -} - -CGlassRawDemo::~CGlassRawDemo(void) -{ -} - -BOOL CGlassRawDemo::SequenceGlassLoading( CgrmGlassRawData* pData ) -{ - /* //�뒪�깮湲곕뒫 - if(0)//m_StackResult.getStackUse()) - { - SendMessageFTPDownloadDataFile(pData->GetGlassData(0)); - if(IsUseDuglex(pData)) SendMessageFTPDownloadDataFile(pData->GetGlassData(1)); - - m_StackResult[0].StackFileReadStart(pData->GetGlassData(0)->m_strGlassID); - if(IsUseDuglex(pData)) m_StackResult[1].StackFileReadStart(pData->GetGlassData(1)->m_strGlassID); - } - */ - - return TRUE; -} - -BOOL CGlassRawDemo::SequenceInspectEnd( CgrmGlassRawData* pData ) -{ - m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); - m_tmFileCreateTime = CTime::GetCurrentTime(); - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - { - _grmGlassData* pGlassData = pData->GetGlassData(); - CTime CurrTime = pGlassData->m_tmGlassLoading; - CString strTime=_T(""), strFileName=_T(""); - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s.bin", pGlassData->m_strGlassID, strTime.GetBuffer(0)); - - strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0)); - } - strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - if(!WriteBinFile(pData)) - return FALSE; - - return TRUE; -} - -BOOL CGlassRawDemo::SequenceReviewStart( CgrmGlassRawData* pData ) -{ - m_tmReviewStart = m_tmReviewEnd = CTime::GetCurrentTime(); - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH); - //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - CString strFindFile; - int nCloseTime = 600*100000;//sec - int nReTryTime = 30; - { - CTime tmReviewLoading = CTime::GetCurrentTime(); - CString strWild; - strWild.Format("%s\\%s_*.*", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID); - CakFileUtil akFileFinder; - while(nReTryTime--) - { - akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); - VECFINDDATA* pFindData = akFileFinder.getFindData(); - int nFileNamePos = strlen(akFileFinder.getProcessPath()); - std::map<LONGLONG, CString> mapSpanFileName; - for(int i=0; i<pFindData->size(); i++) - { - char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; - { - CakParser parser; - parser.process(pFileName, "_."); - if(parser.getTokNum() < 4) continue; - - int nDataTime[8]={}; - { - int nTokIndex=0; - const char* pGlassId = parser.getTokStr(nTokIndex++); - char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; - char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; - - nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; - nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; - nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; - nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; - nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; - nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; - } - - CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] ); - CTimeSpan tmSpan = tmReviewLoading-tmTemp; - mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); - } - } - - if(mapSpanFileName.empty() == FALSE) - { - if(mapSpanFileName.begin()->first < nCloseTime) - { - //媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17] - strFindFile = mapSpanFileName.begin()->second; - break; - } - } - akFileFinder.clear(); - Sleep(100); - } - } - - if(strFindFile.IsEmpty()) return FALSE; - - strcpy(pData->GetGlassData()->m_strFileName, strFindFile.GetBuffer(0)); - - - if(!ReadBinFile(pData)) - return FALSE; - - strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); - - return TRUE; -} - - -BOOL CGlassRawDemo::SequenceReviewEnd( CgrmGlassRawData* pData ) -{ - m_tmReviewEnd = CTime::GetCurrentTime(); - m_tmFileCreateTime = CTime::GetCurrentTime(); - - //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] - pData->GetGlassData()->m_strFileName; - strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH); - - if(0) ReadMuraFile(pData); - - if(WriteAOIFile(pData) == FALSE) - return FALSE; - - if(0) - { - _grmGlassData* pGlassData = pData->GetGlassData(); - - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE); - SendMessageFTPUploadLinkFile(pGlassData); - - } - - - - - return TRUE; -} - -BOOL CGlassRawDemo::SequenceFtpUpload( char* pRawFilePathName ) -{ - - CTime tmFileCreate; - _grmGlassData GlassData; - _grmGlassData* pGlassData = &GlassData; - - //�젙蹂� �뼸�뼱�삤湲� [源��깭�쁽 2019/1/25] - { - //"D:\\DIT_ResultData\\Raw\\"; - //6CCF01P7_HPANELID_20190125_002545.csv - - char* pFileName = CakFileUtil::getFileName(pRawFilePathName); - char* pext = CakFileUtil::getFileExt(pRawFilePathName); - - if(!strcmp(pext, "csv") == FALSE) return FALSE; - - CakParser parser; - parser.process(pFileName, "_."); - if(parser.getTokNum() < 5) return FALSE; - - strcpy(pGlassData->m_strOperID, parser.getTokStr(0)); - strcpy(pGlassData->m_strGlassID, parser.getTokStr(1)); - char* pDate = &pFileName[parser.getTokPos(2)]; - char* pTime = &pFileName[parser.getTokPos(3)]; - int nData[8]={}; - nData[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; - nData[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; - nData[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; - nData[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; - nData[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; - nData[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; - - CTime tmTemp(nData[0], nData[1], nData[2], nData[3], nData[4], nData[5] ); - tmFileCreate = tmTemp; - - FILE* pf = fopen(pRawFilePathName, "r"); - if(pf) - { - char buffer[512]; - fgets(buffer, 512, pf); - if(buffer[0] != 'H') return FALSE; - fgets(buffer, 512, pf); - fgets(buffer, 512, pf); - - fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; - strcpy(pGlassData->m_strEquipID, &buffer[strlen("EQUIP_TYPE:")]); - - fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; - strcpy(pGlassData->m_strStepID, &buffer[strlen("EQUIP_ID:")]); - } - else - { - return FALSE; - } - - - CakFileUtil::getPath(pGlassData->m_strPath, 256, pRawFilePathName); - - } - - - - m_tmReviewEnd = m_tmReviewStart = tmFileCreate; - - - SendMessageFTPUploadRaw(pGlassData); - SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); - SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE);//�뾾�쑝硫� �떎�뙣 �븯寃좎� - SendMessageFTPUploadLinkFile(pGlassData); - - - return TRUE; -} - - -BOOL CGlassRawDemo::WriteAOIFile( CgrmGlassRawData* pData ) -{ - BOOL bResult = TRUE; - - bResult &= MakeAOIFile(pData); - bResult &= MakeAnaFile(pData); - - m_GlassRawRTMS.WriteAOIFile(pData); - - AKLOG("WriteAOIFile Complete"); - return bResult; -} - -BOOL CGlassRawDemo::MakeAOIFile( CgrmGlassRawData* pData ) -{ - _grmGlassData* pGlass = pData->GetGlassData(); - CString strFilePathName; - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmReviewEnd; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s.csv", pGlass->m_strGlassID, strTime); - } - - strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); - //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); - - - //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - - - CString strBuffer; - CString strLine; - - ////////////////////////////////////////////////////////////////////////// - //HEDER - fprintf(pf, "HEADER_BEGIN\n"); - { - makeDataHeader(strLine, pGlass); - fprintf(pf, "%s", strLine); - } - fprintf(pf, "HEADER_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //GLASS_DATA - fprintf(pf, "GLASS_DATA_BEGIN\n"); - { - fprintf(pf, "GLASS_ID,OWNER_CODE,OWNER_TYPE,PRODUCT_ID,PROCESS_ID,PRODUCT_GROUP,LOT_ID,CST_ID,SLOT_ID,PRE_PROCESS_ID,PRE_EQP_ID,PRE_CHAMBER_ID,PRE_RECIPE_ID,GROUP_ID,AUTOSAMPLEFLAG\n"); - - makeDataGlass(strLine, pGlass); - fprintf(pf, "%s\n", strLine); - } - fprintf(pf, "GLASS_DATA_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //BLOCK_SUMMARY - fprintf(pf, "BLOCK_SUMMARY_BEGIN\n"); - { - fprintf(pf, "BLOCK_ID,BLOCK_JUDGE_AOI,BLOCK_JUDGE_MURA,BLOCK_JUDGE_ATS,BLOCK_JUDGE_TEG,TT_PANEL,OK_PANEL,NG_PANEL,X1_PANEL,X2_PANEL,X3_PANEL,X4_PANEL,X5_PANEL,X6_PANEL,X7_PANEL,X8_PANEL,X9_PANEL,TT_DEFECT_CNT,S_SIZE_DEFECT_CNT,M_SIZE_DEFECT_CNT,L_SIZE_DEFECT_CNT,TT_MURA_CNT,POINT_MURA_CNT,LINE_MURA_CNT,AREA_MURA_CNT,GLASS_ID_DCR,POINT_1,POINT_2,POINT_3,POINT_4,POINT_5\n"); - - int nBlockNum = 1; - for(int i=0; i<nBlockNum; i++) - { - makeDataBlock(strLine, pData->GetBlockData(i)); - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "BLOCK_SUMMARY_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //PANEL_SUMMARY - fprintf(pf, "PANEL_SUMMARY_BEGIN\n"); - { - fprintf(pf, "PANEL_ID,PANEL_JUDGE_AOI,PANEL_JUDGE_MURA,PANEL_JUDGE,TT_DEFECT,TT_MURA,PANEL_ID_2D,PANEL_FLAG,PANEL_GRADE,X_D,Y_D,X_A,Y_A,DELTA_X,DELTA_Y,OK_DEFECT,NG_DEFECT,X1_DEFECT,X2_DEFECT,X3_DEFECT,X4_DEFECT,X5_DEFECT,X6_DEFECT,X7_DEFECT,X8_DEFECT,X9_DEFECT,IJP1,IJP2,IJP3,IJP4,IJP5,IJP6,IJP7,IJP8,Mark1,Mark2,Mark3,Mark4,Mark5,Mark6,Mark7,Mark8\n"); - - for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) - { - _grmCellData* pCell = pData->GetCellData(iCell); - makeDataCell(strLine, pData, pCell); - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "PANEL_SUMMARY_END\n\n"); - - ////////////////////////////////////////////////////////////////////////// - //DEFECT_DATA - fprintf(pf, "DEFECT_DATA_BEGIN\n"); - { - fprintf(pf, "PANEL_ID,DEFECT_NO1,DEFECT_NO2,UPDATE_TIME,STEP_1ST,RECIPE_1ST,STEP_CURRENT,RECIPE_CURRENT,GATE1,DATA1,"); - fprintf(pf, "GATE2,DATA2,X1,Y1,X2,Y2,AOI_DEFECT_TYPE,AOI_GRAY_H,AOI_GRAY_L,AOI_GRAY_AVE,"); - fprintf(pf, "AOI_DEFECT_AREA,AOI_DEFECT_LGT,AOI_DEFECT_WID,AOI_DEFECT_HGT,AOI_DEFECT_WIH,AOI_DEFECT_SIZE,DEFECT_PIX,MASK_DEFECT,REPEAT_DEFECT,DEFECT_IMAGE_DATA,"); - fprintf(pf, "AOI_CCD_NO,AOI_REVIEW_NO,OP_ID_1ST,OP_ID_2ND,OP_ID_CURRENT,DEFECT_JUGDE_1ST,DEFECT_JUGDE_2ND,DEFECT_JUGDE_CURRENT,DEFECT_REASON1,DEFECT_REASON2,"); - fprintf(pf, "DEFECT_REASON3,WSI_JUDGE,MURA_GRAY_H,MURA_GRAY_L,MURA_GRAY_AVE,MURA_AREA,MURA_LGT,MURA_WID,MURA_HGT,MURA_SIZE,"); - fprintf(pf, "MURA_PIX,MURA_TYPE,MURA_JUDGE,MURA_GRADE,MURA_IMAGE_DATA,RSRV1,RSRV2,RSRV3,RSRV4,RSRV5,"); - fprintf(pf, "RSRV6,RSRV7,RSRV8,RSRV9,FILE_NAME\n"); - - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(makeDataDefect(strLine, pData, pDefect)) - { - fprintf(pf, "%s\n", strLine); - } - } - fprintf(pf, "DEFECT_DATA_END\n\n"); - } - - - AKLOG("MakeAOIFile Complete : [%s]", strFilePathName.GetBuffer(0)); - fclose(pf); - return TRUE; -} - -BOOL CGlassRawDemo::MakeAnaFile( CgrmGlassRawData* pData ) -{ - return TRUE; - - CString strFilePathName; - strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); - - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) - { - AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); - return FALSE; - } - - fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); - fprintf(pf, "m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); - for(int i=0; i<MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i); - fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState"); - fprintf(pf, "\n"); - - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(pData->GetGlassData()->m_nScanCoordinateY == 1) //遺꾪뙋�꽕鍮꾩쓽 寃쎌슦 XY諛섏쟾 - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for(int iz=0; iz<MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - else - { - fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", - pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, - pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, - pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, - pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); - for(int iz=0; iz<MAX_ZONE_NUM; iz++) - { - fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); - } - fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", - pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); - - fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); - - fprintf(pf, "\n"); - } - } - AKLOG("MakeAnaFile Complete %s", strFilePathName); - fclose(pf); - - return TRUE; -} - -void CGlassRawDemo::makeDataHeader( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - CString strCurDateTime; - { - CTime Time = m_tmReviewEnd; - strCurDateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - } - strValue.Format("FILE_VERSION:%.1lf\n", 1.0); - strLine += strValue; - strValue.Format("FILE_CREATED_TIME:%s\n", strCurDateTime); - strLine += strValue; - strValue.Format("EQUIP_TYPE:%s\n", pGlassData->m_strEquipID); - strLine += strValue; - strValue.Format("EQUIP_ID:%s\n", pGlassData->m_strStepID); - strLine += strValue; - strValue.Format("CONTENT:%s\n", _T("GLASS_DATA/EQP_GLASS_DATA/BLOCK_SUMMARY/PANEL_SUMMARY/DEFECT_DATA")); - strLine += strValue; -} -void CGlassRawDemo::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - //臾쇰쪟�젙蹂� �뙆�떛�빐�꽌 媛�吏�怨� �삤湲� CString strProcessID, strProductID, strLotID, strSlotID; - { - std::map<CString, CString> mapTransData; - - CString strTemp; - strTemp.Format("D:\\DIT_ResultData\\DownloadData\\%s.dat", pGlassData->m_strGlassID); - - FILE *pFile = fopen(strTemp.GetBuffer(0), "r"); - if(pFile) - { - const int MAX_BUFFER = 1024; - char buffer[MAX_BUFFER]; - CString strKey; - CString strValue; - char* pFlagPos; - char* pEndFlagPos; - char* pTest = "��"; - while (fgets(buffer, MAX_BUFFER, pFile) != '\0') - { - pFlagPos = strchr(buffer, '='); - - if(pFlagPos == NULL) continue; - - if(pEndFlagPos = strchr(pFlagPos, -29)) //"��"�걹�뿉 �엳�뒗 end臾몄옄�뿴 �젣嫄� - pEndFlagPos[0] = 0; - - pFlagPos[0] = 0; // = �씠嫄� 0�쑝濡� 留뚮뱾�뼱�꽌 Key, Value 遺꾨━ - - strKey = buffer; - strValue = &pFlagPos[1]; - - strValue.Remove(' ');//�샊�떆 紐⑤�� 怨듬갚 �젣嫄� [源��깭�쁽 2019/1/31] - - mapTransData.insert(std::make_pair(strKey, strValue)); - } - fclose(pFile); - } - - //GlassData�뿉 媛믪쓣 �꽔�뼱以� [源��깭�쁽 2019/1/31] - strcpy(pGlassData->m_strSLotID, mapTransData["Slot_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strProductID, mapTransData["Product_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strProcessID, mapTransData["Process_ID"].GetBuffer(0)); - strcpy(pGlassData->m_strLotID, mapTransData["Lot_ID"].GetBuffer(0)); - } - - - strValue.Format("%s", pGlassData->m_strGlassID); //1. Glass ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strOwnerCode); //2. OWNER_CODE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strOwnerType); //3. OWNER_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProductID); //4. PRODUCT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProcessID); //5. PROCESS_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProductGroup); //6. PRODUCT_GROUP - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strLotID); //7. LOT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strCSTID); //8. CST_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strSLotID); //9.SLOT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProcessID); //10.PRE_PROCESS_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strEquipID); //11.PRE_EQP_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strPreChamerID); //12.PRE_CHAMBER_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strPreRecipeID); //13.PRE_RECIPE_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGroupID); //14.GROUP_ID - strLine += strValue+strDiv; - strValue.Format("%c", pGlassData->m_cAutoSampleFlag); //15.AUTOSAMPLEFLAG - strLine += strValue; - - -} - -void CGlassRawDemo::makeDataBlock( CString& strLine, _grmBlockData* pBlockData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - strValue.Format("%s", pBlockData->m_strBlockID); //1. BLOCK_ID - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeAOI); //2. BLOCK_JUDGE_AOI - strLine += strValue+strDiv; - strValue.Format("%c", 'G'); //3. BLOCK_JUDGE_MURA - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeATS); //4. BLOCK_JUDGE_ATS - strLine += strValue+strDiv; - strValue.Format("%c", pBlockData->m_cBlockJudgeTEG); //5. BLOCK_JUDGE_TEG - strLine += strValue+strDiv; - strValue.Format("%d", 0); //6. TT_PANEL - strLine += strValue+strDiv; - strValue.Format("%d", 0); //7. OK_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //8. NG_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //9. X1_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //10. X2_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //11. X3_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //12. X4_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //13. X5_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //14. X6_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //15. X7_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //16. X8_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //17. X9_PANEL(Count) - strLine += strValue+strDiv; - strValue.Format("%d", 0); //18. TT_DEFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //19. S_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //20. M_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //21. L_SIZE_DFECT_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //22. GLASS_ID_DCR - strLine += strValue+strDiv; - strValue.Format("%d", 0); //23. TT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //24. POINT_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //25. LINE_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //26. AREA_MURA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //27. POINT_1 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //28. POINT_2 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //29. POINT_3 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //30. POINT_4 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //31. POINT_5 - strLine += strValue; -} - - -void CGlassRawDemo::makeDataCell( CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - CString strJudgeCode = "O"; - CString strLastCode = "O"; - { - switch (pCellData->m_nJudgement) - { - case 0/*Judge_OK*/: strJudgeCode = "G"; break; - case 2/*Judge_NG*/: strJudgeCode = "N"; break; - case 10/*Judge_Rework*/: strJudgeCode = "O"; break; - case 1/*Judge_RP*/: strJudgeCode = "O"; break; - case 6/*Judge_Review*/: strJudgeCode = "O"; break; - case 7/*Judge_RC*/: strJudgeCode = "O"; break; - } - } - strLastCode = strJudgeCode; - - strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. PANEL_ID - strLine += strValue+strDiv; - strValue.Format("%s", strJudgeCode); //2. PANEL_JUDGE_AOI - strLine += strValue+strDiv; - strValue.Format("%s", "O"); //3. PANEL_JUDGE_MURA - strLine += strValue+strDiv; - strValue.Format("%s", strLastCode); //4. PANEL_JUDGE - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->getTotalDefectNum()); //5. tt_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", m_MuraResultFile.GetDefectNum(pCellData->m_nCellID)); //6. tt_MURA - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //7. PANEL_ID_2D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nJudgeFlag); //8. PANEL_FLAG - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nJudgeGlade); //9. PANEL_GRADE - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellLeft); //10. X_D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellTop); //11. Y_D - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellRight-pCellData->m_rectCellLeft); //12. X_A - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellBottom-pCellData->m_rectCellTop); //13. Y_A - strLine += strValue+strDiv; - strValue.Format("%d", 0); //14. DELTA_X - strLine += strValue+strDiv; - strValue.Format("%d", 0); //15. DELTA_Y - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nDefectNumJudgeOKWhite + pCellData->m_nDefectNumJudgeOKBlack); //16. OK_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nDefectNumJudgeNG); //17. NG_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //18. X1_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //19. X2_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //20. X3_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //21. X4_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //22. X5_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //23. X6_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //24. X7_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //25. X8_DEFECT - strLine += strValue+strDiv; - strValue.Format("%d", 0); //26. X9_DEFECT - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //27. IJP1 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //28. IJP2 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //29. IJP3 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //30. IJP4 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //31. IJP5 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //32. IJP6 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //33. IJP7 - strLine += strValue+strDiv; - strValue.Format("%s", "0"); //34. IJP8 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //35. Mark1 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //36. Mark2 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //37. Mark3 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //38. Mark4 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //39. Mark5 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //40. Mark6 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //41. Mark7 - strLine += strValue+strDiv; - strValue.Format("%d", 0); //42. Mark8 - strLine += strValue; - -} - -BOOL CGlassRawDemo::makeDataDefect( CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData ) -{ - strLine.Empty(); - CString strValue; - CString strDiv = ","; - - _grmGlassData* pGlassData = pData->GetGlassData(); - _grmCellData* pCellData = pData->GetCellData(pDefectData->m_nCellIdx); - - if(pDefectData->m_ReviewDefect.m_nPlanType == 1000 //aoi寃고븿 - //pDefectData->m_ReviewDefect.m_nPlanType == 999 - ) return FALSE; - - CString strUpdateTime; - { - CTime Time = pGlassData->m_tmInspectionEND; - strUpdateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", - Time.GetYear(), Time.GetMonth(), Time.GetDay(), - Time.GetHour(), Time.GetMinute(), Time.GetSecond()); - -// CTime Time = pGlassData->m_tmInspectionEND; -// strUpdateTime.Format("%04d%02d%02d%02d%02d", -// Time.GetYear(), Time.GetMonth(), Time.GetDay(), -// Time.GetHour(), Time.GetMinute()); - } - - CString strStepFirst;//泥ル쾲吏� �뒪�깮 [源��깭�쁽 2018/12/5] - { - if(pDefectData->m_strStackFirst[0]) - { - strStepFirst =pDefectData->m_strStackFirst; - } - else - { - strStepFirst = pGlassData->m_strStepID; - } - } - - strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. CELL ID - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectID); //2. DEFECT_NO1 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectID); //3. DEFECT_NO2 - strLine += strValue+strDiv; - strValue.Format("%s", strUpdateTime); //4. UPDATE_TIME - strLine += strValue+strDiv; - strValue.Format("%s", strStepFirst); //5. STEP_1ST - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); //6. RECIPE_1ST - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strStepID); //7. STEP_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); //8. RECIPE_CURRENT - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGate); //9. GATE1, ��蹂� Gate�씪�씤(�뼹�씪�씤 蹂댁젙 �쟾) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellData); //10. DATA1, ��蹂� Data�씪�씤(�뼹�씪�씤 蹂댁젙 �쟾) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGateAlign); //11. GATE2, ��蹂� Gate�씪�씤(�뼹�씪�씤 蹂댁젙 �썑) - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellDataAlign); //12. DATA2, ��蹂� Data�씪�씤(�뼹�씪�씤 蹂댁젙 �썑) - strLine += strValue+strDiv; - - - - //_grmGlassData* pGlass = pData->GetGlassData(); - - - - // x,y醫뚰몴 mm�떒�쐞 �냼�닔�젏 �꽭�옄由ш퉴吏� �몴�쁽 (怨좉컼�궗 �슂泥�) - 2019-01-30 HJH - if(pGlassData->m_nScanCoordinateY == 1) //遺꾪뙋�꽕鍮꾩쓽 寃쎌슦 XY諛섏쟾 - { - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //13. X1, um�떒�쐞 X醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //14. Y1, um�떒�쐞 Y醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //15. X2, �� �썝�젏 湲곗� x 醫뚰몴 - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //16. Y2, �� �썝�젏 湲곗� y 醫뚰몴 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 寃고븿 諛앷린 Max - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 寃고븿 諛앷린 Min - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 寃고븿 諛앷린 Avg - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 寃고븿 湲몄씠 - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID , <- 190106 怨좉컼 �떞�떦�옄 �슂泥� �궎�겙�뿬�옄 �궗�씠利덊��엯�쑝濡쒕줈 蹂�寃� - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_sPixelWidth); //24. AOI_DEFECT_HGT - } - else - { - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //13. X1, um�떒�쐞 X醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //14. Y1, um�떒�쐞 Y醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //15. X2, �� �썝�젏 湲곗� x 醫뚰몴 - strLine += strValue+strDiv; - strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //16. Y2, �� �썝�젏 湲곗� y 醫뚰몴 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 寃고븿 諛앷린 Max - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 寃고븿 諛앷린 Min - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 寃고븿 諛앷린 Avg - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 寃고븿 湲몄씠 - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID, <- 190106 怨좉컼 �떞�떦�옄 �슂泥� �궎�겙�뿬�옄 �궗�씠利덊��엯�쑝濡쒕줈 蹂�寃� - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_sPixelHeight); //24. AOI_DEFECT_HGT - } - - - - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSizeType); //25. AOI_DEFECT_WIH, SERVER_DefectSizeType - strLine += strValue+strDiv; - strValue.Format("%.3f", pDefectData->m_nUMSize); //26. AOI_DEFECT_SIZE - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); //27. DEFECT_PIX - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSubType == 2 ? 1:0); //28. MASK_DEFECT, �븳 Glass�뿉�꽌 諛쒓껄�맂 留덉뒪�겕寃고븿 臾띠쓬�쓽 - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_DefectSubType == 3 ? 1:0); //29. REPEAT_DEFECT, �뿰�냽寃고븿諛쒓껄�쐞�븳 �룞�씪醫뚰몴 諛섎났�닔 - strLine += strValue+strDiv; - strValue.Format("%s", pDefectData->m_ReviewDefect.m_strRevImageName); //30. DEFECT_IMAGE_DATA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectIdx); //31. AOI_CCD_NO - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_ReviewDefect.m_nShotIndex); //32. AOI_REVIEW_NO - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //33. OP_ID_1ST - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //34. OP_ID_2ND - strLine += strValue+strDiv; - strValue.Format("%s", "A*"); //35. OP_ID_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //36. DEFECT_JUGDE_1ST - strLine += strValue+strDiv; - strValue.Format("%s", "O"); //37. DEFECT_JUGDE_2ND - strLine += strValue+strDiv; - strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //38. DEFECT_JUGDE_CURRENT - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //39. DEFECT_REASON1 - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //40. DEFECT_REASON2 - strLine += strValue+strDiv; - strValue.Format("%s", "A"); //41. DEFECT_REASON3 - strLine += strValue+strDiv; - strValue.Format("%.2lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[1]);//42. WSI_JUDGE - strLine += strValue+strDiv; - //KMS - 20190128 MuraDefect �궡�슜 異붽� - _MacroDefect* pMuraDefect = m_MuraResultFile.FindDefect(pDefectData->m_nUMCenterAlignX, pDefectData->m_nUMCenterAlignY); - _MacroDefect MuraDefect; - if(pMuraDefect) MuraDefect = *pMuraDefect; - strValue.Format("%d", MuraDefect.G_MAX); //43. MURA_GRAY_H - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.G_MIN); //44. MURA_GRAY_L - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.G_AVG); //45. MURA_GRAY_AVE - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_S); //46. MURA_AREA - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_L); //47. MURA_LGT - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_W); //48. MURA_WID - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.COORD_Y1); //49. MURA_HGT - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.SIZE_S); //50. MURA_SIZE - strLine += strValue+strDiv; - strValue.Format("%d", MuraDefect.COORD_PX1); //51. MURA_PIX - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.MAIN_TYPE.GetBuffer(0)); //52. MURA_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.JUDGE.GetBuffer(0)); //53. MURA_JUDGE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.SUB_TYPE.GetBuffer(0)); //54. MURA_GRADE - strLine += strValue+strDiv; - strValue.Format("%s", MuraDefect.IMG_FILE_NAME.GetBuffer(0)); //55. MURA_IMAGE_DATA - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //56. RSRV1 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //57. RSRV2 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //58. RSRV3 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //59. RSRV4 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //60. RSRV5 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //61. RSRV6 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //62. RSRV7 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //63. RSRV8 - strLine += strValue+strDiv; - strValue.Format("%s", "*"); //64. RSRV9 - strLine += strValue+strDiv; - strValue.Format("%s", pDefectData->m_strAoiImageName); //65. FILE_NAME - strLine += strValue; - - return TRUE; -} - -BOOL CGlassRawDemo::ReadMuraFile( CgrmGlassRawData* pData ) -{ - if(m_MuraResultFile.m_strServerResultRawPath.IsEmpty() == FALSE)//�씫�� 寃곌낵 �뙆�씪 蹂듭궗,�궘�젣 �깭�쁽[2017/3/29] - { - CString strMacroFilePath; - { - strMacroFilePath.Format("%s\\%s_*.dat", m_MuraResultFile.m_strMacroResultRawPath, pData->GetGlassData()->m_strGlassID); - - CFileFind FF; - - if (FF.FindFile(strMacroFilePath)) - { - FF.FindNextFile(); - strMacroFilePath = FF.GetFilePath(); - FF.Close(); - } - else - { - AKLOG("Find Macro File Fail. [%s]", strMacroFilePath); - return FALSE; - } - } - - - CString strMacroResultTargetPath; - strMacroResultTargetPath.Format("%s\\%s.dat", m_MuraResultFile.m_strServerResultRawPath, pData->GetGlassData()->m_strGlassID); - - if(TRUE == CopyFile(strMacroFilePath,strMacroResultTargetPath,FALSE)) - { - if(m_MuraResultFile.openFile(strMacroResultTargetPath.GetBuffer(0)) == TRUE) - { - AKLOG("Macro File Read Success : %dItem", m_MuraResultFile.GetDefectNum()); - //DeleteFile(strMacroResultTargetPath); //�궘�젣�뒗 hddspacectrl�씠 �븯�뒗 寃껋쑝濡� �넻�씪 - } - else - { - AKLOG("Macro File Read Fail[%s]", strMacroFilePath); - //DeleteFile(strMacroResultTargetPath); //�궘�젣�뒗 hddspacectrl�씠 �븯�뒗 寃껋쑝濡� �넻�씪 - return FALSE; - } - } - } - - //臾대씪 �씠誘몄� 蹂듭궗(ftp�뾽濡쒕뱶瑜� �쐞�븿) [源��깭�쁽 2018/12/5] - if(m_MuraResultFile.m_strMacroResultImagePath.IsEmpty() == FALSE && m_MuraResultFile.m_strServerResultImagePath.IsEmpty() == FALSE)//�씠誘몄� �뙆�씪 蹂듭궗 �깭�쁽[2017/3/29] - { - CString strMacroImageSrcPath; - CString strMacroImageTarPath; - - strMacroImageSrcPath.Format("%s\\%s", m_MuraResultFile.m_strMacroResultImagePath, pData->GetGlassData()->m_strGlassID); - strMacroImageTarPath.Format("%s\\%s", m_MuraResultFile.m_strServerResultImagePath, pData->GetGlassData()->m_strGlassID); - - AKLOG("Macro Image File Copy Start[%s]", strMacroImageTarPath); - CakFileUtil::CopyFolder(strMacroImageSrcPath.GetBuffer(0), strMacroImageTarPath.GetBuffer(0), FALSE); - AKLOG("Macro Image File Copy End"); - } - - return TRUE; -} - - -void CGlassRawDemo::SendMessageFTPUploadLinkFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_LINK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CGlassRawDemo::SendMessageFTPUploadRaw( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CGlassRawDemo::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_STACK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawDemo::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - { - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); - sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); - sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); - sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); - } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CGlassRawDemo::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[32];// = "*.*"; - char strLocalFolder[256] = {}; - char strLocalFile[32];// = "*.*"; - - GetFormatDescription(sort, strServerFolder, strServerFile, strLocalFolder, strLocalFile, pGlassData); - -// if(0)//test -// { -// sprintf(strServerFolder, "HDD1/DIT/TestC"); -// } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, strLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE; - upParam.m_nSendResultCode = FALSE; - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; //<--�슂嫄� �굹以묒뿉 援щ텇 - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - - -BOOL CGlassRawDemo::SendMessageFTPUploadIndexFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) - return FALSE; - - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return FALSE; - - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - - // if(0)//test - // { - // sprintf(strServerFolder, "HDD1/DIT/TestC"); - // ServerFile = "ftptestfile.txt"; - // - // sprintf(strLocalFolder, "D:"); - // pLocalFile = "ftptestfile.txt"; - // } - - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - return TRUE; -} - -void CGlassRawDemo::GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData) -{ - - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - CString strGlassIDLevel5th = strGlassID.Left(5); - CString strGlassIDLevel8th = strGlassID.Left(8); - - switch(sort) - { - case FTPCMD_AOI_IMAGE: - { - CTime time = m_tmFileCreateTime; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_REVIEW_IMAGE: - { - CTime time = m_tmFileCreateTime; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_REV_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_RAW: - { - CTime time = m_tmFileCreateTime; - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - case FTPCMD_STACK: - { -// CTime time = pGlassData->m_tmGlassLoading; -// sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", m_StackResult.getStackEquipID(), time.GetYear(), time.GetMonth(), time.GetDay(), -// strGlassIDLevel5th.GetBuffer(0), -// strGlassIDLevel8th.GetBuffer(0), -// strGlassID.GetBuffer(0)); -// -// //媛��옣 理쒓렐嫄� 李얠븘�빞 �븯�굹? [源��깭�쁽 2019/1/12] -// sprintf(pServerFile, "%s_%s_*.csv", -// m_StackResult.getStackOperID(), -// pGlassData->m_strGlassID); -// -// sprintf(pLocalPath, "%s", m_StackResult.getStackLocalPath()); -// sprintf(pLocalFile, "%s.txt", strGlassID.GetBuffer(0)); - } - break; - case FTPCMD_MURA_IMAGE: - { - CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_INDEX: - { - CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "INDEX\\%s", pGlassData->m_strEquipID); - sprintf(pServerFile, "%04d%02d%02d_%s.csv", time.GetYear(), time.GetMonth(), time.GetDay(), pGlassData->m_strStepID); - - sprintf(pLocalPath, "%s", LOCAL_INDEX_PATH); - sprintf(pLocalFile, "%s", pServerFile); - } - break; - - case FTPCMD_LINK: - { - CTime time = m_tmFileCreateTime; - CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 - { - //Glass �젙蹂� - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%s\\%s\\%s\\%s", "LINK", pGlassData->m_strEquipID, - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - } - - -} - - - -CString CGlassRawDemo::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) -{ - CString sStr; - switch(nDefectInfoType) - { - case DMT_DefectJudge:// Judge - { - switch(nParam) - { - case 0: sStr.Format("O"); - break; - default: sStr.Format("O");//sStr.Format("Ets"); - break; - } - } - break; - - case DMT_DefectSizeType: - { - sStr = "S"; - switch(nParam) - { - //case SizeType_Unknown: sStr.Format("U"); break; - case 1/*SizeType_Small*/: sStr.Format("S"); - break; - case 2/*SizeType_Mid*/: sStr.Format("M"); - break; - case 3/*SizeType_Large*/: sStr.Format("L"); - break; - case 4/*SizeType_Huge*/: sStr.Format("O"); - break; - //case SizeType_Ultra: sStr.Format("Ultra"); break; - //default: sStr.Format("Ets"); break; - } - } - break; - - - } - return sStr; -} diff --git a/ReviewHistory/ReveiwHistory/GlassRawDemo.h b/ReviewHistory/ReveiwHistory/GlassRawDemo.h deleted file mode 100644 index cadcbbf..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawDemo.h +++ /dev/null @@ -1,72 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" -#include "GlassRawRTMS.h" -//#include "StackResultCSOT.h" -#include "MacroResultFile.h" -#include "CustomizeReview.h" -#include "InterfaceFTP.h" - -class CGlassRawDemo : public CGlassRawBase, public CInterfaceFTP -{ -public: - enum emDefectMemberType - { - DMT_DefectJudge = 0, - DMT_DefectSizeType - }; - -public: - CGlassRawDemo(void); - ~CGlassRawDemo(void); - - static char* GetClassName(){return "Demo#1";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData); - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData); - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData); - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - virtual BOOL SequenceFtpUpload(char* pRawFileName); - - virtual void NotifyUpdateOptionInfo(){/*m_StackResult.readOptionFile();*/}; - - - - virtual void SendMessageFTPUploadRaw(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadStack(_grmGlassData* pGlassData); - virtual void SendMessageFTPUploadImage(_grmGlassData* pGlassData, emFTPCommand sort); - virtual BOOL SendMessageFTPUploadIndexFile(_grmGlassData* pGlassData); - virtual void SendMessageFTPUploadLinkFile(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData); - virtual void GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData); - - - BOOL ReadMuraFile(CgrmGlassRawData* pData); - BOOL MakeAOIFile(CgrmGlassRawData* pData); - BOOL MakeAnaFile(CgrmGlassRawData* pData); - BOOL WriteIndexFile(_grmGlassData* pGlassData); - - void makeDataHeader(CString& strLine, _grmGlassData* pGlassData); - void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); - void makeDataBlock(CString& strLine, _grmBlockData* pBlockData); - void makeDataCell(CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData); - BOOL makeDataDefect(CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData); - - CString GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam); - -public: - void SetEquipType(int nType){m_nEquipType = nType;}; - -protected: - int m_nEquipType; // 0:Inline, 1:Offline - - CGlassRawRTMS m_GlassRawRTMS;//RTMS용 결과파일 생성관리 [김태현 2018/12/5] - CMacroResultFile m_MuraResultFile; //무라용 결과파일 생성관리 [김태현 2018/12/5] - - CTime m_tmReviewStart; - CTime m_tmReviewEnd; -}; diff --git a/ReviewHistory/ReveiwHistory/GlassRawRTMS.cpp b/ReviewHistory/ReveiwHistory/GlassRawRTMS.cpp deleted file mode 100644 index f286af8..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawRTMS.cpp +++ /dev/null @@ -1,849 +0,0 @@ -#include "StdAfx.h" -#include "GlassRawRTMS.h" -#include "akLoggerExt.h" -#include "GlassRawCSOT.h" -#include "MacroResultFile.h" - -#define RTMSTEMPPATH _T("D:\\DitRtms\\Data\\TempFile\\") -#define RTMSRAWPATH _T("D:\\DitRtms\\Data\\RawFile\\") -#define DEFECTPATH _T("D:\\Image\\Defect") -#define RTMSIMAGEPATH _T("D:\\DitRtms\\Data\\ReviewImage\\") - -char* g_pCellCode2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - -//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 -//enum DefectLocation { DefectLoc_Pattern = 0, DefectLoc_Crack, DefectLoc_BM, DefectLoc_ASG, DefectLoc_PAD, DefectLoc_C2C, DefectLoc_EdgeLine, DefectLoc_Proj, DefectLoc_Chip, DefectLoc_Corner }; -//enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown }; -//enum SERVER_DefectSubType { DefectSubType_Normal = 0, DefectSubType_MC, DefectSubType_Mask, DefectSubType_Common, DefectSubType_NoDefect }; - -CGlassRawRTMS::CGlassRawRTMS(void) -{ -} - -CGlassRawRTMS::~CGlassRawRTMS(void) -{ -} - -BOOL CGlassRawRTMS::SequenceGlassLoading( CgrmGlassRawData* pData ) -{ - return TRUE; -} - -BOOL CGlassRawRTMS::SequenceInspectEnd( CgrmGlassRawData* pData ) -{ - WriteAOIFile(pData); - - return TRUE; -} - -BOOL CGlassRawRTMS::SequenceReviewStart( CgrmGlassRawData* pData ) -{ - return TRUE; -} - -BOOL CGlassRawRTMS::SequenceReviewEnd( CgrmGlassRawData* pData ) -{ - WriteAOIFile(pData); - - return TRUE; -} - - -BOOL CGlassRawRTMS::WriteAOIFile( CgrmGlassRawData* pData ) -{ - BOOL bResult = TRUE; - - bResult &= MakeAOIPreProcessing(pData); - bResult &= MakeAOIFile(pData); - bResult &= CopyRTMSFiles(pData); - - if(bResult)AKLOG("Write RTMS File Complete"); - else AKLOG("Write RTMS File Fail"); - return TRUE; -} - -BOOL CGlassRawRTMS::MakeAOIFile( CgrmGlassRawData* pData ) -{ - _grmGlassData* pGlass = pData->GetGlassData(); - - CString strFilePathName = m_strRTMSRAWFile; - - FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); - if(pf == NULL) return FALSE; - - - - CString strLine; - //Glass - { - CString strItems = "ITEM,GLASSITEM,LOTITEM,LOT_ID,LOT_TYPE,STEP_ID,EQUIPMENT_ID,EQUIPMENT_UNIT,GLS_ID,SLOT_ID,GLS_JUDGE,GLS_GRADE,PRODUCT_ID,CASSETTE_ID,OPERATOR_ID,RECIPE_NAME,AUTO_MODE,PNL_ORIGIN,PROCESSING_TIME,START_TIME,END_TIME,CAMERA_CNT,SCAN_CNT,INSP_TACT, REVIEW_TACT, CIM_ONOFF,PROCESS_ID,PROD_TYPE,BATCHID,H_PANELID,E_PANELID,P_PANELID,COMP_COUNT,PPID"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - makeDataGlass(strLine, pGlass); - - fprintf(pf, "%s\n", strLine); - } - - //Cell - { - CString strItems = "ITEM,CELLITEM,PANEL_ID,PANEL_GRADE,COORD_X,COORD_Y,CELL_SIZE_X,CELL_SIZE_Y,GATE_LINE,DATA_LINE,LAMP_GRAY_01,LAMP_GRAY_02,LAMP_GRAY_03,LAMP_GRAY_04"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) - { - _grmCellData* pCell = pData->GetCellData(iCell); - makeDataCell(strLine, pGlass, pCell); - fprintf(pf, "%s\n", strLine); - } - - } - - //Defect - { // DEFECT_TYPE_3 빠짐 // RTMS Defect 정보 추가 [ 21-03-08 KJG ] - CString strItems = "ITEM,DEFITEM,POINT_NO,PANEL_ID,PR_X,PR_Y,PR_DATA,PR_GATE,SE_X,SE_Y,SE_DATA,SE_GATE,DEFECT_LAYER,DETECTED_AREA,DEFECT_SIZE_TYPE,DEFECT_SIZE_X,DEFECT_SIZE_Y,DEFECT_LENGTH,DEFECT_AREA,DEFECT_TYPE_1,DEFECT_TYPE_2,REPEAT_DEFECT,MASK_DEFECT,IMAGE_FILE1,IMAGE_FILE2,SCAN_NO,CAMERA_NO,RSCALE,SIZE_AREA,PEAK,REV_RESOLUTION,REV_CAMNUM,REV_MAG,DEFECT_CODE,DEFECT_GRADE,STACK_FLAG,STACK_COUNT,STACK_STEP,ZONE_NO,GRAY_MIN,GRAY_MAX,GRAY_AVG,R_GRAY_MIN,R_GRAY_MAX,R_GRAY_AVG"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - //210203 CJH - CutOff 대상 결과파일 작성 제외 - if (pDefect->m_bDefectCutoff == TRUE) continue; - - makeDataDefect(strLine, pData->GetGlassData(), pData->GetCellData(pDefect->m_nCellIdx), pDefect); - fprintf(pf, "%s\n", strLine); - } - } - - //Camera - { - CString strItems = "ITEM,CAMERAITEM,SCAN_NO,CAMERA_NO,LAMP,MAX,AVG,MIN"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - for(int iScan=0; iScan < pGlass->m_nScanNum; iScan++) - { - for(int iCam=0; iCam < pGlass->m_nCameraNum; iCam++) - { - makeDataCamera(strLine, pGlass, iCam, iScan); - fprintf(pf, "%s\n", strLine); - } - } - } - - - //WSI - { - CString strItems = "ITEM,WSIITEM,WSI_NO,TYPE,NAME,JUDGE,CELLID,COORD_X,COORD_Y,COORD_X2,COORD_Y2,IMG_FILE_2D,IMAGE_FILE_3D,WSI_RESOLUTION"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - for(int iDefect = 0; iDefect < pGlass->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(pDefect->m_ReviewDefect.m_nWsi_Type == 2) - { - makeDataWSI(strLine, &pDefect->m_ReviewDefect); - fprintf(pf, "%s\n", strLine); - } - } - } - - //Mura - if(m_pMuraResultFile && m_pMuraResultFile->IsRead()) - { - CString strItems = "ITEM,MURAITEM,DATE,TIME,DEFECTNO,RECIPE,GLASSID,CELLID,COORD_X1,COORD_Y1,COORD_PX1,COORD_PY1,NOMURA,SIZE_W,SIZE_L,SIZE_S,MAIN_TYPE,SUB_TYPE,PEAK,G_MIN,G_MAX,G_AVG,CAM,SCAN,PIXEL_PEAK,REGION,SIZE_T,PEAK_T,IMG_FILE_NAME"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - _MacroDefect* pMuraDefect; - int nSize = (int)m_pMuraResultFile->GetDefectNum(); - - for(int iMuraDefect=0; iMuraDefect < nSize; iMuraDefect++) - { - pMuraDefect = m_pMuraResultFile->GetDefect(iMuraDefect); - makeMuraDefect(strLine, pMuraDefect); - fprintf(pf, "%s\n", strLine); - } - - } - - // Measure - if(0) - { - CString strItems = "ITEM,LOCITEM,MEASURE_NO,MEASURE_TYPE,MEASURE_NAME,CELL_ID,X_COORDINATE_1,Y_COORDINATE_1,X_COORDINATE_2,Y_COORDINATE_2,X_SHIFT,Y_SHIFT,IMAGENAME,SHIFTDIST,ACTIVETOSEALANT,SEALSIZE"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - // 사용 안함 - } - - // User Review - { - CString strItems = "ITEM,USERREVITEM,USER_NO,PR_X,PR_Y,IMAGE_FILE_NAME,REV_RESOLUTION"; - fprintf(pf, "%s\n", strItems.GetBuffer(0)); - - for(int iDefect = 0; iDefect < pGlass->m_nDefectNum; iDefect++) - { - _grmDefectData* pDefect = pData->GetDefectData(iDefect); - if(pDefect->m_ReviewDefect.m_nPlanType == ditRaw::RPT_User) - { - makeUserReview(strLine, &pDefect->m_ReviewDefect); - fprintf(pf, "%s\n", strLine); - } - } - - } - - fclose(pf); - return TRUE; -} - - -void CGlassRawRTMS::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("GLASSDATA"); // GLASSITEM - strLine += strValue+strDiv; - strValue.Format("LOTDATA"); // LOTITEM - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strLotID); // LOT_ID - strLine += strValue+strDiv; - strValue.Format("LOTTYPE"); // LOT_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strStepID); // STEP_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strOperID); // EQUIPMENT_ID //210127 CJH - Equip ID <-> Oper ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strEquipID); // EQUIPMENT_UNIT - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGlassID); // GLS_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strSLotID); // SLOT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGlassJudge); // GLAS_JUDGE - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strGlassCode); // GLS_GRADE or Glass Code //**GRADE가 코드? - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strProductID); // PRODUCDT_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strCSTID); // CASSETTE_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strEPPID); // OPERATOR_ID - strLine += strValue+strDiv; - strValue.Format("%s", pGlassData->m_strRecipeName); // RECIPE_NAME - strLine += strValue+strDiv; - strValue.Format("%s", "AUTO_MODE"); // AUTOMODE - strLine += strValue+strDiv; - - if(pGlassData->m_nOriginDirection == 0) strValue.Format("Left Top"); // PNL_ORIGIN - else if(pGlassData->m_nOriginDirection == 1) strValue.Format("Right Top"); - else if(pGlassData->m_nOriginDirection == 10) strValue.Format("Left Bottom"); - else strValue.Format("Right Bottom"); - strLine += strValue+strDiv; - - strValue.Format("%s", "PROCESSING_TIME"); // PROCESSING_TIME - strLine += strValue+strDiv; - strValue.Format("%04d%02d%02d_%02d%02d%02d" // START_TIME - ,pGlassData->m_tmGlassLoading.GetYear() - ,pGlassData->m_tmGlassLoading.GetMonth() - ,pGlassData->m_tmGlassLoading.GetDay() - ,pGlassData->m_tmGlassLoading.GetHour() - ,pGlassData->m_tmGlassLoading.GetMinute() - ,pGlassData->m_tmGlassLoading.GetSecond() ); - strLine += strValue+strDiv; - strValue.Format("%04d%02d%02d_%02d%02d%02d" // END_TIME - ,pGlassData->m_tmInspectionEND.GetYear() - ,pGlassData->m_tmInspectionEND.GetMonth() - ,pGlassData->m_tmInspectionEND.GetDay() - ,pGlassData->m_tmInspectionEND.GetHour() - ,pGlassData->m_tmInspectionEND.GetMinute() - ,pGlassData->m_tmInspectionEND.GetSecond() ); - strLine += strValue+strDiv; - - strValue.Format("%d", pGlassData->m_nCameraNum); // CAMERA_CNT - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nScanNum); // SCAN_CNT - strLine += strValue+strDiv; - - strValue.Format("%d", pGlassData->m_tmInspectionEND-pGlassData->m_tmGlassLoading); // INSP_TACT - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_tmReviewEnd - pGlassData->m_tmReviewLoading); // REVIEW_TACT - strLine += strValue + strDiv; - - strValue.Format("%s", "CIM_ONOFF"); - strLine += strValue + strDiv; // CIM_ONOFF -SM - //210128 CJH - RTMS SDC 물류데이터 추가 - strValue.Format("%s", pGlassData->m_strProcessID); - strLine += strValue + strDiv; - strValue.Format("%s", pGlassData->m_strProdType); - strLine += strValue + strDiv; - CString strTemp; - strTemp = pGlassData->m_strGlassID; - strValue.Format("%s", strTemp.Left(6)); - strLine += strValue + strDiv; - strValue.Format("%s", pGlassData->m_strGlassID); - strLine += strValue + strDiv; - strValue.Format("%s", pGlassData->m_strEPPID); - strLine += strValue + strDiv; - strValue.Format("%s", pGlassData->m_strPairHPanelID); - strLine += strValue + strDiv; - strValue.Format("%d", pGlassData->m_nCellNum); - strLine += strValue + strDiv; - strValue.Format("%s", pGlassData->m_strPPID); - strLine += strValue; - -} - - -void CGlassRawRTMS::makeDataCell( CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("CELLDATA"); // CELLITEM - strLine += strValue+strDiv; - strValue.Format("%s",pCellData->m_strCellName); // PANEL_ID - strLine += strValue+strDiv; - { - if(pCellData->m_nJudgement == Judge_OK) strValue = "Judge_OK"; // PANEL_GRADE // PNL_GRADE - else if(pCellData->m_nJudgement == Judge_NG) strValue = "Judge_NG"; - else if(pCellData->m_nJudgement == Judge_Rework) strValue = "Judge_Rework"; - else if(pCellData->m_nJudgement == Judge_RP) strValue = "Judge_RP"; - else if(pCellData->m_nJudgement == Judge_Review) strValue = "Judge_Review"; - else if(pCellData->m_nJudgement == Judge_RC) strValue = "Judge_RC"; // 미처리 - else if(pCellData->m_nJudgement == Judge_Size) strValue = "Judge_Size"; //skip - else if (pCellData->m_nJudgement == Judge_TR) strValue = "Judge_TR"; - else if (pCellData->m_nJudgement == Judge_PR) strValue = "Judge_PR"; - else strValue = "Judge_OK"; - } - strLine += strValue+strDiv; - - strValue.Format("%d", pCellData->m_rectCellLeft); // COORD_X - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellTop); // COORD_Y - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellRight - pCellData->m_rectCellLeft); // CELL_SIZE_X - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_rectCellBottom - pCellData->m_rectCellTop); // CELL_SIZE_Y - strLine += strValue+strDiv; - - strValue.Format("%d", pCellData->m_nGateNum); // LN_GATE : Gate line 갯수 - strLine += strValue+strDiv; - strValue.Format("%d", pCellData->m_nDataNum); // LN_DATA : Data line 갯수 - strLine += strValue+strDiv; - - strValue.Format("LAMP_GRAY_01"); // LAMP_GRAY_01 - strLine += strValue+strDiv; - strValue.Format("LAMP_GRAY_02"); // LAMP_GRAY_02 - strLine += strValue+strDiv; - strValue.Format("LAMP_GRAY_03"); // LAMP_GRAY_03 - strLine += strValue+strDiv; - strValue.Format("LAMP_GRAY_04"); // LAMP_GRAY_04 - strLine += strValue+strDiv; - -} - -void CGlassRawRTMS::makeDataDefect( CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData, _grmDefectData* pDefectData ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("DEFDATA"); // DEFITEM - strLine += strValue+strDiv; - - strValue.Format("%d", pDefectData->m_nDefectID); // POINT_NO - strLine += strValue+strDiv; - strValue.Format("%c%c", '0' + pDefectData->m_nCellIdx / 36, g_pCellCode2[pDefectData->m_nCellIdx % 36]); // PANEL_ID - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMOriginX); // PR_X - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMOriginY); // PR_Y - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellData); // PR_DATA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGate); // PR_GATE - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMCenterAlignX); // SE_X - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMCenterAlignY); // SE_Y - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellData); // SE_DATA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCellGate); // SE_GATE - strLine += strValue+strDiv; - strValue.Format("%s", "DEFECT_LAYER"); // DEFECT_LAYER - strLine += strValue+strDiv; - { - int m_nDefectedArea = pDefectData->m_sDefectLoc; // DEFECTED_AREA // DETECTED_AREA - if(m_nDefectedArea == DefectLoc_Pattern) strValue = "PATTERN"; - else if(m_nDefectedArea == DefectLoc_Crack) strValue = "CRACK"; - else if(m_nDefectedArea == DefectLoc_BM) strValue = "BM"; - else if(m_nDefectedArea == DefectLoc_ASG) strValue = "ASG"; - else if(m_nDefectedArea == DefectLoc_PAD) strValue = "PAD"; - else if(m_nDefectedArea == DefectLoc_C2C) strValue = "C2C"; - else if(m_nDefectedArea == DefectLoc_EdgeLine) strValue = "EdgeLine"; - else if(m_nDefectedArea == DefectLoc_Proj) strValue = "Proj"; - else if(m_nDefectedArea == DefectLoc_Chip) strValue = "Chip"; - else if(m_nDefectedArea == DefectLoc_Corner) strValue = "Corner"; - else strValue = ""; - } - strLine += strValue+strDiv; - { - int m_nDefectSizeType = pDefectData->m_DefectSizeType; // DEFECT_SIZE_TYPE // DEFECT_SIZE_TYPE - if(m_nDefectSizeType == 0) strValue = "S"; - else if(m_nDefectSizeType == 1) strValue = "M"; - else if(m_nDefectSizeType == 2) strValue = "L"; - else if(m_nDefectSizeType == 3) strValue = "H"; - else if(m_nDefectSizeType == 4) strValue = "U"; - else strValue = "S"; - } - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMSizeX); // DEFECT_SZE_X - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMSizeY); // DEFECT_SIZE_Y - strLine += strValue+strDiv; - - //strValue.Format("%s", "DEFECT_LENGTH"); // DEFECT_LENGTH - double dUmRscale = pDefectData->m_nDefectRScale * pDefectData->m_dScanResolution; - strValue.Format("%.2lf", dUmRscale); // DEFECT_LENGTH - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nPixelSize); // DEFECT_AREA - strLine += strValue+strDiv; - { - int m_nDefectType1 = pDefectData->m_DefectBDType; // DEFECT_TYPE_1 (B, W, Unknown) - if(m_nDefectType1==DefectType_TBlack || m_nDefectType1==DefectType_RBlack) strValue = "B"; - else if(m_nDefectType1==DefectType_TWhite || m_nDefectType1==DefectType_RWhite) strValue = "W"; - else strValue = "Unknown"; - } - strLine += strValue+strDiv; - { - // DEFECT_TYPE_2 (Normal / MC / Mask / Common / NoDefect) - int m_nDefectType2 = pDefectData->m_DefectSubType; - - if(m_nDefectType2 == DefectSubType_Normal) strValue = "Normal"; - else if(m_nDefectType2 == DefectSubType_MC) strValue = "MC"; - else if(m_nDefectType2 == DefectSubType_Mask) strValue = "Mask"; - else if(m_nDefectType2 == DefectSubType_Common) strValue = "Common"; - else if(m_nDefectType2 == DefectSubType_NoDefect) strValue = "NoDefect"; - else strValue = "UN"; - - } - strLine += strValue+strDiv; - - { - if(pDefectData->m_DefectSubType == DefectSubType_Common) strValue = "Y"; // REPEAT_DEFECT - else strValue = "N"; - } - strLine += strValue+strDiv; - { - if(pDefectData->m_DefectSubType == DefectSubType_Mask) strValue = "Y"; // MASK_DEFECT - else strValue = "N"; - } - strLine += strValue+strDiv; - - strValue.Format("%s", pDefectData->m_strAoiImageName); // IMAGE_FILE1 - strLine += strValue+strDiv; - - strValue.Format("%s", pDefectData->m_ReviewDefect.m_strRevImageName); // IMAGE_FILE2 - strLine += strValue+strDiv; - - strValue.Format("%d", pDefectData->m_nScanIdx); // SCAN_NO - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nCameraID); // CAMERA_NO - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nDefectRScale); // RSCALE - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_nUMSize); // SIZE_AREA - strLine += strValue+strDiv; - strValue.Format("%d", pDefectData->m_sDefectPeak); // PEAK - strLine += strValue+strDiv; - - float fReviewResol = 0.1725; //20배 단배율 // 3.45/20 - strValue.Format("%.4lf", fReviewResol); // REV_RESOLUTION - strLine += strValue+strDiv; - - //210128 CJH - RTMS Review 정보 추가 - if (strlen(pDefectData->m_ReviewDefect.m_strRevImageName)) - { - strValue.Format("%d", pDefectData->m_ReviewDefect.m_nModuleIndex); // REV_Cam Number - strLine += strValue + strDiv; - } - else - { - strValue.Format("-1"); - strLine += strValue + strDiv; - } - - strValue.Format("%d", 20); // REV_Magnification - strLine += strValue + strDiv; - - strValue.Format("%s", pDefectData->m_strDefectCode); // DEFECT_CODE, DEFECT_GRADE, STACK_FLAG, STACK_COUNT, STACK_STEP, ZONE_NO, GRAY_MIN, ...,R_SRC_AVG 추가 [ 21-03-08 KJG ] - strLine += strValue + strDiv; // DEFECT_CODE - - strValue.Format("%s", GetDefectInfoToString(DMT_DefectJudge, pDefectData->m_DefectJudgement)); - strLine += strValue + strDiv; // DEFECT_GRADE - - int nStackFlag = pDefectData->m_StackInfo; // STACK_FLAG - if (nStackFlag == Stack_Unknown) strValue = "UK"; - else if (nStackFlag == Stack_TD) strValue = "TD"; - else if (nStackFlag == Stack_SD) strValue = "SD"; - else if (nStackFlag == Stack_PD) strValue = "PD"; - else if (nStackFlag == Stack_SP) strValue = "SP"; - else strValue = "UK"; - - strLine += strValue + strDiv; - - strValue.Format("%2d", pDefectData->m_nStackStepCount); // STACK_COUNT - strLine += strValue + strDiv; - - if (strlen(pDefectData->m_strStackFirst)) // STACK_STEP - { - strValue.Format("%s", pDefectData->m_strStackFirst); - strValue.Replace(',', '_'); // 열 구분자가 ',' 이므로 '_'로 변경 [ 21-03-15 KJG ] - strLine += strValue + strDiv; - } - else - { - strValue.Format(" "); - strLine += strValue + strDiv; - } - - int nValue = 0; // ZONE_NO - for (int i = 15; i >= 0; i--) - { - if (pDefectData->m_sZonePixelCount[i] > 0) - nValue += 1; - if (i > 0) - nValue = nValue << 1; - } - strValue.Format("%04X", nValue); - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelSrcMin); // GRAY_MIN - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelSrcMax); // GRAY_MAX - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelSrcAvg); // GRAY_AVG - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelRefMin); // R_SRC_MIN - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelRefMax); // R_SRC_MAX - strLine += strValue + strDiv; - - strValue.Format("%d", pDefectData->m_nLevelRefAvg); // R_SRC_AVG - strLine += strValue + strDiv; - -} - -void CGlassRawRTMS::makeDataCamera( CString& strLine, _grmGlassData* pGlassData, int nCamIdx, int nScanIdx ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); - strLine += strValue+strDiv; - strValue.Format("CAMERADATA"); - strLine += strValue+strDiv; - - strValue.Format("%d", nScanIdx); - strLine += strValue+strDiv; - strValue.Format("%d", nCamIdx); - strLine += strValue+strDiv; - strValue.Format("LAMP"); - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nGrayLevelMax[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nGrayLevelAvg[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); - strLine += strValue+strDiv; - strValue.Format("%d", pGlassData->m_nGrayLevelMin[pGlassData->m_nCameraNum*nScanIdx + nCamIdx]); - strLine += strValue+strDiv; -} - -void CGlassRawRTMS::makeDataWSI( CString& strLine, _grmDefectReviewData* pWSIData ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("WSIDATA"); // USERREVITEM - strLine += strValue+strDiv; - strValue.Format("%s","USER_NO"); // USER_NO - strLine += strValue+strDiv; - - // 주석 처리 부분 데이터 들어오면 쓸 것 - //CString strWSIType; - //if (pWSIData->m_fWsi_ResultData[0] == 1) - // strWSIType.Format("%s", "Positive"); // 돌기 - //else if (pWSIData->m_fWsi_ResultData[0] == 0) - // strWSIType.Format("%s", "Negative"); // 함몰 - //else - // strWSIType.Format("%s", "Flat"); - //strValue.Format("%s",strWSIType); // TYPE - - strValue.Format("%s","TYPE"); // TYPE - - strLine += strValue+strDiv; - //strValue.Format("%d", pWSIData->m_nWsi_Type); // WSI_NAME - strValue.Format("%s", "WSI_NAME"); // WSI_NAME - - strLine += strValue+strDiv; - strValue.Format("%s", "JUDGE"); // JUDGE - strLine += strValue+strDiv; - //strValue.Format("%d", pWSIData->m_fWsi_ResultData[2]); // COORD_X?? - strValue.Format("%s", "COORD_X"); // COORD_X?? - strLine += strValue+strDiv; - //strValue.Format("%d", pWSIData->m_fWsi_ResultData[1]); // COORD_Y?? - strValue.Format("%s", "COORD_Y"); // COORD_Y?? - strLine += strValue+strDiv; - strValue.Format("%s", "COORD_X2"); // COORD_X2 - strLine += strValue+strDiv; - strValue.Format("%s", "COORD_Y2"); // COORD_Y2 - strLine += strValue+strDiv; - //strValue.Format("%s", pWSIData->m_strWsi_2DImageFilename); // IMAGE_FILE_2D - strValue.Format("%s", "IMAGE_FILE_2D"); // IMAGE_FILE_2D - strLine += strValue+strDiv; - //strValue.Format("%s", pWSIData->m_strWsi_3DImageFilename); // IMAGE_FILE_3D - strValue.Format("%s", "IMAGE_FILE_3D"); // IMAGE_FILE_3D - strLine += strValue+strDiv; - strValue.Format("%s", "WSI_RESOLUTION"); // WSI_RESOLUTION - strLine += strValue+strDiv; - -} - -void CGlassRawRTMS::makeMuraDefect( CString& strLine, _MacroDefect* pMuraData ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("MURADATA"); // DEFITEM - strLine += strValue+strDiv; - - CTime time = CTime::GetCurrentTime(); - strValue.Format("%04d%02d%02d", time.GetYear(), time.GetMonth(), time.GetDay()); // DATE - strLine += strValue+strDiv; - strValue.Format("%02d%02d%02d", time.GetHour(), time.GetMinute(), time.GetSecond()); // TIME - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->DEFECTNO); // DEFECTNO - strLine += strValue+strDiv; - strValue.Format("%s", "RECIPE"); // RECIPE - strLine += strValue+strDiv; - strValue.Format("%s", "GLASSID"); // GLASSID - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->CELLID); // CELLID - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->COORD_X1); // COORD_X1 - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->COORD_Y1); // COORD_Y1 - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->COORD_PX1);// COORD_PX1 - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->COORD_PY1); // COORD_PY1 - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->NOMURA); // NOMURA - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->SIZE_W); // SIZE_W - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->SIZE_L); // SIZE_L - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->SIZE_S); // SIZE_S - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->MAIN_TYPE); // MAIN_TYPE - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->SUB_TYPE); // SUB_TYPE - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->PEAK); // PEAK - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->G_MIN); // G_MIN - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->G_MAX); // G_MAX - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->G_AVG); // G_AVG - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->CAM); // CAM - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->SCAN); // SCAN - strLine += strValue+strDiv; - strValue.Format("%d", pMuraData->PIXEL_PEAK); // PIXEL_PEAK - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->REGION); //REGION - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->SIZE_T); // SIZE_T - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->PEAK_T); // PEAK_T - strLine += strValue+strDiv; - strValue.Format("%s", pMuraData->IMG_FILE_NAME); // IMG_FILE_NAME - strLine += strValue+strDiv; -} - -void CGlassRawRTMS::makeUserReview( CString& strLine, _grmDefectReviewData* pUserReview ) -{ - strLine.Empty(); - - CString strValue; - CString strDiv = ","; - - strValue.Format("DATA"); // ITEM - strLine += strValue+strDiv; - strValue.Format("USERREVDATA"); // USERREVITEM - strLine += strValue+strDiv; - strValue.Format("%s", "USER_NO"); // USER_NO - strLine += strValue+strDiv; - strValue.Format("%s", "PR_X"); // PR_X - strLine += strValue+strDiv; - strValue.Format("%s", "PR_Y"); // PR_Y - strLine += strValue+strDiv; - strValue.Format("%s", "IMAGE_FILE_NAME"); // IMAGE_FILE_NAME - strLine += strValue+strDiv; - strValue.Format("%s", "REV_RESOLUTION"); // REV_RESOLUTION - strLine += strValue+strDiv; - -} - -BOOL CGlassRawRTMS::MakeAOIPreProcessing(CgrmGlassRawData* pData) -{ - _grmGlassData* pGlass = pData->GetGlassData(); - - // File Path - CTime CurrTime = CTime::GetCurrentTime(); - CString strTime=_T(""), strRTMSRAWFile=_T("");; - strTime.Format(_T("%04d%02d%02d%02d%02d%02d"), CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - char strTempPath2[100] = {0, }, strTempPath3[100] = {0, }; - - CString strLotID = pGlass->m_strGlassID; - CString strRtmsOperID = pGlass->m_strOperID; - CString strRtmsEqID = pGlass->m_strEquipID; - CString strHGlassid = pGlass->m_strGlassID; - CString strStepID = pGlass->m_strStepID; - strHGlassid.MakeUpper(); - strTime.MakeUpper(); - - strRTMSRAWFile.Format(_T("%s_%s.csv"), strHGlassid, strTime); - - //파일 생성될 곳 폴더 생성 [김태현 2018/12/5] - //210126 CJH - RTMS 경로 변경 (126.100.100.5\\RawFile/ReviewImage).RawFile은 루트에 결과파일을 올리고 ReviewImage에는 StepID\\GlassID 안에 데이터 업로드 - { - //210126 CJH - 경로 폴더생성 위치 변경 - CreateDirectory("D:\\DitRtms", NULL); - CreateDirectory("D:\\DitRtms\\Data", NULL); - - BOOL bCreateOK = TRUE; - sprintf(strTempPath2, "\\\\126.100.100.5\\RawFile"); - bCreateOK &= CreateDirectory(strTempPath2, NULL); - - sprintf(strTempPath2, "\\\\126.100.100.5\\RawFile\\%s", strRTMSRAWFile); - - - sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage"); - bCreateOK &= CreateDirectory(strTempPath3, NULL); - - sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage\\%s", strStepID); - bCreateOK &= CreateDirectory(strTempPath3, NULL); - - sprintf(strTempPath3, "\\\\126.100.100.5\\ReviewImage\\%s\\%s", strStepID,strHGlassid); - bCreateOK &= CreateDirectory(strTempPath3, NULL); - - AKLOG("RTMS Folder Raw File Path Make : %s", strTempPath2); - AKLOG("RTMS Folder Img Path Make : %s", strTempPath3); - //if(bCreateOK) AKLOG("RTMS Folder Create Success"); - //else AKLOG("RTMS Folder Create Fail"); - } - - DeleteFile((LPCTSTR)strTempPath2); - - m_strRTMSRAWFile = strTempPath2; - m_strRTMSImageFile = strTempPath3; - - return TRUE; -} - -BOOL CGlassRawRTMS::CopyRTMSFiles( CgrmGlassRawData* pData ) -{ - return TRUE; -} - -CString CGlassRawRTMS::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) -{ - CString sStr; - switch (nDefectInfoType) - { - case DMT_DefectJudge:// Judge - { - switch (nParam) - { - case Judge_OK: sStr.Format("OK"); - break; - case Judge_RP: sStr.Format("RP"); - break; - case Judge_NG: sStr.Format("NG"); - break; - case Judge_TR: sStr.Format("TR"); - break; - case Judge_PR: sStr.Format("PR"); - break; - case Judge_PT: sStr.Format("PT"); - break; - case Judge_Review: sStr.Format("RV"); - break; - case Judge_RC: sStr.Format("RC"); - break; - case Judge_Size: sStr.Format("SZ"); - break; - case Judge_VI: sStr.Format("VI"); - break; - case Judge_Rework: sStr.Format("RW"); - break; - case Judge_Unknown: sStr.Format("OK");//sStr.Format("Unknown"); //Unknown도 일단 OK - break; - default: sStr.Format("OK");//sStr.Format("Ets"); - break; - } - } - break; - - case DMT_DefectSizeType: - { - sStr = "S"; - switch (nParam) - { - //case SizeType_Unknown: sStr.Format("U"); break; - case 1/*SizeType_Small*/: sStr.Format("S"); - break; - case 2/*SizeType_Mid*/: sStr.Format("M"); - break; - case 3/*SizeType_Large*/: sStr.Format("L"); - break; - case 4/*SizeType_Huge*/: sStr.Format("O"); - break; - //case SizeType_Ultra: sStr.Format("Ultra"); break; - //default: sStr.Format("Ets"); break; - } - } - break; - - - } - return sStr; -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/GlassRawRTMS.h b/ReviewHistory/ReveiwHistory/GlassRawRTMS.h deleted file mode 100644 index 38d4caa..0000000 --- a/ReviewHistory/ReveiwHistory/GlassRawRTMS.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" -#include "MacroResultFile.h" - -class CGlassRawRTMS : public CGlassRawBase -{ -public: - enum emDefectMemberType - { - DMT_DefectJudge = 0, - DMT_DefectSizeType - }; - - CGlassRawRTMS(void); - ~CGlassRawRTMS(void); - - static char* GetClassName(){return "RTMS";}; - - virtual BOOL SequenceGlassLoading(CgrmGlassRawData* pData); - virtual BOOL SequenceInspectEnd(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewStart(CgrmGlassRawData* pData); - virtual BOOL SequenceReviewEnd(CgrmGlassRawData* pData); - - virtual BOOL WriteAOIFile(CgrmGlassRawData* pData); - virtual BOOL ReadAOIFile(CgrmGlassRawData* pData){return TRUE;}; - - BOOL MakeAOIFile(CgrmGlassRawData* pData); - BOOL CopyRTMSFiles(CgrmGlassRawData* pData); - BOOL MakeAOIPreProcessing(CgrmGlassRawData* pData); - - void SetMuraResult(CMacroResultFile* pMuraResult){m_pMuraResultFile = pMuraResult;}; -protected: - void makeDataGlass(CString& strLine, _grmGlassData* pGlassData); - void makeDataCell(CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData); - void makeDataDefect(CString& strLine, _grmGlassData* pGlassData, _grmCellData* pCellData, _grmDefectData* pDefectData); - void makeDataCamera(CString& strLine, _grmGlassData* pGlassData, int nCamIdx, int nScanIdx); - void makeMuraDefect(CString& strLine, _MacroDefect* pMuraData); - void makeDataWSI(CString& strLine, _grmDefectReviewData* pWSIData); - void makeUserReview(CString& strLine, _grmDefectReviewData* pUserReviewData); - CString GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam); - -protected: - CString m_strRTMSRAWFile; - CString m_strRTMSImageFile; - - CMacroResultFile* m_pMuraResultFile; -}; diff --git a/ReviewHistory/ReveiwHistory/InterfaceFTP.cpp b/ReviewHistory/ReveiwHistory/InterfaceFTP.cpp deleted file mode 100644 index f78e901..0000000 --- a/ReviewHistory/ReveiwHistory/InterfaceFTP.cpp +++ /dev/null @@ -1,389 +0,0 @@ -#include "StdAfx.h" -#include "InterfaceFTP.h" -#include "akLoggerExt.h" -#include "akCore/akFileUtil.h" - -#define LOCAL_INDEX_PATH "D:\\DIT_ResultData\\Index\\" -#define LOCAL_REV_IMAGE_PATH "D:\\ResultData\\Upload\\Image\\" -#define LOCAL_AOI_IMAGE_PATH "D:\\Image\\Defect\\" -#define LOCAL_MURA_IMAGE_PATH "D:\\DIT_ResultData\\Mura\\IMG\\" -#define LOCAL_DEEP_PATH "D:\\DIT_ResultData\\Deeplearning\\" - -CInterfaceFTP::CInterfaceFTP(void) -{ - -} - -CInterfaceFTP::~CInterfaceFTP(void) -{ -} - - -void CInterfaceFTP::SendMessageFTPUploadLinkFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_LINK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CInterfaceFTP::SendMessageFTPUploadRaw( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - -} - -void CInterfaceFTP::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - GetFormatDescription(FTPCMD_STACK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CInterfaceFTP::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - { - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); - sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); - sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); - sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); - } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - -void CInterfaceFTP::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) -{ - if(pGlassData == NULL) return; - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return; - - char strServerFolder[256] = {}; - char strServerFile[32];// = "*.*"; - char strLocalFolder[256] = {}; - char strLocalFile[32];// = "*.*"; - - GetFormatDescription(sort, strServerFolder, strServerFile, strLocalFolder, strLocalFile, pGlassData); - -// if(0)//test -// { -// sprintf(strServerFolder, "HDD1/DIT/TestC"); -// } - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, strLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE; - upParam.m_nSendResultCode = FALSE; - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; //<--요건 나중에 구분 - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } -} - - -BOOL CInterfaceFTP::SendMessageFTPUploadIndexFile( _grmGlassData* pGlassData ) -{ - if(pGlassData == NULL) - return FALSE; - - HWND hWnd = ::FindWindow(NULL, "FTPUploader"); - if(hWnd == NULL) return FALSE; - - - char strServerFolder[256] = {}; - char strServerFile[256] = {}; - char strLocalFolder[256] = {}; - char pLocalFile[256] = {}; - - GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); - - - // if(0)//test - // { - // sprintf(strServerFolder, "HDD1/DIT/TestC"); - // ServerFile = "ftptestfile.txt"; - // - // sprintf(strLocalFolder, "D:"); - // pLocalFile = "ftptestfile.txt"; - // } - - - CFTPCopyDataParam upParam; - strcpy(upParam.m_strServer_FolderName, strServerFolder); - strcpy(upParam.m_strServer_FileName, strServerFile); - strcpy(upParam.m_strLocal_FolderName, strLocalFolder); - strcpy(upParam.m_strLocal_FileName, pLocalFile); - strcpy(upParam.m_strServer_SignalFolderName, ""); - strcpy(upParam.m_strServer_SignalFileName, ""); - upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); - upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); - upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; - - COPYDATASTRUCT cds; - cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; - cds.cbData = sizeof(CFTPCopyDataParam); - cds.lpData = &upParam; - - DWORD dwReturn = 0; - if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) - { - } - return TRUE; -} - -void CInterfaceFTP::GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData) -{ - - CString strGlassIDOrg = pGlassData->m_strGlassID; - CString strGlassID = strGlassIDOrg.Left(12); - CString strGlassIDLevel5th = strGlassID.Left(5); - CString strGlassIDLevel8th = strGlassID.Left(8); - - switch(sort) - { - case FTPCMD_AOI_IMAGE: - { - CTime time = m_tmFileCreateTime; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_REVIEW_IMAGE: - { - CTime time = m_tmFileCreateTime; - - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_REV_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_RAW: - { - CTime time = m_tmFileCreateTime; - CString strFileName;//파일생성 시간 때문에 여기서 정확하게 파일명 다시 정정 - { - //Glass 정보 - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - case FTPCMD_STACK: - { -// CTime time = pGlassData->m_tmGlassLoading; -// sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", m_StackResult.getStackEquipID(), time.GetYear(), time.GetMonth(), time.GetDay(), -// strGlassIDLevel5th.GetBuffer(0), -// strGlassIDLevel8th.GetBuffer(0), -// strGlassID.GetBuffer(0)); -// -// //가장 최근걸 찾아야 하나? [김태현 2019/1/12] -// sprintf(pServerFile, "%s_%s_*.csv", -// m_StackResult.getStackOperID(), -// pGlassData->m_strGlassID); -// -// sprintf(pLocalPath, "%s", m_StackResult.getStackLocalPath()); -// sprintf(pLocalFile, "%s.txt", strGlassID.GetBuffer(0)); - } - break; - case FTPCMD_MURA_IMAGE: - { - CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); - strcpy(pServerFile, "*.*"); - strcpy(pLocalFile, "*.*"); - } - break; - case FTPCMD_INDEX: - { - CTime time = m_tmFileCreateTime; - sprintf(pServerPath, "INDEX\\%s", pGlassData->m_strEquipID); - sprintf(pServerFile, "%04d%02d%02d_%s.csv", time.GetYear(), time.GetMonth(), time.GetDay(), pGlassData->m_strStepID); - - sprintf(pLocalPath, "%s", LOCAL_INDEX_PATH); - sprintf(pLocalFile, "%s", pServerFile); - } - break; - - case FTPCMD_LINK: - { - CTime time = m_tmFileCreateTime; - CString strFileName;//파일생성 시간 때문에 여기서 정확하게 파일명 다시 정정 - { - //Glass 정보 - CTime CurrTime = m_tmFileCreateTime; - CString strTime; - strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), - CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); - strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); - } - sprintf(pServerPath, "%s\\%s\\%s\\%s\\%s", "LINK", pGlassData->m_strEquipID, - strGlassIDLevel5th.GetBuffer(0), - strGlassIDLevel8th.GetBuffer(0), - strGlassID.GetBuffer(0)); - - sprintf(pLocalPath, "%s", pGlassData->m_strPath); - - sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); - sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); - } - break; - } - - -} - diff --git a/ReviewHistory/ReveiwHistory/InterfaceFTP.h b/ReviewHistory/ReveiwHistory/InterfaceFTP.h deleted file mode 100644 index 22d10e1..0000000 --- a/ReviewHistory/ReveiwHistory/InterfaceFTP.h +++ /dev/null @@ -1,100 +0,0 @@ -#pragma once - -#include "GlassRawBase.h" - -class CInterfaceFTP -{ -public: - enum emFTPCommand - { - FTPCMD_REVIEW_IMAGE =0, - FTPCMD_RAW , - FTPCMD_INDEX , - FTPCMD_AOI_IMAGE , - FTPCMD_MURA_RAW , - FTPCMD_MURA_IMAGE , - FTPCMD_STACK , - FTPCMD_LINK , - FTPCMD_End - }; - -public: - CInterfaceFTP(void); - ~CInterfaceFTP(void); - - virtual void SendMessageFTPUploadRaw(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadStack(_grmGlassData* pGlassData); - virtual void SendMessageFTPUploadImage(_grmGlassData* pGlassData, emFTPCommand sort); - virtual BOOL SendMessageFTPUploadIndexFile(_grmGlassData* pGlassData); - virtual void SendMessageFTPUploadLinkFile(_grmGlassData* pGlassData); - virtual void SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData); - - virtual void GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData); - -public: - CTime m_tmFileCreateTime; -}; - -class CFTPCopyDataParam -{ -public: - enum FTPProcessType { FTPProcessType_DownFile=0, FTPProcessType_UpFile, FTPProcessType_Count }; - enum FTPDataSize { FTPDataSize_MaxPathNum=255, FTPDataSize_MaxFileNum=100 }; - enum FTPCopyDataCmd { FTPCopyDataCmd_RawDownload=1, FTPCopyDataCmd_RawUpload, FTPCopyDataCmd_LotUpload, FTPCopyDataCmd_ImageUpload }; - enum FTPDataType { FTPDataType_Unknown = 0, FTPDataType_Raw, FTPDataType_Image, FTPDataType_Stack, FTPDataType_Index }; - -public: - CFTPCopyDataParam() { Reset(); } - virtual ~CFTPCopyDataParam() { Reset(); } - void Reset() - { - memset(this, 0, sizeof(CFTPCopyDataParam)); - m_hSenderWnd = GetCurrentProcessWndHandle(); - } - - const HWND GetSenderWnd() const { return m_hSenderWnd; } - void SetSenderWnd(HWND hWnd) { m_hSenderWnd = hWnd; } - -public: - int m_nProcessType; // 프로세스 타입 - int m_nCreateSignalFile; // 시그널 파일 생성유무 - int m_bFirstPriority; // 최상위 우선순위유무 - int m_nSendResultCode; // 보낸 결과 코드 - // [C-PRJ] Image Upload Define - KHT (2020/11/19) - int m_nDataType; // 데이터 타입 - - TCHAR m_strServer_FolderName[FTPDataSize_MaxPathNum]; // 서버 경로명 - TCHAR m_strServer_FileName[FTPDataSize_MaxFileNum]; // 서버 파일명 - - TCHAR m_strLocal_FolderName[FTPDataSize_MaxPathNum]; // 로컬 경로명 - TCHAR m_strLocal_FileName[FTPDataSize_MaxFileNum]; // 로컬 파일명 - - TCHAR m_strServer_SignalFolderName[FTPDataSize_MaxPathNum]; // 서버 시그널 경로명 - TCHAR m_strServer_SignalFileName[FTPDataSize_MaxFileNum]; // 서버 시그널 파일명 - - TCHAR m_strRTMS_FileName[FTPDataSize_MaxFileNum]; - - TCHAR m_strServer_SubFileName[FTPDataSize_MaxFileNum]; // 서버 로컬 경로내에 추가 Raw 파일 생성 이름 - TCHAR m_strServer_SubFilePath[FTPDataSize_MaxFileNum]; // 서버 로컬 경로내에 추가 Raw 파일 생성 경로 - -protected: - HWND m_hSenderWnd; // 보낸 프로그램 윈도우 - - static HWND GetCurrentProcessWndHandle() - { - DWORD dwPID = GetCurrentProcessId(); - HWND hWnd = FindWindow(NULL, NULL); - while (hWnd != NULL) - { - if (GetParent(hWnd) == NULL){ - DWORD dwProcId; - GetWindowThreadProcessId(hWnd, &dwProcId); - if (dwPID == dwProcId){ - return hWnd; - } - } - hWnd = GetWindow(hWnd, GW_HWNDNEXT); - } - return NULL; - } -}; diff --git a/ReviewHistory/ReveiwHistory/MacroResultFile.cpp b/ReviewHistory/ReveiwHistory/MacroResultFile.cpp deleted file mode 100644 index a7caac2..0000000 --- a/ReviewHistory/ReveiwHistory/MacroResultFile.cpp +++ /dev/null @@ -1,357 +0,0 @@ -#include "StdAfx.h" -#include "MacroResultFile.h" -#include "akCore/akFileDB.h" -//0404nwh -#include "akGridData.h" -#include <process.h> -#include "DitGlassRawClient.h" -#include "GlassRawBase.h" - -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -CMacroResultFile::CMacroResultFile(void) -{ - m_bReadSuccess = FALSE; - readOptionFile(); -} - -CMacroResultFile::~CMacroResultFile(void) -{ - m_vecMacroDefect.clear(); -} - -BOOL CMacroResultFile::openFile( char* pFileName ) -{ - m_bReadSuccess = FALSE; - FILE* pf = fopen(pFileName, "r"); - - if(pf == NULL) - return FALSE; - - std::vector<_MacroDefect> vecMacroDefect; - _MacroDefect MacroDefect; - char buffer[1024]; - - char* pReadPoint = NULL; - char *pStr; - - while(!feof(pf)) - { - pStr = fgets(buffer, 1024, pf); - - if(!strncmp(buffer, "ITEM,", 5)) continue; - - - if(strlen(buffer) <= 0 || pStr == NULL) - break; - - if(!strncmp(buffer, "DATA,CELLDATA", 13))//파싱 태현[2017/3/29] - { - //무라 셀판정도 반영 해야 하나? - } - else if(!strncmp(buffer, "DATA,DEFECTDATA", 15))//파싱 태현[2017/3/29] - { - pReadPoint = buffer; - - pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.ITEM ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.DEFECTNO ); - pReadPoint = getParsingData(pReadPoint, 20, &MacroDefect.CELLID ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.COORD_X1 ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.COORD_Y1 ); - pReadPoint = getParsingData(pReadPoint, 9, &MacroDefect.COORD_PX1 ); - pReadPoint = getParsingData(pReadPoint, 9, &MacroDefect.COORD_PY1 ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.NOMURA ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.JUDGE ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.SIZE_W ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.SIZE_L ); - pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SIZE_S ); - pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.MAIN_TYPE ); - pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SUB_TYPE ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.PEAK ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_MIN ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_MAX ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.G_AVG ); - pReadPoint = getParsingData(pReadPoint, 3, &MacroDefect.CAM ); - pReadPoint = getParsingData(pReadPoint, 4, &MacroDefect.SCAN ); - pReadPoint = getParsingData(pReadPoint, 10, &MacroDefect.PIXEL_PEAK ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.REGION ); - pReadPoint = getParsingData(pReadPoint, 8, &MacroDefect.MASK_T ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.SIZE_T ); - pReadPoint = getParsingData(pReadPoint, 6, &MacroDefect.PEAK_T ); - pReadPoint = getParsingData(pReadPoint, 69, &MacroDefect.IMG_FILE_NAME); - MacroDefect.IMG_FILE_NAME = MacroDefect.IMG_FILE_NAME.Left(70); - MacroDefect.IMG_FILE_NAME.Remove(' '); - - vecMacroDefect.push_back(MacroDefect); - } - } - - fclose(pf); - - m_vecMacroDefect = vecMacroDefect; - //빠른 찾기용 map 생성 - { - m_mapFind.clear(); - int nSize = m_vecMacroDefect.size(); - for(int i=0; i<nSize; i++) - { - m_mapFind.insert(std::make_pair(m_vecMacroDefect[i].COORD_X1, &m_vecMacroDefect[i])); - } - } - m_bReadSuccess = TRUE; - return TRUE; -} - -char* CMacroResultFile::getParsingData( char* pBuf, int nLen, CString* pOutData ) -{ - for(int i=nLen-1; i>=0; i--) - { - if(pBuf[i] != ' ') - { - pBuf[i+1] = 0; - break; - } - } - *pOutData = pBuf; - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -char* CMacroResultFile::getParsingData( char* pBuf, int nLen, int* pOutData ) -{ - pBuf[nLen] = 0; - - *pOutData = atoi(pBuf); - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) -{ - CakFileDB fileDB; - fileDB.openfile(pFileName); - char strTemp[256]={}; - fileDB.getItem("MACROPATH_ENABLE", &m_bMacroResultFile, 0); - fileDB.getItem("MACROPATH_RAW", strTemp, ""); m_strMacroResultRawPath= strTemp; - fileDB.getItem("MACROPATH_IMAGE", strTemp, ""); m_strMacroResultImagePath= strTemp; - fileDB.getItem("SERVERPATH_RAW", strTemp, ""); m_strServerResultRawPath= strTemp; - fileDB.getItem("SERVERPATH_IMAGE", strTemp, "");m_strServerResultImagePath = strTemp; - fileDB.getItem("MACRO_READ_TIME", (int*)&m_dwMacroReadTime, 3000); - - return TRUE; -} - -int CMacroResultFile::GetDefectNum( int iCell ) -{ - int nSize = (int)m_vecMacroDefect.size(); - int nDefectNum = 0; - for(int i=0; i<nSize; i++) - { - if(m_vecMacroDefect[i].CELLID == iCell) - { - nDefectNum++; - } - } - - return nDefectNum; -} - -int CMacroResultFile::GetSubPanelNum(int iCell) //0404nwh -{ - int nSize = (int)m_vecMacroSubPanel.size(); - int nSubPanelNum = 0; - for (int i = 0; i < nSize; i++) - { - if (m_vecMacroSubPanel[i].PRO_IMAGE == iCell) - { - nSubPanelNum++; - } - } - return nSubPanelNum; -} - -//KMS - 190125 MuraDefect 찾기 -_MacroDefect* CMacroResultFile::FindDefect( int nX, int nY ,int nFindRange) -{ - _MacroDefect *pMDefect = NULL; - - std::multimap<int,_MacroDefect*>::iterator itLowerBound; - std::multimap<int,_MacroDefect*>::iterator itUpperBound; - - itLowerBound = m_mapFind.lower_bound(nX - nFindRange); - itUpperBound = m_mapFind.upper_bound(nX + nFindRange); - - _MacroDefect *pMDefectMin = NULL; - int nMinDistance = nFindRange*nFindRange; - int nDistance; - for (itLowerBound; itLowerBound != itUpperBound; itLowerBound++) - { - pMDefect = static_cast<_MacroDefect*>(itLowerBound->second); - if(!pMDefect) continue; - - if(abs(nY - pMDefect->COORD_Y1) < nFindRange) - { - nDistance = ((nX - pMDefect->COORD_X1) * (nX - pMDefect->COORD_X1)) + ((nY - pMDefect->COORD_Y1) * (nY - pMDefect->COORD_Y1)); - if(nDistance < nMinDistance) - { - nMinDistance = nDistance; - pMDefectMin = pMDefect; - } - } - } - - return pMDefectMin; -} - -BOOL CMacroResultFile::openFile_Mura(char* pFileName)//0404nwh -{ - m_bReadSuccess = FALSE; - FILE* pf = fopen(pFileName, "r"); - - if (pf == NULL) - return FALSE; - - CDitGlassRawClient GlassRawClient; - GlassRawClient.ConnectServer(); - CDitGlassRawClient* pShared = &GlassRawClient; - - _grmCellData* pGrmMura; - - std::vector<_MacroSubPanel> vecMacroSubPanel; - _MacroSubPanel MacroSubPanel; - char buffer[1024]; - char* pReadPoint = NULL; - char *pStr; - - CString stranelData = "DATA PANEL"; - CString strSubPanelData = "DATA SUBPANEL"; - CString strMaxAvgGray, strMaxPortion; - - while (!feof(pf)) - { - pStr = fgets(buffer, 1024, pf); - if (strlen(buffer) <= 0 || pStr == NULL) - break; - - if (!strncmp(buffer, stranelData, strlen(stranelData)))// 띄어쓰기 파싱 - { - CakParser paser; - if (strlen(buffer) <= 0) continue; - paser.process(buffer, " "); - int nTokNum = paser.getTokNum(); - if (nTokNum < 42) continue; - strMaxAvgGray = paser.getTokStr(41); - strMaxPortion = paser.getTokStr(42); - } - - if (!strncmp(buffer, strSubPanelData, strlen(strSubPanelData)))// 띄어쓰기 파싱 - { - CakParser paser; - if (strlen(buffer) <= 0) continue; - paser.process(buffer, " "); - int nTokNum = paser.getTokNum(); - if (nTokNum < 52) continue; //kyh 31->52 - MacroSubPanel.PRO_IMAGE = paser.getTokStr(20); - MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21); - MacroSubPanel.PORTION_0 = paser.getTokStr(22); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_0 = paser.getTokStr(23); - MacroSubPanel.AVG_AMP_0 = paser.getTokStr(24); - MacroSubPanel.FFT_VAR_0 = paser.getTokStr(25); - MacroSubPanel.FFT_VAH_0 = paser.getTokStr(26); - MacroSubPanel.FFT_VAQ_0 = paser.getTokStr(27); - MacroSubPanel.FFT_PK_0 = paser.getTokStr(28); - - MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(29); - MacroSubPanel.PORTION_1 = paser.getTokStr(30); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_1 = paser.getTokStr(31); - MacroSubPanel.AVG_AMP_1 = paser.getTokStr(32); - MacroSubPanel.FFT_VAR_1 = paser.getTokStr(33); - MacroSubPanel.FFT_VAH_1 = paser.getTokStr(34); - MacroSubPanel.FFT_VAQ_1 = paser.getTokStr(35); - MacroSubPanel.FFT_PK_1 = paser.getTokStr(36); - - MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(37); - MacroSubPanel.PORTION_2 = paser.getTokStr(38); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_2 = paser.getTokStr(39); - MacroSubPanel.AVG_AMP_2 = paser.getTokStr(40); - MacroSubPanel.FFT_VAR_2 = paser.getTokStr(41); - MacroSubPanel.FFT_VAH_2 = paser.getTokStr(42); - MacroSubPanel.FFT_VAQ_2 = paser.getTokStr(43); - MacroSubPanel.FFT_PK_2 = paser.getTokStr(44); - - MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(45); - MacroSubPanel.PORTION_3 = paser.getTokStr(46); - //kyh 추가 - MacroSubPanel.CORNER_GRAY_3 = paser.getTokStr(47); - MacroSubPanel.AVG_AMP_3 = paser.getTokStr(48); - MacroSubPanel.FFT_VAR_3 = paser.getTokStr(49); - MacroSubPanel.FFT_VAH_3 = paser.getTokStr(50); - MacroSubPanel.FFT_VAQ_3 = paser.getTokStr(51); - MacroSubPanel.FFT_PK_3 = paser.getTokStr(52); - - vecMacroSubPanel.push_back(MacroSubPanel); - } - } - - fclose(pf); - - m_vecMacroSubPanel = vecMacroSubPanel; - - for (int i = 0; i < m_vecMacroSubPanel.size(); i++) - { - pGrmMura= pShared->GetCellData(i); - - strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgGray_0, m_vecMacroSubPanel[i].AVG_GRAY_0.GetBuffer(0)); - strcpy(pGrmMura->m_strPortion_0, m_vecMacroSubPanel[i].PORTION_0.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_0, m_vecMacroSubPanel[i].CORNER_GRAY_0.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_0, m_vecMacroSubPanel[i].AVG_AMP_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_0, m_vecMacroSubPanel[i].FFT_VAR_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_0, m_vecMacroSubPanel[i].FFT_VAH_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_0, m_vecMacroSubPanel[i].FFT_VAQ_0.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_0, m_vecMacroSubPanel[i].FFT_PK_0.GetBuffer(0)); - - strcpy(pGrmMura->m_strAvgGray_1, m_vecMacroSubPanel[i].AVG_GRAY_1.GetBuffer(0)); - strcpy(pGrmMura->m_strPortion_1, m_vecMacroSubPanel[i].PORTION_1.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_1, m_vecMacroSubPanel[i].CORNER_GRAY_1.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_1, m_vecMacroSubPanel[i].AVG_AMP_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_1, m_vecMacroSubPanel[i].FFT_VAR_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_1, m_vecMacroSubPanel[i].FFT_VAH_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_1, m_vecMacroSubPanel[i].FFT_VAQ_1.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_1, m_vecMacroSubPanel[i].FFT_PK_1.GetBuffer(0)); - - strcpy(pGrmMura->m_strAvgGray_2, m_vecMacroSubPanel[i].AVG_GRAY_2.GetBuffer(0)); - strcpy(pGrmMura->m_strPortion_2, m_vecMacroSubPanel[i].PORTION_2.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_2, m_vecMacroSubPanel[i].CORNER_GRAY_2.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_2, m_vecMacroSubPanel[i].AVG_AMP_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_2, m_vecMacroSubPanel[i].FFT_VAR_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_2, m_vecMacroSubPanel[i].FFT_VAH_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_2, m_vecMacroSubPanel[i].FFT_VAQ_2.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_2, m_vecMacroSubPanel[i].FFT_PK_2.GetBuffer(0)); - - strcpy(pGrmMura->m_strAvgGray_3, m_vecMacroSubPanel[i].AVG_GRAY_3.GetBuffer(0)); - strcpy(pGrmMura->m_strPortion_3, m_vecMacroSubPanel[i].PORTION_3.GetBuffer(0)); - //kyh 0622 - strcpy(pGrmMura->m_strCorner_Gray_3, m_vecMacroSubPanel[i].CORNER_GRAY_3.GetBuffer(0)); - strcpy(pGrmMura->m_strAvgAmp_3, m_vecMacroSubPanel[i].AVG_AMP_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVar_3, m_vecMacroSubPanel[i].FFT_VAR_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVah_3, m_vecMacroSubPanel[i].FFT_VAH_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTVaq_3, m_vecMacroSubPanel[i].FFT_VAQ_3.GetBuffer(0)); - strcpy(pGrmMura->m_strFFTPK_3, m_vecMacroSubPanel[i].FFT_PK_3.GetBuffer(0)); - } - strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0)); - strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0)); - - m_bReadSuccess = TRUE; - return TRUE; -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/MacroResultFile.h b/ReviewHistory/ReveiwHistory/MacroResultFile.h deleted file mode 100644 index f746014..0000000 --- a/ReviewHistory/ReveiwHistory/MacroResultFile.h +++ /dev/null @@ -1,231 +0,0 @@ -#pragma once - -#include <vector> -#include <map> -/* -ITEM NAME SIZE DESCRIPTION -DATE DATE 8 검사 종료 일자 -TIME TIME 6 검사 종료 시간 -DEFECT NO DEFECTNO 8 결함 번호 -RECIPE NAME RECIPE 20 검사 레시피 이름 -GLASSID GLASSID 15 기판 ID -CELLID CELLID 16 결함 위치 CELL ID -COORD X COORD_X1 8 X좌표(결함 중심 좌표, 단위 : um) -COORD Y COORD_Y1 8 Y좌표(결함 중심 좌표, 단위 : um) -NOMURA NOMURA 6 비결함 여부(1 - 비결함, 0 - 유효결함) -WIDTH SIZE_W 8 결함 너비(X 길이, 단위 : um) -LENGTH SIZE_L 8 결함 높이(Y 길이, 단위 : um) -SQUARE SIZE_S 15 결함 크기(면적, 단위 : um²) -MAIN TYPE MAIN_TYPE 15 결함 타입(Area, VLineB, HLineB, SpotB, SpotW, NonFilling, NFGroup, OrangePeel, VLineW, HLineW, VLineF, HLineF, Depo) -SUB TYPE SUB_TYPE 15 검출 타입(Normal, Common, Mask, CommonMask) -PEAK PEAK 6 결함 피크 정보(단위 : DN) -MIN G_MIN 6 결함 영역 최소 밝기(단위 : DN) -MAX G_MAX 6 결함 영역 최대 밝기(단위 : DN) -AVERAGE G_AVG 6 결함 영역 평균 밝기(단위 : DN) -CAM NO CAM 3 검출 카메라 Index -SCAN NO SCAN 4 검출 스캔 Index -PIXEL PEAK PIXEL_PEAK 10 결함 픽셀 피크 정보(단위 : DN) -REGION TYPE REGION 6 검출 영역(Active, Pad) -SIZE TYPE SIZE_T 6 크기 타입(Small, Medium, Large, Huge) -PEAK TYPE PEAK_T 6 피크 타입(Pale, Medium, Deep, Over) -IMAGE FILE NAME IMG_FILE_NAME 50 결함별 이미지 파일 이름(셀번호.결함번호_일시.jpg) -*/ -/* CSOT T4 IJP Type -ITEM Start Length -ITEM,DEFECTDATA 0 15 -DEFECTNO 17 8 -CELLID 26 20 -COORD_X1 47 8 -COORD_Y1 56 8 -COORD_PX1 65 9 -COORD_PY1 75 9 -NOMURA 85 6 -JUDGE 92 8 -SIZE_W 101 8 -SIZE_L 110 8 -SIZE_S 119 15 -MAIN_TYPE 135 15 -SUB_TYPE 151 15 -PEAK 167 6 -G_MIN 174 6 -G_MAX 181 6 -G_AVG 188 6 -CAM 195 3 -SCAN 199 4 -PIXEL_PEAK 204 10 -REGION 215 6 -MASK_T 222 8 -SIZE_T 231 6 -PEAK_T 238 6 -IMG_FILE_NAME 245 69 -*/ -struct _MacroDefect -{ - CString ITEM ; - int DEFECTNO ; - CString CELLID ; - int COORD_X1 ; - int COORD_Y1 ; - int COORD_PX1 ; - int COORD_PY1 ; - int NOMURA ; - CString JUDGE ; - int SIZE_W ; - int SIZE_L ; - int SIZE_S ; - CString MAIN_TYPE ; - CString SUB_TYPE ; - int PEAK ; - int G_MIN ; - int G_MAX ; - int G_AVG ; - int CAM ; - int SCAN ; - int PIXEL_PEAK ; - CString REGION ; - CString MASK_T ; - CString SIZE_T ; - CString PEAK_T ; - CString IMG_FILE_NAME ; - - _MacroDefect() - { - ITEM = "0"; - DEFECTNO = 0; - CELLID = "0"; - COORD_X1 = 0; - COORD_Y1 = 0; - COORD_PX1 = 0; - COORD_PY1 = 0; - NOMURA = 0; - JUDGE = "0"; - SIZE_W = 0; - SIZE_L = 0; - SIZE_S = 0; - MAIN_TYPE = "0"; - SUB_TYPE = "0"; - PEAK = 0; - G_MIN = 0; - G_MAX = 0; - G_AVG = 0; - CAM = 0; - SCAN = 0; - PIXEL_PEAK = 0; - REGION = "0"; - MASK_T = "0"; - SIZE_T = "0"; - PEAK_T = "0"; - IMG_FILE_NAME = "0"; - - } -}; - - -///0404nwh -struct _MacroSubPanel -{ - CString PRO_IMAGE; - CString AVG_GRAY_0; // 0 Scan 0 Model - CString PORTION_0; - CString CORNER_GRAY_0; // kyh 결과파일 포맷 수정 - CString AVG_AMP_0; - CString FFT_VAR_0; - CString FFT_VAH_0; - CString FFT_VAQ_0; - CString FFT_PK_0; // kyh end - CString AVG_GRAY_1; // 0 Scan 1 Model - CString PORTION_1; - CString CORNER_GRAY_1; // kyh 결과파일 포맷 수정 - CString AVG_AMP_1; - CString FFT_VAR_1; - CString FFT_VAH_1; - CString FFT_VAQ_1; - CString FFT_PK_1; // kyh end - CString AVG_GRAY_2; // 1 Scan 0 Model - CString PORTION_2; - CString CORNER_GRAY_2; // kyh 결과파일 포맷 수정 - CString AVG_AMP_2; - CString FFT_VAR_2; - CString FFT_VAH_2; - CString FFT_VAQ_2; - CString FFT_PK_2; // kyh end - CString AVG_GRAY_3; // 1 Scan 1 Model - CString PORTION_3; - CString CORNER_GRAY_3; // kyh 결과파일 포맷 수정 - CString AVG_AMP_3; - CString FFT_VAR_3; - CString FFT_VAH_3; - CString FFT_VAQ_3; - CString FFT_PK_3; // kyh end -}; - -class CMacroResultFile -{ -public: - CMacroResultFile(void); - virtual ~CMacroResultFile(void); - -public: - BOOL openFile(char* pFileName); - BOOL openFile_Mura(char* pFileName);//nwh0404 - - BOOL IsRead() { return m_bReadSuccess; } - int GetDefectNum() { return (int)m_vecMacroDefect.size();} - int GetDefectNum(int iCell) ; - _MacroDefect* GetDefect(int i) { return &m_vecMacroDefect[i]; } - - /////////////////////////////////////0404nwh - int GetSubPanelNum() { return (int)m_vecMacroSubPanel.size(); } - int GetSubPanelNum(int iCell); - _MacroSubPanel* GetSubPanel(int i) { return &m_vecMacroSubPanel[i]; } - /////////////////////////////////////0404nwh - BOOL readOptionFile(char* pFileName = "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"); - - _MacroDefect* FindDefect(int nX, int nY, int nFindRange = 2000/*um*/); -public: - BOOL m_bMacroResultFile;//마크로 설비 결과파일 통합 여부 태현[2017/3/29] - CString m_strMacroResultRawPath; - CString m_strMacroResultImagePath; - CString m_strServerResultRawPath; - CString m_strServerResultImagePath; - - DWORD m_dwMacroReadTime; - -protected: - char* getParsingData(char* pBuf, int nLen, CString* pOutData); - char* getParsingData(char* pBuf, int nLen, int* pOutData); - -protected: - BOOL m_bReadSuccess; - std::vector<_MacroDefect> m_vecMacroDefect; - std::vector<_MacroSubPanel> m_vecMacroSubPanel; //0404nwh - - std::multimap<int,_MacroDefect*> m_mapFind; - -}; - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ReviewHistory/ReveiwHistory/PathSettingDlg.cpp b/ReviewHistory/ReveiwHistory/PathSettingDlg.cpp deleted file mode 100644 index d5f7424..0000000 --- a/ReviewHistory/ReveiwHistory/PathSettingDlg.cpp +++ /dev/null @@ -1,297 +0,0 @@ -癤�// PathSettingDlg.cpp: 援ы쁽 �뙆�씪 -// - -#include "stdafx.h" -#include "ReveiwHistory.h" -#include "PathSettingDlg.h" -#include "afxdialogex.h" - -#define PathSettingFilePath ( _T("PathSetting.ini") ) -// CPathSettingDlg ���솕 �긽�옄 - -IMPLEMENT_DYNAMIC(CPathSettingDlg, CDialogEx) - -CPathSettingDlg::CPathSettingDlg(CWnd* pParent /*=nullptr*/) - : CDialogEx(IDD_DLG_PATH_SETTING, pParent) -{ - m_strBinPath.Empty(); - m_strInspectorPath.Empty(); - m_strReviewPath.Empty(); - m_strAlignPath.Empty(); -} - -CPathSettingDlg::~CPathSettingDlg() -{ -} - -void CPathSettingDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialogEx::DoDataExchange(pDX); -} - - -BEGIN_MESSAGE_MAP(CPathSettingDlg, CDialogEx) - ON_BN_CLICKED(IDC_BTN_BIN_PATH, &CPathSettingDlg::OnBnClickedBtnBinPath) - ON_BN_CLICKED(IDC_BTN_INSPECTOR_PATH, &CPathSettingDlg::OnBnClickedBtnInspectorPath) - ON_BN_CLICKED(IDC_BTN_REVIEW_PATH, &CPathSettingDlg::OnBnClickedBtnReviewPath) - ON_BN_CLICKED(IDC_BTN_ALIGN_PATH, &CPathSettingDlg::OnBnClickedBtnAlignPath) - ON_BN_CLICKED(IDC_BTN_SAVE, &CPathSettingDlg::OnBnClickedBtnSave) - ON_BN_CLICKED(IDCANCEL, &CPathSettingDlg::OnBnClickedCancel) -END_MESSAGE_MAP() - - -// CPathSettingDlg 硫붿떆吏� 泥섎━湲� -BOOL CPathSettingDlg::Create(CWnd* pParentWnd) -{ - return CDialogEx::Create(IDD, pParentWnd); -} - -BOOL CPathSettingDlg::PreTranslateMessage(MSG* pMsg) -{ - // TODO: �뿬湲곗뿉 �듅�닔�솕�맂 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯 �겢�옒�뒪瑜� �샇異쒗빀�땲�떎. - if (pMsg->message == WM_KEYDOWN) - { - if (pMsg->wParam == VK_ESCAPE) - { - ShowWindow(SW_HIDE); - - return TRUE; - } - } - - return __super::PreTranslateMessage(pMsg); -} - -void CPathSettingDlg::OnDestroy() -{ - CDialogEx::OnDestroy(); -} - -void CPathSettingDlg::OnShowWindow(BOOL bShow, UINT nStatus) -{ - __super::OnShowWindow(bShow, nStatus); - - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (TRUE == bShow) - { - } -} - -void CPathSettingDlg::OnBnClickedBtnBinPath() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - ITEMIDLIST *pidlBrowse; - CString strPath; - - BROWSEINFO BrInfo; - - BrInfo.hwndOwner = GetSafeHwnd(); - BrInfo.pidlRoot = NULL; - - memset(&BrInfo, 0, sizeof(BrInfo)); - BrInfo.lpszTitle = _T("Please select a folder that contains Bin files"); - BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; - pidlBrowse = SHBrowseForFolder(&BrInfo); - TCHAR szPathName[200]; - - ::SHGetPathFromIDList(pidlBrowse, szPathName); - - CString strTmpPath = (LPCTSTR)szPathName; - CFileFind finder; - BOOL bFindPath = finder.FindFile(strTmpPath); - - if (bFindPath) - { - SetDlgItemText(IDC_EDIT_BIN_PATH, strTmpPath); - } - - LOG(Dbg, _T("[PathSetting] Bin Path Setting")); -} - - -void CPathSettingDlg::OnBnClickedBtnInspectorPath() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - ITEMIDLIST *pidlBrowse; - CString strPath; - - BROWSEINFO BrInfo; - - BrInfo.hwndOwner = GetSafeHwnd(); - BrInfo.pidlRoot = NULL; - - memset(&BrInfo, 0, sizeof(BrInfo)); - BrInfo.lpszTitle = _T("Please select a folder that contains Inspector Image files"); - BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; - pidlBrowse = SHBrowseForFolder(&BrInfo); - TCHAR szPathName[200]; - - ::SHGetPathFromIDList(pidlBrowse, szPathName); - - CString strTmpPath = (LPCTSTR)szPathName; - CFileFind finder; - BOOL bFindPath = finder.FindFile(strTmpPath); - - if (bFindPath) - { - SetDlgItemText(IDC_EDIT_INSPECTOR_PATH, strTmpPath); - } - - LOG(Dbg, _T("[PathSetting] Align Inspector Setting")); -} - - -void CPathSettingDlg::OnBnClickedBtnReviewPath() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - ITEMIDLIST *pidlBrowse; - CString strPath; - - BROWSEINFO BrInfo; - - BrInfo.hwndOwner = GetSafeHwnd(); - BrInfo.pidlRoot = NULL; - - memset(&BrInfo, 0, sizeof(BrInfo)); - BrInfo.lpszTitle = _T("Please select a folder that contains Review Image files"); - BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; - pidlBrowse = SHBrowseForFolder(&BrInfo); - TCHAR szPathName[200]; - - ::SHGetPathFromIDList(pidlBrowse, szPathName); - - CString strTmpPath = (LPCTSTR)szPathName; - CFileFind finder; - BOOL bFindPath = finder.FindFile(strTmpPath); - - if (bFindPath) - { - SetDlgItemText(IDC_EDIT_REVIEW_PATH, strTmpPath); - } - LOG(Dbg, _T("[PathSetting] Review Path Setting")); -} - - -void CPathSettingDlg::OnBnClickedBtnAlignPath() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - ITEMIDLIST *pidlBrowse; - CString strPath; - - BROWSEINFO BrInfo; - - BrInfo.hwndOwner = GetSafeHwnd(); - BrInfo.pidlRoot = NULL; - - memset(&BrInfo, 0, sizeof(BrInfo)); - BrInfo.lpszTitle = _T("Please select a folder that contains Align Image files"); - BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; - pidlBrowse = SHBrowseForFolder(&BrInfo); - TCHAR szPathName[200]; - - ::SHGetPathFromIDList(pidlBrowse, szPathName); - - CString strTmpPath = (LPCTSTR)szPathName; - CFileFind finder; - BOOL bFindPath = finder.FindFile(strTmpPath); - - if (bFindPath) - { - SetDlgItemText(IDC_EDIT_ALIGN_PATH, strTmpPath); - } - - LOG(Dbg, _T("[PathSetting] Align Path Setting")); -} - - -void CPathSettingDlg::OnBnClickedBtnSave() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CString strFilePath; - strFilePath.Format("%s\\Config\\%s", GetExePath(), PathSettingFilePath); - - GetDlgItemText(IDC_EDIT_ALIGN_PATH, m_strAlignPath); - INIWriteStr("Path", "Align", m_strAlignPath, strFilePath); - GetDlgItemText(IDC_EDIT_BIN_PATH, m_strBinPath); - INIWriteStr("Path", "Bin", m_strBinPath, strFilePath); - GetDlgItemText(IDC_EDIT_INSPECTOR_PATH, m_strInspectorPath); - INIWriteStr("Path", "Inspector", m_strInspectorPath, strFilePath); - GetDlgItemText(IDC_EDIT_REVIEW_PATH, m_strReviewPath); - INIWriteStr("Path", "Review", m_strReviewPath, strFilePath); - - AfxMessageBox(_T("���옣 �릺�뿀�뒿�땲�떎"), MB_OK | MB_ICONWARNING); - - LOG(Dbg, _T("[PathSetting] PathSetting Save")); - - ShowWindow(SW_HIDE); -} - -void CPathSettingDlg::OnBnClickedCancel() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CString strTemp; - strTemp.Format(_T("")); - - if (m_strAlignPath == "") - { - m_strAlignPath.Format(_T("D:\\ResultData\\Align\\")); - } - if (m_strBinPath == "") - { - m_strBinPath.Format(_T("D:\\DIT_ResultData\\RawBin\\")); - } - if (m_strInspectorPath == "") - { - m_strInspectorPath.Format(_T("\\\\126.100.100.1\\D\\Image\\Defect\\")); - } - if (m_strReviewPath == "") - { - m_strReviewPath.Format(_T("D:\\ResultData\\UploadImage\\")); - } - - SetDlgItemText(IDC_EDIT_ALIGN_PATH, m_strAlignPath); - SetDlgItemText(IDC_EDIT_BIN_PATH, m_strBinPath); - SetDlgItemText(IDC_EDIT_INSPECTOR_PATH, m_strInspectorPath); - SetDlgItemText(IDC_EDIT_REVIEW_PATH, m_strReviewPath); - - LOG(Dbg, _T("[PathSetting] PathSetting Cancel")); - - ShowWindow(SW_HIDE); -} - -void CPathSettingDlg::PathSettingLoad() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CString strFilePath; - strFilePath.Format(_T("%s\\Config\\%s"), GetExePath(), PathSettingFilePath); - - CString strAppName = _T("Path"); - m_strAlignPath = INIReadStr(strAppName, _T("Align"), strFilePath); - m_strBinPath = INIReadStr(strAppName, _T("Bin"), strFilePath); - m_strInspectorPath = INIReadStr(strAppName, _T("Inspector"), strFilePath); - m_strReviewPath = INIReadStr(strAppName, _T("Review"), strFilePath); - - if (m_strAlignPath == "") - { - m_strAlignPath.Format(_T("D:\\ResultData\\Align\\")); - } - if (m_strBinPath == "") - { - m_strBinPath.Format(_T("D:\\DIT_ResultData\\RawBin\\")); - } - if (m_strInspectorPath == "") - { - m_strInspectorPath.Format(_T("\\\\126.100.100.1\\D\\Image\\Defect\\")); - } - if (m_strReviewPath == "") - { - m_strReviewPath.Format(_T("D:\\ResultData\\UploadImage\\")); - } - - SetDlgItemText(IDC_EDIT_ALIGN_PATH, m_strAlignPath); - SetDlgItemText(IDC_EDIT_BIN_PATH, m_strBinPath); - SetDlgItemText(IDC_EDIT_INSPECTOR_PATH, m_strInspectorPath); - SetDlgItemText(IDC_EDIT_REVIEW_PATH, m_strReviewPath); - - LOG(Dbg, _T("[PathSetting] Start Review Path Setting Load")); -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/PathSettingDlg.h b/ReviewHistory/ReveiwHistory/PathSettingDlg.h deleted file mode 100644 index f502ff2..0000000 --- a/ReviewHistory/ReveiwHistory/PathSettingDlg.h +++ /dev/null @@ -1,47 +0,0 @@ -癤�#pragma once -#include "Singleton.h" - -// CPathSettingDlg ���솕 �긽�옄 - -class CPathSettingDlg : public CDialogEx, public CSingleton< CPathSettingDlg > -{ - DECLARE_DYNAMIC(CPathSettingDlg) - -public: - CPathSettingDlg(CWnd* pParent = nullptr); // �몴以� �깮�꽦�옄�엯�땲�떎. - virtual ~CPathSettingDlg(); - -// ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎. - - enum { IDD = IDD_DLG_PATH_SETTING }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 吏��썝�엯�땲�떎. - - CString m_strBinPath; - CString m_strInspectorPath; - CString m_strReviewPath; - CString m_strAlignPath; - - DECLARE_MESSAGE_MAP() - -public: - virtual BOOL Create(CWnd* pParentWnd = NULL); - virtual BOOL PreTranslateMessage(MSG* pMsg); - - afx_msg void OnDestroy(); - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); -public: - afx_msg void OnBnClickedBtnBinPath(); - afx_msg void OnBnClickedBtnInspectorPath(); - afx_msg void OnBnClickedBtnReviewPath(); - afx_msg void OnBnClickedBtnAlignPath(); - afx_msg void OnBnClickedBtnSave(); - afx_msg void OnBnClickedCancel(); - - void PathSettingLoad(); - CString GetBinPath() { return m_strBinPath; } - CString GetInspectorPath() { return m_strInspectorPath; } - CString GetReviewPath() { return m_strReviewPath; } - CString GetAlignPath() { return m_strAlignPath; } -}; diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistory.cpp deleted file mode 100644 index 87e331d..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.cpp +++ /dev/null @@ -1,106 +0,0 @@ -癤� -// ReveiwHistory.cpp: �쓳�슜 �봽濡쒓렇�옩�뿉 ���븳 �겢�옒�뒪 �룞�옉�쓣 �젙�쓽�빀�땲�떎. -// - -#include "stdafx.h" -#include "ReveiwHistory.h" -#include "ReveiwHistoryDlg.h" - -#ifdef _DEBUG -#define new DEBUG_NEW -#endif - - -// CReveiwHistoryApp - -BEGIN_MESSAGE_MAP(CReveiwHistoryApp, CWinApp) - ON_COMMAND(ID_HELP, &CWinApp::OnHelp) -END_MESSAGE_MAP() - - -// CReveiwHistoryApp �깮�꽦 - -CReveiwHistoryApp::CReveiwHistoryApp() -{ - // �떎�떆 �떆�옉 愿�由ъ옄 吏��썝 - m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; - - // TODO: �뿬湲곗뿉 �깮�꽦 肄붾뱶瑜� 異붽��빀�땲�떎. - // InitInstance�뿉 紐⑤뱺 以묒슂�븳 珥덇린�솕 �옉�뾽�쓣 諛곗튂�빀�땲�떎. -} - - -// �쑀�씪�븳 CReveiwHistoryApp 媛쒖껜�엯�땲�떎. - -CReveiwHistoryApp theApp; - - -// CReveiwHistoryApp 珥덇린�솕 - -BOOL CReveiwHistoryApp::InitInstance() -{ - // �쓳�슜 �봽濡쒓렇�옩 留ㅻ땲�럹�뒪�듃媛� ComCtl32.dll 踰꾩쟾 6 �씠�긽�쓣 �궗�슜�븯�뿬 鍮꾩<�뼹 �뒪���씪�쓣 - // �궗�슜�븯�룄濡� 吏��젙�븯�뒗 寃쎌슦, Windows XP �긽�뿉�꽌 諛섎뱶�떆 InitCommonControlsEx()媛� �븘�슂�빀�땲�떎. - // InitCommonControlsEx()瑜� �궗�슜�븯吏� �븡�쑝硫� 李쎌쓣 留뚮뱾 �닔 �뾾�뒿�땲�떎. - INITCOMMONCONTROLSEX InitCtrls; - InitCtrls.dwSize = sizeof(InitCtrls); - // �쓳�슜 �봽濡쒓렇�옩�뿉�꽌 �궗�슜�븷 紐⑤뱺 怨듭슜 而⑦듃濡� �겢�옒�뒪瑜� �룷�븿�븯�룄濡� - // �씠 �빆紐⑹쓣 �꽕�젙�븯�떗�떆�삤. - InitCtrls.dwICC = ICC_WIN95_CLASSES; - InitCommonControlsEx(&InitCtrls); - - CWinApp::InitInstance(); - - - AfxEnableControlContainer(); - - // ���솕 �긽�옄�뿉 �끂 �듃由� 酉� �삉�뒗 - // �끂 紐⑸줉 酉� 而⑦듃濡ㅼ씠 �룷�븿�릺�뼱 �엳�뒗 寃쎌슦 �끂 愿�由ъ옄瑜� 留뚮벊�땲�떎. - CShellManager *pShellManager = new CShellManager; - - // MFC 而⑦듃濡ㅼ쓽 �뀒留덈�� �궗�슜�븯湲� �쐞�빐 "Windows �썝�삎" 鍮꾩<�뼹 愿�由ъ옄 �솢�꽦�솕 - CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); - - // �몴以� 珥덇린�솕 - // �씠�뱾 湲곕뒫�쓣 �궗�슜�븯吏� �븡怨� 理쒖쥌 �떎�뻾 �뙆�씪�쓽 �겕湲곕�� 以꾩씠�젮硫� - // �븘�옒�뿉�꽌 �븘�슂 �뾾�뒗 �듅�젙 珥덇린�솕 - // 猷⑦떞�쓣 �젣嫄고빐�빞 �빀�땲�떎. - // �빐�떦 �꽕�젙�씠 ���옣�맂 �젅吏��뒪�듃由� �궎瑜� 蹂�寃쏀븯�떗�떆�삤. - // TODO: �씠 臾몄옄�뿴�쓣 �쉶�궗 �삉�뒗 議곗쭅�쓽 �씠由꾧낵 媛숈� - // �쟻�젅�븳 �궡�슜�쑝濡� �닔�젙�빐�빞 �빀�땲�떎. - SetRegistryKey(_T("濡쒖뺄 �쓳�슜 �봽濡쒓렇�옩 留덈쾿�궗�뿉�꽌 �깮�꽦�맂 �쓳�슜 �봽濡쒓렇�옩")); - - CReveiwHistoryDlg dlg; - m_pMainWnd = &dlg; - INT_PTR nResponse = dlg.DoModal(); - if (nResponse == IDOK) - { - // TODO: �뿬湲곗뿉 [�솗�씤]�쓣 �겢由��븯�뿬 ���솕 �긽�옄媛� �뾾�뼱吏� �븣 泥섎━�븷 - // 肄붾뱶瑜� 諛곗튂�빀�땲�떎. - } - else if (nResponse == IDCANCEL) - { - // TODO: �뿬湲곗뿉 [痍⑥냼]瑜� �겢由��븯�뿬 ���솕 �긽�옄媛� �뾾�뼱吏� �븣 泥섎━�븷 - // 肄붾뱶瑜� 諛곗튂�빀�땲�떎. - } - else if (nResponse == -1) - { - TRACE(traceAppMsg, 0, "寃쎄퀬: ���솕 �긽�옄瑜� 留뚮뱾吏� 紐삵뻽�쑝誘�濡� �쓳�슜 �봽濡쒓렇�옩�씠 �삁湲곗튂 �븡寃� 醫낅즺�맗�땲�떎.\n"); - TRACE(traceAppMsg, 0, "寃쎄퀬: ���솕 �긽�옄�뿉�꽌 MFC 而⑦듃濡ㅼ쓣 �궗�슜�븯�뒗 寃쎌슦 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS瑜� �닔�뻾�븷 �닔 �뾾�뒿�땲�떎.\n"); - } - - // �쐞�뿉�꽌 留뚮뱺 �끂 愿�由ъ옄瑜� �궘�젣�빀�땲�떎. - if (pShellManager != nullptr) - { - delete pShellManager; - } - -#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS) - ControlBarCleanUp(); -#endif - - // ���솕 �긽�옄媛� �떕�삍�쑝誘�濡� �쓳�슜 �봽濡쒓렇�옩�쓽 硫붿떆吏� �럩�봽瑜� �떆�옉�븯吏� �븡怨� �쓳�슜 �봽濡쒓렇�옩�쓣 �걹�궪 �닔 �엳�룄濡� FALSE瑜� - // 諛섑솚�빀�땲�떎. - return FALSE; -} - diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.h b/ReviewHistory/ReveiwHistory/ReveiwHistory.h deleted file mode 100644 index 226c23b..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.h +++ /dev/null @@ -1,32 +0,0 @@ -癤� -// ReveiwHistory.h: PROJECT_NAME �쓳�슜 �봽濡쒓렇�옩�뿉 ���븳 二� �뿤�뜑 �뙆�씪�엯�땲�떎. -// - -#pragma once - -#ifndef __AFXWIN_H__ - #error "PCH�뿉 ���빐 �씠 �뙆�씪�쓣 �룷�븿�븯湲� �쟾�뿉 'stdafx.h'瑜� �룷�븿�빀�땲�떎." -#endif - -#include "resource.h" // 二� 湲고샇�엯�땲�떎. - - -// CReveiwHistoryApp: -// �씠 �겢�옒�뒪�쓽 援ы쁽�뿉 ���빐�꽌�뒗 ReveiwHistory.cpp�쓣(瑜�) 李몄“�븯�꽭�슂. -// - -class CReveiwHistoryApp : public CWinApp -{ -public: - CReveiwHistoryApp(); - -// �옱�젙�쓽�엯�땲�떎. -public: - virtual BOOL InitInstance(); - -// 援ы쁽�엯�땲�떎. - - DECLARE_MESSAGE_MAP() -}; - -extern CReveiwHistoryApp theApp; diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc b/ReviewHistory/ReveiwHistory/ReveiwHistory.rc deleted file mode 100644 index 905b134..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc +++ /dev/null Binary files differ diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj b/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj deleted file mode 100644 index a0bb3d2..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj +++ /dev/null @@ -1,268 +0,0 @@ -癤�<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCProjectVersion>15.0</VCProjectVersion> - <ProjectGuid>{FDD89A84-12C4-4024-8101-0E719E2BD9F6}</ProjectGuid> - <Keyword>MFCProj</Keyword> - <RootNamespace>DefectFromation</RootNamespace> - <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> - <ProjectName>ReviewHistroy</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - <UseOfMfc>Dynamic</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - <UseOfMfc>Dynamic</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> - <CharacterSet>MultiByte</CharacterSet> - <UseOfMfc>Dynamic</UseOfMfc> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>MultiByte</CharacterSet> - <UseOfMfc>Dynamic</UseOfMfc> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="Shared"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)\bin\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)\bin\</OutDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - </Link> - <Midl> - <MkTypLibCompatible>false</MkTypLibCompatible> - <ValidateAllParameters>true</ValidateAllParameters> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </Midl> - <ResourceCompile> - <Culture>0x0412</Culture> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <SDLCheck>false</SDLCheck> - <PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <AdditionalLibraryDirectories>../lib</AdditionalLibraryDirectories> - <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> - </Link> - <Midl> - <MkTypLibCompatible>false</MkTypLibCompatible> - <ValidateAllParameters>true</ValidateAllParameters> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </Midl> - <ResourceCompile> - <Culture>0x0412</Culture> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>true</SDLCheck> - <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <Midl> - <MkTypLibCompatible>false</MkTypLibCompatible> - <ValidateAllParameters>true</ValidateAllParameters> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </Midl> - <ResourceCompile> - <Culture>0x0412</Culture> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PrecompiledHeader>Use</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <SDLCheck>false</SDLCheck> - <PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../include</AdditionalIncludeDirectories> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - <WholeProgramOptimization>false</WholeProgramOptimization> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>../lib</AdditionalLibraryDirectories> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <Midl> - <MkTypLibCompatible>false</MkTypLibCompatible> - <ValidateAllParameters>true</ValidateAllParameters> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - </Midl> - <ResourceCompile> - <Culture>0x0412</Culture> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ResourceCompile> - </ItemDefinitionGroup> - <ItemGroup> - <ClInclude Include="akDefectFormation.h" /> - <ClInclude Include="akFormationMap.h" /> - <ClInclude Include="akGridData.h" /> - <ClInclude Include="akImageView.h" /> - <ClInclude Include="akLoggerExt.h" /> - <ClInclude Include="akWndArrange.h" /> - <ClInclude Include="AnaResultFile.h" /> - <ClInclude Include="CustomizeReview.h" /> - <ClInclude Include="ReveiwHistory.h" /> - <ClInclude Include="ReveiwHistoryDlg.h" /> - <ClInclude Include="DitGlassRawClient.h" /> - <ClInclude Include="DitGlassRawServer.h" /> - <ClInclude Include="DitGlassRawStruct.h" /> - <ClInclude Include="AlignDlg.h" /> - <ClInclude Include="GlassRawBase.h" /> - <ClInclude Include="GlassRawCPJT.h" /> - <ClInclude Include="GlassRawCSOT.h" /> - <ClInclude Include="GlassRawRTMS.h" /> - <ClInclude Include="InterfaceFTP.h" /> - <ClInclude Include="MacroResultFile.h" /> - <ClInclude Include="PathSettingDlg.h" /> - <ClInclude Include="Resource.h" /> - <ClInclude Include="Singleton.h" /> - <ClInclude Include="StackResultCPJT.h" /> - <ClInclude Include="StackResultCSOT.h" /> - <ClInclude Include="stdafx.h" /> - <ClInclude Include="targetver.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="akDefectFormation.cpp" /> - <ClCompile Include="akFormationMap.cpp" /> - <ClCompile Include="akGridData.cpp" /> - <ClCompile Include="akImageView.cpp" /> - <ClCompile Include="akLoggerExt.cpp" /> - <ClCompile Include="akWndArrange.cpp" /> - <ClCompile Include="AnaResultFile.cpp" /> - <ClCompile Include="CustomizeReview.cpp" /> - <ClCompile Include="ReveiwHistory.cpp" /> - <ClCompile Include="ReveiwHistoryDlg.cpp" /> - <ClCompile Include="DitGlassRawClient.cpp" /> - <ClCompile Include="DitGlassRawServer.cpp" /> - <ClCompile Include="AlignDlg.cpp" /> - <ClCompile Include="GlassRawBase.cpp" /> - <ClCompile Include="GlassRawCPJT.cpp" /> - <ClCompile Include="GlassRawCSOT.cpp" /> - <ClCompile Include="GlassRawRTMS.cpp" /> - <ClCompile Include="InterfaceFTP.cpp" /> - <ClCompile Include="MacroResultFile.cpp" /> - <ClCompile Include="PathSettingDlg.cpp" /> - <ClCompile Include="StackResultCPJT.cpp" /> - <ClCompile Include="StackResultCSOT.cpp" /> - <ClCompile Include="stdafx.cpp"> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader> - <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="ReveiwHistory.rc" /> - </ItemGroup> - <ItemGroup> - <None Include="res\ReveiwHistory.rc2" /> - </ItemGroup> - <ItemGroup> - <Image Include="res\History.ico" /> - <Image Include="res\ReveiwHistory.ico" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj.filters b/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj.filters deleted file mode 100644 index 2ef0608..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj.filters +++ /dev/null @@ -1,195 +0,0 @@ -癤�<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="�냼�뒪 �뙆�씪"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="�뿤�뜑 �뙆�씪"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> - </Filter> - <Filter Include="由ъ냼�뒪 �뙆�씪"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - <Filter Include="akSouce"> - <UniqueIdentifier>{8497f531-1d33-464c-96c0-9008295743c2}</UniqueIdentifier> - </Filter> - <Filter Include="Extern"> - <UniqueIdentifier>{412cecfa-9d77-42eb-b853-f276c16e9e82}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <ClInclude Include="stdafx.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="targetver.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="Resource.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="PathSettingDlg.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="Singleton.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="akDefectFormation.h"> - <Filter>akSouce</Filter> - </ClInclude> - <ClInclude Include="akFormationMap.h"> - <Filter>akSouce</Filter> - </ClInclude> - <ClInclude Include="akGridData.h"> - <Filter>akSouce</Filter> - </ClInclude> - <ClInclude Include="akLoggerExt.h"> - <Filter>akSouce</Filter> - </ClInclude> - <ClInclude Include="akWndArrange.h"> - <Filter>akSouce</Filter> - </ClInclude> - <ClInclude Include="DitGlassRawServer.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="DitGlassRawStruct.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="GlassRawBase.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="GlassRawCPJT.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="MacroResultFile.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="CustomizeReview.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="GlassRawRTMS.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="InterfaceFTP.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="StackResultCPJT.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="AnaResultFile.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="DitGlassRawClient.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="GlassRawCSOT.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="StackResultCSOT.h"> - <Filter>Extern</Filter> - </ClInclude> - <ClInclude Include="ReveiwHistory.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="ReveiwHistoryDlg.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="AlignDlg.h"> - <Filter>�뿤�뜑 �뙆�씪</Filter> - </ClInclude> - <ClInclude Include="akImageView.h"> - <Filter>akSouce</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="stdafx.cpp"> - <Filter>�냼�뒪 �뙆�씪</Filter> - </ClCompile> - <ClCompile Include="PathSettingDlg.cpp"> - <Filter>�냼�뒪 �뙆�씪</Filter> - </ClCompile> - <ClCompile Include="akDefectFormation.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - <ClCompile Include="akFormationMap.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - <ClCompile Include="akGridData.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - <ClCompile Include="akLoggerExt.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - <ClCompile Include="akWndArrange.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - <ClCompile Include="DitGlassRawServer.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="GlassRawBase.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="GlassRawCPJT.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="MacroResultFile.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="CustomizeReview.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="GlassRawRTMS.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="InterfaceFTP.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="StackResultCPJT.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="AnaResultFile.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="DitGlassRawClient.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="GlassRawCSOT.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="StackResultCSOT.cpp"> - <Filter>Extern</Filter> - </ClCompile> - <ClCompile Include="ReveiwHistory.cpp"> - <Filter>�냼�뒪 �뙆�씪</Filter> - </ClCompile> - <ClCompile Include="ReveiwHistoryDlg.cpp"> - <Filter>�냼�뒪 �뙆�씪</Filter> - </ClCompile> - <ClCompile Include="AlignDlg.cpp"> - <Filter>�냼�뒪 �뙆�씪</Filter> - </ClCompile> - <ClCompile Include="akImageView.cpp"> - <Filter>akSouce</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <Image Include="res\ReveiwHistory.ico"> - <Filter>由ъ냼�뒪 �뙆�씪</Filter> - </Image> - <Image Include="res\History.ico"> - <Filter>由ъ냼�뒪 �뙆�씪</Filter> - </Image> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="ReveiwHistory.rc"> - <Filter>由ъ냼�뒪 �뙆�씪</Filter> - </ResourceCompile> - </ItemGroup> - <ItemGroup> - <None Include="res\ReveiwHistory.rc2"> - <Filter>由ъ냼�뒪 �뙆�씪</Filter> - </None> - </ItemGroup> -</Project> \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp deleted file mode 100644 index 81b16e1..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp +++ /dev/null @@ -1,3766 +0,0 @@ -癤� -// ReveiwHistoryDlg.cpp: 援ы쁽 �뙆�씪 -// - -#include "stdafx.h" -#include "ReveiwHistory.h" -#include "ReveiwHistoryDlg.h" -#include "PathSettingDlg.h" -#include "DitGlassRawStruct.h" -#include "afxdialogex.h" -#include "GlassRawCPJT.h" -#include "akGridCtrl/GridCellCheck.h" -#include "akImageView.h" -#include <algorithm> - -#ifdef _DEBUG -#define new DEBUG_NEW -#endif - -// �쓳�슜 �봽濡쒓렇�옩 �젙蹂댁뿉 �궗�슜�릺�뒗 CAboutDlg ���솕 �긽�옄�엯�땲�떎. - -class CAboutDlg : public CDialogEx -{ -public: - CAboutDlg(); - -// ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎. -#ifdef AFX_DESIGN_TIME - enum { IDD = IDD_ABOUTBOX }; -#endif - - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 吏��썝�엯�땲�떎. - -// 援ы쁽�엯�땲�떎. -protected: - DECLARE_MESSAGE_MAP() -}; - -CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) -{ -} - -void CAboutDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialogEx::DoDataExchange(pDX); -} - -BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) -END_MESSAGE_MAP() - -// CReveiwHistoryDlg ���솕 �긽�옄 - -CReveiwHistoryDlg::CReveiwHistoryDlg(CWnd* pParent /*=nullptr*/) - : CDialogEx(IDD_DLG_REVIEWHISTORY, pParent) - , m_nFileCount(0) -{ - m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); - - AddVecFileHeader(); - AddVecGlassHeader(); - AddVecDefectHeader(); - - m_nSelectedRow = 0; - m_nSelectedCol = 0; - m_nCount = 0; - m_nGlassSelect = 0; - m_bDefectAll = false; - m_bFirst = false; - m_nSizeDefect = 0; - m_nSizeImage = 0; - m_nDefectCount = 0; - m_nImageCount = 0; - m_nCellCount = 0; - m_bAsending = FALSE; - - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nCellSize[i] = 0; - m_nCellSizeTemp[i] = m_nCellSize[i]; - m_nImageSize[i] = 0; - } -} - -void CReveiwHistoryDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialogEx::DoDataExchange(pDX); - DDX_Control(pDX, IDC_SLIDER_IMG, m_sldImg); - DDX_Control(pDX, IDC_EDIT_COUNT, m_ctrCount); - DDX_Control(pDX, IDC_CHK_All_DEFECT, m_chkAllDefect); - DDX_Control(pDX, IDC_CHK_REVIEW_DEFECT, m_chkReviewDefect); - DDX_Control(pDX, IDC_CHK_MUTI, m_chkMuti); - DDX_Control(pDX, IDC_CHK_SINGLE, m_chkSingle); - DDX_Control(pDX, IDC_STATIC_IMG_REVIEW, m_ctrReviewImage); - DDX_Text(pDX, IDC_EDIT_FILE_COUNT, m_nFileCount); - DDX_Control(pDX, IDC_EDIT_FILE_COUNT, m_ctlFileCount); - DDX_Control(pDX, IDC_PROGRESS_LOAD, m_ctlProgress); -} - -BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx) - ON_WM_SYSCOMMAND() - ON_WM_PAINT() - ON_WM_QUERYDRAGICON() - ON_WM_DESTROY() - ON_WM_SIZE() - ON_WM_HSCROLL() - ON_BN_CLICKED(IDC_BUTTON_MAPVIEW_FIT, &CReveiwHistoryDlg::OnBnClickedButtonMapviewFit) - ON_MESSAGE(UM_FORMMAP_DEFECTSELECT, OnMapDefectSelected) - ON_MESSAGE(UM_FORMMAP_DEFECTMOUSEOVER, OnMapDefectMouseOver) - ON_COMMAND(ID_OPTION_PATHSETTING, &CReveiwHistoryDlg::OnOptionPathsetting) - ON_COMMAND(ID_VIEW_ALLDEFECT, &CReveiwHistoryDlg::OnViewAlldefect) - ON_COMMAND(ID_VIEW_REVIEWDEFECT, &CReveiwHistoryDlg::OnViewReviewdefect) - ON_COMMAND(ID_ALIGN_VIEW, &CReveiwHistoryDlg::OnAlignView) - ON_BN_CLICKED(IDC_BTN_FIND_BIN, &CReveiwHistoryDlg::OnBnClickedBtnFindBin) - ON_EN_CHANGE(IDC_EDIT_COUNT, &CReveiwHistoryDlg::OnChangeEditCount) - ON_BN_CLICKED(IDC_BUTTON3, &CReveiwHistoryDlg::OnBnClickedButton3) - ON_BN_CLICKED(IDC_CHK_All_DEFECT, &CReveiwHistoryDlg::OnClickedChkAllDefect) - ON_BN_CLICKED(IDC_CHK_MUTI, &CReveiwHistoryDlg::OnClickedChkMuti) - ON_BN_CLICKED(IDC_CHK_REVIEW_DEFECT, &CReveiwHistoryDlg::OnClickedChkReviewDefect) - ON_BN_CLICKED(IDC_CHK_SINGLE, &CReveiwHistoryDlg::OnClickedChkSingle) - ON_EN_CHANGE(IDC_EDIT_FILE_COUNT, &CReveiwHistoryDlg::OnChangeEditFileCount) -END_MESSAGE_MAP() - -// CReveiwHistoryDlg 硫붿떆吏� 泥섎━湲� - -BOOL CReveiwHistoryDlg::OnInitDialog() -{ - CDialogEx::OnInitDialog(); - - // �떆�뒪�뀥 硫붾돱�뿉 "�젙蹂�..." 硫붾돱 �빆紐⑹쓣 異붽��빀�땲�떎. - - // IDM_ABOUTBOX�뒗 �떆�뒪�뀥 紐낅졊 踰붿쐞�뿉 �엳�뼱�빞 �빀�땲�떎. - ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); - ASSERT(IDM_ABOUTBOX < 0xF000); - - CMenu* pSysMenu = GetSystemMenu(FALSE); - if (pSysMenu != nullptr) - { - BOOL bNameValid; - CString strAboutMenu; - bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); - ASSERT(bNameValid); - if (!strAboutMenu.IsEmpty()) - { - pSysMenu->AppendMenu(MF_SEPARATOR); - pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); - } - } - - // �씠 ���솕 �긽�옄�쓽 �븘�씠肄섏쓣 �꽕�젙�빀�땲�떎. �쓳�슜 �봽濡쒓렇�옩�쓽 二� 李쎌씠 ���솕 �긽�옄媛� �븘�땺 寃쎌슦�뿉�뒗 - // �봽�젅�엫�썙�겕媛� �씠 �옉�뾽�쓣 �옄�룞�쑝濡� �닔�뻾�빀�땲�떎. - SetIcon(m_hIcon, TRUE); // �겙 �븘�씠肄섏쓣 �꽕�젙�빀�땲�떎. - SetIcon(m_hIcon, FALSE); // �옉�� �븘�씠肄섏쓣 �꽕�젙�빀�땲�떎. - - GetDlgItem(IDC_STATIC_FORMATIONMAP2)->GetWindowRect(m_picture_rect); - GetDlgItem(IDC_STATIC_IMG_INSPECTOR)->GetWindowRect(m_picture_rect2); - - ScreenToClient(m_picture_rect); - ScreenToClient(m_picture_rect2); - - GetDlgItem(IDC_STATIC_IMG_ALIGN1)->GetWindowRect(m_Align_rect); - GetDlgItem(IDC_STATIC_IMG_ALIGN2)->GetWindowRect(m_Align_rect2); - - ScreenToClient(m_Align_rect); - ScreenToClient(m_Align_rect2); - - m_ImageView.CreateGraph(this, m_picture_rect); - m_ImageView.SetAutoScale(); - - - // TODO: �뿬湲곗뿉 異붽� 珥덇린�솕 �옉�뾽�쓣 異붽��빀�땲�떎. - if (1) - { - CRect rectTemp; - GetDlgItem(IDC_STATIC_FORMATIONMAP)->GetWindowRect(rectTemp); - ScreenToClient(rectTemp); - - m_FormationMap.CreateGraph(this, rectTemp); - } - - m_WndArrange.setParentWnd(this); - m_WndArrange.addChildWnd(&m_FormationMap, WA_RESIZE_WIDTH | WA_RESIZE_HEIGHT); - - GetDlgItem(IDC_STATIC_FORMATIONMAP)->BringWindowToTop(); - - LOG(Dbg, _T("[Processe] Review History Start")); - - CreateUserDirectory(); - CreateUserClass(); - - InitGridReviewLIst(&m_gridReviewList, IDC_STATIC_GRID_GLASS); - InitGridDefectLIst(&m_gridDefectInfo, IDC_STATIC_GRID_DEFECT); - InitGridGlassLIst(&m_gridGlassInfo, IDC_STATIC_GRID_GLASS_INFO); - - OnViewReviewdefect(); - - m_chkReviewDefect.SetCheck(TRUE); - m_chkSingle.SetCheck(TRUE); - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// - m_ConfigOption.m_nMaxDataNumCell = 200; - m_ConfigOption.m_nMaxDataNumDefect = 50000; - - if (m_Server.CreateServer(m_ConfigOption.m_nMaxDataNumCell, m_ConfigOption.m_nMaxDataNumDefect) == FALSE) - { - LOG(Dbg, _T("[Processe]�꽌踰� �깮�꽦 �떎�뙣 醫낅즺 �빀�땲�떎.")); - exit(0); - } - - m_pGlassRawMaker = NULL; - m_ConfigOption.m_nSelectRawType = 3; - OnCbnSelchangeComboRawtype(); -////////////////////////////////////////////////////////////////////////////////////////////////// - - SlideInit(); - Imagenoload(); - - m_ctlProgress.SetRange(0, 100); - m_ctlProgress.ShowWindow(FALSE); - - return TRUE; // �룷而ㅼ뒪瑜� 而⑦듃濡ㅼ뿉 �꽕�젙�븯吏� �븡�쑝硫� TRUE瑜� 諛섑솚�빀�땲�떎. -} - -void CReveiwHistoryDlg::OnDestroy() -{ - CDialogEx::OnDestroy(); - - DestroyUserClass(); - - m_Filelistfont.DeleteObject(); - m_Defectfont.DeleteObject(); - - LOG(Dbg, _T("[Processe] Review History End")); -} - -void CReveiwHistoryDlg::OnSysCommand(UINT nID, LPARAM lParam) -{ - if ((nID & 0xFFF0) == IDM_ABOUTBOX) - { - CAboutDlg dlgAbout; - dlgAbout.DoModal(); - } - else - { - CDialogEx::OnSysCommand(nID, lParam); - } -} - -// ���솕 �긽�옄�뿉 理쒖냼�솕 �떒異붾�� 異붽��븷 寃쎌슦 �븘�씠肄섏쓣 洹몃━�젮硫� -// �븘�옒 肄붾뱶媛� �븘�슂�빀�땲�떎. 臾몄꽌/酉� 紐⑤뜽�쓣 �궗�슜�븯�뒗 MFC �쓳�슜 �봽濡쒓렇�옩�쓽 寃쎌슦�뿉�뒗 -// �봽�젅�엫�썙�겕�뿉�꽌 �씠 �옉�뾽�쓣 �옄�룞�쑝濡� �닔�뻾�빀�땲�떎. - -void CReveiwHistoryDlg::OnPaint() -{ - CPaintDC dc(this); // 洹몃━湲곕�� �쐞�븳 �뵒諛붿씠�뒪 而⑦뀓�뒪�듃�엯�땲�떎. - - if (IsIconic()) - { - SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); - - // �겢�씪�씠�뼵�듃 �궗媛곹삎�뿉�꽌 �븘�씠肄섏쓣 媛��슫�뜲�뿉 留욎땅�땲�떎. - int cxIcon = GetSystemMetrics(SM_CXICON); - int cyIcon = GetSystemMetrics(SM_CYICON); - CRect rect; - GetClientRect(&rect); - int x = (rect.Width() - cxIcon + 1) / 2; - int y = (rect.Height() - cyIcon + 1) / 2; - - // �븘�씠肄섏쓣 洹몃┰�땲�떎. - dc.DrawIcon(x, y, m_hIcon); - } - else - { -// if (!m_ReviewImage.IsNull()) -// { -// dc.SetStretchBltMode(COLORONCOLOR); -// // 洹몃┝�쓣 Picture Control �겕湲곕줈 �솕硫댁뿉 異쒕젰�븳�떎. -// m_ReviewImage.Draw(dc, m_picture_rect); -// } - if (!m_DefectImage.IsNull()) - { - dc.SetStretchBltMode(COLORONCOLOR); - // 洹몃┝�쓣 Picture Control �겕湲곕줈 �솕硫댁뿉 異쒕젰�븳�떎. - m_DefectImage.Draw(dc, m_picture_rect2); - } - - if (!m_AlignFirst.IsNull()) - { - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignFirst.Draw(dc, m_Align_rect); - } - if (!m_AlignSecend.IsNull()) - { - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignSecend.Draw(dc, m_Align_rect2); - } - CDialogEx::OnPaint(); - } -} - -// �궗�슜�옄媛� 理쒖냼�솕�맂 李쎌쓣 �걚�뒗 �룞�븞�뿉 而ㅼ꽌媛� �몴�떆�릺�룄濡� �떆�뒪�뀥�뿉�꽌 -// �씠 �븿�닔瑜� �샇異쒗빀�땲�떎. -HCURSOR CReveiwHistoryDlg::OnQueryDragIcon() -{ - return static_cast<HCURSOR>(m_hIcon); -} - -BOOL CReveiwHistoryDlg::PreTranslateMessage(MSG * pMsg) -{ - POINT pt; - - pt.x = GET_X_LPARAM(pMsg->lParam); - pt.y = GET_Y_LPARAM(pMsg->lParam); - - switch (pMsg->message) - { - case WM_MOUSEHWHEEL: - { - - } - break; - case WM_MOUSEMOVE: - { - - } - break; - case WM_LBUTTONDOWN: - { - -// if (m_picture_rect.left < pt.x && m_picture_rect.right > pt.x && m_picture_rect.top < pt.y && m_picture_rect.bottom > pt.y) -// { -// if (m_pParentWnd == NULL || !GetImageExist()) return; -// -// if (pt.x > -1 && pt.x < GetScaleWidth() && -// pt.y > -1 && pt.y < GetScaleHeight()) -// { -// if (m_rectTracker.HitTest(pt) < 0) -// { -// // just to demonstrate CRectTracker::TrackRubberBand -// if (m_rectTracker.TrackRubberBand(this, pt, TRUE)) -// { -// Invalidate(); -// } -// } -// else if (m_rectTracker.Track(this, pt, TRUE)) -// { -// Invalidate(); -// } -// } -// -// CRect rect; -// this->GetClientRect(rect); -// -// pt.x += m_nHScroll; -// pt.y += m_nVScroll; -// m_pParentWnd->SendMessage(WM_LBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(pt.x, pt.y)); -// } - } - break; - case WM_LBUTTONUP: - { -// int a = 1; -// return 0; -// if (m_picture_rect.left < pt.x && m_picture_rect.right > pt.x && m_picture_rect.top < pt.y && m_picture_rect.bottom > pt.y) -// { -// if (m_pParentWnd == NULL) return; -// -// CRect rect; -// this->GetClientRect(rect); -// -// pt.x += m_nHScroll; -// pt.y += m_nVScroll; -// m_pParentWnd->SendMessage(WM_LBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(pt.x, pt.y)); -// -// if (GetTrackerRect(m_rtROIRect)) -// { -// m_sROIInfo.nWidthPixel = m_rtROIRect.Width(); -// m_sROIInfo.nHeightPixel = m_rtROIRect.Height(); -// m_sROIInfo.dDiagonalPixel = sqrt(double(m_sROIInfo.nWidthPixel*m_sROIInfo.nWidthPixel + m_sROIInfo.nHeightPixel*m_sROIInfo.nHeightPixel)); -// -// m_sROIInfo.dWidthRealUM = m_sROIInfo.nWidthPixel * (m_dResolution / m_dWidthScale); -// m_sROIInfo.dHeightRealUM = m_sROIInfo.nHeightPixel * (m_dResolution / m_dHeightScale); -// m_sROIInfo.dDiagonalRealUM = sqrt((m_sROIInfo.dWidthRealUM*m_sROIInfo.dWidthRealUM) + (m_sROIInfo.dHeightRealUM*m_sROIInfo.dHeightRealUM)); -// -// Invalidate(TRUE); -// } -// } - //Drow �젙蹂대�� 蹂대궦�떎. - } - break; - case WM_KEYDOWN: - { - if (pMsg->wParam == VK_RETURN) - return TRUE; - else if (pMsg->wParam == VK_ESCAPE) - return TRUE; - } - break; - } - - return __super::PreTranslateMessage(pMsg); -} - -void CReveiwHistoryDlg::CreateUserDirectory() -{ - CString str; - - str.Format(_T("%s\\Config\\"), GetExePath()); - CreateDirectory(str, NULL); - - str.Format(_T("%s\\Log\\"), GetExePath()); - CreateDirectory(str, NULL); - - LOG(Dbg, _T("[Processe] CreateUserDirectory")); -} - -void CReveiwHistoryDlg::CreateUserClass() -{ - CPathSettingDlg::CreateClass(); - CPathSettingDlg::GetMgr()->Create(this); - CPathSettingDlg::GetMgr()->PathSettingLoad(); - - CAlignDlg::CreateClass(); - CAlignDlg::GetMgr()->Create(this); - - akDefectFormation::CreateClass(); - - LOG(Dbg, _T("[Processe] CreateUserClass")); -} - -void CReveiwHistoryDlg::DestroyUserClass() -{ - CPathSettingDlg::GetMgr()->DestroyWindow(); - CPathSettingDlg::DestroyClass(); - - CAlignDlg::GetMgr()->DestroyWindow(); - CAlignDlg::DestroyClass(); - - akDefectFormation::DestroyClass(); - - LOG(Dbg, _T("[Processe] DestroyUserClass")); -} - - -void CReveiwHistoryDlg::AddVecFileHeader() -{ - m_vecStrGridReviewHeader.push_back(" NO "); - m_vecStrGridReviewHeader.push_back(" Time "); - m_vecStrGridReviewHeader.push_back("�뿴湲�"); - m_vecStrGridReviewHeader.push_back("PPID"); - m_vecStrGridReviewHeader.push_back("GLASS ID"); - m_vecStrGridReviewHeader.push_back("珥� 寃고븿 媛��닔"); - m_vecStrGridReviewHeader.push_back("由щ럭 媛��닔"); - m_vecStrGridReviewHeader.push_back("Judge"); - m_vecStrGridReviewHeader.push_back("File Name"); -} -void CReveiwHistoryDlg::AddVecGlassHeader() -{ - m_vecStrGridGlassHeader.push_back("No"); - m_vecStrGridGlassHeader.push_back("PPID"); - m_vecStrGridGlassHeader.push_back("Glass ID"); - m_vecStrGridGlassHeader.push_back("珥� 寃고븿 媛��닔"); - m_vecStrGridGlassHeader.push_back("由щ럭 寃고븿 媛��닔"); - m_vecStrGridGlassHeader.push_back("Glass Judge"); - m_vecStrGridGlassHeader.push_back("Lot ID"); - m_vecStrGridGlassHeader.push_back("Slot ID"); - m_vecStrGridGlassHeader.push_back("Slot Number"); - m_vecStrGridGlassHeader.push_back("Cell Number"); - m_vecStrGridGlassHeader.push_back("Glass Height"); - m_vecStrGridGlassHeader.push_back("Glass Width"); -} -void CReveiwHistoryDlg::AddVecDefectHeader() -{ - m_vecStrGridDefectHeader.push_back("No"); - m_vecStrGridDefectHeader.push_back("Idx"); - m_vecStrGridDefectHeader.push_back("Loc"); - m_vecStrGridDefectHeader.push_back("Classification"); - m_vecStrGridDefectHeader.push_back("Code"); - m_vecStrGridDefectHeader.push_back("Type"); - m_vecStrGridDefectHeader.push_back("SubType"); - m_vecStrGridDefectHeader.push_back("Length"); - m_vecStrGridDefectHeader.push_back("XSize(um)"); - m_vecStrGridDefectHeader.push_back("YSize(um)"); - m_vecStrGridDefectHeader.push_back("Area(um)"); - m_vecStrGridDefectHeader.push_back("Zone"); - m_vecStrGridDefectHeader.push_back("DMax"); - m_vecStrGridDefectHeader.push_back("DMin"); - m_vecStrGridDefectHeader.push_back("DAvg"); - m_vecStrGridDefectHeader.push_back("Peak"); - m_vecStrGridDefectHeader.push_back("Step"); - m_vecStrGridDefectHeader.push_back("Cam"); - m_vecStrGridDefectHeader.push_back("Scan"); - m_vecStrGridDefectHeader.push_back("RMax"); - m_vecStrGridDefectHeader.push_back("RMin"); - m_vecStrGridDefectHeader.push_back("RAvg"); - m_vecStrGridDefectHeader.push_back("Xpos(mm)"); - m_vecStrGridDefectHeader.push_back("Ypos(mm)"); - m_vecStrGridDefectHeader.push_back("CellX(mm)"); - m_vecStrGridDefectHeader.push_back("CellY(mm)"); - m_vecStrGridDefectHeader.push_back("ScrtRatio"); - m_vecStrGridDefectHeader.push_back("Density"); - m_vecStrGridDefectHeader.push_back("MergeState"); -} - -void CReveiwHistoryDlg::SlideInit() -{ - m_sldImg.SetRange(-1, -1); - m_sldImg.SetPos(-1); - m_sldImg.SetLineSize(3); - m_sldImg.SetPageSize(10); - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); - - CString strCount; - m_ctlFileCount.SetWindowText("100"); - m_ctlFileCount.GetWindowText(strCount); - - m_nFileCount = _ttoi(strCount); -} - -void CReveiwHistoryDlg::InitGridReviewLIst(CakGridCtrl* pGrid, UINT nRectCtrlID) -{ - std::vector<CString>* pVecHeader = &m_vecStrGridReviewHeader; - - CRect rectGrid; - GetDlgItem(nRectCtrlID)->GetWindowRect(&rectGrid); - ScreenToClient(&rectGrid); - pGrid->Create(rectGrid, this, nRectCtrlID); - pGrid->GetDefaultCell(TRUE, FALSE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, TRUE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, FALSE)->SetBackClr(GRID_COLOR); - pGrid->SetFixedBkColor(GRID_FIX_COLOR); - pGrid->SetGridLines(GVL_BOTH); - - pGrid->SetVirtualMode(FALSE); - pGrid->SetCallbackFunc(NULL, 0); - pGrid->AllowReorderColumn(FALSE); - pGrid->EnableDragRowMode(FALSE); - - pGrid->SetColumnCount((int)pVecHeader->size()); - pGrid->SetDoubleBuffering(TRUE); - pGrid->SetRowCount(2); - pGrid->SetFixedRowCount(1); - pGrid->SetFixedColumnCount(0); - - pGrid->SetEditable(FALSE); - pGrid->EnableSelection(TRUE); - pGrid->SetFixedRowSelection(TRUE); - pGrid->SetHeaderSort(FALSE); - - // fill it up with stuff - pGrid->SetEditable(TRUE); - pGrid->EnableDragAndDrop(TRUE); - - int nRowIdx, nColIdx, nRows, nCols, nFixRows, nFixCols; - CString strTemp; - - GV_ITEM Item; - nRowIdx = 0; - nColIdx = 0; - Item.mask = GVIF_TEXT; - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T(" No ")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T(" Time ")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("�뿴湲�")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("PPID")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("GLASS ID")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("珥� 寃고븿 媛��닔")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("由щ럭 媛��닔")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx; - Item.col = nColIdx++; - strTemp.Format(_T("Judge")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = nRowIdx++; - Item.col = nColIdx; - strTemp.Format(_T("File Name")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - Item.row = 1; - Item.col = 0; - strTemp.Format(_T(" ")); - Item.strText = strTemp; - pGrid->SetItem(&Item); - - pGrid->SetCellType(1, 0, RUNTIME_CLASS(CGridCellCheck)); - - pGrid->AutoSize(); - pGrid->Invalidate(); - - m_WndArrange.setParentWnd(this); - m_WndArrange.addChildWnd(&m_gridReviewList, WA_RESIZE_WIDTH | WA_RESIZE_HEIGHT); -} - -void CReveiwHistoryDlg::InitGridGlassLIst(CakGridCtrl* pGrid, UINT nRectCtrlID) -{ - std::vector<CString>* pVecHeader = &m_vecStrGridGlassHeader; - - CRect rectGrid; - GetDlgItem(nRectCtrlID)->GetWindowRect(&rectGrid); - ScreenToClient(&rectGrid); - pGrid->Create(rectGrid, this, nRectCtrlID); - - pGrid->GetDefaultCell(TRUE, FALSE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, TRUE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, FALSE)->SetBackClr(GRID_COLOR); - pGrid->SetFixedBkColor(GRID_FIX_COLOR); - pGrid->SetGridLines(GVL_BOTH); - - pGrid->SetVirtualMode(TRUE); - pGrid->SetCallbackFunc(NULL, 0); - pGrid->AllowReorderColumn(FALSE); - pGrid->EnableDragRowMode(FALSE); - - pGrid->SetColumnCount((int)pVecHeader->size()); - pGrid->SetDoubleBuffering(TRUE); - pGrid->SetRowCount(2); - pGrid->SetFixedRowCount(1); - pGrid->SetFixedColumnCount(0); - - pGrid->SetEditable(FALSE); - pGrid->EnableSelection(TRUE); - pGrid->SetFixedRowSelection(TRUE); - pGrid->SetHeaderSort(FALSE); - - // fill it up with stuff - pGrid->SetEditable(TRUE); - pGrid->EnableDragAndDrop(TRUE); - - pGrid->AutoSize(); - pGrid->Invalidate(); - - m_WndArrange.setParentWnd(this); - m_WndArrange.addChildWnd(&m_gridGlassInfo, WA_RESIZE_WIDTH | WA_RESIZE_HEIGHT); -} - -void CReveiwHistoryDlg::InitGridDefectLIst(CakGridCtrl* pGrid, UINT nRectCtrlID) -{ - std::vector<CString>* pVecHeader = &m_vecStrGridDefectHeader; - - CRect rectGrid; - GetDlgItem(nRectCtrlID)->GetWindowRect(&rectGrid); - ScreenToClient(&rectGrid); - pGrid->Create(rectGrid, this, nRectCtrlID); - - pGrid->GetDefaultCell(TRUE, FALSE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, TRUE)->SetBackClr(GRID_FIX_COLOR); - pGrid->GetDefaultCell(FALSE, FALSE)->SetBackClr(GRID_COLOR); - pGrid->SetFixedBkColor(GRID_FIX_COLOR); - pGrid->SetGridLines(GVL_BOTH); - - pGrid->SetVirtualMode(TRUE); - pGrid->SetCallbackFunc(NULL, 0); - pGrid->AllowReorderColumn(FALSE); - pGrid->EnableDragRowMode(FALSE); - - pGrid->SetColumnCount((int)pVecHeader->size()); - pGrid->SetDoubleBuffering(TRUE); - pGrid->SetRowCount(2); - pGrid->SetFixedRowCount(1); - pGrid->SetFixedColumnCount(0); - - pGrid->SetEditable(FALSE); - pGrid->EnableSelection(TRUE); - pGrid->SetFixedRowSelection(TRUE); - pGrid->SetHeaderSort(FALSE); - - // fill it up with stuff - pGrid->SetEditable(TRUE); - pGrid->EnableDragAndDrop(TRUE); - - pGrid->AutoSize(); - pGrid->Invalidate(); - - m_WndArrange.setParentWnd(this); - m_WndArrange.addChildWnd(&m_gridDefectInfo, WA_RESIZE_WIDTH | WA_RESIZE_HEIGHT); -} - -BOOL CReveiwHistoryDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) -{ - if (m_gridReviewList.GetSafeHwnd() && wParam == (WPARAM)m_gridReviewList.GetDlgCtrlID()) - { - *pResult = 1; - GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam; - if (GVN_GETDISPINFO == pDispInfo->hdr.code) - { - getDispInfoGlass(pDispInfo->item.col, pDispInfo->item.row, &pDispInfo->item.strText); - - return TRUE; - } - else if (NM_CLICK == pDispInfo->hdr.code) - { - if (pDispInfo->item.row == 0) - { - m_gridReviewList.Refresh(); - } - else if (pDispInfo->item.row > 0) - { - CGridCellCheck* pCellCheck = NULL; - pCellCheck = (CGridCellCheck*)m_gridReviewList.GetCell(pDispInfo->item.row, 0); - BOOL bMultiCheck = pCellCheck->GetCheck(); - - if (m_nCount == pDispInfo->item.row) - { - if (m_chkSingle.GetCheck()) - { - if (pCellCheck != NULL) - { - pCellCheck->SetCheck(FALSE); - } - } - else - { - if (pCellCheck != NULL) - { - pCellCheck->SetCheck(!bMultiCheck); - } - } - return TRUE; - } - m_nCount = pDispInfo->item.row; - m_nGlassSelect = pDispInfo->item.row; - - CGridCellCheck* pCellCheck2 = NULL; - pCellCheck2 = (CGridCellCheck*)m_gridReviewList.GetCell(m_nGlassSelect, 0); - BOOL bMultiCheck2 = pCellCheck->GetCheck(); - - if (m_chkSingle.GetCheck()) - { - if (pCellCheck != NULL) - { - pCellCheck->SetCheck(FALSE); - } - GlassInfoRest(); - BinFileOpen(pDispInfo->item.row); - } - else if(m_chkMuti.GetCheck()) - { - if (bMultiCheck2 == TRUE) - { -// if (MultiSelectCheck(pDispInfo->item.row)) -// { - //if(pDispInfo->item.row) - bool bCheck = false; - for (int i = 0; i < 105; i++) - { - if (m_nSelectFile[i] == pDispInfo->item.row) - { - bCheck = true; - } - } - if (!bCheck) - { - InitSelectGlass(pDispInfo->item.row); - BinFileOpen(pDispInfo->item.row); - } -/* }*/ - } - else if(bMultiCheck == FALSE) - { - MultiSelectCheck(pDispInfo->item.row); - SetScrollSetting(); - } - } - } -// if (!m_chkSingle.GetCheck()) -// { -// for (int i = 0; i < MAX_COUNT + 1; i++) -// { -// for (int iCol = 0; iCol < m_gridReviewList.GetColumnCount(); iCol++) -// { -// m_gridReviewList.SetItemState(m_nSelectFile[i], iCol, LVIS_SELECTED); -// } -// } -// m_gridReviewList.Invalidate(); -// } - m_nSelectedCol = pDispInfo->item.col; - } - else if (GVN_ODCACHEHINT == pDispInfo->hdr.code) - { - GV_CACHEHINT *pCacheHint = (GV_CACHEHINT*)pDispInfo; - } - } - else if (m_gridGlassInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridGlassInfo.GetDlgCtrlID()) - { - *pResult = 1; - GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam; - if (GVN_GETDISPINFO == pDispInfo->hdr.code) - { - getDispInfoGlassInfo(pDispInfo->item.col, pDispInfo->item.row, &pDispInfo->item.strText); - return TRUE; - } - else if (NM_CLICK == pDispInfo->hdr.code) - { - //硫��떚 紐⑤뱶 �씪�븣 �꽑�깮�븳 �냸�쓽 cell 媛믪쓣 蹂댁뿬 以��떎 - if (!m_chkSingle.GetCheck()) - { - SelectCell(pDispInfo->item.row); - } - } - - else if (GVN_ODCACHEHINT == pDispInfo->hdr.code) - { - GV_CACHEHINT *pCacheHint = (GV_CACHEHINT*)pDispInfo; - } - } - else if (m_gridDefectInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridDefectInfo.GetDlgCtrlID()) - { - *pResult = 1; - GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam; - if (GVN_GETDISPINFO == pDispInfo->hdr.code) - { - getDispInfoDefect(pDispInfo->item.col, pDispInfo->item.row, &pDispInfo->item.strText); - - return TRUE; - } - else if (NM_CLICK == pDispInfo->hdr.code) - { - if (pDispInfo->item.row == 0) - { - SortListDefect(pDispInfo->item.col); - m_gridDefectInfo.Refresh(); - } - else if (pDispInfo->item.row > 0) - { - if (pDispInfo->item.row <= m_Formation.m_vecDefects.size()) - { - _akDefect* pDefectInfo = &m_Formation.m_vecDefects[pDispInfo->item.row - 1]; - - m_FormationMap.setSelectDefect(pDefectInfo->m_nDefectID); - //ImageShow(pDefectInfo->m_nDefectID); - if (!m_bDefectAll) - { - ImageShow(pDispInfo->item.row - 1); - } - else - { - ImageShow(pDefectInfo->m_nDefectID); - } - //硫��떚 紐⑤뜽�씪 �븣�� �븘�땺 �븣 援щ텇�쓣 �븯�옄 - //�젙�젹 �닚�꽌瑜� �궗�슜�옄媛� �썝�븯�뒗 �닚�쑝濡� �븯�옄 - if (!m_bDefectAll) - { - m_sldImg.SetPos(pDispInfo->item.row - 1); - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); - } - } - } - m_nSelectedCol = pDispInfo->item.col; - } - - else if (GVN_ODCACHEHINT == pDispInfo->hdr.code) - { - GV_CACHEHINT *pCacheHint = (GV_CACHEHINT*)pDispInfo; - } - } - - return CDialog::OnNotify(wParam, lParam, pResult); -} - -void CReveiwHistoryDlg::getDispInfoGlass(int nCol, int nRow, CString* pStrData) -{ - if (nRow < 0) return; - - if (nRow == 0) - { - *pStrData = m_vecStrGridReviewHeader[nCol]; - } - else - { - CString strItem; - int nDataIndex = nRow - 1; - - if (nDataIndex >= m_vecStrGridReviewList.size()) return; - - _akReviewHeader* pDefectInfo = &m_Formation.m_vecHeader[nRow - 1]; - - switch (nCol) - { - case 0: strItem.Format("%d", nRow); break; - case 1: strItem.Format("%s", pDefectInfo->m_strFileTime); break; - case 2: strItem.Format("%s", pDefectInfo->m_strLoading); break; - case 3: strItem.Format("%s", pDefectInfo->m_strPPID); break; - case 4: strItem.Format("%s", pDefectInfo->m_strGlassID); break; - case 5: strItem.Format("%d", pDefectInfo->m_nDefectIdx); break; - case 6: strItem.Format("%d", pDefectInfo->m_nReviewIdx); break; - case 7: strItem.Format("%s", pDefectInfo->m_strJudge); break; - case 8: strItem.Format("%s", pDefectInfo->m_strFileName); break; - } - *pStrData = strItem; - } -} - -void CReveiwHistoryDlg::getDispInfoGlassInfo(int nCol, int nRow, CString* pStrData) -{ - if (nRow < 0) return; - - if (nRow == 0) //header - { - *pStrData = m_vecStrGridGlassHeader[nCol]; - } - else - { - CString strItem; - int nDataIndex = nRow - 1; - - if (nDataIndex >= m_Formation.m_vecGlassInfo.size()) return; - - _akGlassInfo* pGlassInfo = &m_Formation.m_vecGlassInfo[nRow - 1]; - - if (pGlassInfo == NULL) return; - - switch (nCol) - { - case 0: strItem.Format("%d", pGlassInfo->m_nGlassSelect); break; //"No"); - case 1: strItem.Format("%s", pGlassInfo->m_strPPID); break; //"GlassID"); - case 2: strItem.Format("%s", pGlassInfo->m_strGlassID); break; //PPID - case 3: strItem.Format("%d", pGlassInfo->m_nDefectNum); break; //LOT ID - case 4: strItem.Format("%d", pGlassInfo->m_nReviewNum); break; //SLOT ID - case 5: strItem.Format("%s", pGlassInfo->m_strGlassJudge); break; //Glass Judge - case 6: strItem.Format("%s", pGlassInfo->m_strLotID); break; //SLOT NUMBER - case 7: strItem.Format("%s", pGlassInfo->m_strSLotID); break; //Cell NUmber - case 8: strItem.Format("%d", pGlassInfo->m_nSlot_No); break; //Defect Count - case 9: strItem.Format("%d", pGlassInfo->m_nCellNum); break; //Glass size H - case 10: strItem.Format("%d", pGlassInfo->m_nGlassSizeHeight); break; //Glass Judge - case 11: strItem.Format("%d", pGlassInfo->m_nGlassSizeWidth); break; //Glass size W - } - *pStrData = strItem; - } -} - -void CReveiwHistoryDlg::getDispInfoDefect(int nCol, int nRow, CString* pStrData) -{ - if (nRow < 0) return; - - if (nRow == 0) //header - { - *pStrData = m_vecStrGridDefectHeader[nCol]; - } - else - { - int nDataIndex = nRow - 1; - int iRow = m_nSelectedRow; - - if (nDataIndex >= m_Formation.m_vecDefects.size()) - { - return; - } - - _akDefect* pDefectInfo = &m_Formation.m_vecDefects[nRow - 1]; - - if (pDefectInfo == NULL) - return; - - CString strItem; - - switch (nCol) - { - case 0: strItem.Format("%d", nRow); break; - case 1: strItem.Format("%d", pDefectInfo->m_nDefectID); break; - case 2: - { - strItem = _T(""); - if (pDefectInfo->m_sDefectLoc == DefectLoc_Pattern) - strItem = "Pat"; - else if (pDefectInfo->m_sDefectLoc == DefectLoc_PAD) - strItem = "PAD"; - else if (pDefectInfo->m_sDefectLoc == DefectLoc_C2C) - strItem = "C2C"; - else if (pDefectInfo->m_sDefectLoc == DefectLoc_Crack) - strItem = "Crk"; - else if (pDefectInfo->m_sDefectLoc == DefectLoc_ASG) - strItem = "ASG"; - else if (pDefectInfo->m_sDefectLoc == DefectLoc_BM) - strItem = "BM"; - else - strItem = "Pat"; - } - break; - case 3: strItem = pDefectInfo->m_strDefectType; break; - case 4: strItem.Format("%s", pDefectInfo->m_strDefectCode); break; - case 5: - { - if (pDefectInfo->m_DefectType == DefectType_RBlack) - strItem.Format("RB"); - else if (pDefectInfo->m_DefectType == DefectType_RWhite) - strItem.Format("RW"); - else if (pDefectInfo->m_DefectType == DefectType_TBlack) - strItem.Format("TB"); - else if (pDefectInfo->m_DefectType == DefectType_TWhite) - strItem.Format("TW"); - else - strItem = "UN"; - } - break; - case 6: - { - strItem = _T(""); - - if (pDefectInfo->m_DefectSubType == DefectSubType_MC) // Common 05 M/N/C/S/K/* - strItem = "MC"; - else if (pDefectInfo->m_DefectSubType == DefectSubType_Mask) - strItem = "MD"; - else if (pDefectInfo->m_DefectSubType == DefectSubType_Common) - strItem = "CD"; - else if (pDefectInfo->m_DefectSubType == DefectSubType_NoDefect) - strItem = "NO"; - else - strItem = "N"; - } - break; - case 7: strItem.Format("%d", pDefectInfo->m_nDefectRScale); break; - case 8: - { - strItem = _T(""); - strItem.Format("% 7d", pDefectInfo->m_nUMSizeX); - } - break; - case 9: - { - strItem = _T(""); - strItem.Format("% 7d", pDefectInfo->m_nUMSizeY); - } - break; - case 10: - strItem.Format("%d", pDefectInfo->m_nUMSize); - break; - case 11: - { - int nValue = 0; - for (int i = 105; i >= 0; i--) - { - if (pDefectInfo->m_sZonePixelCount[i] > 0) - nValue += 1; - if (i > 0) - nValue = nValue << 1; - } - - strItem.Format("%04X", nValue); - } - break; - case 12: strItem.Format("%d", pDefectInfo->m_nLevelSrcMax); break; - case 13: strItem.Format("%d", pDefectInfo->m_nLevelSrcMin); break; - case 14: strItem.Format("%d", pDefectInfo->m_nLevelSrcAvg); break; - case 15: strItem.Format("%d", pDefectInfo->m_sDefectPeak); break; - case 16: - { - strItem.Format("%s", pDefectInfo->m_strStackFirst); - } - break; - case 17: - { - strItem = _T(""); - strItem.Format("% 4d", pDefectInfo->m_nCameraID); - } - break; - case 18: strItem.Format("%d", pDefectInfo->m_nScanIdx); break; - case 19: strItem.Format("%d", pDefectInfo->m_nLevelRefMax); break; - case 20: strItem.Format("%d", pDefectInfo->m_nLevelRefMin); break; - case 21: strItem.Format("%d", pDefectInfo->m_nLevelRefAvg); break; - case 22: - { - CString str; - strItem = _T(" "); - str.Format("%5.3f", (double)pDefectInfo->m_nUMCenterAlignX / 1000.0); - strItem.Insert(9 - str.GetLength(), str); - strItem.TrimRight(" "); - } - break; - case 23: - { - CString str; - strItem = _T(" "); - str.Format("% 5.3f", (double)pDefectInfo->m_nUMCenterAlignY / 1000.0); - strItem.Insert(9 - str.GetLength(), str); - strItem.TrimRight(" "); - } - break; - case 24: - { - CString str; - strItem = _T(" "); - - // Panel x異�, y異뺤� 湲��씪�뒪�� 諛섎� [6/9/2017 bhs] - if (1)//g_pBasic->GetScanCoordination() == SC_XCoord) - str.Format("% 5.3f", (double)pDefectInfo->m_nUMCellX / 1000.0); - else - str.Format("% 5.3f", (double)pDefectInfo->m_nUMCellY / 1000.0); - - strItem.Insert(9 - str.GetLength(), str); - strItem.TrimRight(" "); - } - break; - case 25: - { - CString str; - strItem = _T(" "); - - // Panel x異�, y異뺤� 湲��씪�뒪�� 諛섎� [6/9/2017 bhs] - if (1)//g_pBasic->GetScanCoordination() == SC_XCoord) - str.Format("% 5.3f", (double)pDefectInfo->m_nUMCellY / 1000.0); - else - str.Format("% 5.3f", (double)pDefectInfo->m_nUMCellX / 1000.0); - - strItem.Insert(9 - str.GetLength(), str); - strItem.TrimRight(" "); - } - break; - case 26: strItem.Format("%d", pDefectInfo->m_nScratchRatio); break; - case 27: strItem.Format("%d", pDefectInfo->m_nDensity); break; - case 28: strItem.Format("%d", pDefectInfo->m_bMergeState); break; - } - - *pStrData = strItem; - } -} - -LRESULT CReveiwHistoryDlg::OnMapDefectSelected(WPARAM wParam, LPARAM lParam) -{ - int nSelectMode = static_cast<int>(lParam); - int nSelectDefect = static_cast<int>(wParam); - - if (nSelectMode == 0) - { - setDefectShow(nSelectDefect, 1); - //ImageShow(nSelectDefect); - - if (m_Formation.m_vecImage.size() < 0) return 0; - - for (int i = 0; i < m_Formation.m_vecImage.size(); i++) - { - if (m_Formation.m_vecImage[i].m_nDefectID == nSelectDefect) - { - ImageShow(i); - break; - } - } - - if (!m_bDefectAll) - { - m_sldImg.SetPos(m_nSelectedRow - 1); - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); - } - } - else if (nSelectMode == 1) - { - CAlignDlg* lpDlg = CAlignDlg::GetMgr(); - m_pDlgAlign->setFormShow(nSelectDefect, 1); - } - - return 0; -} - -LRESULT CReveiwHistoryDlg::OnListDefectSelected(WPARAM wParam, LPARAM lParam) -{ - int nSelectDefect = static_cast<int>(wParam); - int nMode = static_cast<int>(lParam); - - m_FormationMap.setSelectDefect(nSelectDefect); - - return 0; -} - -LRESULT CReveiwHistoryDlg::OnMapDefectMouseOver(WPARAM wParam, LPARAM lParam) -{ - int nSelectDefect = static_cast<int>(wParam); - int nMode = static_cast<int>(lParam); - - return 0; -} - -void CReveiwHistoryDlg::OnBnClickedButtonMapviewFit() -{ - m_FormationMap.SetAutoScale(); -} - -void CReveiwHistoryDlg::OnSize(UINT nType, int cx, int cy) -{ - CDialogEx::OnSize(nType, cx, cy); - - m_WndArrange.process(cx, cy); - m_FormationMap.SetAutoScale(); - m_ImageView.SetResize(); -} - -void CReveiwHistoryDlg::OnOptionPathsetting() -{ - // TODO: �뿬湲곗뿉 紐낅졊 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CPathSettingDlg::GetMgr()->PathSettingLoad(); - CPathSettingDlg* lpDlg = CPathSettingDlg::GetMgr(); - lpDlg->ShowWindow(SW_SHOW); - - LOG(Dbg, _T("[Processe] PathSetting Click")); -} - - -void CReveiwHistoryDlg::OnViewAlldefect() -{ - // TODO: �뿬湲곗뿉 紐낅졊 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CMenu *hMenu = GetMenu(); - if (hMenu->GetMenuState(ID_VIEW_ALLDEFECT, MF_BYCOMMAND) != MF_CHECKED) - { - hMenu->CheckMenuItem(ID_VIEW_ALLDEFECT, MF_CHECKED); - hMenu->CheckMenuItem(ID_VIEW_REVIEWDEFECT, MF_UNCHECKED); - m_bDefectAll = true; - } - else - { - hMenu->CheckMenuItem(ID_VIEW_REVIEWDEFECT, MF_CHECKED); - hMenu->CheckMenuItem(ID_VIEW_ALLDEFECT, MF_UNCHECKED); - m_bDefectAll = false; - } - - if (m_chkSingle.GetCheck()) - { - GlassInfoRest(); - BinFileOpen(m_nCount); - } - else - { - for(int i=0; i< 105; i++) - { - int nSelect = m_nSelectFile[i]; - BinFileOpen(nSelect); - } - } -} - - -void CReveiwHistoryDlg::OnViewReviewdefect() -{ - // TODO: �뿬湲곗뿉 紐낅졊 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CMenu *hMenu = GetMenu(); - if (hMenu->GetMenuState(ID_VIEW_REVIEWDEFECT, MF_BYCOMMAND) != MF_CHECKED) - { - hMenu->CheckMenuItem(ID_VIEW_REVIEWDEFECT, MF_CHECKED); - hMenu->CheckMenuItem(ID_VIEW_ALLDEFECT, MF_UNCHECKED); - m_bDefectAll = false; - } - else - { - hMenu->CheckMenuItem(ID_VIEW_REVIEWDEFECT, MF_UNCHECKED); - hMenu->CheckMenuItem(ID_VIEW_ALLDEFECT, MF_CHECKED); - m_bDefectAll = true; - } - - if (m_chkSingle.GetCheck()) - { - GlassInfoRest(); - BinFileOpen(m_nCount); - } - else - { - BinFileOpen(m_nCount); - } -} - -void CReveiwHistoryDlg::OnAlignView() -{ - // TODO: �뿬湲곗뿉 紐낅졊 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CRect rectWindow; - GetClientRect(&rectWindow); - ClientToScreen(&rectWindow); - - CAlignDlg* lpDlg = CAlignDlg::GetMgr(); - - lpDlg->SetWindowPos(NULL, rectWindow.right + 5, rectWindow.top - 50, 0, 0, SWP_NOZORDER | SWP_NOSIZE); - lpDlg->ShowWindow(SW_SHOW); - lpDlg->DrawnoImage(); -} - -void CReveiwHistoryDlg::FileTime(CString strPath) -{ - HANDLE h_File = CreateFile(_T(strPath), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - if (h_File != INVALID_HANDLE_VALUE) - { - //** create_time : �깮�꽦 �궇吏�, access_time : 留덉�留� �젒洹쇰궇吏�, write_time : 留덉�留� �닔�젙 �궇吏� - FILETIME create_time, access_time, write_time; - //** System Time 痍⑤뱷 - GetFileTime(h_File, &create_time, &access_time, &write_time); - - //** SystemTime�� UTC�삎�떇(Universal Time Coordinated)�씠湲� �븣臾몄뿉 洹몃깷 �궗�슜 遺덇��뒫 - //** 吏��뿭�떆媛꾩쑝濡� 蹂�寃�(�씪諛섏쟻�씤 �떆媛� 怨꾩궛踰� 2015/11/09 21:18:35) - SYSTEMTIME write_system_time, write_local_time; - FileTimeToSystemTime(&write_time, &write_system_time); - - //** write_local_time蹂��닔�뿉 蹂��솚�릺�뼱 ���옣�맖 - //** ���옣�맂 �삎�깭�뒗 WORD�삎(short) - //** wYear, wMonth, wDay, wHour, wMinute, wSecond瑜� �솢�슜�븯�뿬 �궗�슜�븯硫� �맖 - SystemTimeToTzSpecificLocalTime(NULL, &write_system_time, &write_local_time); - - int nYear, nMonth, nDay, nHour, nMinute, nSecond; - nYear = write_local_time.wYear; - nMonth = write_local_time.wMonth; - nDay = write_local_time.wDay; - nHour = write_local_time.wHour; - nMinute = write_local_time.wMinute; - nSecond = write_local_time.wSecond; - CString strTime; - strTime.Format("%04d-%02d-%02d-%02d-%02d-%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond); - - m_vecStrGridTimeList.push_back(strTime); - } -} - -CgrmGlassRawData g_RawData; -void CReveiwHistoryDlg::OpenFileHeader(CString strPath, CString strFullPath) -{ - if (strPath == "") return; - - CgrmGlassRawData* pRawData = &g_RawData; - - if (m_vecStrGridReviewList.size() < 1) return; - - CPathSettingDlg* pReivewSetting = CPathSettingDlg::GetMgr(); - CString strBinPath; - strBinPath = pReivewSetting->GetBinPath(); - - pRawData->ImportGlassRaw(m_Server.GetGlassRawInfo(), NULL); - - strcpy_s(pRawData->GetGlassData()->m_strFileName,64, strPath.GetBuffer()); - strcpy_s(pRawData->GetGlassData()->m_strPath,256, strBinPath.GetBuffer()); - - BOOL bRetReadBin = m_pGlassRawMaker->ReadBinFile(pRawData); - - m_Formation.AddDefectHeaderTemp(); - _akReviewHeader* pDefectInfo = &m_Formation.m_vecHeaderTemp[m_Formation.m_vecHeaderTemp.size() - 1]; - - pDefectInfo->m_nReviewIdx = 0; - pDefectInfo->m_strFileTime = m_vecStrGridTimeList[m_Formation.m_vecHeaderTemp.size() - 1]; - pDefectInfo->m_strFileName = m_vecStrGridReviewList[m_Formation.m_vecHeaderTemp.size() - 1]; - pDefectInfo->m_strFilePath = strFullPath; - - if (bRetReadBin == FALSE) - { - pDefectInfo->m_nDefectIdx = 0; - pDefectInfo->m_strGlassID = ""; - pDefectInfo->m_strPPID = ""; - pDefectInfo->m_nReviewIdx = 0; - pDefectInfo->m_strJudge = ""; - pDefectInfo->m_strLoading = "X"; - - return; - } - - pDefectInfo->m_strLoading = "O"; - - //pRawData->ExportGlassRaw(m_Server.GetGlassRawInfo(), (char*)m_Server.GetGlassData()); - - int nDataCount = pRawData->GetGlassData()->m_nDefectNum; - - _grmDefectData* pDefect; - _grmGlassData* pGlass; - - CString strTemp; - CString strReviewImageName; - for (int i = 0; i < pRawData->GetGlassData()->m_nDefectNum; i++) - { - pDefect = pRawData->GetDefectData(i);//m_Server.GetDefectData(i); - pGlass = pRawData->GetGlassData(); //m_Server.GetGlassData(); - - pDefectInfo->m_nDefectIdx = pGlass->m_nDefectNum; - pDefectInfo->m_strGlassID = pGlass->m_strGlassID; - pDefectInfo->m_strPPID = pGlass->m_strPPID; - pDefectInfo->m_strJudge = pGlass->m_strGlassJudge; - - - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - if (strReviewImageName == "" || strReviewImageName == "*") - { - continue; - } - else - { - pDefectInfo->m_nReviewIdx = pDefectInfo->m_nReviewIdx + 1; - } - } -} - -void CReveiwHistoryDlg::BinFileOpen(int nCount) -{ - BOOL bNewFile = TRUE; - if (nCount < 1) return; - - if (m_vecStrGridReviewPath.size() <= 0) return; - - if (m_vecStrGridReviewPath[nCount-1] == m_strRawFilePath) bNewFile = FALSE; - - if (m_Formation.m_vecHeader.size() < 1) return; - - CString strFileName = m_vecStrGridReviewList[nCount-1]; - CPathSettingDlg* pReivewSetting = CPathSettingDlg::GetMgr(); - CString strBinPath; - strBinPath = pReivewSetting->GetBinPath(); - - CgrmGlassRawData RawData; - - RawData.ImportGlassRaw(m_Server.GetGlassRawInfo(), NULL); - - strcpy(RawData.GetGlassData()->m_strFileName, strFileName.GetBuffer()); - strcpy(RawData.GetGlassData()->m_strPath, strBinPath.GetBuffer()); - - BOOL bRetReadBin = m_pGlassRawMaker->ReadBinFile(&RawData); - - CGridCellCheck* pCellCheck = NULL; - pCellCheck = (CGridCellCheck*)m_gridReviewList.GetCell(nCount, 0); - - if (bRetReadBin == FALSE) - { - AfxMessageBox(_T("濡쒕뱶 �떎�뙣 �븯���뒿�땲�떎."), MB_OK | MB_ICONERROR); - m_FormationMap.SetAutoScale(); - LOG(Dbg, _T("[Processe] File Open False")); - pCellCheck->SetCheck(FALSE); - Imagenoload(); - return; - } - - if (bNewFile && m_chkSingle.GetCheck()) - { - m_FormationMap.m_vecCellRect.clear(); - m_FormationMap.m_vecTempCellRect.clear(); - m_FormationMap.clear(); - m_Formation.Clear(); - m_Formation.m_vecTempDefects.clear(); - m_Formation.m_vecTempImage.clear(); - SetScrollRest(); - } - else if (bNewFile && !m_chkSingle.GetCheck()) - { - if (m_bFirst) - { - m_bFirst = false; - m_FormationMap.m_vecCellRect.clear(); - } - m_FormationMap.clear(); - m_Formation.m_vecFormation.clear(); - SetScrollRest(); - } - else if (!bNewFile && !m_chkSingle.GetCheck()) - { - m_FormationMap.clear(); - m_Formation.m_vecFormation.clear(); - SetScrollRest(); - } - else - { - m_FormationMap.clear(); - m_Formation.m_vecDefects.clear(); - m_Formation.m_vecFormation.clear(); - m_Formation.m_vecImage.clear(); - SetScrollRest(); - } - - RawData.ExportGlassRaw(m_Server.GetGlassRawInfo(), (char*)m_Server.GetGlassData()); - - int nDataCount = RawData.GetGlassData()->m_nDefectNum; - int nCellCount = RawData.GetGlassData()->m_nCellNum; - - m_strRawFilePath = m_vecStrGridReviewPath[nCount-1]; - - _grmGlassData* pGlass = m_Server.GetGlassData(); - - m_FormationMap.m_dGlassSizeWidth = pGlass->m_nGlassSizeWidth / 1000; - m_FormationMap.m_dGlassSizeHeight = pGlass->m_nGlassSizeHeight / 1000; - - if (m_bDefectAll == false && m_chkSingle.GetCheck()) - { - AddVecDataDefct(nDataCount); - } - else if (m_bDefectAll == false && !m_chkSingle.GetCheck()) - { - if(m_Formation.m_vecTempDefects.size() > 0) - { - int nCount2; - nCount2 = MultiInsert(nCount, nDataCount); - if (nCount2 == -1) - { - AddVecDataDefct2(nDataCount); - } - } - else - { - AddVecDataDefct2(nDataCount); - } - /*AddVecDataDefct2(nDataCount, nCount);*/ - } - else if (m_bDefectAll == true && !m_chkSingle.GetCheck()) - { - if (m_Formation.m_vecTempDefects.size() > 0) - { - int nCount2; - nCount2 = MultiInsert(nCount, nDataCount); - if (nCount2 == -1) - { - AddVecDataDefectAll2(nDataCount); - } - } - else - { - AddVecDataDefectAll2(nDataCount); - } - /*AddVecDataDefectAll2(nDataCount, nCount);*/ - } - else - { - AddVecDataDefectAll(nDataCount); - } - - AddVecDataImage(nDataCount); - AddVecCellData(nCellCount); - AddVecGlassData(nCount); - - AddVecDateSorting(nDataCount); - AddVecImageSorting(nDataCount); - AddVecCellSorting(nCellCount); - - m_gridDefectInfo.SetRowCount(m_Formation.m_vecDefects.size() + 1); - m_gridDefectInfo.Invalidate(); - - m_gridGlassInfo.SetRowCount(m_Formation.m_vecGlassInfo.size() + 1); - m_gridGlassInfo.Invalidate(); - - int nDefectSize = 0; - int nImageSize = 0; - int nCellSize = 0; - int nNext = MAX_COUNT; - - if (m_chkSingle.GetCheck()) - { - m_nDefectSize[0] = GetDefectCount();//m_Formation.m_vecDefects.size(); - m_nImageSize[0] = GetImageCount();//m_Formation.m_vecImage.size(); - m_nCellSize[0] = GetCellCount(); - - m_nCellSizeTemp[0] = m_nCellSize[0]; - - m_nImageCount = 0; - m_nDefectCount = 0; - m_nCellCount = 0; - } - else - { - - for (int i = 0; i <= MAX_COUNT; i++) - { - nDefectSize = GetDefectCount(); - nImageSize = GetImageCount(); - nCellSize = GetCellCount(); - - //1.媛믪쓣 �닚�꽌��濡� �꽔�뒗�떎 - if (nDefectSize > 0 || nImageSize > 0 || nCellSize > 0) - { - if (m_nDefectSize[i] == 0 && m_nImageSize[i] == 0 && m_nCellSize[i] == 0) - { - m_nDefectSize[i] = GetDefectCount();//m_Formation.m_vecDefects.size(); - m_nImageSize[i] = GetImageCount();//m_Formation.m_vecImage.size(); - m_nCellSize[i] = GetCellCount(); - - m_nImageCount = 0; - m_nDefectCount = 0; - m_nCellCount = 0; - break; - } - } - //2.留덉�留� 媛믪씠硫� 2踰덉㎏媛� 泥ル쾲吏몃줈 �삱由� �썑 �꽔�뒗�떎. - if (nNext == i) - { - for (int j = 0; j < MAX_COUNT; j++) - { - m_nDefectSize[j] = m_nDefectSize[j + 1]; - m_nImageSize[j] = m_nImageSize[j + 1]; - m_nCellSize[j] = m_nCellSize[j + 1]; - m_nCellSizeTemp[j] = m_nCellSize[j]; - } - m_nDefectSize[i] = GetDefectCount();//m_Formation.m_vecDefects.size(); - m_nImageSize[i] = GetImageCount();//m_Formation.m_vecImage.size(); - m_nCellSize[i] = GetCellCount(); - - m_nCellSizeTemp[i] = m_nCellSize[i]; - - m_nImageCount = 0; - m_nDefectCount = 0; - m_nCellCount = 0; - } - //3.以묎컙�뿉 媛믪씠 鍮좎�硫� 以묎컙 踰덉㎏ 媛믪쓣 �삱由� �썑 �꽔�뒗�떎. - - - // if (i != 0) //i媛� 0 �씠 �븘�땲硫� count瑜� �넂�씤�떎. - // { - // nDefectSize += m_nDefectSize[i]; - // nImageSize += m_nImageSize[i]; - // nCellSize += m_nCellSize[i]; - // } - // else if (i == 0 && m_nDefectSize[0] > 0) //i媛� 0�씤�뜲 �뵒�럺�씠 �엳�쑝硫� 移댁슫�꽣瑜� �넂�씤�떎. - // { - // nDefectSize += m_nDefectSize[i]; - // nImageSize += m_nImageSize[i]; - // nCellSize += m_nCellSize[i]; - // } - - // if (m_nDefectSize[0] == 0) - // { - // m_nDefectSize[i] = GetDefectCount();//m_Formation.m_vecDefects.size(); - // m_nImageSize[i] = GetImageCount();//m_Formation.m_vecImage.size(); - // m_nCellSize[i] = GetCellCount(); - // - // m_nImageCount = 0; - // m_nDefectCount = 0; - // m_nCellCount = 0; - // break; - // } - // else if(i != 0 && m_nDefectSize[i] == 0) - // { - // m_nDefectSize[i] = GetDefectCount(); //m_Formation.m_vecDefects.size() - nDefectSize; - // m_nImageSize[i] = GetImageCount(); //m_Formation.m_vecImage.size() - nImageSize; - // m_nCellSize[i] = GetCellCount(); - // - // m_nImageCount = 0; - // m_nDefectCount = 0; - // m_nCellCount = 0; - // break; - // } - } - } - - m_FormationMap.m_pDefectFormation = &m_Formation; - m_DefectDisplayOption.m_nShowLabel = -1; - m_FormationMap.m_pDefectDisplayOption = &m_DefectDisplayOption; - - CAlignDlg* lpDlg = CAlignDlg::GetMgr(); - lpDlg->m_pDefectFormation = &m_Formation; - lpDlg->m_pDefectDisplayOption = &m_DefectDisplayOption; - - if(bNewFile) m_FormationMap.SetAutoScale(); - else m_FormationMap.ReDraw(TRUE); - - int nDefectNum = m_Server.GetGlassData()->m_nDefectNum; - int nNoneGroupDefect = m_Formation.m_vecImage.size(); - - if (m_Formation.m_vecImage.size() > 0) - { - SetScrollSetting(); - } -} - -void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype() -{ - CGlassRawBase* pNewRawMaker = NULL; - - pNewRawMaker = new CGlassRawCPJT; - - if (m_pGlassRawMaker) delete m_pGlassRawMaker; - - m_pGlassRawMaker = pNewRawMaker; - - m_ConfigOption.m_nSelectRawType = 3; - -} - -void CReveiwHistoryDlg::OnBnClickedBtnFindBin() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - - - m_vecStrGridReviewList.clear(); - m_vecStrGridTimeList.clear(); - m_vecStrGridReviewPath.clear(); - m_Formation.m_vecHeader.clear(); - m_FormationMap.clear(); - m_Formation.Clear(); - GlassInfoRest(); - -// m_ProgressFile.ModifyStyle(0, PBS_MARQUEE); -// m_ProgressFile.ShowWindow(TRUE); -// pProgressBar->SetMarquee(TRUE, 30); - - - CPathSettingDlg* pReivewSetting = CPathSettingDlg::GetMgr(); - CString strBinPath; - strBinPath = pReivewSetting->GetBinPath(); - - if (strBinPath == "") - { - return; - } - strBinPath += _T("\\*.*"); - - CFileFind finder; - BOOL bWorking = finder.FindFile(strBinPath); - -// CakFileUtil akFile; -// akFile.FindFile(strBinPath.GetBuffer()); -// VECFINDDATA* pVecFindData = akFile.getFindData(); -// -// for (int i = 0; i < pVecFindData->size(); i++) -// { -// _DefectList akDefect; -// m_vecStrDefectList.push_back(akDefect); -// _DefectList* pDefectList = &m_vecStrDefectList[i]; -// -// -// TRACE("Craete Time : %d, %s \n", (*pVecFindData)[i].time_create, (*pVecFindData)[i].name); -// pDefectList->m_nFileTime = (*pVecFindData)[i].time_create; -// pDefectList->m_strFileName = (*pVecFindData)[i].name; -// // m_vecStrGridReviewList.push_back((*pVecFindData)[i].name); -// // m_vecStrGridTimeList.push_back((*pVecFindData)[i].time_create; -// OpenFileHeader((*pVecFindData)[i].name); -// } - - - - CString fileName; - CString DirName; - int nCount = 1; - m_ctlProgress.ShowWindow(TRUE); - int nPersent = 0; - - while (bWorking) - { - m_ctlProgress.SetPos(nPersent); - nPersent++; - - if (nPersent >= 100) - { - nPersent = 0; - } - - //�떎�쓬 �뙆�씪 / �뤃�뜑 媛� 議댁옱�븯硫대떎硫� TRUE 諛섑솚 - bWorking = finder.FindNextFile(); - //�뙆�씪 �씪�븣 - if (finder.IsArchived()) - { - //�뙆�씪�쓽 �씠由� - CString _fileName = finder.GetFileName(); - - // �쁽�옱�뤃�뜑 �긽�쐞�뤃�뜑 �뜽�꽕�씪�뙆�씪�� �젣�쇅 - if (_fileName == _T(".") || - _fileName == _T("..") || - _fileName == _T("Thumbs.db")) continue; - - CString strFindName = ".bin"; - CString strFileName, strFileName2; - strFileName = _fileName.Right(4); //bin �뙆�씪留� - - if (strFileName.Compare(strFindName) == 0) - { - /*if(nCount > m_nFileCount) break; //count �뿬湲곗꽌 留먭퀬 �쟾泥� �뙆�씪�쓣 �떎 �씫�� �썑�뿉 �떎�떆 �냼�똿�븯�옄*/ - m_vecStrGridReviewList.push_back(_fileName); - strFileName2 = strBinPath.Left(strBinPath.GetLength() - 3); - strFileName2 += _fileName; - m_vecStrGridReviewPath.push_back(strFileName2); - FileTime(strFileName2); - OpenFileHeader(_fileName, strFileName2); - /*nCount++;*/ - } - } - } - - //�뿬湲곗뿉�꽌 �옱 �냼�똿 �썑�뿉 �븘�슂�븳 留뚰겮留� �꽔�옄 - { - //vec瑜� �젙�젹 �븳�떎. - SortFileList(1); - //媛��닔留뚰겮留� 蹂듭궗瑜� �븳�떎 - //蹂듭궗�븳 寃껋쓣 �꽔�뒗�떎. - - } - CGridCellCheck* pCellCheck = NULL; -// -// m_gridReviewList.SetCellType(1, 0, RUNTIME_CLASS(CGridCellCheck)); -// - m_gridReviewList.SetRowCount(m_Formation.m_vecHeader.size() + 1); - - { - GV_ITEM Item; - int nRowIdx = 0; - int nColIdx = 0; - CString strTemp; - Item.mask = GVIF_TEXT; - - _akReviewHeader *pReview = NULL; - - for (int i = 0; i < m_Formation.m_vecHeader.size(); i++) - { - m_gridReviewList.SetCellType(i + 1, 0, RUNTIME_CLASS(CGridCellCheck)); - -// pCellCheck = (CGridCellCheck*)m_ctrlGridGlassList.GetCell(nRowIdx, nColIdx); -// -// pCellCheck->SetCheck(); - - nColIdx = 0; - pReview = &m_Formation.m_vecHeader[i]; - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%d"), i + 1); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strFileTime); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strLoading); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strPPID); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strGlassID); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%d"), pReview->m_nDefectIdx); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%d"), pReview->m_nReviewIdx); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strJudge); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - - Item.row = i + 1; - Item.col = nColIdx++; - strTemp.Format(_T("%s"), pReview->m_strFileName); - Item.strText = strTemp; - m_gridReviewList.SetItem(&Item); - } - - } - m_gridReviewList.Invalidate(); - - m_ctlProgress.ShowWindow(FALSE); -} - -void CReveiwHistoryDlg::ShowProgressBar() -{ - -} - -void CReveiwHistoryDlg::setDefectShow(int nDefectID, BOOL bEnsureVisible) -{ - const int nDefectCol = 1; - - if (nDefectID >= 0) - { - int sajfklwe; - sajfklwe = m_gridDefectInfo.GetColumnCount(); - if (m_nSelectedRow > m_gridDefectInfo.GetColumnCount()) - { - m_nSelectedRow = 0; - } - - if(!m_bDefectAll) - { - if (m_nSelectedRow > m_Formation.m_vecImage.size()) - { - m_nSelectedRow = 0; - } - } - int iRow = m_nSelectedRow; - - for (int iCol = 0; iCol < m_gridDefectInfo.GetColumnCount(); iCol++) - { - m_gridDefectInfo.SetItemState(iRow, iCol, m_gridDefectInfo.GetItemState(iRow, iCol) & ~GVIS_SELECTED); - } - } - - for (int i = 0; i < m_Formation.m_vecDefects.size(); i++) - { - _akDefect* pDefectInfo = &m_Formation.m_vecDefects[i]; - - if (pDefectInfo == NULL) - return; - - if (pDefectInfo->m_nDefectID == nDefectID) - { - int iRow = i + 1; - for (int iCol = 0; iCol < m_gridDefectInfo.GetColumnCount(); iCol++) - { - m_gridDefectInfo.SetItemState(iRow, iCol, LVIS_SELECTED); - } - m_nSelectedRow = iRow; - if (bEnsureVisible) - { - m_gridDefectInfo.EnsureVisible(iRow, m_nSelectedCol); - } - break; - } - } - - m_gridDefectInfo.Invalidate(); -} - -void CReveiwHistoryDlg::ImageShow(int nDefectID) -{ - CPaintDC dc(this); - - if (nDefectID < 0) return; - - m_DefectImage.Destroy(); - m_ReviewImage.Destroy(); - - m_AlignFirst.Destroy(); - m_AlignSecend.Destroy(); - - CString DeftectPath, DeftectPath2, AlignPath, AlignPath2; - CFileStatus FileOn; - TCHAR chFilePath[256] = { 0, }; - GetModuleFileName(NULL, chFilePath, 256); - if (chFilePath == NULL || chFilePath == "") return; - - CString strFolderPath(chFilePath); - strFolderPath = strFolderPath.Left(strFolderPath.ReverseFind('\\')); - - strFolderPath = strFolderPath + "\\no-image.png"; - - - //DefectData媛� 吏�湲� �꽑�깮�맂 DefectData瑜� 媛��졇 �삩�떎. �씠嫄� �닔�젙... - -// _grmDefectData* pDefect = m_Server.GetDefectData(nDefectID); -// _grmGlassData* pGlass = m_Server.GetGlassData(); - int nIndex = 0; - //�뵒�럺 �씤�뜳�뒪�� 媛숈� �냸�쓣 李얠븘�씪 - for (int i = 0; i < m_Formation.m_vecImage.size(); i++) - { - _akReviewList* pImage = NULL; - pImage = &m_Formation.m_vecImage[i]; - - if (!m_bDefectAll) - { - nIndex = nDefectID; - break; - } - else - { - if (pImage->m_nDefectID == nDefectID) - { - nIndex = i; - break; - } - } - } - _akReviewList* pImageInfo = &m_Formation.m_vecImage[nIndex]; - //紐� 踰덉㎏ �씤吏� �뜕吏꾨떎. - - CString wekfjlwe = pImageInfo->m_strReviewImageName; - CString wjkflwe = pImageInfo->m_strAoiImageName; - CString jkefawlj = pImageInfo->m_strReviewImagePath; - //�빐�떦 count瑜� �샇異� �븳�떎. - //�뙆�씪 �씠誘몄�瑜� 遺덈윭 �삩�떎 - //�몴�쁽�븳�떎. - - -/* if (pGlass == NULL) return;*/ - - //_akReviewList* pDfect2 = &m_Formation.m_vecImage[nDefectID]; - -// CString wefjklwef; -// wefjklwef = pDfect2->m_strRevewImageName; - - CString strReviewImageName, strInspectorName, strReviewImagePath, strAlignName, strAlignName2; -// strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; -// strInspectorName = pDefect->m_strAoiImageName; -// strReviewImagePath = pDefect->m_ReviewDefect.m_strRevImagePath; - -/* pDefect->m_ReviewDefect.m_strRevImagePath*/ - - strReviewImageName = wekfjlwe; - strInspectorName = wjkflwe; - strReviewImagePath = jkefawlj; - strAlignName = pImageInfo->m_strAlignFirst; //Glass 媛� 媛��졇���씪 - strAlignName2 = pImageInfo->m_strAlignSecond; - -// strAlignName.Format(_T("1.jpg")); -// strAlignName2.Format(_T("2.jpg")); - - CString strReviewPath; - CString strInspectorPath; - CString strAlignPath; - - CPathSettingDlg* lpDlg = CPathSettingDlg::GetMgr(); - strInspectorPath = lpDlg->GetInspectorPath(); - strReviewPath = lpDlg->GetReviewPath(); - strAlignPath = lpDlg->GetAlignPath(); - - DeftectPath.Format(_T("%s\\%s\\%s"), strReviewPath, strReviewImagePath, strReviewImageName); - //DeftectPath2.Format(_T("%s\\%s"), strInspectorPath, strInspectorName); - if (strInspectorName == "*" || strInspectorName == "**" || strInspectorName == "***") strInspectorName = ""; - DeftectPath2.Format(_T("%s\\%s\\%s"), strInspectorPath, pImageInfo->m_strGlassID, strReviewImageName); - - AlignPath.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName); - AlignPath2.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName2); - - if (CFile::GetStatus(DeftectPath, FileOn) && strReviewImageName != "") //�뙆�씪�씠 �엳�쓣 �븣 - { - CString strTest; - strTest = DeftectPath; - strcpy(m_strConfigFile, strTest.GetBuffer(0)); - m_ImageView.SetImageData(m_strConfigFile); - m_ImageView.ReDraw(); -// m_ReviewImage.Load(DeftectPath); -// HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), DeftectPath, -// IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); -// -// -// InvalidateRect(m_picture_rect, FALSE); -// dc.SetStretchBltMode(COLORONCOLOR); -// m_ReviewImage.Draw(dc, m_picture_rect); - } - else - { - CString strTest; - strTest = strFolderPath; - strcpy(m_strConfigFile, strTest.GetBuffer(0)); - m_ImageView.SetImageData(m_strConfigFile); - m_ImageView.ReDraw(); - -// m_ReviewImage.Load(strFolderPath); -// HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, -// IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); -// -// InvalidateRect(m_picture_rect, FALSE); -// dc.SetStretchBltMode(COLORONCOLOR); -// m_ReviewImage.Draw(dc, m_picture_rect); - } - - if (CFile::GetStatus(DeftectPath2, FileOn) && strInspectorName != "") //�뙆�씪�씠 �엳�쓣 �븣 - { - m_DefectImage.Load(DeftectPath2); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), DeftectPath2, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - - InvalidateRect(m_picture_rect2, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_DefectImage.Draw(dc, m_picture_rect2); - } - else - { - m_DefectImage.Load(strFolderPath); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - InvalidateRect(m_picture_rect2, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_DefectImage.Draw(dc, m_picture_rect2); - } - - if (CFile::GetStatus(AlignPath, FileOn) && strAlignName != "") //�뙆�씪�씠 �엳�쓣 �븣 - { - m_AlignFirst.Load(AlignPath); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), AlignPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - - InvalidateRect(m_Align_rect, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignFirst.Draw(dc, m_Align_rect); - } - else - { - m_AlignFirst.Load(strFolderPath); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - InvalidateRect(m_Align_rect, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignFirst.Draw(dc, m_Align_rect); - } - - if (CFile::GetStatus(AlignPath2, FileOn) && strAlignName2 != "") //�뙆�씪�씠 �엳�쓣 �븣 - { - m_AlignSecend.Load(AlignPath2); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), AlignPath2, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - - InvalidateRect(m_Align_rect2, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignSecend.Draw(dc, m_Align_rect2); - } - else - { - m_AlignSecend.Load(strFolderPath); - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - - InvalidateRect(m_Align_rect2, FALSE); - dc.SetStretchBltMode(COLORONCOLOR); - m_AlignSecend.Draw(dc, m_Align_rect2); - } -} - -void CReveiwHistoryDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) -{ - // TODO: �뿬湲곗뿉 硫붿떆吏� 泥섎━湲� 肄붾뱶瑜� 異붽� 諛�/�삉�뒗 湲곕낯媛믪쓣 �샇異쒗빀�땲�떎. - if (IDC_SLIDER_IMG == pScrollBar->GetDlgCtrlID()) - { - int nCount = m_sldImg.GetPos(); - - CString strPos; - strPos.Format(_T("%d"), nCount); - m_ctrCount.SetWindowText(strPos); - - if (nCount > -1) - { - if (m_Formation.m_vecImage.size() <= 0) - { - SetScrollRest(); - return; - } - _akReviewList* pImageInfo = &m_Formation.m_vecImage[nCount]; - - m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID); - //ImageShow(pImageInfo->m_nDefectID); - setDefectShow(pImageInfo->m_nDefectID, 1); - } - } -} - - -void CReveiwHistoryDlg::OnChangeEditCount() -{ - // TODO: RICHEDIT 而⑦듃濡ㅼ씤 寃쎌슦, �씠 而⑦듃濡ㅼ� - // CDialogEx::OnInitDialog() �븿�닔瑜� �옱吏��젙 - //�븯怨� 留덉뒪�겕�뿉 OR �뿰�궛�븯�뿬 �꽕�젙�맂 ENM_CHANGE �뵆�옒洹몃�� 吏��젙�븯�뿬 CRichEditCtrl().SetEventMask()瑜� �샇異쒗븯吏� �븡�쑝硫� - // �씠 �븣由� 硫붿떆吏�瑜� 蹂대궡吏� �븡�뒿�땲�떎. - - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - - CString strPos; - m_ctrCount.GetWindowText(strPos); - - if (strPos == "") return; - - int nPos = _ttoi(strPos); - - if (nPos < -1) - { - m_ctrCount.SetWindowText(0); - nPos = 0; - } - else if (nPos > m_Formation.m_vecImage.size()-1) - { - nPos = m_Formation.m_vecImage.size() - 1; - CString strCount; - strCount.Format(_T("%d"),nPos); - m_ctrCount.SetWindowText(strCount); - } - - m_sldImg.SetPos(nPos); - - if (nPos > -1) - { - if (m_Formation.m_vecImage.size() <= 0) - { - SetScrollRest(); - return; - } - _akReviewList* pImageInfo = &m_Formation.m_vecImage[nPos]; - - m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID); - //ImageShow(pImageInfo->m_nDefectID/*nPos*/); - ImageShow(nPos); - setDefectShow(pImageInfo->m_nDefectID, 1); - } -} - -void CReveiwHistoryDlg::SetScrollSetting() -{ - if (m_Formation.m_vecImage.size() <= 0) return; - _akReviewList* pImageInfo = &m_Formation.m_vecImage[m_Formation.m_vecImage.size() - 1]; - - int nMinRange = m_Formation.m_vecImage.size()*0.03, nMaxRange = m_Formation.m_vecImage.size()*0.1; - - if (nMinRange <= 0) nMinRange = 1; - if (nMaxRange <= 0) nMaxRange = 1; - - m_sldImg.SetRange(0, m_Formation.m_vecImage.size()-1); //踰붿쐞 �꽕�젙 理쒕� �씠誘몄� 媛��닔 - m_sldImg.SetPos(0); //�쁽�옱 �룷吏��뀡 - m_sldImg.SetLineSize(nMinRange); //�씠�룞�븷 踰붿쐞 3% - m_sldImg.SetPageSize(nMaxRange); //�럹�씠吏� �뾽�떎�슫 �씠�룞 踰붿쐞 踰붿쐞 10% - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); -} - -void CReveiwHistoryDlg::SetScrollRest() -{ - m_sldImg.SetRange(-1, -1); - m_sldImg.SetPos(-1); - m_sldImg.SetLineSize(3); - m_sldImg.SetPageSize(10); - - int nPos = m_sldImg.GetPos(); - CString strPos; - strPos.Format(_T("%d"), nPos); - m_ctrCount.SetWindowText(strPos); -} - -void CReveiwHistoryDlg::OnBnClickedButton3() -{ -// // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. -// CPaintDC dc(this); -// HDC hMemDC; -// -// hMemDC = CreateCompatibleDC(dc); -// -// m_DefectImage.Destroy(); -// -// CString DeftectPath; -// CFileStatus FileOn; -// TCHAR chFilePath[256] = { 0, }; -// GetModuleFileName(NULL, chFilePath, 256); -// CString strFolderPath(chFilePath); -// strFolderPath = strFolderPath.Left(strFolderPath.ReverseFind('\\')); -// -// strFolderPath = strFolderPath + "\\no-image.png"; -// m_DefectImage.Load(strFolderPath); -// -// HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, -// IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); -// -// InvalidateRect(m_picture_rect, FALSE); -// -// dc.SetStretchBltMode(COLORONCOLOR); -// //StretchBlt(dc, 500, 400, 300, 200, hMemDC, 105, 105, 120, 123, SRCCOPY); -// //m_DefectImage.StretchBlt(dc, 0, 0, 100, 100, SRCCOPY); -// m_DefectImage.StretchBlt(dc, 0, 0, 500, 200, SRCCOPY); -// m_DefectImage.Draw(dc, m_picture_rect); -} - - -void CReveiwHistoryDlg::OnClickedChkAllDefect() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (m_chkAllDefect.GetCheck()) - { - if (IDYES == AfxMessageBox(_T("�젙�젹�븳 媛믪씠 紐⑤몢 珥덇린�솕 �맗�땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkAllDefect.SetCheck(TRUE); - m_chkReviewDefect.SetCheck(FALSE); - OnViewAlldefect(); - } - else - { - m_chkAllDefect.SetCheck(FALSE); - m_chkReviewDefect.SetCheck(TRUE); - } - } - else - { - if (IDYES == AfxMessageBox(_T("�젙�젹�븳 媛믪씠 紐⑤몢 珥덇린�솕 �맗�땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkAllDefect.SetCheck(FALSE); - m_chkReviewDefect.SetCheck(TRUE); - OnViewReviewdefect(); - } - else - { - m_chkAllDefect.SetCheck(TRUE); - m_chkReviewDefect.SetCheck(FALSE); - } - } -} - -void CReveiwHistoryDlg::OnClickedChkReviewDefect() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (m_chkReviewDefect.GetCheck()) - { - if (IDYES == AfxMessageBox(_T("�젙�젹�븳 媛믪씠 紐⑤몢 珥덇린�솕 �맗�땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkAllDefect.SetCheck(FALSE); - m_chkReviewDefect.SetCheck(TRUE); - OnViewAlldefect(); - } - else - { - m_chkAllDefect.SetCheck(TRUE); - m_chkReviewDefect.SetCheck(FALSE); - } - } - else - { - if (IDYES == AfxMessageBox(_T("�젙�젹�븳 媛믪씠 紐⑤몢 珥덇린�솕 �맗�땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkAllDefect.SetCheck(TRUE); - m_chkReviewDefect.SetCheck(FALSE); - OnViewReviewdefect(); - } - else - { - m_chkAllDefect.SetCheck(FALSE); - m_chkReviewDefect.SetCheck(TRUE); - } - } -} - -void CReveiwHistoryDlg::OnClickedChkMuti() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (m_chkMuti.GetCheck()) - { - if (IDYES == AfxMessageBox(_T("�꽑�깮�븳 �빆紐� 紐⑤몢媛� 吏��썙 吏묐땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkSingle.SetCheck(FALSE); - m_chkMuti.SetCheck(TRUE); - - GlassInfoRest(); - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nCellSize[i] = 0; - m_nImageSize[i] = 0; - m_nCellSizeTemp[i] = m_nCellSize[i]; - } - m_Formation.Clear(); - m_bFirst = true; - } - else - { - m_chkSingle.SetCheck(TRUE); - m_chkMuti.SetCheck(FALSE); - } - } - else - { - if (IDYES == AfxMessageBox(_T("�꽑�깮�븳 �빆紐� 紐⑤몢媛� 吏��썙 吏묐땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkSingle.SetCheck(TRUE); - m_chkMuti.SetCheck(FALSE); - GlassInfoRest(); - } - else - { - m_chkSingle.SetCheck(FALSE); - m_chkMuti.SetCheck(TRUE); - GlassInfoRest(); - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nCellSize[i] = 0; - m_nImageSize[i] = 0; - m_nCellSizeTemp[i] = m_nCellSize[i]; - } - m_Formation.Clear(); - } - } -} - -void CReveiwHistoryDlg::OnClickedChkSingle() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - if (m_chkSingle.GetCheck()) - { - if (IDYES == AfxMessageBox(_T("�꽑�깮�븳 �빆紐� 紐⑤몢媛� 吏��썙 吏묐땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkMuti.SetCheck(FALSE); - m_chkSingle.SetCheck(TRUE); - GlassInfoRest(); - - int nRow = 0; - nRow = m_gridReviewList.GetRowCount(); - for (int i = 1; i < nRow; i++) - { - CGridCellCheck* pCellCheck = NULL; - pCellCheck = (CGridCellCheck*)m_gridReviewList.GetCell(i, 0); - pCellCheck->SetCheck(FALSE); - } - m_gridReviewList.Refresh(); - } - else - { - m_chkSingle.SetCheck(FALSE); - m_chkMuti.SetCheck(TRUE); - GlassInfoRest(); - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nCellSize[i] = 0; - m_nImageSize[i] = 0; - m_nCellSizeTemp[i] = m_nCellSize[i]; - } - } - } - else - { - if (IDYES == AfxMessageBox(_T("�꽑�깮�븳 �빆紐� 紐⑤몢媛� 吏��썙 吏묐땲�떎"), MB_YESNO | MB_ICONWARNING)) - { - m_chkMuti.SetCheck(TRUE); - m_chkSingle.SetCheck(FALSE); - GlassInfoRest(); - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nCellSize[i] = 0; - m_nImageSize[i] = 0; - m_nCellSizeTemp[i] = m_nCellSize[i]; - } - m_bFirst = true; - } - else - { - m_chkMuti.SetCheck(FALSE); - m_chkSingle.SetCheck(TRUE); - } - } -} - -void CReveiwHistoryDlg::Imagenoload() -{ - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CPaintDC dc(this); - -// m_ReviewImage.Destroy(); - m_DefectImage.Destroy(); - m_AlignFirst.Destroy(); - m_AlignSecend.Destroy(); - - CString DeftectPath; - CFileStatus FileOn; - TCHAR chFilePath[256] = { 0, }; - GetModuleFileName(NULL, chFilePath, 256); - CString strFolderPath(chFilePath); - strFolderPath = strFolderPath.Left(strFolderPath.ReverseFind('\\')); - - strFolderPath = strFolderPath + "\\no-image.png"; - - strcpy(m_strConfigFile, strFolderPath.GetBuffer(0)); - - m_ImageView.SetImageData(m_strConfigFile); -// m_ReviewImage.Load(strFolderPath); - m_DefectImage.Load(strFolderPath); - m_AlignFirst.Load(strFolderPath); - m_AlignSecend.Load(strFolderPath); - - HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), strFolderPath, - IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); - -// InvalidateRect(m_picture_rect, FALSE); - InvalidateRect(m_picture_rect2, FALSE); - InvalidateRect(m_Align_rect, FALSE); - InvalidateRect(m_Align_rect2, FALSE); - - dc.SetStretchBltMode(COLORONCOLOR); - - m_ImageView.ReDraw(); -// m_ReviewImage.Draw(dc, m_picture_rect); - m_DefectImage.Draw(dc, m_picture_rect2); - m_AlignFirst.Draw(dc, m_Align_rect); - m_AlignSecend.Draw(dc, m_Align_rect2); -} - -void CReveiwHistoryDlg::OnChangeEditFileCount() -{ - // TODO: RICHEDIT 而⑦듃濡ㅼ씤 寃쎌슦, �씠 而⑦듃濡ㅼ� - // CDialogEx::OnInitDialog() �븿�닔瑜� �옱吏��젙 - //�븯怨� 留덉뒪�겕�뿉 OR �뿰�궛�븯�뿬 �꽕�젙�맂 ENM_CHANGE �뵆�옒洹몃�� 吏��젙�븯�뿬 CRichEditCtrl().SetEventMask()瑜� �샇異쒗븯吏� �븡�쑝硫� - // �씠 �븣由� 硫붿떆吏�瑜� 蹂대궡吏� �븡�뒿�땲�떎. - - // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. - CString strCount; - m_ctlFileCount.GetWindowText(strCount); - m_nFileCount = _ttoi(strCount); -} - -BOOL CReveiwHistoryDlg::GetCheckFileLoad(int nCount) -{ - BOOL bNewFile = TRUE; - if (nCount == 0) return FALSE; - - if (m_vecStrGridReviewPath.size() <= 0) return FALSE; - - if (m_vecStrGridReviewPath[nCount - 1] == m_strRawFilePath) bNewFile = FALSE; - - if (m_vecStrGridReviewList.size() < 1) return FALSE; - - CString strFileName = m_vecStrGridReviewList[nCount - 1]; - CPathSettingDlg* pReivewSetting = CPathSettingDlg::GetMgr(); - CString strBinPath; - strBinPath = pReivewSetting->GetBinPath(); - - CgrmGlassRawData RawData; - - RawData.ImportGlassRaw(m_Server.GetGlassRawInfo(), NULL); - - strcpy(RawData.GetGlassData()->m_strFileName, strFileName.GetBuffer()); - strcpy(RawData.GetGlassData()->m_strPath, strBinPath.GetBuffer()); - - BOOL bRetReadBin = m_pGlassRawMaker->ReadBinFile(&RawData); - - if (bRetReadBin == FALSE) - { - m_FormationMap.SetAutoScale(); - LOG(Dbg, _T("[Processe] File Open False")); - Imagenoload(); - return FALSE; - } - return TRUE; -} - -void CReveiwHistoryDlg::GlassInfoRest() -{ - m_Formation.m_vecGlassInfo.clear(); - - for (int i = 0; i < 105; i++) - { - m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nImageSize[i] = 0; - } - m_gridGlassInfo.SetRowCount(2); - m_gridGlassInfo.Invalidate(); -} - -BOOL CReveiwHistoryDlg::MultiSelectCheck(int nSelectCount) -{ - if (nSelectCount <= 0) return FALSE; - - //if (m_Formation.m_vecGlassInfo.size() > MAX_COUNT) return FALSE; - - int nDefectSize = 0; - int nImageSize = 0; - int nCellSize = 0; - - for (int i = 0; i < MAX_COUNT+1; i++) - { - nDefectSize += m_nDefectSize[i]; - nImageSize += m_nImageSize[i]; - nCellSize += m_nCellSize[i]; - - if (nSelectCount == m_nSelectFile[i]) - { - for (int j = 0; j < m_Formation.m_vecGlassInfo.size(); j++) - { - _akGlassInfo* pGlassInfo = &m_Formation.m_vecGlassInfo[j]; - - if (pGlassInfo->m_nGlassSelect == m_nSelectFile[i]) - { - m_Formation.m_vecGlassInfo.erase(m_Formation.m_vecGlassInfo.begin() + j); - - if (i == 0) - { - m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[i]); - m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[i]); - m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin(), m_FormationMap.m_vecCellRect.begin() + m_nCellSize[i]); - m_nCellSize[i] = 0; - m_nDefectSize[i] = 0; - m_nImageSize[i] = 0; - } - else if (i != 0 && m_nDefectSize[i] == 0) - { - - } - else if (i != 0 && m_nDefectSize[i] > 0) - { - if (m_Formation.m_vecDefects.size() == nDefectSize) - { - m_Formation.m_vecDefects.clear(); - //m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[i]); - } -// else -// { -// m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin() + nDefectSize-1, m_Formation.m_vecDefects.begin() + nDefectSize-1 + m_nDefectSize[i]); -// } - if (m_Formation.m_vecImage.size() == nImageSize) - { - m_Formation.m_vecImage.clear(); - //m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[i]); - } -// else -// { -// m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin() + nImageSize-1, m_Formation.m_vecImage.begin() + nImageSize-1 + m_nImageSize[i]); -// } - if (m_FormationMap.m_vecCellRect.size() == nCellSize) - { - m_FormationMap.m_vecCellRect.clear(); - //m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin(), m_FormationMap.m_vecCellRect.begin() + m_nCellSize[i]); - } -// else -// { -// m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin() + nCellSize, m_FormationMap.m_vecCellRect.begin() + nCellSize + m_nCellSize[i]); -// } - - int nCellCount = 0; - int nDefectCount = 0; - int nImageCount = 0; - -/* int nCount = 0;*/ - int nCellCount2 = m_nCellSize[i]; - int nDefectCount2 = m_nDefectSize[i]; - int nImageCount2 = m_nImageSize[i]; - - int nCellCount3 = 0; - int nDefectCount3 = 0; - int nImageCount3 = 0; - - - m_nCellSize[i] = 0; - m_nDefectSize[i] = 0; - m_nImageSize[i] = 0; - - - - for (int k = 0; k < MAX_COUNT; k++) - { -// if (m_nCellSize[k] != 0) -// { -// nCount++; -// } - nCellCount = m_nCellSize[k]; - nDefectCount = m_nDefectSize[k]; - nImageCount = m_nImageSize[k]; - - if (k == 0) - { - nCellCount3 = 0; - nDefectCount3 = 0; - nImageCount3 = 0; - } - else - { - nCellCount3 += m_nCellSize[k]; - nDefectCount3 += m_nDefectSize[k]; - nImageCount3 += m_nImageSize[k]; - } - } - - m_Formation.m_vecDefects.clear(); - for (int j = 0; j < nDefectSize - nDefectCount2; j++) - { - _akDefect *pDefectInfo = &m_Formation.m_vecTempDefects[j]; - double dDefectPosX = pDefectInfo->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefectInfo->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - m_Formation.m_vecDefects[j] = m_Formation.m_vecTempDefects[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - if (m_nDefectSize[i + 1] != 0) - { - int nCount = m_Formation.m_vecDefects.size(); - for (int j = 0; j < m_Formation.m_vecTempDefects.size() - nDefectSize; j++) - { - _akDefect *pDefectInfo = &m_Formation.m_vecTempDefects[nDefectSize + j]; - double dDefectPosX = pDefectInfo->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefectInfo->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - m_Formation.m_vecDefects[nCount + j] = m_Formation.m_vecTempDefects[nDefectSize +j]; - } - } - - m_Formation.m_vecImage.clear(); - for (int j = 0; j < nImageSize - nImageCount2; j++) - { - m_Formation.AddDefectImage(); - m_Formation.m_vecImage[j] = m_Formation.m_vecTempImage[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - if (m_nImageSize[i + 1] != 0) - { - int nCount = m_Formation.m_vecImage.size(); - for (int j = 0; j < m_Formation.m_vecTempImage.size() - nImageSize; j++) - { - m_Formation.AddDefectImage(); - m_Formation.m_vecImage[nCount + j] = m_Formation.m_vecTempImage[nImageSize + j]; - } - } - - m_FormationMap.m_vecCellRect.clear(); - for (int j = 0; j < nCellSize - nCellCount2; j++) - { - m_FormationMap.AddCell(); - m_FormationMap.m_vecCellRect[j] = m_FormationMap.m_vecTempCellRect[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - - if (m_nCellSize[i + 1] != 0) - { - int nCount = m_FormationMap.m_vecCellRect.size(); - for (int j = 0; j < m_FormationMap.m_vecTempCellRect.size() - nCellSize; j++) - { - m_FormationMap.AddCell(); - m_FormationMap.m_vecCellRect[nCount + j] = m_FormationMap.m_vecTempCellRect[nCellSize + j]; - } - } - } - - m_nSelectFile[i] = 0; - -// for (int i = 0; i < MAX_COUNT + 1; i++) -// { -// for (int iCol = 0; iCol < m_gridReviewList.GetColumnCount(); iCol++) -// { -// m_gridReviewList.SetItemState(m_nSelectFile[i], iCol, LVIS_SELECTED); -// } -// } -// -// m_gridReviewList.Invalidate(); - -// int nSelect = i; -// bool bMax = false; -// for (nSelect; nSelect < MAX_COUNT; nSelect++) -// { -// m_nSelectFile[nSelect] = m_nSelectFile[nSelect + 1]; -// bMax = true; -// } -// if (bMax) -// { -// m_nSelectFile[nSelect] = 0; -// } -// m_nDefectSize[i] = 0; -// m_nImageSize[i] = 0; -/* m_nCellSize[i] = 0;*/ -// for (j = 0; j < MAX_COUNT; j++) -// { -// if (i <= j) -// { -// m_nCellSize[j] = m_nCellSize[j + 1]; -// } -// } - AddVecCellSorting(0); - AddVecDateSorting(0); - m_gridGlassInfo.SetRowCount(m_Formation.m_vecGlassInfo.size() + 1); - m_gridDefectInfo.SetRowCount(m_Formation.m_vecDefects.size() + 1); - m_FormationMap.ReDraw(TRUE); - return FALSE; - } - } - } - } - - if (m_Formation.m_vecGlassInfo.size() >= MAX_COUNT + 1) // 1 base - { - m_Formation.m_vecGlassInfo.erase(m_Formation.m_vecGlassInfo.begin()); - - if (m_nDefectSize[0] != 0) - { - m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[0]); - } - if (m_nImageSize[0] != 0) - { - m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[0]); - } - if (m_nCellSize[0] != 0) - { - m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin(), m_FormationMap.m_vecCellRect.begin() + m_nCellSize[0]); - } - } - return TRUE; -} - -int CReveiwHistoryDlg::MultiInsert(int nSelectCount, int nDataCount) -{ - if (nSelectCount <= 0) return FALSE; - - //if (m_Formation.m_vecGlassInfo.size() > MAX_COUNT) return FALSE; - - if (m_Formation.m_vecGlassInfo.size() >= MAX_COUNT+1) //1base - { - m_Formation.m_vecGlassInfo.erase(m_Formation.m_vecGlassInfo.begin()); - - if (m_nDefectSize[0] != 0) - { - m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[0]); - } - if (m_nImageSize[0] != 0) - { - m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[0]); - } - if (m_nCellSize[0] != 0) - { - m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin(), m_FormationMap.m_vecCellRect.begin() + m_nCellSize[0]); - } - } - - int nDefectSize = 0; - int nImageSize = 0; - int nCellSize = 0; - - for (int i = 0; i < MAX_COUNT; i++) - { - nDefectSize += m_nDefectSize[i]; - nImageSize += m_nImageSize[i]; - nCellSize += m_nCellSize[i]; - - if (nSelectCount == m_nSelectFile[i]) - { - for (int j = 0; j < m_Formation.m_vecGlassInfo.size(); j++) - { - _akGlassInfo* pGlassInfo = &m_Formation.m_vecGlassInfo[j]; - - if (pGlassInfo->m_nGlassSelect == m_nSelectFile[i]) - { - m_Formation.m_vecGlassInfo.erase(m_Formation.m_vecGlassInfo.begin() + j); - - if (i == 0) - { - m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[i]); - m_Formation.m_vecDefects.clear(); - m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[i]); - m_Formation.m_vecImage.clear(); - m_FormationMap.m_vecCellRect.erase(m_FormationMap.m_vecCellRect.begin(), m_FormationMap.m_vecCellRect.begin() + m_nCellSize[i]); - - if (m_bDefectAll == false && !m_chkSingle.GetCheck()) - { - AddVecDataDefct2(nDataCount/*, nCount*/); - } - else if (m_bDefectAll == true && !m_chkSingle.GetCheck()) - { - AddVecDataDefectAll2(nDataCount/*, nCount*/); - } - } - else if (i != 0 && m_nDefectSize[i] == 0) - { - if (m_bDefectAll == false && !m_chkSingle.GetCheck()) - { - AddVecDataDefct2(nDataCount/*, nCount*/); - } - else if (m_bDefectAll == true && !m_chkSingle.GetCheck()) - { - AddVecDataDefectAll2(nDataCount/*, nCount*/); - } - } - else if (i != 0 && m_nDefectSize[i] > 0) - { - if (m_Formation.m_vecDefects.size() == nDefectSize) - { - m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin(), m_Formation.m_vecDefects.begin() + m_nDefectSize[i]); - } -// else -// { - Sleep(1); - //n媛� 源뚯�留� 蹂듭궗 �븳�떎. �겢由ъ뼱 �썑 �뿉 - m_Formation.m_vecDefects.clear(); - for (int j = 0; j < nDefectSize-m_nDefectSize[i]; j++) - { - _akDefect *pDefectInfo = &m_Formation.m_vecTempDefects[j]; - double dDefectPosX = pDefectInfo->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefectInfo->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - m_Formation.m_vecDefects[j] = m_Formation.m_vecTempDefects[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - //�깮�꽦�맂 �뵒�럺�쓣 異붽� �븳�떎 - if (m_bDefectAll == false && !m_chkSingle.GetCheck()) - { - AddVecDataDefct2(nDataCount/*, nCount*/); - } - else if (m_bDefectAll == true && !m_chkSingle.GetCheck()) - { - AddVecDataDefectAll2(nDataCount/*, nCount*/); - } - -// Sleep(1); -// -// //異붽��븳 �뵒�럺 �뮘�뿉 遺숈뿬 �꽔�뒗�떎 -// if (m_nDefectSize[i + 1] != 0) -// { -// for (int j = 0; j < m_nDefectSize[i + 1]; j++) -// { -// int nCount = m_nDefectSize[i - 1]; -// _akDefect *pDefectInfo = &m_Formation.m_vecTempDefects[nDefectSize + j]; -// double dDefectPosX = pDefectInfo->m_nUMCenterAlignX / 1000.0; -// double dDefectPosY = pDefectInfo->m_nUMCenterAlignY / 1000.0; -// -// m_Formation.AddDefect(dDefectPosX, dDefectPosY); -// m_Formation.m_vecDefects[nCount + j] = m_Formation.m_vecTempDefects[nDefectSize + j]; -// } -// } - - Sleep(1); - m_Formation.m_vecImage.clear(); - for (int j = 0; j < nImageSize - m_nImageSize[i]; j++) - { - m_Formation.AddDefectImage(); - m_Formation.m_vecImage[j] = m_Formation.m_vecTempImage[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - if (m_nImageSize[i + 1] != 0) - { - int nSize = m_Formation.m_vecTempImage.size() - m_Formation.m_vecImage.size(); - //�떆�옉 遺��꽣 �걹源뚯� 蹂듭궗瑜� �븳�떎 - for (int j = 0; j < nSize; j++) - { - int nCount = m_nImageSize[i - 1]; - - m_Formation.AddDefectImage(); - m_Formation.m_vecImage[nCount + j] = m_Formation.m_vecTempImage[nCount + j]; - } - } - - Sleep(1); - m_FormationMap.m_vecCellRect.clear(); - for (int j = 0; j < nCellSize - m_nCellSize[i]; j++) - { - m_FormationMap.AddCell(); - m_FormationMap.m_vecCellRect[j] = m_FormationMap.m_vecTempCellRect[j]; - //�뵒�럺 �떆�옉 �겕湲� 留뚰겮留� 蹂듭궗 �븳�떎 - } - if (m_nCellSize[i + 1] != 0) - { - int nSize = m_FormationMap.m_vecTempCellRect.size() - m_FormationMap.m_vecCellRect.size(); - for (int j = 0; j < nSize; j++) - { - int nCount = m_nCellSize[i - 1]; - - m_FormationMap.AddCell(); - m_FormationMap.m_vecCellRect[nCount + j] = m_FormationMap.m_vecTempCellRect[nCount + j]; - //m_FormationMap.m_vecCellRect[nCount + j] = m_FormationMap.m_vecTempCellRect[nCellSize + j]; - } - } - - //m_Formation.m_vecDefects.erase(m_Formation.m_vecDefects.begin() + nDefectSize, m_Formation.m_vecDefects.begin() + nDefectSize + m_nDefectSize[i]); - -// if (m_Formation.m_vecImage.size() == nImageSize) -// { -// m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin(), m_Formation.m_vecImage.begin() + m_nImageSize[i]); -// } -// else -// { -// m_Formation.m_vecImage.erase(m_Formation.m_vecImage.begin() + nImageSize, m_Formation.m_vecImage.begin() + nImageSize + m_nImageSize[i]); -// } - } - - //m_nSelectFile[i] = 0; - m_nDefectSize[i] = 0; - m_nImageSize[i] = 0; - m_nCellSize[i] = 0; -// for (j = 0; j < MAX_COUNT; j++) -// { -// if (i <= j) -// { -// m_nCellSize[j] = m_nCellSize[j + 1]; -// } -// } - - if (m_Formation.m_vecGlassInfo.size() > 0) - { - m_gridGlassInfo.SetRowCount(m_Formation.m_vecGlassInfo.size() + 1); - m_gridDefectInfo.SetRowCount(m_Formation.m_vecDefects.size() + 1); - return i; - } - else - { - m_gridGlassInfo.SetRowCount(2); - m_gridDefectInfo.SetRowCount(2); - return i; - } - return i; - } - } - } - } - -// if (m_bDefectAll == false && !m_chkSingle.GetCheck()) -// { -// AddVecDataDefct2(nDataCount/*, nCount*/); -// } -// else if (m_bDefectAll == true && !m_chkSingle.GetCheck()) -// { -// AddVecDataDefectAll2(nDataCount/*, nCount*/); -// } - return -1; -} - -void CReveiwHistoryDlg::InitSelectGlass(int nSelectCount) -{ - int nCountMax = MAX_COUNT+1; - bool bMax = false; - for (int i = 0; i < MAX_COUNT+1; i++) - { - if (nSelectCount != m_nSelectFile[i] && m_nSelectFile[i] == 0) - { - if (!GetCheckFileLoad(nSelectCount)) return; - m_nSelectFile[i] = nSelectCount; - bMax = true; - break; - } - } - if (!bMax) - { - for (int j = 0; j < MAX_COUNT; j++) - { - if (!GetCheckFileLoad(nSelectCount)) return; - m_nSelectFile[j] = m_nSelectFile[j + 1]; - } - m_nSelectFile[MAX_COUNT] = nSelectCount; - } -} - -void CReveiwHistoryDlg::AddVecDataImage(int nDataCount) -{ - for (int i = 0; i < nDataCount; i++) - { - _grmDefectData* pDefect = m_Server.GetDefectData(i); - _grmGlassData* pGlass = m_Server.GetGlassData(); - - CString strTemp; - int nInfoCount = 0; - - CString strReviewImageName; - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - if (strReviewImageName == "" || strReviewImageName == "*") - { - continue; - } - else - { - m_Formation.AddDefectImage(); - SetImageCount(); - _akReviewList* pImageInfo = &m_Formation.m_vecImage[m_Formation.m_vecImage.size() - 1]; - - pImageInfo->m_nDefectID = pDefect->m_nDefectID; - strcpy(pImageInfo->m_strAoiImageName, pDefect->m_strAoiImageName); - pImageInfo->m_nDefectIdx = pDefect->m_nDefectIdx; - pImageInfo->m_strReviewImageName = strReviewImageName; - - strcpy(pImageInfo->m_strAoiImagePath, pDefect->m_strAoiImagePath); - strcpy(pImageInfo->m_strReviewImagePath, pDefect->m_ReviewDefect.m_strRevImagePath); - strcpy(pImageInfo->m_strAlignFirst, pGlass->m_strAlignFirst); - strcpy(pImageInfo->m_strAlignSecond, pGlass->m_strAlignSecond); - pImageInfo->m_strGlassID = pGlass->m_strGlassID; - } - } -} - -void CReveiwHistoryDlg::AddVecDataDefct(int nDataCount) -{ - for (int i = 0; i < nDataCount; i++) - { - _grmDefectData* pDefect = m_Server.GetDefectData(i); - - int nInfoCount = 0; - - CString strReviewImageName; - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - if (strReviewImageName == "" || strReviewImageName == "*") - { - continue; - } - else - { - double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - SetDefectCount(); - _akDefect* pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; - - pDefectInfo->m_nDefectID = pDefect->m_nDefectID; - pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; - strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); - strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); - pDefectInfo->m_DefectType = pDefect->m_DefectType; - pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; - pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; - pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; - pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; - pDefectInfo->m_nUMSize = pDefect->m_nUMSize; - memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); - pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; - pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; - pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; - pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; - strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); - pDefectInfo->m_nCameraID = pDefect->m_nCameraID; - pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; - pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; - pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; - pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; - pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; - pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; - pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; - pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; - pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; - pDefectInfo->m_nDensity = pDefect->m_nDensity; - pDefectInfo->m_bMergeState = pDefect->m_bMergeState; - pDefectInfo->m_nShotIdx = pDefect->m_ReviewDefect.m_nShotIndex; - pDefectInfo->m_nModelIdx = pDefect->m_ReviewDefect.m_nModuleIndex; - - for (int j = 0; j < nInfoCount; j++) pDefectInfo->m_strInfos[j].Trim(); - } - } -} - -void CReveiwHistoryDlg::AddVecDataDefectAll(int nDataCount) -{ - for (int i = 0; i < nDataCount; i++) - { - _grmDefectData* pDefect = m_Server.GetDefectData(i); - int nInfoCount = 0; - - double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - SetDefectCount(); - _akDefect* pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; - - pDefectInfo->m_nDefectID = pDefect->m_nDefectID; - pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; - strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); - strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); - pDefectInfo->m_DefectType = pDefect->m_DefectType; - pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; - pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; - pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; - pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; - pDefectInfo->m_nUMSize = pDefect->m_nUMSize; - memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); - pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; - pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; - pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; - pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; - strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); - pDefectInfo->m_nCameraID = pDefect->m_nCameraID; - pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; - pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; - pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; - pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; - pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; - pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; - pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; - pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; - pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; - pDefectInfo->m_nDensity = pDefect->m_nDensity; - pDefectInfo->m_bMergeState = pDefect->m_bMergeState; - - CString strReviewImageName; - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - if (strReviewImageName == "" || strReviewImageName == "*") - { - pDefectInfo->m_nShotIdx = -1; - pDefectInfo->m_nModelIdx = -1; - } - else - { - pDefectInfo->m_nShotIdx = pDefect->m_ReviewDefect.m_nShotIndex; - pDefectInfo->m_nModelIdx = pDefect->m_ReviewDefect.m_nModuleIndex; - } - - - for (int j = 0; j < nInfoCount; j++) pDefectInfo->m_strInfos[j].Trim(); - } -} - -void CReveiwHistoryDlg::AddVecDataDefct2(int nDataCount/*, int nRawCount*/) -{ -// int nCount = MultiInsert(m_nCount, nDataCount); - -// if(nCount < 0) return; -// - for (int i = 0; i < nDataCount; i++) - { - _grmDefectData* pDefect = m_Server.GetDefectData(i); - - int nInfoCount = 0; - - CString strReviewImageName; - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - if (strReviewImageName == "" || strReviewImageName == "*") - { - continue; - } - else - { - double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - SetDefectCount(); - - _akDefect* pDefectInfo = NULL; - -// if (nCount == 0) -// { - pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; -// } -// else -// { -// //以묎컙�뿉 媛� �궫�엯 -// pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; -// //pDefectInfo = &m_Formation.m_vecDefects[nCount + i]; -// } - - pDefectInfo->m_nDefectID = pDefect->m_nDefectID; - pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; - strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); - strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); - pDefectInfo->m_DefectType = pDefect->m_DefectType; - pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; - pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; - pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; - pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; - pDefectInfo->m_nUMSize = pDefect->m_nUMSize; - memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); - pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; - pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; - pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; - pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; - strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); - pDefectInfo->m_nCameraID = pDefect->m_nCameraID; - pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; - pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; - pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; - pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; - pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; - pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; - pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; - pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; - pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; - pDefectInfo->m_nDensity = pDefect->m_nDensity; - pDefectInfo->m_bMergeState = pDefect->m_bMergeState; - - for (int j = 0; j < nInfoCount; j++) pDefectInfo->m_strInfos[j].Trim(); - } - } -} - -void CReveiwHistoryDlg::AddVecDataDefectAll2(int nDataCount/*, int nRawCount*/) -{ - for (int i = 0; i < nDataCount; i++) - { - _grmDefectData* pDefect = m_Server.GetDefectData(i); - - int nInfoCount = 0; - - CString strReviewImageName; - strReviewImageName = pDefect->m_ReviewDefect.m_strRevImageName; - - double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefect(dDefectPosX, dDefectPosY); - SetDefectCount(); - - _akDefect* pDefectInfo = NULL; - - pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; - - pDefectInfo->m_nDefectID = pDefect->m_nDefectID; - pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; - strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); - strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); - pDefectInfo->m_DefectType = pDefect->m_DefectType; - pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; - pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; - pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; - pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; - pDefectInfo->m_nUMSize = pDefect->m_nUMSize; - memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); - pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; - pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; - pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; - pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; - strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); - pDefectInfo->m_nCameraID = pDefect->m_nCameraID; - pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; - pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; - pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; - pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; - pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; - pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; - pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; - pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; - pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; - pDefectInfo->m_nDensity = pDefect->m_nDensity; - pDefectInfo->m_bMergeState = pDefect->m_bMergeState; - - for (int j = 0; j < nInfoCount; j++) pDefectInfo->m_strInfos[j].Trim(); - } - -// for (int i = 0; i < nDataCount; i++) -// { -// _grmDefectData* pDefect = m_Server.GetDefectData(i); -// int nInfoCount = 0; -// -// double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; -// double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; -// -// m_Formation.AddDefect(dDefectPosX, dDefectPosY); -// SetDefectCount(); -// -// _akDefect* pDefectInfo = NULL; -// -// // if (nCount == 0) -// // { -// pDefectInfo = &m_Formation.m_vecDefects[m_Formation.m_vecDefects.size() - 1]; -// // } -// // else -// // { -// // pDefectInfo = &m_Formation.m_vecDefects[nCount + i]; -// // } -// -// //m_Formation.m_vecDefects.insert(m_Formation.m_vecDefects.begin() + 1400, pDefect->m_nDefectID); -// -// pDefectInfo->m_nDefectID = pDefect->m_nDefectID; -// pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; -// strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); -// strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); -// pDefectInfo->m_DefectType = pDefect->m_DefectType; -// pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; -// pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; -// pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; -// pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; -// pDefectInfo->m_nUMSize = pDefect->m_nUMSize; -// memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); -// pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; -// pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; -// pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; -// pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; -// strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); -// pDefectInfo->m_nCameraID = pDefect->m_nCameraID; -// pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; -// pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; -// pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; -// pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; -// pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; -// pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; -// pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; -// pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; -// pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; -// pDefectInfo->m_nDensity = pDefect->m_nDensity; -// pDefectInfo->m_bMergeState = pDefect->m_bMergeState; -// -// for (int j = 0; j < nInfoCount; j++) pDefectInfo->m_strInfos[j].Trim(); -// } -} - -void CReveiwHistoryDlg::AddVecGlassData(int nCount) -{ - m_Formation.AddGlassInfo(); - - _grmGlassData* pGlass = m_Server.GetGlassData(); - _akGlassInfo* pGlassInfo = &m_Formation.m_vecGlassInfo[m_Formation.m_vecGlassInfo.size() - 1]; - - pGlassInfo->m_nGlassSelect = nCount; - pGlassInfo->m_strPPID = pGlass->m_strPPID; - pGlassInfo->m_strGlassID = pGlass->m_strGlassID; - pGlassInfo->m_nDefectNum = pGlass->m_nDefectNum; - pGlassInfo->m_nReviewNum = GetImageCount(); - pGlassInfo->m_strGlassJudge = pGlass->m_strGlassJudge; - pGlassInfo->m_strLotID = pGlass->m_strLotID; - pGlassInfo->m_strSLotID = pGlass->m_strSLotID; - pGlassInfo->m_nSlot_No = pGlass->m_nSlot_No; - pGlassInfo->m_nCellNum = pGlass->m_nCellNum; - pGlassInfo->m_nGlassSizeHeight = pGlass->m_nGlassSizeHeight; - pGlassInfo->m_nGlassSizeWidth = pGlass->m_nGlassSizeWidth; -} - -void CReveiwHistoryDlg::AddVecCellData(int nCellCount) -{ - for (int i = 0; i < nCellCount; i++) - { - SetCellCount(); - CakRectd rectCell; - _grmCellData* pCellData = m_Server.GetCellData(i); - rectCell.left = pCellData->m_rectCellLeft / 1000.0; - rectCell.top = pCellData->m_rectCellTop / 1000.0; - rectCell.right = pCellData->m_rectCellRight / 1000.0; - rectCell.bottom = pCellData->m_rectCellBottom / 1000.0; - m_FormationMap.m_vecCellRect.push_back(rectCell); - } -} - -void CReveiwHistoryDlg::SortListDefect(int nCol) -{ - if (nCol == 0) - return; - -/* if (m_pDefectFormation == NULL) return;*/ - - m_bAsending = !m_bAsending; - - _akDefect *pDefect; - std::vector< std::pair<CString, _akDefect*> > vecString; - std::vector< std::pair<double, _akDefect*> > vecValue; - CString strValue; - double dValue; - short sValue[16]; - - for (int i = 0; i < m_Formation.m_vecTempDefects.size(); i++) - { - pDefect = &m_Formation.m_vecTempDefects[i]; - - switch (nCol) - { - case 1: dValue = pDefect->m_nDefectID; break; - case 2: dValue = pDefect->m_sDefectLoc; break; - case 3: strValue = pDefect->m_strDefectType; break; - case 4: strValue = pDefect->m_strDefectCode; break; - case 5: dValue = pDefect->m_DefectType; break; - case 6: dValue = pDefect->m_DefectSubType; break; - case 7: dValue = pDefect->m_nDefectRScale; break; - case 8: dValue = pDefect->m_nUMSizeX; break; - case 9: dValue = pDefect->m_nUMSizeY; break; - case 10: dValue = pDefect->m_nUMSize; break; - //case 11: memcpy(sValue, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); break; - case 12: dValue = pDefect->m_nLevelSrcMax; break; - case 13: dValue = pDefect->m_nLevelSrcMin; break; - case 14: dValue = pDefect->m_nLevelSrcAvg; break; - case 15: dValue = pDefect->m_sDefectPeak; break; - case 16: strValue = pDefect->m_strStackFirst; break; - case 17: dValue = pDefect->m_nCameraID; break; - case 18: dValue = pDefect->m_nScanIdx; break; - case 19: dValue = pDefect->m_nLevelRefMax; break; - case 20: dValue = pDefect->m_nLevelRefMin; break; - case 21: dValue = pDefect->m_nLevelRefAvg; break; - case 22: dValue = pDefect->m_nUMCenterAlignX; break; - case 23: dValue = pDefect->m_nUMCenterAlignY; break; - case 24: dValue = pDefect->m_nUMCellX; break; - case 25: dValue = pDefect->m_nUMCellY; break; - case 26: dValue = pDefect->m_nScratchRatio; break; - case 27: dValue = pDefect->m_nDensity; break; - case 28: dValue = pDefect->m_bMergeState; break; - } - - if (strValue.IsEmpty() == FALSE) vecString.push_back(std::make_pair(strValue, pDefect)); - else vecValue.push_back(std::make_pair(dValue, pDefect)); - } - - if (!vecString.empty()) - { - if (m_bAsending == TRUE) //�삤由� 李⑥닚 - std::sort(vecString.begin(), vecString.end(), std::greater< std::pair<CString, _akDefect*> >()); - else //�궡由� 李⑥닚 - std::sort(vecString.begin(), vecString.end(), std::less< std::pair<CString, _akDefect*> >()); - - m_Formation.m_vecDefects.clear(); - std::vector< std::pair<CString, _akDefect*> >::iterator itVec; - - for (itVec = vecString.begin(); itVec != vecString.end(); ++itVec) - { - m_Formation.m_vecDefects.push_back(*itVec->second); - } - } - else//if (!vecString.empty()) - { - if (m_bAsending == TRUE) - std::sort(vecValue.begin(), vecValue.end(), std::greater< std::pair<double, _akDefect*> >()); - else - std::sort(vecValue.begin(), vecValue.end(), std::less< std::pair<double, _akDefect*> >()); - - m_Formation.m_vecDefects.clear(); - std::vector< std::pair<double, _akDefect*> >::iterator itVec; - - for (itVec = vecValue.begin(); itVec != vecValue.end(); ++itVec) - { - m_Formation.m_vecDefects.push_back(*itVec->second); - } - } -} - -void CReveiwHistoryDlg::AddVecDateSorting(int nDataCount) -{ - m_Formation.m_vecTempDefects.clear(); - - for (int i = 0; i < m_Formation.m_vecDefects.size(); i++) - { - _akDefect* pDefect = &m_Formation.m_vecDefects[i]; - - double dDefectPosX = pDefect->m_nUMCenterAlignX / 1000.0; - double dDefectPosY = pDefect->m_nUMCenterAlignY / 1000.0; - - m_Formation.AddDefectTemp(dDefectPosX, dDefectPosY); - _akDefect* pDefectInfo = &m_Formation.m_vecTempDefects[i]; - - pDefectInfo->m_nDefectID = pDefect->m_nDefectID; - pDefectInfo->m_sDefectLoc = pDefect->m_sDefectLoc; - strcpy(pDefectInfo->m_strDefectType, pDefect->m_strDefectType); - strcpy(pDefectInfo->m_strDefectCode, pDefect->m_strDefectCode); - pDefectInfo->m_DefectType = pDefect->m_DefectType; - pDefectInfo->m_DefectSubType = pDefect->m_DefectSubType; - pDefectInfo->m_nDefectRScale = pDefect->m_nDefectRScale; - pDefectInfo->m_nUMSizeX = pDefect->m_nUMSizeX; - pDefectInfo->m_nUMSizeY = pDefect->m_nUMSizeY; - pDefectInfo->m_nUMSize = pDefect->m_nUMSize; - memcpy(pDefectInfo->m_sZonePixelCount, pDefect->m_sZonePixelCount, sizeof(pDefect->m_sZonePixelCount)); - pDefectInfo->m_nLevelSrcMax = pDefect->m_nLevelSrcMax; - pDefectInfo->m_nLevelSrcMin = pDefect->m_nLevelSrcMin; - pDefectInfo->m_nLevelSrcAvg = pDefect->m_nLevelSrcAvg; - pDefectInfo->m_sDefectPeak = pDefect->m_sDefectPeak; - strcpy(pDefectInfo->m_strStackFirst, pDefect->m_strStackFirst); - pDefectInfo->m_nCameraID = pDefect->m_nCameraID; - pDefectInfo->m_nScanIdx = pDefect->m_nScanIdx; - pDefectInfo->m_nLevelRefMax = pDefect->m_nLevelRefMax; - pDefectInfo->m_nLevelRefMin = pDefect->m_nLevelRefMin; - pDefectInfo->m_nLevelRefAvg = pDefect->m_nLevelRefAvg; - pDefectInfo->m_nUMCenterAlignX = pDefect->m_nUMCenterAlignX; - pDefectInfo->m_nUMCenterAlignY = pDefect->m_nUMCenterAlignY; - pDefectInfo->m_nUMCellX = pDefect->m_nUMCellX; - pDefectInfo->m_nUMCellY = pDefect->m_nUMCellY; - pDefectInfo->m_nScratchRatio = pDefect->m_nScratchRatio; - pDefectInfo->m_nDensity = pDefect->m_nDensity; - pDefectInfo->m_bMergeState = pDefect->m_bMergeState; - } -} - -void CReveiwHistoryDlg::AddVecImageSorting(int nDataCount) -{ - m_Formation.m_vecTempImage.clear(); - - for (int i = 0; i < m_Formation.m_vecImage.size(); i++) - { - _akReviewList* pDefect = &m_Formation.m_vecImage[i]; - - m_Formation.AddDefectImageTemp(); - - _akReviewList* pImageInfo = &m_Formation.m_vecTempImage[i]; - - pImageInfo->m_nDefectID = pDefect->m_nDefectID; - strcpy(pImageInfo->m_strAoiImageName, pDefect->m_strAoiImageName); - pImageInfo->m_nDefectIdx = pDefect->m_nDefectIdx; - pImageInfo->m_strReviewImageName = pDefect->m_strReviewImageName; - - strcpy(pImageInfo->m_strAoiImagePath, pDefect->m_strAoiImagePath); - strcpy(pImageInfo->m_strReviewImagePath, pDefect->m_strReviewImagePath); - - strcpy(pImageInfo->m_strAlignFirst, pDefect->m_strAlignFirst); - strcpy(pImageInfo->m_strAlignSecond, pDefect->m_strAlignSecond); - } -} - -void CReveiwHistoryDlg::AddVecCellSorting(int nCellCount) -{ - m_FormationMap.m_vecTempCellRect.clear(); - - for (int i = 0; i < m_FormationMap.m_vecCellRect.size(); i++) - { - m_FormationMap.AddCellData(); - m_FormationMap.m_vecTempCellRect[i] = m_FormationMap.m_vecCellRect[i]; - } -} - -void CReveiwHistoryDlg::SelectCell(int nDataCount) -{ - m_FormationMap.m_vecCellRect.clear(); - - if (nDataCount < 1) return; - - int nCellCount = 0; - int nCount = 0; - int nCount2 = 0; - int nCount3 = 0; - - if (nCount == nDataCount) return; - - if (m_Formation.m_vecGlassInfo.size() == 0) return; - - _akGlassInfo* pGlass2 = &m_Formation.m_vecGlassInfo[nDataCount-1]; - - nCount2 = pGlass2->m_nCellNum; - - for (int i = 0; i < nDataCount; i++) - { - if (i == 0) - { - nCount3 = 0; - } - else - { - _akGlassInfo* pGlass = &m_Formation.m_vecGlassInfo[i-1]; - nCount3 += pGlass->m_nCellNum; - } - } - - CakRectd rectCell; - - if (m_FormationMap.m_vecTempCellRect.size() - 1 < nCount3) return; - - for (int i = 0; i < nCount2; i++) - { - CakRectd* pCellData = &m_FormationMap.m_vecTempCellRect[nCount3 + i]; - rectCell.left = pCellData->left; - rectCell.top = pCellData->top; - rectCell.right = pCellData->right; - rectCell.bottom = pCellData->bottom; - m_FormationMap.m_vecCellRect.push_back(rectCell); - } - -// for (int i = 0; i < MAX_COUNT+1; i++) -// { -// if (nCount == nDataCount) break; -// -// if (m_nCellSize[i] != 0) -// { -// nCount++; -// } -// nCellCount = m_nCellSize[i]; -// nCount2 = i; -// -// if (i == 0) -// { -// nCount3 = 0; -// } -// else -// { -// nCount3 += m_nCellSize[i-1]; -// } -// } - m_FormationMap.ReDraw(TRUE); -} - -void CReveiwHistoryDlg::SortFileList(int nCol) -{ - if (nCol == 0) - return; - - _akReviewHeader *pReviewHeader; - std::vector< std::pair<CString, _akReviewHeader*> > vecString; - std::vector< std::pair<double, _akReviewHeader*> > vecValue; - CString strValue; - double dValue; - short sValue[16]; - - for (int i = 0; i < m_Formation.m_vecHeaderTemp.size(); i++) - { - pReviewHeader = &m_Formation.m_vecHeaderTemp[i]; - - switch (nCol) - { - case 1: strValue = pReviewHeader->m_strFileTime; break; - case 2: strValue = pReviewHeader->m_strLoading; break; - case 3: strValue = pReviewHeader->m_strPPID; break; - case 4: strValue = pReviewHeader->m_strGlassID; break; - case 5: dValue = pReviewHeader->m_nDefectIdx; break; - case 6: dValue = pReviewHeader->m_nReviewIdx; break; - case 7: strValue = pReviewHeader->m_strJudge; break; - case 8: strValue = pReviewHeader->m_strFileName; break; - } - - if (strValue.IsEmpty() == FALSE) vecString.push_back(std::make_pair(strValue, pReviewHeader)); - else vecValue.push_back(std::make_pair(dValue, pReviewHeader)); - } - - if (!vecString.empty()) - { - std::sort(vecString.begin(), vecString.end(), std::greater< std::pair<CString, _akReviewHeader*> >()); - - m_Formation.m_vecHeader.clear(); - std::vector< std::pair<CString, _akReviewHeader*> >::iterator itVec; - // /*if(nCount > m_nFileCount) break; //count �뿬湲곗꽌 留먭퀬 �쟾泥� �뙆�씪�쓣 �떎 �씫�� �썑�뿉 �떎�떆 �냼�똿�븯�옄*/ - int nCount = 1; - for (itVec = vecString.begin(); itVec != vecString.end(); ++itVec) - { - if(nCount > m_nFileCount) break; - m_Formation.m_vecHeader.push_back(*itVec->second); - nCount++; - } - } - else - { - std::sort(vecValue.begin(), vecValue.end(), std::greater< std::pair<double, _akReviewHeader*> >()); - - m_Formation.m_vecHeader.clear(); - std::vector< std::pair<double, _akReviewHeader*> >::iterator itVec; - int nCount = 1; - for (itVec = vecValue.begin(); itVec != vecValue.end(); ++itVec) - { - if (nCount > m_nFileCount) break; - m_Formation.m_vecHeader.push_back(*itVec->second); - nCount++; - } - } - - _akReviewHeader *pReview; - m_vecStrGridReviewPath.clear(); - m_vecStrGridReviewList.clear(); - - GV_ITEM Item; - int nRowIdx = 0; - int nColIdx = 0; - CString strTemp; - Item.mask = GVIF_TEXT; - - for(int i=0; i< m_Formation.m_vecHeader.size(); i++) - { - pReview = &m_Formation.m_vecHeader[i]; - m_vecStrGridReviewPath.push_back(pReview->m_strFilePath); - m_vecStrGridReviewList.push_back(pReview->m_strFileName); - } - m_Formation.m_vecHeaderTemp.clear(); -} diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h deleted file mode 100644 index c7bcab0..0000000 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h +++ /dev/null @@ -1,275 +0,0 @@ -癤� -// ReveiwHistoryDlg.h: �뿤�뜑 �뙆�씪 -// - -#pragma once - -#include "akFormationMap.h" -#include "akGridData.h" -#include "AlignDlg.h" -#include "akWndArrange.h" -#include "DitGlassRawServer.h" -#include "GlassRawBase.h" -#include "akCore/akFileDB.h" -#include "afxcmn.h" -#include "akGridCtrl/akGridCtrl.h" -#include "akImageView.h" -//#include "CameraImageView.h" -//#include "CHImageControls/CHRectTracker.h" - - -#define MAX_COUNT 100 - -struct _DefectList -{ - int m_nFileTime; - CString m_strFileName; - CString m_strLoading; - CString m_strGlassID; - CString m_strPPID; - int m_nReviewCount; - int m_nAllCount; - CString m_strJudge; -}; - -// CReveiwHistoryDlg ���솕 �긽�옄 -class CReveiwHistoryDlg : public CDialogEx -{ -// �깮�꽦�엯�땲�떎. -public: - CReveiwHistoryDlg(CWnd* pParent = nullptr); // �몴以� �깮�꽦�옄�엯�땲�떎. - -// ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎. -#ifdef AFX_DESIGN_TIME - enum { IDD = IDD_DLG_REVIEWHISTORY }; -#endif - - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 吏��썝�엯�땲�떎. - -public: - CFont m_Filelistfont; - CFont m_Defectfont; - - _DefectDisplayOption m_DefectDisplayOption; - CakFormationMap m_FormationMap; - akDefectFormation m_Formation; - CString m_strRawFilePath; - CakWndArrange m_WndArrange; - - CakImageView m_ImageView; - - CAlignDlg* m_pDlgAlign; - - CakGridCtrl m_gridMultiLIst; - std::vector<CString> m_vecStrGridMultiHeader; - - CakGridCtrl m_gridReviewList; - std::vector<CString> m_vecStrGridReviewHeader; - std::vector<CString> m_vecStrGridReviewList; - std::vector<CString> m_vecStrGridReviewPath; - std::vector<CString> m_vecStrGridTimeList; - std::vector<_DefectList> m_vecStrDefectList; - - CakGridCtrl m_gridDefectInfo; - std::vector<CString> m_vecStrGridDefectHeader; - - CakGridCtrl m_gridGlassInfo; - std::vector<CString> m_vecStrGridGlassHeader; - - std::vector<CString> m_vecStrReviewTemp; - std::vector<_akFormation*> m_vecSortForm; - - std::vector<_akDefect> m_vectest; - - CImage m_DefectImage; - CImage m_ReviewImage; - - CRect m_picture_rect; - CRect m_picture_rect2; - - CImage m_AlignFirst; - CImage m_AlignSecend; - - CRect m_Align_rect; - CRect m_Align_rect2; - - CButton m_chkAllDefect; - CButton m_chkReviewDefect; - CButton m_chkMuti; - CButton m_chkSingle; - - CSliderCtrl m_sldImg; - CEdit m_ctrCount; - - CStatic m_ctrReviewImage; - - CEdit m_ctlFileCount; - - CProgressCtrl m_ctlProgress; - - CakGridCtrl m_ctrlGridGlassList; - - // tracker - BOOL m_bDrawTracker; - CPoint m_ptTrackerStart; - //CCHRectTracker m_rectTracker; - - // Scroll Pos - int m_nVScroll; - int m_nHScroll; - // Max Scroll Pos - int m_nMaxVScroll; - int m_nMaxHScroll; - -/////////////////////////////////////////////////////// - CDitGlassRawServer m_Server; - CGlassRawBase* m_pGlassRawMaker; - CgrmGlassRawData m_GlassRawDataBuffer; -/////////////////////////////////////////////////////// - - int m_nSelectedCol; - int m_nSelectedRow; - - char m_strConfigFile[MAX_PATH]; - - bool m_bDefectAll; - bool m_bFirst; - int m_nCount; - - int m_nGlassSelect; - int m_nFileCount; - int m_nSelectFile[105]; - int m_nDefectSize[105]; - int m_nCellSize[105]; - int m_nCellSizeTemp[105]; - int m_nImageSize[105]; - int m_nSizeDefect; - int m_nSizeImage; - int m_nDefectCount; - int m_nImageCount; - int m_nCellCount; - - BOOL m_bAsending; - - struct _InitOption - { - int m_nMaxDataNumCell; - int m_nMaxDataNumDefect; - - int m_nSelectRawType; - - char m_strLogFilePath[256]; - - int m_bUseStack; - char m_strStackLocalPath[256]; - char m_strStackEquipID[32]; - char m_strStackParam1[32]; - char m_strStackParam2[32]; - }m_ConfigOption; - -// 援ы쁽�엯�땲�떎. -protected: - HICON m_hIcon; - - // �깮�꽦�맂 硫붿떆吏� 留� �븿�닔 - virtual BOOL OnInitDialog(); - afx_msg void OnSysCommand(UINT nID, LPARAM lParam); - afx_msg void OnPaint(); - afx_msg HCURSOR OnQueryDragIcon(); - virtual BOOL PreTranslateMessage(MSG* pMsg); - - DECLARE_MESSAGE_MAP() - - void AddVecFileHeader(); - void AddVecGlassHeader(); - void AddVecDefectHeader(); - - void SlideInit(); - - void InitGridReviewLIst(CakGridCtrl* pGrid, UINT nRectCtrlID); - void InitGridGlassLIst(CakGridCtrl * pGrid, UINT nRectCtrlID); - void InitGridDefectLIst(CakGridCtrl* pGrid, UINT nRectCtrlID); - - void CreateUserDirectory(); - void CreateUserClass(); - void DestroyUserClass(); - - void getDispInfoGlass(int nCol, int nRow, CString* pStrData); - void getDispInfoGlassInfo(int nCol, int nRow, CString * pStrData); - void getDispInfoDefect(int nCol, int nRow, CString* pStrData); - -public: - afx_msg void OnBnClickedButtonMapviewFit(); - afx_msg void OnDestroy(); - afx_msg LRESULT OnMapDefectSelected(WPARAM wParam, LPARAM lParam); - afx_msg LRESULT OnMapDefectMouseOver(WPARAM wParam, LPARAM lParam); - afx_msg LRESULT OnListDefectSelected(WPARAM wParam, LPARAM lParam); - afx_msg void OnSize(UINT nType, int cx, int cy); - - afx_msg void OnOptionPathsetting(); - afx_msg void OnViewAlldefect(); - afx_msg void OnViewReviewdefect(); - afx_msg void OnAlignView(); - afx_msg void OnBnClickedBtnFindBin(); - afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); - afx_msg void OnChangeEditCount(); - - afx_msg void OnClickedChkAllDefect(); - afx_msg void OnClickedChkMuti(); - afx_msg void OnClickedChkReviewDefect(); - afx_msg void OnClickedChkSingle(); - afx_msg void OnChangeEditFileCount(); - - afx_msg void OnBnClickedButton3(); - - virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult); - - void FileTime(CString strPath); - void OpenFileHeader(CString strPath, CString strFullPath); - void BinFileOpen(int nCount); - void OnCbnSelchangeComboRawtype(); - - - void ShowProgressBar(); - void setDefectShow(int nDefectID, BOOL bEnsureVisible); - void ImageShow(int nDefectID); - - void SetScrollSetting(); - void SetScrollRest(); - - void Imagenoload(); - - BOOL GetCheckFileLoad(int nCount); - - void GlassInfoRest(); - BOOL MultiSelectCheck(int nSelectCount); - int MultiInsert(int nSelectCount, int nDataCount); - void InitSelectGlass(int nSelectCount); - - void AddVecDataImage(int nDataCount); - void AddVecDataDefct(int nDataCount); - void AddVecDataDefectAll(int nDataCount); - void AddVecDataDefct2(int nDataCount/*, int nRawCount*/); - void AddVecDataDefectAll2(int nDataCount/*, int nRawCount*/); - void AddVecGlassData(int nCount); - void AddVecCellData(int nCellCount); - void AddVecDateSorting(int nDataCount); - void AddVecImageSorting(int nDataCount); - void AddVecCellSorting(int nCellCount); - - void SelectCell(int nDataCount); - - void SortFileList(int nCol); - void SortListDefect(int nCol); - - void SetDefectCount() { m_nDefectCount = m_nDefectCount + 1; } - int GetDefectCount() { return m_nDefectCount; } - - void SetImageCount() { m_nImageCount = m_nImageCount + 1; } - int GetImageCount() { return m_nImageCount; } - - void SetCellCount() { m_nCellCount = m_nCellCount + 1; } - int GetCellCount() { return m_nCellCount; } - -}; diff --git a/ReviewHistory/ReveiwHistory/Singleton.h b/ReviewHistory/ReveiwHistory/Singleton.h deleted file mode 100644 index 003088b..0000000 --- a/ReviewHistory/ReveiwHistory/Singleton.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -template <typename T> -class CSingleton -{ -public: - CSingleton() {} - virtual ~CSingleton() {} - - static void CreateClass() - { - if ( !m_pMgr ) - m_pMgr = new T; - } - - static void DestroyClass() - { - if ( m_pMgr ) - { - delete m_pMgr; - - m_pMgr = NULL; - } - } - - static T* GetMgr() - { - return m_pMgr; - } - -private: - static T* m_pMgr; -}; - -template<typename T> T* CSingleton<T>::m_pMgr = NULL; \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/StackResultCPJT.cpp b/ReviewHistory/ReveiwHistory/StackResultCPJT.cpp deleted file mode 100644 index cc904f5..0000000 --- a/ReviewHistory/ReveiwHistory/StackResultCPJT.cpp +++ /dev/null @@ -1,337 +0,0 @@ -#include "StdAfx.h" -#include "StackResultCPJT.h" -#include "akLoggerExt.h" -#include "akCore/akFileDB.h" -#include <process.h> -#include "DitGlassRawClient.h" -#include "GlassRawBase.h" - -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -CStackResultCPJT::CStackResultCPJT(void) -{ - m_nThreadStackFileReadFlag = 0; - m_strConfigFile; - { - GetModuleFileName(NULL, m_strConfigFile, MAX_PATH); - char* ext = CakFileUtil::getFileExt(m_strConfigFile); - strcpy(ext, "ini"); - } - - m_nProcessState = SPS_StateIdle; - readOptionFile(); -} - -CStackResultCPJT::~CStackResultCPJT(void) -{ - if(m_nThreadStackFileReadFlag == 1) - { - m_nThreadStackFileReadFlag = 2; - while(m_nThreadStackFileReadFlag != 0) - { - Sleep(1); - } - } - - m_vecStackDefect.clear(); -} - -//201218 CJH - Stack File open -BOOL CStackResultCPJT::openFile( char* pGlassID ) -{ - CString strFileName; - - CDitGlassRawClient GlassRawClient; - GlassRawClient.ConnectServer(); - CDitGlassRawClient* pShared = &GlassRawClient; - - _grmDefectData* pGrmStack; - - strFileName.Format("%s\\%s", m_strLocalPath, pGlassID); - - FILE* pf = fopen(strFileName.GetBuffer(0), "r"); - - if(pf == NULL) - return FALSE; - - std::vector<_StackDefectCPJT> vecStackDefect; - _StackDefectCPJT StackDefect; - char buffer[2048]; - - char* pReadPoint = NULL; - char *pStr; - CString tempStr, strRight; - - while(!feof(pf)) //Data 시작 - { - pStr = fgets(buffer, 2048, pf); - - if(strncmp(buffer, "DATA", 4)) continue; //Data 시작 - - if(strlen(buffer) <= 0 || pStr == NULL) - break; - - if(strncmp(buffer, "DATA DEFECT", 10)) continue; //Defect 찾아 - - //Defect Stack Start - { - pReadPoint = buffer; - int temp; - - pReadPoint = getParsingData(pReadPoint, 11, &temp); - pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_strCellName); - pReadPoint = getParsingData(pReadPoint, 5, &StackDefect.m_nDefectID); - pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nPosX); - pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nPosY); - - pReadPoint = getParsingData(pReadPoint, 13, &temp); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nSize); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUmSizeX); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUmSizeY); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nDefectRScale); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_strDefectGrade); - pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_strDefectType); - - //pReadPoint = getParsingData(pReadPoint, 47, &temp); - pReadPoint = getParsingData(pReadPoint, 2, &temp); - pReadPoint = getParsingData(pReadPoint, 2, &StackDefect.m_nStackCnt); - pReadPoint = getParsingData(pReadPoint, 60, &StackDefect.m_strStackStep); - - vecStackDefect.push_back(StackDefect); - } - } - - //For Test - AKLOG("Read Stack Size : %d", vecStackDefect.size()); - - fclose(pf); - - m_vecStackDefect = vecStackDefect; - - for (int i = 0; i < m_vecStackDefect.size(); i++) - { - pGrmStack = pShared->GetStackData(i); - pGrmStack->clear(); - - //Cell ID로 idx 찾기 - { - //char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - //'0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36] - tempStr = m_vecStackDefect[i].m_strCellName.Right(2); - int nUpper = atoi(tempStr.Left(1)); - nUpper *= 36; - - char ctemp[2]; - strRight = tempStr.Right(1); - strcpy(ctemp, strRight); - int nLower = static_cast<int>(ctemp[0]); - if (48 <= nLower && nLower <= 57) - nLower = 43 /* 65+26+17 */ + nLower; - nLower -= 65; - - pGrmStack->m_nCellIdx = nUpper + nLower; - } - - pGrmStack->m_nDefectID = m_vecStackDefect[i].m_nDefectID; - pGrmStack->m_nUMCenterAlignX = m_vecStackDefect[i].m_nPosX; - pGrmStack->m_nUMCenterAlignY = (-1)*m_vecStackDefect[i].m_nPosY; - pGrmStack->m_nPixelSize = m_vecStackDefect[i].m_nSize; - pGrmStack->m_nUMSizeX = m_vecStackDefect[i].m_nUmSizeX; - pGrmStack->m_nUMSizeY = m_vecStackDefect[i].m_nUmSizeY; - pGrmStack->m_nDefectRScale = m_vecStackDefect[i].m_nDefectRScale; - //Judgement - { - m_vecStackDefect[i].m_strDefectGrade.TrimLeft(" "); - m_vecStackDefect[i].m_strDefectGrade.TrimRight(" "); - if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "OK")) pGrmStack->m_DefectJudgement = Judge_OK; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RP")) pGrmStack->m_DefectJudgement = Judge_RP; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "NG")) pGrmStack->m_DefectJudgement = Judge_NG; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "TR")) pGrmStack->m_DefectJudgement = Judge_TR; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PR")) pGrmStack->m_DefectJudgement = Judge_PR; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PT")) pGrmStack->m_DefectJudgement = Judge_PT; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RV")) pGrmStack->m_DefectJudgement = Judge_Review; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RC")) pGrmStack->m_DefectJudgement = Judge_RC; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "SZ")) pGrmStack->m_DefectJudgement = Judge_Size; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "VI")) pGrmStack->m_DefectJudgement = Judge_VI; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RW")) pGrmStack->m_DefectJudgement = Judge_Rework; - else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "UK")) pGrmStack->m_DefectJudgement = Judge_Unknown; - else /*if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "그외"))*/ pGrmStack->m_DefectJudgement = Judge_OK; - } - m_vecStackDefect[i].m_strDefectType.TrimLeft(" "); - m_vecStackDefect[i].m_strDefectType.TrimRight(" "); - //Defect Type - { - if (!strcmp(m_vecStackDefect[i].m_strDefectType, "RB")) pGrmStack->m_DefectType = DefectType_RBlack; - else if (!strcmp(m_vecStackDefect[i].m_strDefectType, "RW")) pGrmStack->m_DefectType = DefectType_RWhite; - else if (!strcmp(m_vecStackDefect[i].m_strDefectType, "TB")) pGrmStack->m_DefectType = DefectType_TBlack; - else if (!strcmp(m_vecStackDefect[i].m_strDefectType, "TW")) pGrmStack->m_DefectType = DefectType_TWhite; - else pGrmStack->m_DefectType = DefectType_Unknown; - } - pGrmStack->m_nStackStepCount = m_vecStackDefect[i].m_nStackCnt; - m_vecStackDefect[i].m_strStackStep.TrimLeft(" "); - m_vecStackDefect[i].m_strStackStep.TrimRight(" "); - strcpy(pGrmStack->m_strStackFirst, m_vecStackDefect[i].m_strStackStep.GetBuffer(0)); - } - - pShared->GetGlassData()->m_nStackNum = m_vecStackDefect.size(); - pShared->GetGlassData()->m_bStackRead = TRUE; - - AKLOG("Import Vector Size : %d", m_vecStackDefect.size()); - - return TRUE; -} - -char* CStackResultCPJT::getParsingData( char* pBuf, int nLen, CString* pOutData ) -{ - for(int i=nLen-1; i>=0; i--) - { - if(pBuf[i] != ' ') - { - pBuf[i+1] = 0; - break; - } - } - *pOutData = pBuf; - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -char* CStackResultCPJT::getParsingData( char* pBuf, int nLen, int* pOutData ) -{ - pBuf[nLen] = 0; - - *pOutData = atoi(pBuf); - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -BOOL CStackResultCPJT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) -{ - if(pFileName == NULL) pFileName = m_strConfigFile; - - CakFileDB akFileDB; - akFileDB.openfile(pFileName); - - akFileDB.getItem("Stack_Use", &m_bStackUse, 0); - akFileDB.getItem("Stack_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\Stack"); - akFileDB.getItem("Stack_EquipID", m_strEquipID, "qa6500f0r03"); - akFileDB.getItem("Stack_Param1", m_strParam1, ""); - - - if(m_bStackUse && m_nThreadStackFileReadFlag == 0)//쓰레드 생성 [김태현 2019/1/12] - { - _beginthread(threadStackFileRead, NULL, this); - } - return TRUE; -} - -void CStackResultCPJT::threadStackFileRead( void* pArg ) -{ - CStackResultCPJT* pThis = (CStackResultCPJT*)pArg; - - pThis->m_nThreadStackFileReadFlag = 1; - int nSleepTime = 1000; - int nReadFailCount = 0; - int nThreadCount=0; - CString strGlassID; - -// CDitGlassRawClient GlassRawClient; -// if(!GlassRawClient.ConnectServer()) return; -// CDitGlassRawClient* pShared = &GlassRawClient; - -// pShared->GetGlassData()->m_bStackRead = FALSE; -// pShared->GetGlassData()->m_nStackNum = 0; - - while(pThis->m_nThreadStackFileReadFlag==1) - { - if(pThis->m_nProcessState == SPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12] - { - strGlassID = pThis->m_strGlassID; - //For test - //strGlassID = "HPANELID"; - pThis->m_nProcessState = SPS_StateFileRead; - nThreadCount = 0; - nReadFailCount = 0; - - AKLOG("Stack File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID); - - //210111 CJH - Stack Read Sleep - Sleep(3000); - - while(pThis->m_nProcessState == SPS_StateFileRead && pThis->m_nThreadStackFileReadFlag==1) - { - if((nThreadCount++ % 20) != 0) //명령 수행을 빠르게 감지 위한 조치 [김태현 2019/1/12] - { - Sleep(50); - continue; - } - - if(pThis->openFile(strGlassID.GetBuffer(0)) == TRUE) - { - pThis->m_nProcessState = SPS_ResultReadOK; - AKLOG("Stack File Read Complete "); - break; - } - - nReadFailCount++; - AKLOG("Stack File Read Try : %d", nReadFailCount); - - if(nReadFailCount>100) - { - pThis->m_nProcessState = SPS_ResultReadFail; - AKLOG("Stack File Read Fail "); - break; - } - - Sleep(50); - } - if(pThis->m_nProcessState != SPS_ResultReadOK) - { - pThis->m_nProcessState = SPS_ResultReadFail; - AKLOG("Stack File Read Stop "); - } - - - } - if(nReadFailCount) - - - Sleep(500); - } - - pThis->m_nThreadStackFileReadFlag = 0; -} - -BOOL CStackResultCPJT::StackFileReadStart( char* pGlassID ) -{ - if(m_nThreadStackFileReadFlag == 0)//쓰레드 생성 [김태현 2019/1/12] - { - _beginthread(threadStackFileRead, NULL, this); - } - - if(m_nProcessState == SPS_StateFileRead) - { - m_nProcessState = SPS_CmdFileStop; - while(m_nProcessState == SPS_CmdFileStop) Sleep(0); - } - - m_strGlassID = pGlassID; - m_nProcessState = SPS_CmdFileRead; - - return TRUE; -} - -BOOL CStackResultCPJT::StackFileReadStop( BOOL bWait/*=TRUE*/ ) -{ - if(bWait == TRUE && m_nProcessState == SPS_StateFileRead) - { - m_nProcessState = SPS_CmdFileStop; - while(m_nProcessState == SPS_CmdFileStop) Sleep(0); - } - - return TRUE; -} diff --git a/ReviewHistory/ReveiwHistory/StackResultCPJT.h b/ReviewHistory/ReveiwHistory/StackResultCPJT.h deleted file mode 100644 index 80da903..0000000 --- a/ReviewHistory/ReveiwHistory/StackResultCPJT.h +++ /dev/null @@ -1,87 +0,0 @@ -#pragma once - -#include <vector> -#include "akCore/akFileUtil.h" - - -//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size 추가 - -struct _StackDefectCPJT -{ - int m_nDefectID ; - //char m_strCellID[32] ; - CString m_strCellName ; - int m_nPosX ; - int m_nPosY ; - int m_nSize ; - int m_nUmSizeX ; - int m_nUmSizeY ; - int m_nDefectRScale ; - CString m_strDefectGrade; - CString m_strDefectType ; - int m_nStackCnt ; - CString m_strStackStep ; - //char m_strJudge[16] ; - //char m_strCode[16] ; -}; - -class CStackResultCPJT -{ -public: - CStackResultCPJT(void); - virtual ~CStackResultCPJT(void); -protected: - enum emStackProcessState - { - SPS_StateIdle = 0, - SPS_StateFileRead, //읽기 수행 중 - SPS_ResultReadOK, - SPS_ResultReadFail, - SPS_CmdFileRead, //읽기 명령 수행 - SPS_CmdFileStop, //읽기 명령 수행 중지 - - SPS_Num - }; -public: - void clear() - { - m_vecStackDefect.clear(); - } - - BOOL StackFileReadStart(char* pGlassID); - BOOL StackFileReadStop(BOOL bWait=TRUE); - BOOL IsRead() { return m_nProcessState == SPS_ResultReadOK?TRUE:FALSE; } - - int GetDefectNum() { return (int)m_vecStackDefect.size();} - _StackDefectCPJT* GetDefect(int i) { return &m_vecStackDefect[i]; } - - BOOL readOptionFile(char* pFileName = NULL); - - BOOL getStackUse(){return m_bStackUse;}; - char* getStackEquipID(){return m_strEquipID;}; - char* getStackOperID(){return m_strParam1;}; - char* getStackLocalPath(){return m_strLocalPath;}; -protected: - BOOL openFile( char* pGlassID ); - - static void threadStackFileRead(void* pArg); - int m_nThreadStackFileReadFlag; - -protected: - char m_strConfigFile[MAX_PATH]; - BOOL m_bStackUse; - char m_strLocalPath[MAX_PATH]; - char m_strEquipID[32]; - char m_strParam1[32]; //operid - - emStackProcessState m_nProcessState;//-1:읽기실패,0:Idle, 1:읽기성공, 2:읽기시도(읽기중) - std::vector<_StackDefectCPJT> m_vecStackDefect; - - CString m_strGlassID; -protected: - char* getParsingData(char* pBuf, int nLen, CString* pOutData); - char* getParsingData(char* pBuf, int nLen, int* pOutData); - - - -}; diff --git a/ReviewHistory/ReveiwHistory/StackResultCSOT.cpp b/ReviewHistory/ReveiwHistory/StackResultCSOT.cpp deleted file mode 100644 index 0a26a55..0000000 --- a/ReviewHistory/ReveiwHistory/StackResultCSOT.cpp +++ /dev/null @@ -1,226 +0,0 @@ -#include "StdAfx.h" -#include "StackResultCSOT.h" -#include "akLoggerExt.h" -#include "akCore/akFileDB.h" -#include <process.h> - -#ifdef _DEBUG -#undef THIS_FILE -static char THIS_FILE[]=__FILE__; -#define new DEBUG_NEW -#endif - -CStackResultCSOT::CStackResultCSOT(void) -{ - m_nThreadStackFileReadFlag = 0; - m_strConfigFile; - { - GetModuleFileName(NULL, m_strConfigFile, MAX_PATH); - char* ext = CakFileUtil::getFileExt(m_strConfigFile); - strcpy(ext, "ini"); - } - - m_nProcessState = SPS_StateIdle; - readOptionFile(); -} - -CStackResultCSOT::~CStackResultCSOT(void) -{ - if(m_nThreadStackFileReadFlag == 1) - { - m_nThreadStackFileReadFlag = 2; - while(m_nThreadStackFileReadFlag != 0) - { - Sleep(1); - } - } - - m_vecMacroDefect.clear(); -} - -BOOL CStackResultCSOT::openFile( char* pGlassID ) -{ - CString strFileName; - - strFileName.Format("%s\\%s.txt", m_strLocalPath, pGlassID); - - FILE* pf = fopen(strFileName.GetBuffer(0), "r"); - - if(pf == NULL) - return FALSE; - - std::vector<_StackDefect> vecMacroDefect; - _StackDefect MacroDefect; - char buffer[1024]; - - char* pReadPoint = NULL; - char *pStr; - - while(!feof(pf)) - { - pStr = fgets(buffer, 1024, pf); - - if(!strncmp(buffer, "ITEM,", 5)) continue; - - - if(strlen(buffer) <= 0 || pStr == NULL) - break; - - if(!strncmp(buffer, "DATA,CELLDATA", 13))//파싱 태현[2017/3/29] - { - //무라 셀판정도 반영 해야 하나? - } - else if(!strncmp(buffer, "DATA,DEFECTDATA", 15))//파싱 태현[2017/3/29] - { - pReadPoint = buffer; - - - - vecMacroDefect.push_back(MacroDefect); - } - } - - fclose(pf); - - m_vecMacroDefect = vecMacroDefect; - return TRUE; -} - -char* CStackResultCSOT::getParsingData( char* pBuf, int nLen, CString* pOutData ) -{ - for(int i=nLen-1; i>=0; i--) - { - if(pBuf[i] != ' ') - { - pBuf[i+1] = 0; - break; - } - } - *pOutData = pBuf; - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -char* CStackResultCSOT::getParsingData( char* pBuf, int nLen, int* pOutData ) -{ - pBuf[nLen] = 0; - - *pOutData = atoi(pBuf); - - return &pBuf[nLen+1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다 태현[2017/3/29] -} - -BOOL CStackResultCSOT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ ) -{ - if(pFileName == NULL) pFileName = m_strConfigFile; - - CakFileDB akFileDB; - akFileDB.openfile(pFileName); - - akFileDB.getItem("Stack_Use", &m_bStackUse, 0); - akFileDB.getItem("Stack_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\Stack"); - akFileDB.getItem("Stack_EquipID", m_strEquipID, "AAAAA"); - akFileDB.getItem("Stack_Param1", m_strParam1, ""); - - - if(m_bStackUse && m_nThreadStackFileReadFlag == 0)//쓰레드 생성 [김태현 2019/1/12] - { - _beginthread(threadStackFileRead, NULL, this); - } - return TRUE; -} - -void CStackResultCSOT::threadStackFileRead( void* pArg ) -{ - CStackResultCSOT* pThis = (CStackResultCSOT*)pArg; - - pThis->m_nThreadStackFileReadFlag = 1; - int nSleepTime = 1000; - int nReadFailCount = 0; - int nThreadCount=0; - CString strGlassID; - - while(pThis->m_nThreadStackFileReadFlag==1) - { - if(pThis->m_nProcessState == SPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12] - { - strGlassID = pThis->m_strGlassID; - pThis->m_nProcessState = SPS_StateFileRead; - nThreadCount = 0; - nReadFailCount = 0; - - AKLOG("Stack File Read Start : %s\\%s.txt", pThis->m_strLocalPath, strGlassID); - - while(pThis->m_nProcessState == SPS_StateFileRead && pThis->m_nThreadStackFileReadFlag==1) - { - if((nThreadCount++ % 20) != 0) //명령 수행을 빠르게 감지 위한 조치 [김태현 2019/1/12] - { - Sleep(50); - continue; - } - - if(pThis->openFile(strGlassID.GetBuffer(0)) == TRUE) - { - pThis->m_nProcessState = SPS_ResultReadOK; - AKLOG("Stack File Read Complete "); - break; - } - - nReadFailCount++; - AKLOG("Stack File Read Try : %d", nReadFailCount); - - if(nReadFailCount>100) - { - pThis->m_nProcessState = SPS_ResultReadFail; - AKLOG("Stack File Read Fail "); - break; - } - - Sleep(50); - } - if(pThis->m_nProcessState != SPS_ResultReadOK) - { - pThis->m_nProcessState = SPS_ResultReadFail; - AKLOG("Stack File Read Stop "); - } - - - } - if(nReadFailCount) - - - Sleep(500); - } - - pThis->m_nThreadStackFileReadFlag = 0; -} - -BOOL CStackResultCSOT::StackFileReadStart( char* pGlassID ) -{ - if(m_nThreadStackFileReadFlag == 0)//쓰레드 생성 [김태현 2019/1/12] - { - _beginthread(threadStackFileRead, NULL, this); - } - - if(m_nProcessState == SPS_StateFileRead) - { - m_nProcessState = SPS_CmdFileStop; - while(m_nProcessState == SPS_CmdFileStop) Sleep(0); - } - - m_strGlassID = pGlassID; - m_nProcessState = SPS_CmdFileRead; - - return TRUE; -} - -BOOL CStackResultCSOT::StackFileReadStop( BOOL bWait/*=TRUE*/ ) -{ - if(bWait == TRUE && m_nProcessState == SPS_StateFileRead) - { - m_nProcessState = SPS_CmdFileStop; - while(m_nProcessState == SPS_CmdFileStop) Sleep(0); - } - - return TRUE; -} diff --git a/ReviewHistory/ReveiwHistory/StackResultCSOT.h b/ReviewHistory/ReveiwHistory/StackResultCSOT.h deleted file mode 100644 index a980e0b..0000000 --- a/ReviewHistory/ReveiwHistory/StackResultCSOT.h +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once - -#include <vector> -#include "akCore/akFileUtil.h" - -struct _StackDefect -{ - int m_nDefectID ; - char m_strCellID[32] ; - int m_nPosX ; - int m_nPosY ; - int m_nSize ; - char m_strJudge[16] ; - char m_strCode[16] ; -}; - -class CStackResultCSOT -{ -public: - CStackResultCSOT(void); - virtual ~CStackResultCSOT(void); -protected: - enum emStackProcessState - { - SPS_StateIdle = 0, - SPS_StateFileRead, //읽기 수행 중 - SPS_ResultReadOK, - SPS_ResultReadFail, - SPS_CmdFileRead, //읽기 명령 수행 - SPS_CmdFileStop, //읽기 명령 수행 중지 - - SPS_Num - }; -public: - void clear() - { - m_vecMacroDefect.clear(); - } - - BOOL StackFileReadStart(char* pGlassID); - BOOL StackFileReadStop(BOOL bWait=TRUE); - BOOL IsRead() { return m_nProcessState == SPS_ResultReadOK?TRUE:FALSE; } - - int GetDefectNum() { return (int)m_vecMacroDefect.size();} - _StackDefect* GetDefect(int i) { return &m_vecMacroDefect[i]; } - - BOOL readOptionFile(char* pFileName = NULL); - - BOOL getStackUse(){return m_bStackUse;}; - char* getStackEquipID(){return m_strEquipID;}; - char* getStackOperID(){return m_strParam1;}; - char* getStackLocalPath(){return m_strLocalPath;}; -protected: - BOOL openFile( char* pGlassID ); - - static void threadStackFileRead(void* pArg); - int m_nThreadStackFileReadFlag; - -protected: - char m_strConfigFile[MAX_PATH]; - BOOL m_bStackUse; - char m_strLocalPath[MAX_PATH]; - char m_strEquipID[32]; - char m_strParam1[32]; //operid - - emStackProcessState m_nProcessState;//-1:읽기실패,0:Idle, 1:읽기성공, 2:읽기시도(읽기중) - std::vector<_StackDefect> m_vecMacroDefect; - - CString m_strGlassID; -protected: - char* getParsingData(char* pBuf, int nLen, CString* pOutData); - char* getParsingData(char* pBuf, int nLen, int* pOutData); - - - -}; diff --git a/ReviewHistory/ReveiwHistory/aaa.txt b/ReviewHistory/ReveiwHistory/aaa.txt deleted file mode 100644 index e69de29..0000000 --- a/ReviewHistory/ReveiwHistory/aaa.txt +++ /dev/null diff --git a/ReviewHistory/ReveiwHistory/akDefectFormation.cpp b/ReviewHistory/ReveiwHistory/akDefectFormation.cpp deleted file mode 100644 index fb4f886..0000000 --- a/ReviewHistory/ReveiwHistory/akDefectFormation.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "stdafx.h" -#include "akDefectFormation.h" -#include "akSTL/akStruct.h" - -akDefectFormation::akDefectFormation() -{ -} - -akDefectFormation::~akDefectFormation() -{ -} - -void akDefectFormation::Clear() -{ - m_vecDefects.clear(); - m_vecFormation.clear(); - m_vecImage.clear(); - m_vecGlassInfo.clear(); -} - -void akDefectFormation::AddDefect(double dPosX, double dPosY) -{ - _akDefect akDefect; - akDefect.dPositionX = dPosX; - akDefect.dPositionY = dPosY; - akDefect.nLabel = -1; - akDefect.nDefectID = -1; - akDefect.nFilter = 0; - akDefect.nSize = 0; - - m_vecDefects.push_back(akDefect); -} - -void akDefectFormation::AddDefectTemp(double dPosX, double dPosY) -{ - _akDefect akDefect; - akDefect.dPositionX = dPosX; - akDefect.dPositionY = dPosY; - akDefect.nLabel = -1; - akDefect.nDefectID = -1; - akDefect.nFilter = 0; - akDefect.nSize = 0; - - m_vecTempDefects.push_back(akDefect); -} - -void akDefectFormation::AddDefect2() -{ - _akDefect akDefect; - - m_vecPath1.push_back(akDefect); - m_vecPath2.push_back(akDefect); - m_vecPath3.push_back(akDefect); - m_vecPath4.push_back(akDefect); - m_vecPath5.push_back(akDefect); - m_vecPath6.push_back(akDefect); -} - -void akDefectFormation::AddDefectImageTemp() -{ - _akReviewList akReviewList; - akReviewList.m_strReviewImageName = ""; - m_vecTempImage.push_back(akReviewList); -} - -void akDefectFormation::AddDefectImage() -{ - _akReviewList akReviewList; - akReviewList.m_strReviewImageName = ""; - m_vecImage.push_back(akReviewList); -} - -void akDefectFormation::AddGlassInfo() -{ - _akGlassInfo akGlassInfo; - akGlassInfo.m_nGlassSelect = -1; - akGlassInfo.m_strPPID = ""; - akGlassInfo.m_strGlassID = ""; - akGlassInfo.m_nDefectNum = -1; - akGlassInfo.m_nReviewNum = -1; - akGlassInfo.m_strGlassJudge = ""; - akGlassInfo.m_strLotID = ""; - akGlassInfo.m_strSLotID = ""; - akGlassInfo.m_nSlot_No = -1; - akGlassInfo.m_nCellNum = -1; - akGlassInfo.m_nGlassSizeHeight = -1; - akGlassInfo.m_nGlassSizeWidth = -1; - - m_vecGlassInfo.push_back(akGlassInfo); -} - -void akDefectFormation::AddDefectHeaderTemp() -{ - _akReviewHeader akReviewHeader; - akReviewHeader.m_nDefectID = 0; - - m_vecHeaderTemp.push_back(akReviewHeader); -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/akDefectFormation.h b/ReviewHistory/ReveiwHistory/akDefectFormation.h deleted file mode 100644 index 56533b9..0000000 --- a/ReviewHistory/ReveiwHistory/akDefectFormation.h +++ /dev/null @@ -1,431 +0,0 @@ -#pragma once - -#include <vector> -#include "Singleton.h" - -struct _DefectDisplayOption //그냥 여기에 만들자..;; 해더 하나더 파기 귀찬.. -{ - _DefectDisplayOption() - { - m_bShowDefectNormal = TRUE; - m_bShowDefectGroupRound = TRUE; - m_bShowDefectGroupLine = TRUE; - m_bShowNoFilteredDefect = FALSE; - - m_nShowLabel = -1; - m_nShowSize = 0; - } - BOOL m_bShowDefectNormal; - BOOL m_bShowDefectGroupRound; - BOOL m_bShowDefectGroupLine; - BOOL m_bShowNoFilteredDefect; - - int m_nShowLabel; // 0보다 작으면 모두 보기 - int m_nShowSize; //해당값보다 작거나 같으면 제거 -}; - -struct _akDefect -{ - int nDefectID; - double dPositionX; - double dPositionY; - - int nLabel; - - int nSize; // - int nType;//0:black defect, 1:white defect - - int nGraySrc; - int nGrayTar; - int nGrayDiff; - - int nFilter;//1이면 제외 - //("SIZE_S"); - //("SIZE_W"); - //("SIZE_L"); - //("SIZE_H"); - //("DEFECT_CODE"); - //("DEF_AVG_1"); - //("REF_AVG_1"); - //("REF_GRAY_1"); - //("MASK_DEFECT"); - //("COMMON_DEFECT"); - //("XY_RATIO"); - //("CAM_NUM"); - //("LAMP_VALUE"); - CString m_strInfos[16]; - - short m_nDefectID; - short m_nCameraID; - short m_nScanIdx; - //short m_nDefectIdx; // 카메라에서의 결함 인덱스 - int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - - int m_nPixelConv; // pixel 단위 좌표 - int m_nPixelScan; // pixel 단위 좌표 - - short m_nPixelSize; // 결함크기 ---------------------------------PS - short/*SERVER_DefectType*/ m_DefectType; // 결함 타입 ---------------------------------DT - short/*SERVER_DefectSubType*/ m_DefectSubType; // 결함의 판정상태. - short/*SERVER_DefectBDType*/ m_DefectBDType; // 결함 타입 - Bright, Dark, Both - - short m_sPixelWidth; // 픽셀단위 결함 너비 - short m_sPixelHeight; // 픽셀단위 결함 높이 - short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN - short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX - short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA - short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN - short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX - short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA - short m_nLevelDiffMin; // 비교차 Min ---------------------------------DN - short m_nLevelDiffMax; // 비교차 Max ---------------------------------DX - short m_nLevelDiffAvg; // 비교차 Avg ---------------------------------DA - - int m_nDefectRScale; // 픽셀단위 결함 높이 -------------------------RS - short m_sThreshold; // 결함을 검출할 때의 Threshold - short m_sThresholdAvg; // 결함을 검출할 때의 Threshold AVG - short m_sDefectPeak; // 결함의 Peak. - short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 요청사항 - - int m_nPixelGlassStart; // Glass 시작 픽셀 - short m_sDefectLoc; - - short m_sZonePixelCount[16]; // Zone별 결함 Pixel 수 - short m_sZoneValueMin[16]; // Zone별 결함 Min - short m_sZoneValueMax[16]; // Zone별 결함 Max - short m_sZoneValueAvg[16]; // Zone별 결함 Avg - short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF - - //210127 CJH - Zone별 Source Gray 입력 - short m_sZoneValueSrcMin[16]; // Zone별 Source Min - short m_sZoneValueSrcMax[16]; // Zone별 Source Max - short m_sZoneValueSrcAvg[16]; // Zone별 Source Avg - - int m_nUMOriginX; // um단위 x좌표 (원점기준) - int m_nUMOriginY; // um단위 y조표 (원점기준) - int m_nUMCenterAlignX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 후) - int m_nUMCenterAlignY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) - int m_nUMCenterX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 전) - int m_nUMCenterY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 전) - int m_nUMSizeX; // um단위 X 크기 -----------------------------UX - int m_nUMSizeY; // um단위 Y 크기 -----------------------------UY - int m_nUMSize; // um단위 크기. - CRect m_RectUM; // 디펙 센터 기준 사각형. - - short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 결함 크기 종류enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; - short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak의 종류. - short/*Judgement*/ m_DefectJudgement; // 결함 판정. - BOOL m_bDefectCutoff; // 컷 오프 디펙(TRUE= Cutoff, FALSE) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16등분 구분 - int m_nPadRegionIdx; // PAD 영역 인덱스 - - int m_nUMCellX; // 셀 원점 기준 x 좌표 - int m_nUMCellY; // 셀 원점 기준 y 좌표 - short m_nModelIdx; // 몇 번째 모델인가? - short m_nCellIdx; // 몇번째 셀인가? - short m_nCellGate; // 셀별 Gate라인(얼라인 보정 전) - short m_nCellData; // 셀별 Data라인(얼라인 보정 전) - short m_nCellGateAlign; // 셀별 Gate라인(얼라인 보정 후) - short m_nCellDataAlign; // 셀별 Data라인(얼라인 보정 후) - - int m_nUMShotX; // 샷 기준 X좌표 - int m_nUMShotY; // 샷 기준 Y좌표 - short m_nMaskDefectIdx; // 한 Glass에서 발견된 마스크결함 묶음의 인덱스. - short m_nShotIdx; // 노광샷 번호 - short m_nMatchShotCount; // 동일한 마스크 결함의 수. - short m_nMatchMaxSize; // 동일한 마스크 중 가장 큰 결함의 크기. - - short m_nRepeatCount; // 연속결함발견위한 동일좌표 반복수 - short m_nMaskRepeatCount; - int m_StackInfo; // Stack Flag - BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. - short m_nStackStepCount; // Stack 수 - short m_nStackColorIdx; // Color를 선택하는 인덱스. - //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes - char m_strUnitID[16]; // 유닛아이디 - - int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류 알고리즘 적용 결과. - int m_nAtomWidth; // TFE 핵 너비 - int m_nAtomHeight; // TFE 핵 높이 - short/*ReKind*/ m_DefectKind; // 결함 종류 - - char m_strDefectCode[32]; // Defect Code - BOOL m_bMergeState; // Merge Status - char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - CString m_strReviewImageName; - int m_nDefectMerge; // 현재 디펙의 머지 여부 - - int m_nPixelSizeOrigin; - int m_nScratchRatio; - int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] - - char m_strDefectName[16]; - char m_strDefectType[16]; - - double m_dScanResolution; - double m_dConvResolution; - - int m_nAngle; // 각도 - int m_nMajor; // 장축 길이(Long) - int m_nMinor; // 단축 길이(Short) - int m_nCompact; // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율 - int m_nThickness; // Blob 넓이와 장축의 비율 (Area / Major) - - short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? - int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - - BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 -}; - -struct _akModule -{ - int m_nModuleIndex; - int m_nUMShotX; // 샷 기준 X좌표 - int m_nUMShotY; // 샷 기준 Y좌표 - int m_nShotIndex; -}; - -struct _akShort -{ - int m_nUMShotX; // 샷 기준 X좌표 - int m_nUMShotY; // 샷 기준 Y좌표 - int m_nShotIndex; -}; - -struct _akReviewList -{ - short m_nDefectID; - int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nReviewIdx; - char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - CString m_strReviewImageName; - CString m_strGlassID; - char m_strAoiImagePath[256]; - char m_strReviewImagePath[256]; - char m_strAlignFirst[64]; - char m_strAlignSecond[64]; - - CString m_strInfos[16]; -}; - -struct _akGlassInfo -{ - int m_nGlassSelect; - CString m_strPPID; - CString m_strGlassID; - int m_nDefectNum; - int m_nReviewNum; - CString m_strGlassJudge; - CString m_strLotID; - CString m_strSLotID; - int m_nSlot_No; - int m_nCellNum; - int m_nGlassSizeHeight; - int m_nGlassSizeWidth; - - CString m_strInfos[16]; -}; - -struct _akReviewHeader -{ - short m_nDefectID; - int m_nDefectIdx; - CString m_strGlassID; - CString m_strPPID; - int m_nReviewIdx; - CString m_strJudge; - CString m_strFileTime; - CString m_strFileName; - CString m_strLoading; - CString m_strFilePath; - - CString m_strInfos[16]; -}; - -struct _akFormation -{ - _akFormation() - { - m_nFormLabel = -1; - m_nFormType = 0; - m_dRectLeft = 0; - m_dRectTop = 0; - m_dRectRight = 0; - m_dRectBottom = 0; - } - void MergeDefect(_akDefect* pDefect) - { - if (!m_vecForms.empty()) - { - if(m_dRectLeft > pDefect->dPositionX) m_dRectLeft = pDefect->dPositionX; - if(m_dRectRight < pDefect->dPositionX) m_dRectRight = pDefect->dPositionX; - - if (m_dRectTop > pDefect->dPositionY) m_dRectTop = pDefect->dPositionY; - if (m_dRectBottom < pDefect->dPositionY) m_dRectBottom = pDefect->dPositionY; - } - else - { - m_dRectRight = m_dRectLeft = pDefect->dPositionX; - m_dRectTop = m_dRectBottom = pDefect->dPositionY; - } - m_vecForms.push_back(pDefect); - } - void AnalysisDefectInfo() - { - m_nDefectNumS=0; - m_nDefectNumM=0; - m_nDefectNumL=0; - m_nDefectNum1Px=0; - m_nDefectNumWhite=0; - m_nDefectNumBlack=0; - m_nDefectNum1PxWhite = 0; - m_dSizeAvg = 0; - m_dSizeStdDev = 0; - m_dDiffStdDev = 0; - m_dDiffStdDevAbs = 0; - - double dDiffAvg=0; - double dDiffAvgAbs=0; - - _akDefect* pDefect; - for (int i = 0; i < m_vecForms.size(); i++) - { - pDefect = m_vecForms[i]; - - if (pDefect->nSize >= 5) m_nDefectNumL++; - else if (pDefect->nSize >= 2) m_nDefectNumM++; - else if (pDefect->nSize >= 0) m_nDefectNumS++; - - if (pDefect->nSize == 1) m_nDefectNum1Px++; - - if (pDefect->nType == 1) m_nDefectNumWhite++; - else m_nDefectNumBlack++; - - if (pDefect->nType == 1 && pDefect->nSize == 1) m_nDefectNum1PxWhite++; - - m_dSizeAvg += (double)pDefect->nSize; - dDiffAvg += (double)pDefect->nGrayDiff; - dDiffAvgAbs += abs((double)pDefect->nGrayDiff); - } - m_dSizeAvg /= m_vecForms.size(); - dDiffAvg /= m_vecForms.size(); - dDiffAvgAbs /= m_vecForms.size(); - - for (int i = 0; i < m_vecForms.size(); i++) - { - pDefect = m_vecForms[i]; - double dDiff = m_dSizeAvg - m_vecForms[i]->nSize; - m_dSizeStdDev += dDiff * dDiff; - - dDiff = dDiffAvg - m_vecForms[i]->nGrayDiff; - m_dDiffStdDev += dDiff * dDiff; - - dDiff = dDiffAvgAbs - abs((double)pDefect->nGrayDiff); - m_dDiffStdDevAbs += dDiff * dDiff; - } - m_dSizeStdDev = sqrt(m_dSizeStdDev / (double)m_vecForms.size()); - m_dDiffStdDev = sqrt(m_dDiffStdDev / (double)m_vecForms.size()); - m_dDiffStdDevAbs = sqrt(m_dDiffStdDevAbs / (double)m_vecForms.size()); - - int nFilter = FALSE; - { - double d1PxRate = 100.0*((double)m_nDefectNum1Px / (double)m_vecForms.size()); - double d1PxWhiteRate = 100.0*((double)m_nDefectNum1PxWhite/(double)m_vecForms.size()); - - - if (m_nFormType == 0 && d1PxWhiteRate > 50) - { - nFilter = TRUE; - } - if (m_nFormType == 1 && d1PxWhiteRate > 30) - { - nFilter = TRUE; - } - if (m_dSizeStdDev == 0) - { - nFilter = TRUE; - } - if(d1PxRate>50) - { - nFilter = TRUE; - } - - } - - if (nFilter) - { - for (int i = 0; i < m_vecForms.size(); i++) - { - pDefect = m_vecForms[i]; - pDefect->nFilter = 1; - } - } - - m_nFormJudge = nFilter; - } - - std::vector<_akDefect*> m_vecForms; - - int m_nFormJudge; //0:Normal, 1:Nodefect - int m_nFormLabel; - int m_nFormType; //-1:none, 0:round, 1:line - double m_dRectLeft; - double m_dRectTop; - double m_dRectRight; - double m_dRectBottom; - - //분석 데이터들 [김태현2021/2/22] - double m_dSizeAvg; - double m_dSizeStdDev; - int m_nDefectNumS; - int m_nDefectNumM; - int m_nDefectNumL; - int m_nDefectNum1Px; - int m_nDefectNumWhite; - int m_nDefectNumBlack; - int m_nDefectNum1PxWhite; - - double m_dDiffStdDev; //그레이 차이 표준편차 - double m_dDiffStdDevAbs; //그레이 차이 절대값 표준편차 -}; - - -class akDefectFormation : public CSingleton< akDefectFormation > -{ -public: - akDefectFormation(); - virtual ~akDefectFormation(); - -public: - void Clear(); - void AddDefect(double dPosX, double dPosY); - void AddDefectTemp(double dPosX, double dPosY); - void AddDefect2(); - void AddDefectImageTemp(); - void AddDefectImage(); - void AddGlassInfo(); - void AddDefectHeaderTemp(); - -public: - std::vector<_akDefect> m_vecDefects; - std::vector<_akDefect> m_vecTempDefects; - std::vector<_akFormation> m_vecFormation; - std::vector<_akReviewList> m_vecImage; - std::vector<_akReviewList> m_vecTempImage; - std::vector<_akReviewHeader> m_vecHeader; - std::vector<_akReviewHeader> m_vecHeaderTemp; - std::vector<_akGlassInfo> m_vecGlassInfo; - - std::vector<_akDefect> m_vecPath1; - std::vector<_akDefect> m_vecPath2; - std::vector<_akDefect> m_vecPath3; - std::vector<_akDefect> m_vecPath4; - std::vector<_akDefect> m_vecPath5; - std::vector<_akDefect> m_vecPath6; - -public: - std::vector< std::vector<_akDefect > > m_vecMoudle; -}; - - diff --git a/ReviewHistory/ReveiwHistory/akFormationMap.cpp b/ReviewHistory/ReveiwHistory/akFormationMap.cpp deleted file mode 100644 index 323c097..0000000 --- a/ReviewHistory/ReveiwHistory/akFormationMap.cpp +++ /dev/null @@ -1,1190 +0,0 @@ -#include "stdafx.h" -#include "akFormationMap.h" - - -CakFormationMap::CakFormationMap() -{ - { - CakGraphBase::setAK(); - m_AxisX.m_Size = 80; - m_AxisX.m_TickGabStep = 1; - m_AxisX.m_MinorTickNum = 4; - m_AxisY.m_MinorTickNum = 4; - //m_AxisX.m_TickGabPixel = 30; - //m_AxisX.m_FontTick.DeleteObject(); - //m_AxisX.m_FontTick.CreatePointFont(120, _T("Tahoma")); - //m_AxisX.SetRotateFont(&m_AxisX.m_FontTick, 270); - m_AxisY.SetRotateFont(&m_AxisY.m_FontTick, 90); - m_AxisY2.SetRotateFont(&m_AxisY2.m_FontTick, 270); - SetClossLine(false); - SetDragStyle(DS_All_HOR); - m_bGrid = false; - - m_AxisY.m_TickGabPixel = 70; - m_AxisX.m_Size = 20; - m_AxisY.m_Size = 20; - m_AxisY2.m_Size = 20; - m_Title.m_Size = 20; - - m_AxisX.m_strTitle = ""; - m_AxisY.m_strTitle = ""; - m_Title.m_strTitle = " "; - - m_MouseMoveInfo.m_nType = 0; - } - - m_bShowCell = TRUE; - - - m_bShowGroupIndex = FALSE; - m_bShowGroupLine = TRUE; - - m_pDefectFormation = NULL; - m_dGlassSizeWidth = 2500; - m_dGlassSizeHeight = 2300; - - m_bShowDefectOutLine = TRUE; - m_bShowDefectColorType = FALSE; - - m_pSelectedFormation = NULL; - m_pMouseOveredDefect = NULL; - m_pSelectedDefect = NULL; - m_pMouseOveredFormation = NULL; -} - - -CakFormationMap::~CakFormationMap() -{ -} - -void CakFormationMap::RenderSeries(Graphics* grfx, CDC* pDC) -{ - renderGlass(pDC); - renderCell(pDC); - - renderDefects(pDC); - renderDefectsPath(pDC); - - renderFormations(pDC); -} - -void CakFormationMap::SetAutoScale() -{ - CakGraphBasic3::SetAutoScale(); - - if (1)//글라스 크기 및 그리기 방향 결정 태현[2016/3/23] - { - double nGlassSizeX = m_dGlassSizeWidth; - double nGlassSizeY = m_dGlassSizeHeight; - - double dWindowRate = (double)m_rectData.Width() / (double)m_rectData.Height(); - double dValueRate = (double)nGlassSizeX / (double)nGlassSizeY; - - if (dWindowRate < dValueRate)//가로풀 기준 태현[2016/3/25] - { - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = nGlassSizeX; - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = (float)nGlassSizeX*((float)m_rectData.Height() / (float)m_rectData.Width()); - m_AxisY.SetRangePos(nGlassSizeY / 2); - - - } - else //세로풀기준 태현[2016/3/25] - { - - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = (float)nGlassSizeY*((float)m_rectData.Width() / (float)m_rectData.Height()); - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = nGlassSizeY; - - m_AxisX.SetRangePos(nGlassSizeX / 2); - } - - //0,0이 중앙에 오도록 [김태현2021/2/16] - m_AxisX.SetRangePos(0); - m_AxisY.SetRangePos(0); - } -} - -void CakFormationMap::SetResize() -{ - CakGraphBasic3::SetAutoScale(); - - if (1)//글라스 크기 및 그리기 방향 결정 태현[2016/3/23] - { - double nGlassSizeX = m_dGlassSizeWidth; - double nGlassSizeY = m_dGlassSizeHeight; - - double dWindowRate = (double)m_rectData.Width() / (double)m_rectData.Height(); - double dValueRate = (double)nGlassSizeX / (double)nGlassSizeY; - - double dPosOldX = m_AxisX.m_RangeValueMin + m_AxisX.GetRangeValue()/2.0; - double dPosOldY = m_AxisY.m_RangeValueMin + m_AxisY.GetRangeValue() / 2.0; - if (dWindowRate < dValueRate)//가로풀 기준 태현[2016/3/25] - { - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = nGlassSizeX; - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = (float)nGlassSizeX*((float)m_rectData.Height() / (float)m_rectData.Width()); - m_AxisY.SetRangePos(nGlassSizeY / 2); - - - } - else //세로풀기준 태현[2016/3/25] - { - - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = (float)nGlassSizeY*((float)m_rectData.Width() / (float)m_rectData.Height()); - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = nGlassSizeY; - - m_AxisX.SetRangePos(nGlassSizeX / 2); - } - - m_AxisX.SetRangePos(dPosOldX); - m_AxisY.SetRangePos(dPosOldY); - } -} - -void CakFormationMap::OnMouseInput(akMouseEvent mouseevent, CPoint point) -{ - CakGraphBasic3::OnMouseInput(mouseevent, point); - - switch (mouseevent) - { - case MouseMove: - { - m_pMouseOveredDefect = findDefect(GetValuePosDataX(point.x), GetValuePosDataY(point.y)); - if(m_pMouseOveredDefect) GetParent()->PostMessage(UM_FORMMAP_DEFECTMOUSEOVER, m_pMouseOveredDefect->m_nDefectID); - //else GetParent()->PostMessage(UM_FORMMAP_DEFECTMOUSEOVER, m_pMouseOveredDefect->nDefectID); - - m_pMouseOveredFormation = findFormation(GetValuePosDataX(point.x), GetValuePosDataY(point.y)); - //if (m_pMouseOveredFormation) GetParent()->PostMessage(UM_FORMMAP_FORMMOUSEOVER, m_pMouseOveredFormation->m_nFormLabel); - break; - } - case MouseLeftButtonDown: - { - m_pSelectedDefect = findDefect(GetValuePosDataX(point.x), GetValuePosDataY(point.y)); - if (m_pSelectedDefect) GetParent()->PostMessage(UM_FORMMAP_DEFECTSELECT, m_pSelectedDefect->m_nDefectID, 0); - - m_pSelectedFormation = findFormation(GetValuePosDataX(point.x), GetValuePosDataY(point.y)); - if (m_pMouseOveredFormation) GetParent()->PostMessage(UM_FORMMAP_DEFECTSELECT, m_pMouseOveredFormation->m_nFormLabel, 1); - - - break; - } - } -} -void CakFormationMap::OnKeyInput(int key, int mode) -{ - CakGraphBasic3::OnKeyInput(key, mode); - - if (mode == 0) return; - - switch (key) - { - case 'G': - { - m_bGrid = !m_bGrid; - ReDraw(true); - break; - } - } -} -_akDefect* CakFormationMap::findDefect(double nPosX, double nPosY) -{ - if (!m_pDefectFormation) - return NULL; - - _akDefect* pDefect; - - double nInPosRage = 1; - nInPosRage =(abs(GetValuePosDataX(nInPosRage) - GetValuePosDataX(0))); - CakRectd rectMousePos; - rectMousePos.set(nPosX, nPosY, nPosX, nPosY); - rectMousePos.InflateRect(nInPosRage*3, nInPosRage*5, nInPosRage*5, nInPosRage*3); - - int nFormType; - int nFormLabel; - - double dMinDistance; - _akDefect* pDefectMin = NULL; - //속도 신경안쓰고 구현;;기능이 우선이다~ [김태현2021/2/16] - for (int i = 0; i < m_pDefectFormation->m_vecDefects.size(); i++) - { - { - pDefect = &m_pDefectFormation->m_vecDefects[i]; - - nFormType = -1; - nFormLabel = m_pDefectFormation->m_vecDefects[i].nLabel; - - if (nFormLabel >= 0) - { - nFormType = m_pDefectFormation->m_vecFormation[nFormLabel].m_nFormType; - } - - if (m_pDefectDisplayOption->m_nShowSize) - { - if (pDefect->nSize <= m_pDefectDisplayOption->m_nShowSize) continue; - } - if (m_pDefectDisplayOption->m_bShowDefectNormal == FALSE) - { - if (nFormType < 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupRound == FALSE) - { - if (nFormType == 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupLine == FALSE) - { - if (nFormType == 1) continue;; - } - if (m_pDefectDisplayOption->m_nShowLabel >= 0) - { - if (nFormLabel != m_pDefectDisplayOption->m_nShowLabel) continue;; - } - } - if (rectMousePos.getCheckAreaIn(m_pDefectFormation->m_vecDefects[i].dPositionX, m_pDefectFormation->m_vecDefects[i].dPositionY)) - { - double dMinDistanceNew = - (m_pDefectFormation->m_vecDefects[i].dPositionX - rectMousePos.getCenter()) * (m_pDefectFormation->m_vecDefects[i].dPositionX - rectMousePos.getCenter()) - + (m_pDefectFormation->m_vecDefects[i].dPositionY - rectMousePos.getVCenter()) * (m_pDefectFormation->m_vecDefects[i].dPositionY - rectMousePos.getVCenter()) ; - if (pDefectMin) - { - if (dMinDistance < dMinDistanceNew) - { - pDefectMin = &m_pDefectFormation->m_vecDefects[i]; - dMinDistance = dMinDistanceNew; - } - } - else - { - pDefectMin = &m_pDefectFormation->m_vecDefects[i]; - dMinDistance = dMinDistanceNew; - break; - } - - } - } - - return pDefectMin; -} - -_akFormation* CakFormationMap::findFormation(double nPosX, double nPosY) -{ - if (!m_pDefectFormation) - return NULL; - - _akFormation* pFormation = NULL; - _akFormation* pFormationRetrun = NULL; - - CakRectd rectForm; - - int nFormType; - int nFormLabel; - - double dMinDistance; - //속도 신경안쓰고 구현;;기능이 우선이다~ [김태현2021/2/16] - for (int i = 0; i < m_pDefectFormation->m_vecFormation.size(); i++) - { - { - pFormation = &m_pDefectFormation->m_vecFormation[i]; - - nFormType = pFormation->m_nFormType; - nFormLabel = i; - - if (nFormLabel >= 0) - { - nFormType = m_pDefectFormation->m_vecFormation[nFormLabel].m_nFormType; - } - -// if (m_pDefectDisplayOption->m_nShowSize) -// { -// if (pFormation->nSize <= m_pDefectDisplayOption->m_nShowSize) continue; -// } - if (m_pDefectDisplayOption->m_bShowDefectNormal == FALSE) - { - if (nFormType < 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupRound == FALSE) - { - if (nFormType == 0) continue;; - } - if (m_pDefectDisplayOption->m_bShowDefectGroupLine == FALSE) - { - if (nFormType == 1) continue;; - } - if (m_pDefectDisplayOption->m_nShowLabel >= 0) - { - if (nFormLabel != m_pDefectDisplayOption->m_nShowLabel) continue;; - } - } - - rectForm.set( - GetWindowPosX(pFormation->m_dRectLeft), - GetWindowPosY(pFormation->m_dRectTop), - GetWindowPosX(pFormation->m_dRectRight), - GetWindowPosY(pFormation->m_dRectBottom) - ); - - rectForm.NormalizeRect(); - rectForm.InflateRect(4, 4, 5, 5); - - if (rectForm.getCheckAreaIn(GetWindowPosX(nPosX), GetWindowPosY(nPosY))) - { - double dMinDistanceNew = min(abs(GetWindowPosX(nPosX) - rectForm.getCenter()), abs(GetWindowPosY(nPosY) - rectForm.getVCenter())); - - if (pFormationRetrun) - { - if (dMinDistanceNew < dMinDistance) - { - pFormationRetrun = pFormation; - dMinDistance = dMinDistanceNew; - } - - } - else - { - pFormationRetrun = pFormation; - dMinDistance = dMinDistanceNew; - } - - } - } - - return pFormationRetrun; -} - -void CakFormationMap::setSelectDefect(int nDefectID) -{ - for (int i = 0; i < m_pDefectFormation->m_vecDefects.size(); i++) - { - if (m_pDefectFormation->m_vecDefects[i].m_nDefectID == nDefectID) - { - m_pSelectedDefect = &m_pDefectFormation->m_vecDefects[i]; - break; - } - } - ReDraw(false); -} - -void CakFormationMap::setSelectForm(int nFormID) -{ - for (int i = 0; i < m_pDefectFormation->m_vecFormation.size(); i++) - { - if (m_pDefectFormation->m_vecFormation[i].m_nFormLabel == nFormID) - { - m_pSelectedFormation = &m_pDefectFormation->m_vecFormation[i]; - break; - } - } - ReDraw(false); -} -void CakFormationMap::renderGlass(CDC* pDC) -{ - double nGlassSizeX = m_dGlassSizeWidth; - double nGlassSizeY = m_dGlassSizeHeight; - - - CBrush BrushGlass, *pOldBrush; - BrushGlass.CreateSolidBrush(RGB(255,255,255)); - - - CakRectd rectGlass; - rectGlass.set(0, 0, nGlassSizeX, nGlassSizeY); - rectGlass.MoveToXY(-nGlassSizeX / 2, -nGlassSizeY / 2); - - //글라스 외각선 그리기 태현[2016/3/23] - { - pOldBrush = (CBrush*)pDC->SelectObject(&BrushGlass); - CPen pen; - pen.CreatePen(PS_SOLID, 1, RGB(64, 191, 79)); - pDC->SelectObject(&pen); - - pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top)); - pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY(rectGlass.top)); - pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY(rectGlass.bottom)); - pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.bottom)); - pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top)); - - pDC->SelectObject(&pOldBrush); - } -} - -void CakFormationMap::renderCell(CDC* pDC) -{ - if (m_vecCellRect.empty() || m_bShowCell == FALSE) return; - - CBrush BrushGlass, *pOldBrush; - BrushGlass.CreateSolidBrush(RGB(225, 225, 225)); - - pOldBrush = (CBrush*)pDC->SelectObject(&BrushGlass); - CPen pen; - pen.CreatePen(PS_SOLID, 1, RGB(242, 104, 13)); - pDC->SelectObject(&pen); - - CakRectd rectCell; - // - for(int i=0; i<m_vecCellRect.size(); i++) - { - rectCell = m_vecCellRect[i]; - - - pDC->MoveTo(GetWindowPosX(rectCell.left), GetWindowPosY(rectCell.top)); - pDC->LineTo(GetWindowPosX(rectCell.right), GetWindowPosY(rectCell.top)); - pDC->LineTo(GetWindowPosX(rectCell.right), GetWindowPosY(rectCell.bottom)); - pDC->LineTo(GetWindowPosX(rectCell.left), GetWindowPosY(rectCell.bottom)); - pDC->LineTo(GetWindowPosX(rectCell.left), GetWindowPosY(rectCell.top)); - - - } - - pDC->SelectObject(&pOldBrush); -} - -void CakFormationMap::renderDefects(CDC* pDC) -{ - if (m_pDefectFormation == NULL) return; - - CBrush BrushDefect, *pOldBrush; - CPen PenDefect, *pOldPen; - CBrush BrushRoundForm; - CBrush BrushLineForm; - CBrush BrushFiltered; - PenDefect.CreatePen(PS_SOLID, 1, RGB(50, 50, 50)); - BrushDefect.CreateSolidBrush(RGB(96, 159, 255)); - - BrushRoundForm.CreateSolidBrush(RGB(234, 43, 36)); - BrushLineForm.CreateSolidBrush(RGB(70, 161, 70)); - BrushFiltered.CreateSolidBrush(RGB(200,200,200)); - pOldPen = pDC->SelectObject(&PenDefect); - pOldBrush = pDC->SelectObject(&BrushDefect); - - if(m_bShowDefectOutLine == FALSE) pDC->SelectStockObject(NULL_PEN); - - CakRectd rectDefect; - rectDefect.set(0, 0, 5, 5); - - for (int i = 0; i < m_pDefectFormation->m_vecDefects.size(); i++) - { - _akDefect* pDefect = &m_pDefectFormation->m_vecDefects[i]; - - rectDefect.set(GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY), - GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY)); - rectDefect.InflateRect(3, 3, 3, 3); - - if (m_pDefectDisplayOption->m_nShowSize) - { - if(pDefect->nSize <= m_pDefectDisplayOption->m_nShowSize) continue; - } - if (m_pDefectDisplayOption->m_nShowLabel >= 0) - { - if(pDefect->nLabel != m_pDefectDisplayOption->m_nShowLabel) continue; - } - if (m_pDefectDisplayOption->m_bShowNoFilteredDefect == TRUE) - { - if (pDefect->nFilter == 1) continue; - } - if (pDefect->nLabel < 0) - { - if (m_pDefectDisplayOption->m_bShowDefectNormal) - { - pDC->SelectObject(&BrushDefect); - if (pDefect->nFilter == 1) pDC->SelectObject(&BrushFiltered); - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - - } - - } - else - { - pDC->SelectObject(&BrushDefect); - int nFormType = 0; - nFormType = m_pDefectFormation->m_vecFormation[pDefect->nLabel].m_nFormType; - if (nFormType == 0) //일반군집 [김태현2021/2/16] - { - if (m_pDefectDisplayOption->m_bShowDefectGroupRound) - { - pDC->SelectObject(&BrushRoundForm); - if(m_bShowDefectColorType) pDC->SelectObject(&BrushDefect); - if(pDefect->nFilter==1) pDC->SelectObject(&BrushFiltered); - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - } - - } - else if (nFormType == 1) //라인군입 [김태현2021/2/16] - { - if (m_pDefectDisplayOption->m_bShowDefectGroupLine) - { - pDC->SelectObject(&BrushLineForm); - if (m_bShowDefectColorType) pDC->SelectObject(&BrushDefect); - if (pDefect->nFilter == 1) pDC->SelectObject(&BrushFiltered); - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - } - - } - } - - } - - if (m_bShowGroupIndex) - { - CString strLabel; - pDC->SetTextColor(RGB(111, 0, 138)); - pDC->SetTextAlign(TA_BASELINE | TA_CENTER); - - for (int k = 0; k < m_pDefectFormation->m_vecFormation.size(); k++) - { - _akFormation* pFormation = &m_pDefectFormation->m_vecFormation[k]; - - for (int i = 0; i < pFormation->m_vecForms.size(); i++) - { - _akDefect* pDefect = pFormation->m_vecForms[i]; - if (pDefect->nLabel >= 0) - { - strLabel.Format("%d", pDefect->nLabel); - pDC->TextOut(GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY), strLabel); - } - } - } - - } - - pDC->SelectObject(pOldPen); - pDC->SelectObject(pOldBrush); - -} - -void CakFormationMap::renderDefectsPath(CDC* pDC) -{ - if (!m_pDefectFormation) return; - - if (m_pDefectFormation->m_vecDefects.size() == 0) return; - - int nStartPosX, nStartPosY, nEndPosX, nEndPosY; - - CPen pathPen; - CPen *pOldPen = NULL; - - pathPen.CreatePen(PS_DOT, 1, RGB(0, 0, 255)); - - CakRectd rectDefectPath; - - //전체에서 모듈 순서 확인 해서 정렬 - //모듈 순서에서 short 순서에 따라 정렬 - //순서대로 넣어 준다. - m_pDefectFormation->m_vecPath1.clear(); - m_pDefectFormation->m_vecPath2.clear(); - m_pDefectFormation->m_vecPath3.clear(); - m_pDefectFormation->m_vecPath4.clear(); - m_pDefectFormation->m_vecPath5.clear(); - m_pDefectFormation->m_vecPath6.clear(); - - //short index 순서 대로 가져 오면 되는 거 아닌가? - //분류 작업을 해야 한다 - for (int i = 0; i < m_pDefectFormation->m_vecDefects.size(); i++) - { - //1, 모듈 순서에 따라서 정렬 해 보자 - _akDefect* pDefect = &m_pDefectFormation->m_vecDefects[i]; - //_akDefect* pDefect1 = &m_pDefectFormation->m_vecPath1[i]; - - if (pDefect->m_nModelIdx == 0) - { - m_pDefectFormation->m_vecPath1.push_back(m_pDefectFormation->m_vecDefects[i]); - } - else if (pDefect->m_nModelIdx == 1) - { - m_pDefectFormation->m_vecPath2.push_back(m_pDefectFormation->m_vecDefects[i]); - } - else if (pDefect->m_nModelIdx == 2) - { - m_pDefectFormation->m_vecPath3.push_back(m_pDefectFormation->m_vecDefects[i]); - } - else if (pDefect->m_nModelIdx == 3) - { - m_pDefectFormation->m_vecPath4.push_back(m_pDefectFormation->m_vecDefects[i]); - } - else if (pDefect->m_nModelIdx == 4) - { - m_pDefectFormation->m_vecPath5.push_back(m_pDefectFormation->m_vecDefects[i]); - } - else if (pDefect->m_nModelIdx == 5) - { - m_pDefectFormation->m_vecPath6.push_back(m_pDefectFormation->m_vecDefects[i]); - } - } - - //분류 작업이 완료 되면 모듈 갯수 만큼 다시 sort 후 순서대로 그린다 - int nS = 0, nS2 = 0, nS3 = 0, nS4 = 0, nS5=0, nS6 = 0; - - bool bNext = false, bNext2 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath1.size(); i++) - { - //모듈에 들어 있는 값을 sort 하자 - //sort한 것을 그린다. - bNext = false, bNext2 = false; - int nStart = -1, nEnd = -1; - - for (int j = 0; j < m_pDefectFormation->m_vecPath1.size(); j++) - { - _akDefect* pDefect1 = &m_pDefectFormation->m_vecPath1[j]; - - if (pDefect1->m_nShotIdx == nS) - { - nStart = j; - bNext = true; - } - else if (pDefect1->m_nShotIdx == nS + 1) - { - nEnd = j; - bNext2 = true; - } - else if (bNext == true && bNext2 == true) - { - break; - } - else - { - continue; - } - } - - if (bNext == true && bNext2 == true) - { - nS++; - } - - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath1[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath1[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - - bool bNext3 = false, bNext4 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath2.size(); i++) - { - int nStart = -1, nEnd = -1; - bNext3 = false, bNext4 = false; - - for (int j = 0; j < m_pDefectFormation->m_vecPath2.size(); j++) - { - _akDefect* pDefect2 = &m_pDefectFormation->m_vecPath2[j]; - - if (pDefect2->m_nShotIdx == nS2) - { - nStart = j; - bNext3 = true; - } - else if (pDefect2->m_nShotIdx == nS2 + 1) - { - nEnd = j; - bNext4 = true; - } - else if (bNext3 == true && bNext4 == true) - { - break; - } - else - { - continue; - } - } - - if (bNext3 == true && bNext4 == true) - { - nS2++; - } - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath2[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath2[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - - bool bNext5 = false, bNext6 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath3.size(); i++) - { - int nStart = -1, nEnd = -1; - bNext5 = false, bNext6 = false; - - for (int j = 0; j < m_pDefectFormation->m_vecPath3.size(); j++) - { - _akDefect* pDefect3 = &m_pDefectFormation->m_vecPath3[j]; - - if (pDefect3->m_nShotIdx == nS3) - { - nStart = j; - bNext5 = true; - } - else if (pDefect3->m_nShotIdx == nS3 + 1) - { - nEnd = j; - bNext6 = true; - } - else if (bNext5 == true && bNext6 == true) - { - break; - } - else - { - continue; - } - } - - - //sort한 것을 그린다. - if (bNext5 == true && bNext6 == true) - { - nS3++; - } - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath3[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath3[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - - bool bNext7 = false, bNext8 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath4.size(); i++) - { - int nStart = -1, nEnd = -1; - bNext7 = false, bNext8 = false; - - for (int j = 0; j < m_pDefectFormation->m_vecPath4.size(); j++) - { - _akDefect* pDefect4 = &m_pDefectFormation->m_vecPath4[j]; - - if (pDefect4->m_nShotIdx == nS4) - { - nStart = j; - bNext7 = true; - } - else if (pDefect4->m_nShotIdx == nS4 + 1) - { - nEnd = j; - bNext8 = true; - } - else if (bNext7 == true && bNext8 == true) - { - break; - } - else - { - continue; - } - } - - if (bNext7 == true && bNext8 == true) - { - nS4++; - } - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath4[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath4[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - - bool bNext9 = false, bNext10 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath5.size(); i++) - { - int nStart = -1, nEnd = -1; - bNext9 = false, bNext10 = false; - for (int j = 0; j < m_pDefectFormation->m_vecPath5.size(); j++) - { - _akDefect* pDefect5 = &m_pDefectFormation->m_vecPath5[j]; - - if (pDefect5->m_nShotIdx == nS5) - { - nStart = j; - bNext9 = true; - } - else if (pDefect5->m_nShotIdx == nS5 + 1) - { - nEnd = j; - bNext10 = true; - } - else if (bNext9 == true && bNext10 == true) - { - break; - } - else - { - continue; - } - } - - if (bNext9 == true && bNext10 == true) - { - nS5++; - } - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath5[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath5[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - - bool bNext11 = false, bNext12 = false; - - for (int i = 0; i < m_pDefectFormation->m_vecPath6.size(); i++) - { - int nStart = -1, nEnd = -1; - bNext11 = false, bNext12 = false; - - for (int j = 0; j < m_pDefectFormation->m_vecPath6.size(); j++) - { - _akDefect* pDefect6 = &m_pDefectFormation->m_vecPath6[j]; - - if (pDefect6->m_nShotIdx == nS6) - { - nStart = j; - bNext11 = true; - } - else if (pDefect6->m_nShotIdx == nS6 + 1) - { - nEnd = j; - bNext12 = true; - } - else if (bNext11 == true && bNext12 == true) - { - break; - } - else - { - continue; - } - } - - if (bNext11 == true && bNext12 == true) - { - nS6++; - } - if (nStart == -1) return; - if (nEnd == -1) nEnd = nStart; - - _akDefect* pDefectStart = &m_pDefectFormation->m_vecPath6[nStart]; - _akDefect* pDefectEnd = &m_pDefectFormation->m_vecPath6[nEnd]; - - pDC->MoveTo(GetWindowPosX(pDefectStart->dPositionX), GetWindowPosY(pDefectStart->dPositionY)); - pDC->LineTo(GetWindowPosX(pDefectEnd->dPositionX), GetWindowPosY(pDefectEnd->dPositionY)); - } - -/* SortingtoMoudle();*/ - -/* _akDefect* pDefect = &m_pDefectFormation->m_vecDefects[i];*/ - - //pDefect->m_nShotIdx 1 인것과 2인 것을 찾아서 1인 것은 start 2인것은 end 네? - - //m_nshortidx 에 모듈이 먼지를 알아야 겠네? pDefect->m_nModelIdx 이걸로 알 수 있네? - //m_nShortidx 에 시작은 있고 끝이 없다면 종료 - -// if (pDefect->m_nShotIdx == i) -// { -// pDC->MoveTo(GetWindowPosX(rectDefectPath.left), GetWindowPosY(rectDefectPath.top)); -// pDC->LineTo(GetWindowPosX(rectDefectPath.right), GetWindowPosY(rectDefectPath.top)); -// -// //pDC->MoveTo(nStartPosX, nStartPosY); -// //pDC->LineTo(nEndPosX, nEndPosY); -// } -// } - - -// for (constVectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++) -// { -// const CReviewResult *pReviewResult = static_cast<const CReviewResult*>(&(*it)); -// -// constVectorSReviewResultIt itt; -// constVectorSReviewResultIt ittEnd; -// if (pReviewResult->GetSReviewResultCount() > 0) -// { -// itt = pReviewResult->m_vecSReviewResult.begin(); -// ittEnd = pReviewResult->m_vecSReviewResult.end(); -// } -// else -// { -// continue; -// } -// const SReviewResult *pSReviewResult = static_cast<const SReviewResult*>(&(*itt)); -// int nDraw = FilterDefectPos(m_pDefectFilter, pSReviewResult); -// if (nDraw < 0) -// { -// continue; -// } -// -// // select path pen -// pOldPen = pDC->SelectObject(&pathPen); -// for (constVectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++) -// { -// if (itt + 1 != ittEnd) -// { -// itt++; -// nStartPosX = its->nUMOriginX; -// nStartPosY = its->nUMOriginY; -// nEndPosX = itt->nUMOriginX; -// nEndPosY = itt->nUMOriginY; -// TransformGlass2Map(nStartPosX, nStartPosY); -// TransformGlass2Map(nEndPosX, nEndPosY); -// //모터 좌표를 글라스 좌표로 변환 해야 함 -// pDC->MoveTo(nStartPosX, nStartPosY); -// pDC->LineTo(nEndPosX, nEndPosY); -// } -// } -// } - - pDC->SelectObject(pOldPen); -} - -void CakFormationMap::renderFormations(CDC* pDC) -{ - if (m_pDefectFormation == NULL) return; - if (m_bShowGroupLine == FALSE) return; - - CPen PenDefect, *pOldPen; - - CPen PenDefectLine; - PenDefect.CreatePen(PS_SOLID, 1, RGB(234, 43, 36)); - PenDefectLine.CreatePen(PS_SOLID, 1, RGB(50, 153, 50)); - - pOldPen = pDC->SelectObject(&PenDefect); - pDC->SelectStockObject(NULL_BRUSH); - - CakRectd rectForm; - - for (int i = 0; i < m_pDefectFormation->m_vecFormation.size(); i++) - { - _akFormation* pForm = &m_pDefectFormation->m_vecFormation[i]; - - if (m_pDefectDisplayOption->m_nShowLabel >= 0) - { - if (i != m_pDefectDisplayOption->m_nShowLabel) continue; - } - - rectForm.set( - GetWindowPosX(pForm->m_dRectLeft), - GetWindowPosY(pForm->m_dRectTop), - GetWindowPosX(pForm->m_dRectRight), - GetWindowPosY(pForm->m_dRectBottom) - ); - - rectForm.NormalizeRect(); - rectForm.InflateRect(4, 4, 5, 5); - - if (pForm->m_nFormType == 1) pDC->SelectObject(&PenDefectLine); - else pDC->SelectObject(&PenDefect); - - pDC->Rectangle(rectForm.left, rectForm.top, rectForm.right, rectForm.bottom); - - } - - - - - pDC->SelectObject(pOldPen); -} - -void CakFormationMap::renderMouseoverInfos(CDC* pDC) -{ - - pDC->SelectObject(m_AxisX.m_Font); - - if(m_pSelectedDefect) - { - _akDefect* pDefect = m_pSelectedDefect; - - CakRectd rectDefect; - rectDefect.set(GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY), - GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY)); - if(m_bShowDefectOutLine) rectDefect.InflateRect(5, 5, 5, 5); - else rectDefect.InflateRect(5, 5, 5-1, 5-1); - - CPen PenDefect, *pOldPen; - PenDefect.CreatePen(PS_SOLID, 1, RGB(24, 24, 192)); - pDC->SelectStockObject(NULL_BRUSH); - pOldPen = pDC->SelectObject(&PenDefect); - - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - rectDefect.InflateRect(-1,-1,-1,-1); - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - - - - pDC->SelectObject(pOldPen); - } - - if (m_pMouseOveredDefect) - { - _akDefect* pDefect = m_pMouseOveredDefect; - - CakRectd rectDefect; - rectDefect.set(GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY), - GetWindowPosX(pDefect->dPositionX), GetWindowPosY(pDefect->dPositionY)); - if (m_bShowDefectOutLine) rectDefect.InflateRect(5, 5, 5, 5); - else rectDefect.InflateRect(5, 5, 5 - 1, 5 - 1); - - CPen PenDefect, *pOldPen; - PenDefect.CreatePen(PS_SOLID, 1, RGB(192, 24, 24)); - pDC->SelectStockObject(NULL_BRUSH); - pOldPen = pDC->SelectObject(&PenDefect); - - pDC->Rectangle(rectDefect.left, rectDefect.top, rectDefect.right, rectDefect.bottom); - - pDC->SelectObject(pOldPen); - - CString strDefectInfo; - COLORREF cl; - cl = RGB(39, 255, 39); - - pDC->SetTextAlign(TA_LEFT | TA_BASELINE); - pDC->SetTextColor(cl); - strDefectInfo.Format("%d : %.3lf, %.3lf Cam: %d, SCan : %d", m_pMouseOveredDefect->m_nDefectID, m_pMouseOveredDefect->dPositionX, m_pMouseOveredDefect->dPositionY, m_pMouseOveredDefect->m_nCameraID, m_pMouseOveredDefect->m_nScanIdx); - pDC->TextOut(GetWindowPosX(m_pMouseOveredDefect->dPositionX)+5, GetWindowPosY(m_pMouseOveredDefect->dPositionY) - 7, strDefectInfo); - - } - if (m_pSelectedFormation) - { - _akFormation* pFormation = m_pSelectedFormation; - - int nFormLabel = -1; - if (pFormation && !pFormation->m_vecForms.empty()) - { - nFormLabel = pFormation->m_vecForms[0]->nLabel; - } - CakRectd rectForm; - - rectForm.set( - GetWindowPosX(pFormation->m_dRectLeft), - GetWindowPosY(pFormation->m_dRectTop), - GetWindowPosX(pFormation->m_dRectRight), - GetWindowPosY(pFormation->m_dRectBottom) - ); - - rectForm.NormalizeRect(); - rectForm.InflateRect(4, 4, 5, 5); - rectForm.InflateRect(-1, -1, -1, -1); - - CPen PenDefect, *pOldPen; - //PenDefect.CreatePen(PS_SOLID, 1, RGB(192, 192, 24)); - - //if(pFormation->m_nFormType == 0) PenDefect.CreatePen(PS_DOT, 1, RGB(234, 43, 36)); - //else if (pFormation->m_nFormType == 1) PenDefect.CreatePen(PS_DOT, 1, RGB(50, 153, 50)); - - PenDefect.CreatePen(PS_DOT, 1, RGB(24, 24, 192)); - pDC->SelectStockObject(NULL_BRUSH); - pOldPen = pDC->SelectObject(&PenDefect); - - pDC->Rectangle(rectForm.left, rectForm.top, rectForm.right, rectForm.bottom); - - //text - { - CString strDefectInfo; - pDC->SetTextAlign(TA_LEFT | TA_BOTTOM); - CString strFormType = "ROUND"; - if (pFormation->m_nFormType == 1) strFormType = "LINE"; - - strDefectInfo.Format("FORM %d, %s", nFormLabel, strFormType); - - pDC->SetBkMode(OPAQUE); - pDC->SetBkColor(RGB(0, 255, 0)); - pDC->SetTextColor(RGB(0, 0, 0)); - pDC->SelectObject(m_AxisX.m_Font); - pDC->TextOut(rectForm.left, rectForm.top, strDefectInfo); - pDC->SetBkMode(TRANSPARENT); - } - } - if (m_pMouseOveredFormation) - { - _akFormation* pFormation = m_pMouseOveredFormation; - - int nFormLabel = -1; - if (pFormation && !pFormation->m_vecForms.empty()) - { - nFormLabel = pFormation->m_vecForms[0]->nLabel; - } - CakRectd rectForm; - - rectForm.set( - GetWindowPosX(pFormation->m_dRectLeft), - GetWindowPosY(pFormation->m_dRectTop), - GetWindowPosX(pFormation->m_dRectRight), - GetWindowPosY(pFormation->m_dRectBottom) - ); - - rectForm.NormalizeRect(); - rectForm.InflateRect(4, 4, 5, 5); - rectForm.InflateRect(1, 1, 1, 1); - - CPen PenDefect, *pOldPen; - PenDefect.CreatePen(PS_SOLID, 1, RGB(192, 192, 24)); - pDC->SelectStockObject(NULL_BRUSH); - pOldPen = pDC->SelectObject(&PenDefect); - - pDC->Rectangle(rectForm.left, rectForm.top, rectForm.right, rectForm.bottom); - - pDC->SelectObject(pOldPen); - - CString strDefectInfo; - pDC->SetTextAlign(TA_LEFT | TA_BOTTOM); - CString strFormType = "ROUND"; - if(pFormation->m_nFormType == 1) strFormType = "LINE"; - - strDefectInfo.Format("FORM %d, %s", nFormLabel, strFormType); - - pDC->SetBkMode(OPAQUE); - pDC->SetBkColor(RGB(0, 255, 0)); - pDC->SetTextColor(RGB(0, 0, 0)); - pDC->SelectObject(m_AxisX.m_Font); - pDC->TextOut(rectForm.left, rectForm.top, strDefectInfo); - pDC->SetBkMode(TRANSPARENT); - - } -} - -void CakFormationMap::AddCellData() -{ - CakRectd akCellTemp; - m_vecTempCellRect.push_back(akCellTemp); -} - -void CakFormationMap::AddCell() -{ - CakRectd akCellTemp; - m_vecCellRect.push_back(akCellTemp); -} - -void CakFormationMap::RenderEnd(Graphics* grfx, CDC* pDC) -{ - - CRgn rgn; - CRect rectROI = CakRectToCRect(m_rectData); - rgn.CreateRectRgnIndirect(&rectROI); - pDC->SelectClipRgn(&rgn); - - renderMouseoverInfos(pDC); - - pDC->SelectClipRgn(NULL); - - CakGraphBasic3::RenderEnd(grfx, pDC); -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/akFormationMap.h b/ReviewHistory/ReveiwHistory/akFormationMap.h deleted file mode 100644 index 2312a97..0000000 --- a/ReviewHistory/ReveiwHistory/akFormationMap.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBasic3.h" -#include "akDefectFormation.h" - -#define UM_FORMMAP_DEFECTMOUSEOVER WM_USER+0x2001 -#define UM_FORMMAP_DEFECTSELECT WM_USER+0x2002 - -class CakFormationMap : public CakGraphBasic3 -{ -public: - CakFormationMap(); - virtual ~CakFormationMap(); - -public: - void clear() - { - m_pMouseOveredFormation = NULL; - m_pSelectedFormation = NULL; - m_pMouseOveredDefect = NULL; - m_pSelectedDefect = NULL; - }; - virtual void RenderEnd(Graphics* grfx, CDC* pDC); - virtual void RenderSeries(Graphics* grfx, CDC* pDC); - virtual void SetAutoScale(); - virtual void SetResize(); - - virtual void OnKeyInput(int key, int mode); - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - _akDefect* findDefect(double nPosX, double nPosY); - _akFormation* findFormation(double nPosX, double nPosY); - - void setSelectDefect(int nDefectID); - void setSelectForm(int nFormID); - void AddCellData(); - void AddCell(); -public: - BOOL m_bShowCell; - - BOOL m_bShowGroupIndex; - BOOL m_bShowGroupLine; - - BOOL m_bShowDefectOutLine; - BOOL m_bShowDefectColorType; - - double m_dGlassSizeWidth; - double m_dGlassSizeHeight; - std::vector<CakRectd> m_vecCellRect; - std::vector<CakRectd> m_vecTempCellRect; - akDefectFormation* m_pDefectFormation; - _DefectDisplayOption* m_pDefectDisplayOption; -protected: - void renderGlass(CDC* pDC); - void renderCell(CDC* pDC); - void renderDefects(CDC* pDC); - void renderDefectsPath(CDC* pDC); - void renderFormations(CDC* pDC); - void renderMouseoverInfos(CDC* pDC); -protected: - _akFormation* m_pMouseOveredFormation; - _akFormation* m_pSelectedFormation; - _akDefect* m_pMouseOveredDefect; - _akDefect* m_pSelectedDefect; -}; - diff --git a/ReviewHistory/ReveiwHistory/akGridData.cpp b/ReviewHistory/ReveiwHistory/akGridData.cpp deleted file mode 100644 index c2525e5..0000000 --- a/ReviewHistory/ReveiwHistory/akGridData.cpp +++ /dev/null @@ -1,478 +0,0 @@ -#include "StdAfx.h" -#include "akGridData.h" - - -void CakParser::process( const char* pText, const char* pToken /*= " \r\n\t,^"*/ ) -{ - //{ - m_vecTokLen.clear(); - m_vecTokPos.clear(); - //} - - m_pSrcText = pText; - - unsigned int i_index; - unsigned int index; - - unsigned int nTokenLen = (unsigned int)strlen(pToken); - unsigned int string_length = (unsigned int)strlen(pText); - unsigned char bitmask[32]={0}; //256가 bit masking을 사용하기 위해서. - - //token 배열에 저장된 문자의 ascii index 위치에 masking을 한다. - for( i_index=0; i_index<nTokenLen; i_index++) - bitmask[ pToken[i_index] >> 3] |= (1 << ( pToken[i_index] & 7)); - - - int nStartPoint=-1; - for( index=0; index<string_length; index++) - { - if( (bitmask[pText[index] >> 3]) & (1 << (pText[index] & 7)) ) //구분자 찾음 태현[2017/12/7] - { - if(nStartPoint != -1) - { - m_vecTokPos.push_back(nStartPoint); - m_vecTokLen.push_back(index-nStartPoint); - nStartPoint = -1; - } - } - else if(nStartPoint < 0) //구분자도 못찾고 시작도 안함 - { - nStartPoint = index; - } - - } - if(nStartPoint >= 0) - { - m_vecTokPos.push_back(nStartPoint); - m_vecTokLen.push_back(string_length-nStartPoint); - } - -}; - - -const char* CakParser::getTokStr( int nIndex ) -{ - m_strTokBuffer.clear(); - m_strTokBuffer.append(&m_pSrcText[m_vecTokPos[nIndex]], m_vecTokLen[nIndex]); - return m_strTokBuffer.c_str(); -} - -bool CakParser::getTokStr( int nTokIndex, char* pBuf, int nLen ) -{ - // NULL 값 고려 - if(nLen-1 < m_vecTokLen[nTokIndex]) return false; - - strncpy(pBuf, &m_pSrcText[m_vecTokPos[nTokIndex]], m_vecTokLen[nTokIndex]); - pBuf[m_vecTokLen[nTokIndex]] = 0; - - return true; -} - -CakTextMatrix::CakTextMatrix(void) -{ - m_nRowsNum = m_nColsNum = 0; - - m_nIntervalLength = 0; - m_vecIntervalPos.clear(); - - setDevideFlag(); -} - -CakTextMatrix::~CakTextMatrix(void) -{ -} - -bool CakTextMatrix::ImportFile( char* pFileName ) -{ - - FILE* pf = fopen(pFileName, "r"); - if(pf) - { - CakParser parser; - setRowCount(0); - setColCount(100); - - - char buffer[2048]={}; - - while (fgets(buffer, 2048, pf)) - { - parser.process(buffer, ",\n"); - - setRowCount(1, TRUE); - if(parser.getTokNum() > getColCount()) setColCount(parser.getTokNum()); - - int nTokenNum = parser.getTokNum(); - int nRowIndex = getRowCount()-1; - for(int i=0; i<nTokenNum; i++) - { - setItemText(nRowIndex, i, parser.getTokStr(i)); - } - } - - fclose(pf); - - return true; - } - - return false; -} - -bool CakTextMatrix::ImportText( char* pText ) -{ - if(pText == NULL) return false; - CakParser parserLine; - CakParser parserTok; - parserLine.process(pText, "\n"); - - char* pStrLineData; - char* pStrLineTock; - int nLineNum = parserLine.getTokNum(); - setRowCount(nLineNum); - for(int i=0; i<nLineNum; i++) - { - pStrLineData = (char*)parserLine.getTokStr(i); - - parserTok.process(pStrLineData, m_strDevideFlag.c_str()); - int nTockNum = parserTok.getTokNum(); - setColCount(nTockNum); - for(int j=0; j<nTockNum; j++) - { - pStrLineTock = (char*)parserTok.getTokStr(j); - setItemText(i,j, pStrLineTock); - } - } - - return true; -} - - -bool CakTextMatrix::AddRowData( char* pTextData ) -{ - if(pTextData == NULL) return false; - - CakParser parserTok; - parserTok.process(pTextData, m_strDevideFlag.c_str()); - - int nTockNum = parserTok.getTokNum(); - - setColCount(nTockNum); - setRowCount(1, true); - - int nRowIndex = getRowCount(); - char* pStrTok; - - for(int j=0; j<nTockNum; j++) - { - pStrTok = (char*)parserTok.getTokStr(j); - setItemText(nRowIndex,j, pStrTok); - } - - return true; -} - - - -void CakTextMatrix::setDevideFlag( char* pFlag /*= " \r\n\t,"*/ ) -{ - m_strDevideFlag = pFlag; - - -} - -void CakTextMatrix::setRowCount( int nNum/*=10*/, bool bIncrease /*= false*/ ) -{ - int nIncreaseCount = 0; - - if(bIncrease) nIncreaseCount = nNum; - else nIncreaseCount = nNum - m_nRowsNum; - - - if(nIncreaseCount == 0) - { - return ; - } - else if(nIncreaseCount > 0) //증가 - { - for(int i=0; i<nIncreaseCount; i++) - { - m_vecCellData_Row.push_back(_akCell_Row()); - } - setColCount(m_nColsNum); - } - else if(nIncreaseCount < 0) //감소 - { - m_vecCellData_Row.erase(m_vecCellData_Row.end() + nIncreaseCount, m_vecCellData_Row.end()); - } - - m_nRowsNum += nIncreaseCount; -} - -void CakTextMatrix::setColCount( int nNum/*=10*/, bool bIncrease /*= false*/ ) -{ - if(bIncrease) m_nColsNum += nNum; - else m_nColsNum = nNum; - - int nSize = (int)m_vecCellData_Row.size(); - - for(int i=0; i<nSize; i++) - { - std::vector<_akCellData>* pVecGridCellData = &m_vecCellData_Row[i].m_vecGridCellData; - - int nIncreaseCount = 0; - - if(bIncrease) nIncreaseCount = nNum; - else nIncreaseCount = m_nColsNum - (int)pVecGridCellData->size(); - - - - if(nIncreaseCount == 0) - { - continue ; - } - else if(nIncreaseCount > 0) //증가 - { - for(int a=0; a<nIncreaseCount; a++) - { - pVecGridCellData->push_back(_akCellData()); - } - } - else if(nIncreaseCount < 0) //감소 - { - pVecGridCellData->erase(pVecGridCellData->end() + nIncreaseCount, pVecGridCellData->end()); - } - - } - - - - - - return; -} - -void CakTextMatrix::printOut() -{ - int nRowNum = getRowCount(); - int nColNum = getColCount(); - - for(int y=0; y<nRowNum; y++) - { - for(int x=0; x<nColNum; x++) - { - //TRACE("%s", getItemText(x,y)); - TRACE("(%02d,%02d)%s", x,y,getItemText(y,x)); - if(x < nColNum-1) TRACE("\t"); - } - TRACE("\n"); - } -} - -const char* CakTextMatrix::getItemText( int nRow, int nCol ) -{ - //return m_vecCellItem[nRow*m_nColsNum + nCol]->m_strText.c_str(); - return m_vecCellData_Row[nRow].m_vecGridCellData[nCol].m_strText.c_str(); -} - -void CakTextMatrix::setItemText( int nRow, int nCol, const char* pText ) -{ - if(pText != NULL) - //m_vecCellItem[nRow*m_nColsNum + nCol]->m_strText = pText; - m_vecCellData_Row[nRow].m_vecGridCellData[nCol].m_strText = pText; - - -} - -void CakTextMatrix::makeCellItemArray() -{ - return;//빠르게 접근할려고 만든건데; 데이터 확보 하는 과정에서 과부하 걸림 - m_vecCellItem.clear(); - - int nRowNum = getRowCount(); - int nColNum = getColCount(); - - for(int y=0; y<nRowNum; y++) - { - for(int x=0; x<nColNum; x++) - { - m_vecCellItem.push_back(&m_vecCellData_Row[y].m_vecGridCellData[x]); - } - } -} - -int CakTextMatrix::getRowIndex( char* pTitle ) -{ - for(int i=0; i<m_nRowsNum; i++) - { - if(m_vecCellItem[i*m_nColsNum + 0]->m_strText.compare(pTitle)) - { - return i; - } - } - - return -1; -} -int CakTextMatrix::getColIndex( char* pTitle ) -{ - for(int i=0; i<m_nColsNum; i++) - { - if(m_vecCellItem[0*m_nColsNum + i]->m_strText.compare(pTitle)) - { - return i; - } - } - - return -1; -} - -bool CakTextMatrix::ExportFileInterval( char* pFileName, char* pIntervalRef ) -{ - FILE* pf = fopen(pFileName, "w"); - if(pf) - { - CakParser paserInterval; - paserInterval.process(pIntervalRef, " "); - - const int nBufSize = 2048; - char buffer[nBufSize]; - int nStrLen, nWritePoint; - const char* pStr; - - int nRowNum = getRowCount(); - int nColNum = getColCount(); - - for(int y=0; y<nRowNum; y++) - { - memset(buffer, ' ', sizeof(char)*nBufSize); - for(int x=0; x<nColNum; x++) - { - pStr = getItemText(y,x); - nStrLen = (int)strlen(pStr); - nWritePoint = paserInterval.getTokPos(x); - memcpy(&buffer[nWritePoint], pStr, sizeof(char)*nStrLen); - - if(nWritePoint > 0) - { - buffer[nWritePoint-1] = ' '; //바로 직전에 공백으로 표시 - } - } - buffer[strlen(pIntervalRef)] = 0; - fprintf(pf, "%s", buffer); - if(y < nRowNum-1) fprintf(pf, "\n"); - } - - fclose(pf); - return true; - } - - - return false; -} - -bool CakTextMatrix::ExportFile( char* pFileName, char* pDevideFlag/*=","*/ ) -{ - //한줄을 메모리에 적고 최종적으로 파일로 쓰는게 더 빠르겠지?? 태현[2017/12/7] - FILE* pf = fopen(pFileName, "w"); - if(pf) - { - char buffer[2048]={}; - - int nRowNum = getRowCount(); - int nColNum = getColCount(); - - for(int y=0; y<nRowNum; y++) - { - memset(buffer, 0, sizeof(char)*2048); - for(int x=0; x<nColNum; x++) - { - strcat(buffer, getItemText(y,x)); - if(x < nColNum-1) strcat(buffer, pDevideFlag); - } - - if(y < nRowNum-1) strcat(buffer, "\n"); - fprintf(pf, "%s", buffer); - } - - fclose(pf); - return true; - } - - return false; -} -bool CakTextMatrix::printLine( int nRowIndex, char* pBuf, int nLen, char* pDevideFlag/*=","*/ ) -{ - int nRowNum = getRowCount(); - int nColNum = getColCount(); - - - if(nRowIndex < nRowNum) - { - memset(pBuf, 0, sizeof(char)*nLen); - - for(int x=0; x<nColNum; x++) - { - strcat(pBuf, getItemText(nRowIndex,x)); - if(x < nColNum-1) strcat(pBuf, pDevideFlag); - } - - return true; - } - - - return false; -} - - -bool CakTextMatrix::printLineInterval( int nRowIndex, char* pBuf, int nLen ) -{ - int nRowNum = getRowCount(); - - if(nRowIndex < nRowNum && m_nIntervalLength != 0) - { - int nColNum = getColCount(); - - int nStrLen, nWritePoint; - const char* pStr; - - memset(pBuf, ' ', sizeof(char)*nLen); - for(int x=0; x<nColNum; x++) - { - pStr = getItemText(nRowIndex,x); - nStrLen = (int)strlen(pStr); - nWritePoint = m_vecIntervalPos[x]; - memcpy(&pBuf[nWritePoint], pStr, sizeof(char)*nStrLen); - - if(nWritePoint > 0) - { - pBuf[nWritePoint-1] = ' '; //바로 직전에 공백으로 표시 - } - } - pBuf[m_nIntervalLength] = 0; - - - return true; - } - - return false; -} - -void CakTextMatrix::setIntervalRef( char* pIntervalRef ) -{ - m_nIntervalLength = 0; - m_vecIntervalPos.clear(); - - if(pIntervalRef == NULL) return; - - CakParser paserInterval; - paserInterval.process(pIntervalRef, " "); - - int nNum = paserInterval.getTokNum(); - for(int i=0; i<nNum; i++) - { - m_vecIntervalPos.push_back(paserInterval.getTokPos(i)); - } - - m_nIntervalLength = (int)strlen(pIntervalRef); - -} - diff --git a/ReviewHistory/ReveiwHistory/akGridData.h b/ReviewHistory/ReveiwHistory/akGridData.h deleted file mode 100644 index 91d4037..0000000 --- a/ReviewHistory/ReveiwHistory/akGridData.h +++ /dev/null @@ -1,97 +0,0 @@ -#pragma once - -#include <vector> -#include <string> - -class CakParser -{ -public: - CakParser(void) - { - m_pSrcText = NULL; - }; - virtual ~CakParser(void){}; - - void process(const char* pText, const char* pToken = " \r\n\t,^"); - - const char* getTokStr(int nIndex); - bool getTokStr(int nTokIndex, char* pBuf, int nLen); - - int getTokNum(){return (int)m_vecTokPos.size();}; - - int getTokPos(int nIndex){return m_vecTokPos[nIndex];}; - int getTokLen(int nIndex){return m_vecTokLen[nIndex];}; - - -protected: - const char* m_pSrcText; - std::vector<int> m_vecTokPos; - std::vector<int> m_vecTokLen; - std::string m_strTokBuffer; -}; - -struct _akCellData -{ - int nRow, nCol; - - std::string m_strText; - - -}; - -struct _akCell_Row -{ - std::vector<_akCellData> m_vecGridCellData; -}; - -class CakTextMatrix -{ -public: - CakTextMatrix(void); - virtual ~CakTextMatrix(void); - - -public: - bool ImportFile(char* pFileName); //파일에서 읽는 방식 태현[2018/4/18] - bool ImportText(char* pText); //여러줄의 데이터를 한번에 받는 방식. 태현[2018/4/18] - - bool ExportFile(char* pFileName, char* pDevideFlag=","); - bool ExportFileInterval(char* pFileName, char* pIntervalRef); - - void setDevideFlag(char* pFlag = " \r\n\t,^"); - void setIntervalRef(char* pIntervalRef); -public: - bool AddRowData(char* pTextData); - bool printLine(int nRowIndex, char* pBuf, int nLen, char* pDevideFlag=","); - bool printLineInterval(int nRowIndex, char* pBuf, int nLen); - -public: - void setRowCount(int nNum=10, bool bIncrease = false); - void setColCount(int nNum=10, bool bIncrease = false); - int getRowCount(){return m_nRowsNum;}; - int getColCount(){return m_nColsNum;}; - - int getRowIndex(char* pTitle); - int getColIndex(char* pTitle); - -public: - void setItemText(int nRow, int nCol, const char* pText); - const char* getItemText(int nRow, int nCol); - -public: - virtual void printOut();//데이터 내용 Trace에 출력 - -protected: - void makeCellItemArray(); //데이터에 빠르게 접근하기 위한 전처리 태현[2017/12/6] - - -protected: - std::string m_strDevideFlag; - std::vector<_akCell_Row> m_vecCellData_Row; //셀의 실제 정보를 관리 - std::vector<_akCellData*> m_vecCellItem; //빠르게 접근하기 위해서 NxN형태의 Cell 자료의 포인트만 관리 - int m_nRowsNum, m_nColsNum; - - int m_nIntervalLength; - std::vector<int> m_vecIntervalPos; - -}; diff --git a/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp b/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp deleted file mode 100644 index c963e99..0000000 --- a/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp +++ /dev/null @@ -1,189 +0,0 @@ -#include "StdAfx.h" -#include "akIPCNetAOISystem.h" -#include <process.h> - -#define SHAREDMEMNAME "DIT.AOISYSTEM.SHAREDMEM" - -akIPCNetAOISystem::akIPCNetAOISystem(void) -: m_mxSignalProcess(FALSE, _T("IPC_NETWORKSYSTEM_MUTEX")) -{ - m_pParent = NULL; - m_nThreadSignalFlag = 0; - m_pIPCAOISystem = NULL; - m_hMapIPCAOISystem = NULL; - - InitializeCriticalSection(&m_csSignalProcess); -} - -akIPCNetAOISystem::~akIPCNetAOISystem(void) -{ - if(m_nThreadSignalFlag == 1) m_nThreadSignalFlag = 2; - while(m_nThreadSignalFlag != 0) - { - Sleep(0); - } - - if (m_pIPCAOISystem!=NULL) - { - ::UnmapViewOfFile(m_pIPCAOISystem); - m_pIPCAOISystem = NULL; - } - - if (m_hMapIPCAOISystem != NULL) - { - ::CloseHandle(m_hMapIPCAOISystem); - m_hMapIPCAOISystem = NULL; - } - -} - -bool akIPCNetAOISystem::Create( CWnd* pParent ) -{ - if(m_pIPCAOISystem) return false; - - - BOOL bCreateSharedMem = FALSE;//공유메모리 생성 [김태현 2018/9/10] - { - BOOL bCreateMem = TRUE; - - m_hMapIPCAOISystem = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE - , 0, sizeof(_IPCAOISystem), SHAREDMEMNAME); - - if (::GetLastError() == ERROR_ALREADY_EXISTS) - { - m_hMapIPCAOISystem = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME); - bCreateMem = FALSE; - } - - if (m_hMapIPCAOISystem) - { - m_pIPCAOISystem = (_IPCAOISystem*)::MapViewOfFile(m_hMapIPCAOISystem, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_IPCAOISystem)); - if (m_pIPCAOISystem) - { - bCreateSharedMem = TRUE; - } - } - - //0으로 초기화 - if(bCreateMem && m_pIPCAOISystem) ZeroMemory(m_pIPCAOISystem,sizeof(_IPCAOISystem)); - } - - if(bCreateSharedMem == FALSE) return false; - - m_pParent = pParent; - - _beginthread(threadSignal, NULL, this); - - return true; -} - -void akIPCNetAOISystem::threadSignal( void* arg ) -{ - akIPCNetAOISystem* pThis = (akIPCNetAOISystem*)arg; - - pThis->m_nThreadSignalFlag = 1; - pThis->processSignal(); - pThis->m_nThreadSignalFlag = 0; -} - -void akIPCNetAOISystem::processSignal() -{ - char m_nSignalPreAOI[INA_SIGNALNUM]={}; - char m_nSignalCurAOI[INA_SIGNALNUM]={}; - char m_nSignalPreReview[INA_SIGNALNUM]={}; - char m_nSignalCurReview[INA_SIGNALNUM]={}; - - DWORD dwTickCount =0; - - while(m_nThreadSignalFlag == 1) - { - dwTickCount = GetTickCount(); - - m_mxSignalProcess.Lock(); - memcpy(m_nSignalCurAOI, getAOIProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM); - memcpy(m_nSignalCurReview, getReviewProtocol()->m_nSignal, sizeof(char)*INA_SIGNALNUM); - m_mxSignalProcess.Unlock(); - //Signal 감지 부분 [김태현 2018/9/10] - { - for(int i=0; i<INA_SIGNALNUM; i++) - { - if(m_nSignalCurAOI[i] == 1 && m_nSignalPreAOI[i] == 0) - { - RecvSignal(ST_AOI, i); - } - } - for(int i=0; i<INA_SIGNALNUM; i++) - { - if(m_nSignalCurReview[i] == 1 && m_nSignalPreReview[i] == 0) - { - RecvSignal(ST_Review, i); - } - } - } - - //signal time off 처리 부분 - { - EnterCriticalSection(&m_csSignalProcess); - for(int i=m_vecSignalTimeOff.size()-1; i>=0; i--) - { - if(m_vecSignalTimeOff[i].nTimeBitOff < dwTickCount) - { - *m_vecSignalTimeOff[i].pSignal = 0; - m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i); - } - else if(*m_vecSignalTimeOff[i].pSignal == 0) - { - m_vecSignalTimeOff.erase(m_vecSignalTimeOff.begin()+i); - } - } - LeaveCriticalSection(&m_csSignalProcess); - } - - memcpy(m_nSignalPreAOI, m_nSignalCurAOI, sizeof(char)*INA_SIGNALNUM); - memcpy(m_nSignalPreReview, m_nSignalCurReview, sizeof(char)*INA_SIGNALNUM); - - Sleep(50); - } -} - -bool akIPCNetAOISystem::SetSignal( emSystemType nSystemType, int nSignalIndex, int nTimeMS /*= 500*/ ) -{ - char* pSignal = NULL; - if(nSystemType == ST_AOI) - { - pSignal = &getAOIProtocol()->m_nSignal[nSignalIndex]; - } - else if(nSystemType == ST_Review) - { - pSignal = &getReviewProtocol()->m_nSignal[nSignalIndex]; - } - - - EnterCriticalSection(&m_csSignalProcess); - for(int i=0; i<m_vecSignalTimeOff.size(); i++) - { - if(m_vecSignalTimeOff[i].pSignal == pSignal) - { - LeaveCriticalSection(&m_csSignalProcess); - return false; - } - } - - _SignalTimerOff signaloff; - signaloff.pSignal = pSignal; - signaloff.nTimeBitOff = GetTickCount()+nTimeMS; - m_vecSignalTimeOff.push_back(signaloff); - LeaveCriticalSection(&m_csSignalProcess); - - m_mxSignalProcess.Lock(); - *pSignal = 1; - m_mxSignalProcess.Unlock(); - - return true; -} - -void akIPCNetAOISystem::RecvSignal( emSystemType nSystemType, int nSignal ) -{ - if(m_pParent) m_pParent->PostMessage(UM_IPCNETAOISYSTEM, nSignal, (int)nSystemType); -} - diff --git a/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.h b/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.h deleted file mode 100644 index 686c71e..0000000 --- a/ReviewHistory/ReveiwHistory/akIPCNetAOISystem.h +++ /dev/null @@ -1,139 +0,0 @@ -#pragma once - -#include <vector> - -#define INA_SIGNALNUM 32 -#define INA_MAXMODULENUM 4 -#define INA_MAXDEFECTNUM 1024 - - -//모든 좌표 데이터의 단위는 um [김태현 2018/9/10] - -//m_nSignal 의미 [김태현 2018/9/10] -//Review가 AOI의 시그널을 감지 하기 위해서는 m_ProtocalAOI.m_nSignal 상태를 실시간 감지 하는 방식 - -struct _ProtocolAOI -{ -public: - _ProtocolAOI() - { - memset(m_nSignal, 0, sizeof(char)*INA_SIGNALNUM); - - }; -public: - /* - Signal 저의 - 0 : GlassLoading - 1 : ScanReady - 2 : ScanStart - 10 : ModuleMove - */ - char m_nSignal[INA_SIGNALNUM]; - -public: - int m_nModuleMoveX; //글라스 좌표 [김태현 2018/9/10] - int m_nModuleMoveY; -}; - - -struct _ProtocalReviewModlueData -{ - //모듈 현재 좌표 [김태현 2018/9/10] - int m_nModuleGlassPosX; - int m_nModuleGlassPosY; - - int m_nPlanDefectNum; //리뷰할 결함 갯수 [김태현 2018/9/10] - int m_nReviewedDefectNum; //리뷰한 결함 갯수 - - //리뷰할 결함 위치 [김태현 2018/9/10] - int m_nPlanReviewPosX[INA_MAXDEFECTNUM]; - int m_nPlanReviewPosY[INA_MAXDEFECTNUM]; -}; - -struct _ProtocolReview -{ -public: - _ProtocolReview() - { - memset(m_nSignal, 0, sizeof(char)*INA_SIGNALNUM); - - m_nModuleNum = 0; - memset(m_ModuleData, 0, sizeof(_ProtocalReviewModlueData)*INA_MAXMODULENUM); - } -public: - /* - Signal 정의 - 0 : GlassLoading - 1 : GlassLoading Complete - 2 : Align Ready - 3 : Align Complete - 5 : ReviewEnd - - */ - char m_nSignal[INA_SIGNALNUM]; - - //Review Data Section -public: - int m_nModuleNum; - _ProtocalReviewModlueData m_ModuleData[INA_MAXMODULENUM]; -}; - -struct _IPCAOISystem -{ -public: - _ProtocolAOI m_ProtocolAOI; - _ProtocolReview m_ProtocolReview; -}; - - - - -#define UM_IPCNETAOISYSTEM WM_USER+0x1010 -class akIPCNetAOISystem -{ -public: - akIPCNetAOISystem(void); - virtual ~akIPCNetAOISystem(void); - -public: - enum emSystemType - { - ST_AOI = 0, - ST_Review = 1 - }; -public: - bool Create(CWnd* pParent); - //시그널이 살아 있으면 return 값이 false [김태현 2018/9/10] - bool SetSignal(emSystemType nSystemType, int nSignalIndex, int nTimeMS = 500); - - virtual void RecvSignal(emSystemType nSystemType, int nSignal); - - _ProtocolAOI* getAOIProtocol(){return m_pIPCAOISystem ? &m_pIPCAOISystem->m_ProtocolAOI : NULL;}; - _ProtocolReview* getReviewProtocol(){return m_pIPCAOISystem ? &m_pIPCAOISystem->m_ProtocolReview : NULL;}; -protected: - static void threadSignal(void* arg); - void processSignal(); - -protected: - struct _SignalTimerOff - { - _SignalTimerOff() - { - nTimeBitOff = 0; - pSignal = NULL; - } - DWORD nTimeBitOff; //종료 시간 - char* pSignal; - }; - - -protected: - _IPCAOISystem* m_pIPCAOISystem; - int m_nThreadSignalFlag; - CRITICAL_SECTION m_csSignalProcess; - CMutex m_mxSignalProcess; - HANDLE m_hMapIPCAOISystem; - - CWnd* m_pParent;// 메세지 전달 대상 - std::vector<_SignalTimerOff> m_vecSignalTimeOff; -}; diff --git a/ReviewHistory/ReveiwHistory/akImageView.cpp b/ReviewHistory/ReveiwHistory/akImageView.cpp deleted file mode 100644 index d8f6e8f..0000000 --- a/ReviewHistory/ReveiwHistory/akImageView.cpp +++ /dev/null @@ -1,497 +0,0 @@ -#include "stdafx.h" -#include "akImageView.h" -#include "akGraph/akGraphUtil.h" - -CakImageView::CakImageView() -{ - SetReverseModeY(true); - { - CakGraphBase::setAK(); - m_AxisX.m_Size = 80; - m_AxisX.m_TickGabStep = 1; - m_AxisX.m_MinorTickNum = 4; - m_AxisY.m_MinorTickNum = 4; - //m_AxisX.m_TickGabPixel = 30; - //m_AxisX.m_FontTick.DeleteObject(); - //m_AxisX.m_FontTick.CreatePointFont(120, _T("Tahoma")); - //m_AxisX.SetRotateFont(&m_AxisX.m_FontTick, 270); - m_AxisY.SetRotateFont(&m_AxisY.m_FontTick, 90); - m_AxisY2.SetRotateFont(&m_AxisY2.m_FontTick, 270); - SetClossLine(false); - SetDragStyle(DS_All_HOR); - m_bGrid = false; - - m_AxisY.m_TickGabPixel = 70; - m_AxisX.m_Size = 20; - m_AxisY.m_Size = 20; - m_AxisY2.m_Size = 20; - m_Title.m_Size = 20; - - m_AxisX.m_strTitle = ""; - m_AxisY.m_strTitle = ""; - m_Title.m_strTitle = " "; - - m_MouseMoveInfo.m_nType = 0; - } -} - - -CakImageView::~CakImageView() -{ -} - -void CakImageView::RenderSeries(Graphics* grfx, CDC* pDC) -{ - RenderImage(grfx, pDC); -} - -void CakImageView::SetAutoScale() -{ - CakGraphBasic3::SetAutoScale(); - - if (1)//글라스 크기 및 그리기 방향 결정 태현[2016/3/23] - { - double nGlassSizeX = 2400; - double nGlassSizeY = 2048; - - if (!m_vecImageData.empty()) - { - nGlassSizeX = m_vecImageData[0]->m_Bits.bmWidth; - nGlassSizeY = m_vecImageData[0]->m_Bits.bmHeight; - } - - double dWindowRate = (double)m_rectData.Width() / (double)m_rectData.Height(); - double dValueRate = (double)nGlassSizeX / (double)nGlassSizeY; - - if (dWindowRate < dValueRate)//가로풀 기준 태현[2016/3/25] - { - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = nGlassSizeX; - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = (float)nGlassSizeX*((float)m_rectData.Height() / (float)m_rectData.Width()); - m_AxisY.SetRangePos(nGlassSizeY / 2); - } - else //세로풀기준 태현[2016/3/25] - { - - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = (float)nGlassSizeY*((float)m_rectData.Width() / (float)m_rectData.Height()); - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = nGlassSizeY; - - m_AxisX.SetRangePos(nGlassSizeX / 2); - } - - //0,0이 중앙에 오도록 [김태현2021/2/16] - m_AxisX.SetRangePos(0); - m_AxisY.SetRangePos(0); - } -} - -void CakImageView::SetResize() -{ - double dPosOldX = m_AxisX.m_RangeValueMin + m_AxisX.GetRangeValue() / 2.0; - double dPosOldY = m_AxisY.m_RangeValueMin + m_AxisY.GetRangeValue() / 2.0; - CakGraphBasic3::SetAutoScale(); - - if (1)//글라스 크기 및 그리기 방향 결정 태현[2016/3/23] - { - double nGlassSizeX = 2400; - double nGlassSizeY = 2048; - - if (!m_vecImageData.empty()) - { - nGlassSizeX = m_vecImageData[0]->m_Bits.bmWidth; - nGlassSizeY = m_vecImageData[0]->m_Bits.bmHeight; - } - - double dWindowRate = (double)m_rectData.Width() / (double)m_rectData.Height(); - double dValueRate = (double)nGlassSizeX / (double)nGlassSizeY; - - //double dPosOldX = m_AxisX.m_RangeValueMin + m_AxisX.GetRangeValue() / 2.0; - //double dPosOldY = m_AxisY.m_RangeValueMin + m_AxisY.GetRangeValue() / 2.0; - if (dWindowRate < dValueRate)//가로풀 기준 태현[2016/3/25] - { - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = nGlassSizeX; - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = (float)nGlassSizeX*((float)m_rectData.Height() / (float)m_rectData.Width()); - m_AxisY.SetRangePos(nGlassSizeY / 2); - - - } - else //세로풀기준 태현[2016/3/25] - { - - m_AxisX.m_RangeValueMin = 0; - m_AxisX.m_RangeValueMax = (float)nGlassSizeY*((float)m_rectData.Width() / (float)m_rectData.Height()); - m_AxisY.m_RangeValueMin = 0; - m_AxisY.m_RangeValueMax = nGlassSizeY; - - m_AxisX.SetRangePos(nGlassSizeX / 2); - } - - m_AxisX.SetRangePos(dPosOldX); - m_AxisY.SetRangePos(dPosOldY); - } -} - -void CakImageView::RenderImage(Graphics* grfx, CDC* pDC) -{ - if (m_vecImageData.empty()) return; - - //pDC->SetStretchBltMode(HALFTONE); //<-- 최대 확대시 그리는 시간 과다 소요 - pDC->SetStretchBltMode(COLORONCOLOR);// <--최대 확대시 이미지 표시 안됨 - - - CRgn rgn; - rgn.CreateRectRgnIndirect(CakRectToCRect(m_rectData)); - pDC->SelectClipRgn(&rgn); - - CBitmap* pOldBitmap; - CDC BitmapDC; - BitmapDC.CreateCompatibleDC(pDC); - - _DataImage2* pImageData; - - double dAlignX, dAlignY; - for (int i = 0; i < m_vecImageData.size(); i++) - { - dAlignX = dAlignY = 0; - - int x1, x2, y1, y2; - pImageData = m_vecImageData[i]; - x1 = pImageData->m_nDrawPosX-dAlignX; - y1 = pImageData->m_nDrawPosY-dAlignY; - x2 = pImageData->m_nDrawPosX + pImageData->m_Bits.bmWidth; - y2 = pImageData->m_nDrawPosY + pImageData->m_Bits.bmHeight; - - - CakRect rectImage(x1, y1, x2, y2); - - - CakRect rectOutRangeTemp, rectOutRange; - rectOutRangeTemp.left = m_AxisX.m_RangeValueMin; - rectOutRangeTemp.right = ceil(m_AxisX.m_RangeValueMax); - rectOutRangeTemp.top = m_AxisY.m_RangeValueMin; - rectOutRangeTemp.bottom = ceil(m_AxisY.m_RangeValueMax); - - if (rectOutRange.IntersectRect(&rectOutRangeTemp, &rectImage) == FALSE) - { - continue; - } - - pOldBitmap = BitmapDC.SelectObject(&pImageData->m_Bitmap); - - double dOnePixelX = (double)m_rectData.Width() / m_AxisX.GetRangeValue(); - double dOnePixelY = (double)m_rectData.Height() / m_AxisY.GetRangeValue(); - - if (1)//dOnePixelX > 2 && dOnePixelY > 2) - { - CakRect rectDraw; - rectDraw.set( - GetWindowPosX(rectOutRange.left), - GetWindowPosY(rectOutRange.top), - GetWindowPosX(rectOutRange.right), - GetWindowPosY(rectOutRange.bottom) - ); - CakRect rectImage; - rectImage.set( - rectOutRange.left - x1, - rectOutRange.top - y1, - rectOutRange.right - x1, - rectOutRange.bottom - y1 - ); - - if (m_bReverseY == FALSE) - { - AKSWAP_INT(rectDraw.top, rectDraw.bottom); - rectImage.top = pImageData->m_Bits.bmHeight - rectOutRange.bottom + y1; - rectImage.bottom = rectImage.top + rectOutRange.getHeight(); - } - if (m_bReverseX == TRUE) - { - AKSWAP_INT(rectDraw.left, rectDraw.right); - rectImage.left = pImageData->m_Bits.bmWidth - rectOutRange.right + x1; - rectImage.right = rectImage.left + rectOutRange.getWidth(); - } - - - pDC->StretchBlt(rectDraw.left, rectDraw.top, rectDraw.Width(), rectDraw.Height(), &BitmapDC, - rectImage.left, rectImage.top, - rectImage.getWidth(), rectImage.getHeight(), SRCCOPY); - - } - else - { - //좌표축 그대로 그릴때 [김태현 2018/12/10] - /*pDC->StretchBlt(GetWindowPosX(x1), GetWindowPosY(y1), GetWindowPosX(x2)-GetWindowPosX(x1),GetWindowPosY(y2)-GetWindowPosY(y1), &BitmapDC, - 0, 0, - pImageData->m_Bits.bmWidth, pImageData->m_Bits.bmHeight, SRCCOPY);*/ - pDC->StretchBlt(GetWindowPosX(x1), GetWindowPosY(y1), GetWindowPosX(x2) - GetWindowPosX(x1), GetWindowPosY(y2) - GetWindowPosY(y1), &BitmapDC, - 0, 0, - pImageData->m_Bits.bmWidth, pImageData->m_Bits.bmHeight, SRCCOPY); - } - - - BitmapDC.SelectObject(pOldBitmap); - continue; - - } - - BitmapDC.DeleteDC(); - - - if(m_vecImageData.empty() == FALSE) - { - - pImageData = m_vecImageData[0]; - - - double nGlassSizeX = pImageData->m_Bits.bmWidth; - double nGlassSizeY = pImageData->m_Bits.bmHeight; - - - CBrush BrushGlass, *pOldBrush; - BrushGlass.CreateSolidBrush(RGB(255, 255, 255)); - - - CakRectd rectGlass; - rectGlass.set(0, 0, nGlassSizeX, nGlassSizeY); - rectGlass.MoveToXY(-nGlassSizeX / 2, -nGlassSizeY / 2); - - //글라스 외각선 그리기 태현[2016/3/23] - { - pOldBrush = (CBrush*)pDC->SelectObject(&BrushGlass); - CPen pen; - pen.CreatePen(PS_SOLID, 1, RGB(64, 191, 79)); - pDC->SelectObject(&pen); - - pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top)); - pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY(rectGlass.top)); - pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY(rectGlass.bottom)); - pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.bottom)); - pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top)); - - pDC->SelectObject(&pOldBrush); - } - } - pDC->SelectClipRgn(NULL); - - //DrawROIRect(pDC); -} - -void CakImageView::OnMouseInput(akMouseEvent mouseevent, CPoint point) -{ - CakGraphBasic3::OnMouseInput(mouseevent, point); - - switch (mouseevent) - { - case MouseMove: - { - break; - } - case MouseLeftButtonDown: - { - if (point.x > -1 && point.x < GetScaleWidth() && - point.y > -1 && point.y < GetScaleHeight()) - { -// if (m_rectTracker.HitTest(point) < 0) -// { -// // just to demonstrate CRectTracker::TrackRubberBand -// if (m_rectTracker.TrackRubberBand(this, point, TRUE)) -// { -// Invalidate(); -// } -// } -// else if (m_rectTracker.Track(this, point, TRUE)) -// { -// Invalidate(); -// } - } - - CRect rect; - this->GetClientRect(rect); - - point.x += m_nHScroll; - point.y += m_nVScroll; - /*m_pParentWnd->SendMessage(WM_LBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y));*/ - } - break; - case MouseLeftButtonUp: - { - CRect rect; - this->GetClientRect(rect); - - point.x += m_nHScroll; - point.y += m_nVScroll; - /* m_pParentWnd->SendMessage(WM_LBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y));*/ - - if (GetTrackerRect(m_rtROIRect)) - { - m_sROIInfo.nWidthPixel = m_rtROIRect.Width(); - m_sROIInfo.nHeightPixel = m_rtROIRect.Height(); - m_sROIInfo.dDiagonalPixel = sqrt(double(m_sROIInfo.nWidthPixel*m_sROIInfo.nWidthPixel + m_sROIInfo.nHeightPixel*m_sROIInfo.nHeightPixel)); - - m_sROIInfo.dWidthRealUM = m_sROIInfo.nWidthPixel * (m_dResolution / m_dWidthScale); - m_sROIInfo.dHeightRealUM = m_sROIInfo.nHeightPixel * (m_dResolution / m_dHeightScale); - m_sROIInfo.dDiagonalRealUM = sqrt((m_sROIInfo.dWidthRealUM*m_sROIInfo.dWidthRealUM) + (m_sROIInfo.dHeightRealUM*m_sROIInfo.dHeightRealUM)); - - Invalidate(TRUE); - } - } - break; - } -} - -CakDataImage2::CakDataImage2(void) -{ -} - -CakDataImage2::~CakDataImage2(void) -{ -} - -int CakDataImage2::SetImageData(char* pFileName, int nImageIndex /*= 0*/) -{ - HBITMAP hBitmap = NULL; - hBitmap = (HBITMAP)LoadImage(NULL, pFileName, IMAGE_BITMAP, 0, 0, - LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); - - _DataImage2* pNewImage; - - if (hBitmap) - { - pNewImage = new _DataImage2; - - pNewImage->m_Bitmap.Attach(hBitmap); - pNewImage->m_Bitmap.GetBitmap(&pNewImage->m_Bits); - pNewImage->m_pBitmapData = (unsigned char*)pNewImage->m_Bits.bmBits; - pNewImage->m_nDrawPosX = -pNewImage->m_Bits.bmWidth / 2; - pNewImage->m_nDrawPosY = -pNewImage->m_Bits.bmHeight / 2; - } - else - { - CImage imgJPG; - HRESULT ret = imgJPG.Load(pFileName); - if (ret == S_OK) - { - pNewImage = new _DataImage2; - pNewImage->m_Bitmap.Attach(imgJPG.Detach()); - pNewImage->m_Bitmap.GetBitmap(&pNewImage->m_Bits); - pNewImage->m_pBitmapData = (unsigned char*)pNewImage->m_Bits.bmBits; - pNewImage->m_nDrawPosX = -pNewImage->m_Bits.bmWidth / 2; - pNewImage->m_nDrawPosY = -pNewImage->m_Bits.bmHeight / 2; - } - else - { - return 0; - } - } - - if (m_vecImageData.size() <= nImageIndex) - { - m_vecImageData.push_back(pNewImage); - } - else - { - _DataImage2* pDelImage = m_vecImageData[nImageIndex]; - m_vecImageData[nImageIndex] = pNewImage; - pDelImage->m_Bitmap.DeleteObject(); - delete pDelImage; - } - return 1; -} - -int CakDataImage2::GetScaleWidth() -{ - CRect rect; - int nWidth; - - //GetClientRect(rect); - if (nWidth != 0) - m_dWidthScale = double(rect.Width()) / double(nWidth); - return int(double(nWidth) * m_dWidthScale + 0.5); -} - -int CakDataImage2::GetScaleHeight() -{ - CRect rect; - int nHeight;// = GetHeight(); - - //GetClientRect(rect); - if (nHeight != 0) - m_dHeightScale = double(rect.Height()) / double(nHeight); - return int(double(nHeight) * m_dHeightScale + 0.5); -} - -BOOL CakDataImage2::GetTrackerRect(CRect& rtRect) -{ -// if (m_rectTracker.m_rect.Width() < 0 || m_rectTracker.m_rect.Height() < 0) -// { -// return FALSE; -// } -// -// rtRect = m_rectTracker.m_rect; - - return TRUE; -} - -void CakDataImage2::DrawROIRect(CDC *pDC) -{ - if (m_rtROIRect.Width() == 0 || m_rtROIRect.Height() == 0) return; - - // CPen pen, *pOldPen; - // pen.CreatePen(PS_DOT, 1, RGB(255,255,255)); - // pOldPen = pDC->SelectObject(&pen); - // pDC->SelectStockObject(NULL_BRUSH); - // - // pDC->Rectangle(m_rtROIRect); - - CFont font; - VERIFY(font.CreateFont( - 15, // nHeight - 6, // nWidth - 0, // nEscapement - 0, // nOrientation - FW_NORMAL, // nWeight - FALSE, // bItalic - FALSE, // bUnderline - 0, // cStrikeOut - ANSI_CHARSET, // nCharSet - OUT_DEFAULT_PRECIS, // nOutPrecision - CLIP_DEFAULT_PRECIS, // nClipPrecision - DEFAULT_QUALITY, // nQuality - DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily - _T("Arial"))); // lpszFacename - - // Do something with the font just created... - CFont* def_font = pDC->SelectObject(&font); - // pDC->SetTextColor(RGB(255,255,255)); - // pDC->SetBkMode(TRANSPARENT); - pDC->SetTextColor(RGB(255, 255, 0)); - pDC->SetBkColor(RGB(0, 0, 0)); - pDC->SetBkMode(OPAQUE); - - CString strValue = _T(""); - strValue.Format(_T("[Region] %d, %d, %d, %d"), m_rtROIRect.left, m_rtROIRect.top, m_rtROIRect.right, m_rtROIRect.bottom); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 5, strValue); - - strValue.Format(_T("[Width] %d pix, %.3lf um"), m_sROIInfo.nWidthPixel, m_sROIInfo.dWidthRealUM); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 25, strValue); - - strValue.Format(_T("[Height] %d pix, %.3lf um"), m_sROIInfo.nHeightPixel, m_sROIInfo.dHeightRealUM); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 45, strValue); - - strValue.Format(_T("[Diagonal] %.3lf pix, %.3lf um"), m_sROIInfo.dDiagonalPixel, m_sROIInfo.dDiagonalRealUM); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 65, strValue); - - strValue.Format(_T("[Resol_X] %.6lf um/pixel"), (m_dResolution / m_dWidthScale)); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 85, strValue); - - strValue.Format(_T("[Resol_Y] %.6lf um/pixel"), (m_dResolution / m_dHeightScale)); - pDC->TextOut(m_rtROIRect.right + 5, m_rtROIRect.top + 105, strValue); - - pDC->SelectObject(def_font); - -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/akImageView.h b/ReviewHistory/ReveiwHistory/akImageView.h deleted file mode 100644 index a0d266a..0000000 --- a/ReviewHistory/ReveiwHistory/akImageView.h +++ /dev/null @@ -1,99 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBasic3.h" -#include <vector> - -struct SPixelInfo -{ - SPixelInfo() - { - nWidthPixel = 0; - nHeightPixel = 0; - dDiagonalPixel = 0; - dWidthRealUM = 0; - dHeightRealUM = 0; - dDiagonalRealUM = 0; - } - int nWidthPixel; - int nHeightPixel; - double dDiagonalPixel; - - double dWidthRealUM; - double dHeightRealUM; - double dDiagonalRealUM; -}; - -class CakDataImage2 -{ -public: - CakDataImage2(void); - virtual ~CakDataImage2(void); - - struct _DataImage2 - { - _DataImage2() - { - m_nDrawPosX = m_nDrawPosY = 0; - m_nRoate = 0; - m_nDrawWidth = m_nDrawHeight = 0; - - m_bReverseX = m_bReverseY = false; - } - CString m_strBitmapFilename; - CBitmap m_Bitmap; - BITMAP m_Bits; - - unsigned char* m_pBitmapData; - - //그리기 정보 [김태현 2018/12/7] - int m_nProjectionType; - int m_nDrawPosX, m_nDrawPosY; - int m_nDrawWidth, m_nDrawHeight; - float m_nRoate; - bool m_bReverseX, m_bReverseY; - }; - -public: - int SetImageData(char* pFileName, int nImageIndex = 0); //add가 아니면 0번 인덱스에 넣는다. - int GetScaleWidth(); - int GetScaleHeight(); - BOOL GetTrackerRect(CRect & rtRect); - void DrawROIRect(CDC * pDC); - int GetImageDataNum() { return m_vecImageData.size(); }; -public: - std::vector<_DataImage2*> m_vecImageData; - - double m_dWidthScale; - double m_dHeightScale; - double m_dResolution; - - BOOL m_bDrawTracker; - CPoint m_ptTrackerStart; -// CCHRectTracker m_rectTracker; - - CRect m_rtROIRect; - SPixelInfo m_sROIInfo; - - // Scroll Pos - int m_nVScroll; - int m_nHScroll; - // Max Scroll Pos - int m_nMaxVScroll; - int m_nMaxHScroll; -}; - -class CakImageView : public CakGraphBasic3, public CakDataImage2 -{ -public: - CakImageView(); - virtual ~CakImageView(); - -public: - virtual void RenderSeries(Graphics* grfx, CDC* pDC); - - virtual void SetAutoScale(); - virtual void SetResize(); - virtual void RenderImage(Graphics* grfx, CDC* pDC); - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); -}; - diff --git a/ReviewHistory/ReveiwHistory/akLoggerExt.cpp b/ReviewHistory/ReveiwHistory/akLoggerExt.cpp deleted file mode 100644 index a6723d5..0000000 --- a/ReviewHistory/ReveiwHistory/akLoggerExt.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "StdAfx.h" -#include "akLoggerExt.h" - -CakLoggerExt CakLoggerExt::m_Instance; - -CakLoggerExt::CakLoggerExt( int nBufferSize /*= 200*/, int nStringLen /*= 512 */ ) -{ - m_hParent = NULL; - m_bScrollAuto = TRUE; -} - -CakLoggerExt::~CakLoggerExt(void) -{ -} - -void CakLoggerExt::setLog( char* format, ... ) -{ - char text[512]={}; - va_list ap; - va_start(ap, format); - vsprintf(text, format, ap); - va_end(ap); - CakLogger::setLog(text); - - if(m_hParent) PostMessage(m_hParent, UM_UPDATE_LOGGER, 0, 0); -} - -void CakLoggerExt::LogFileOpen() -{ - char strFileName[256]; - - SYSTEMTIME st; - GetLocalTime(&st); - - sprintf(strFileName, "%s\\%02d%02d%02d\\%s_%02d%02d%02d.log", - "C:\\DIT_LogData\\", st.wYear, st.wMonth, st.wDay, - "logGlassRawMessenger", st.wYear, st.wMonth, st.wDay); - - ShellExecute(NULL, "Open", "NotePad.exe", strFileName, "", SW_SHOW); -} diff --git a/ReviewHistory/ReveiwHistory/akLoggerExt.h b/ReviewHistory/ReveiwHistory/akLoggerExt.h deleted file mode 100644 index 8aa2010..0000000 --- a/ReviewHistory/ReveiwHistory/akLoggerExt.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include "akCore/akLogger.h" - -#define _AKLOGGER - - -#if defined _AKLOGGER -#define AKLOG(fmt,...) CakLoggerExt::getInstance()->setLog(fmt,##__VA_ARGS__) -#else -#define AKLOG(fmt,...) -#endif - -#define UM_UPDATE_LOGGER WM_USER+0x2255 - -class CakLoggerExt : public CakLogger -{ -public: - CakLoggerExt(int nBufferSize = 200, int nStringLen = 512 ); - virtual ~CakLoggerExt(void); - - static CakLoggerExt *getInstance() {return &m_Instance;}; - virtual void setLog(char* format, ...); - void LogFileOpen();//NotePad로 열기 -public: - HWND m_hParent; - BOOL m_bScrollAuto; -protected: - static CakLoggerExt m_Instance; -}; diff --git a/ReviewHistory/ReveiwHistory/akWndArrange.cpp b/ReviewHistory/ReveiwHistory/akWndArrange.cpp deleted file mode 100644 index 3593aa8..0000000 --- a/ReviewHistory/ReveiwHistory/akWndArrange.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "StdAfx.h" -#include "akWndArrange.h" - - -CakWndArrange::CakWndArrange(void) -{ - m_pWndParent = NULL; - m_rectOriginal.SetRect(0,0,0,0); -} - - -CakWndArrange::~CakWndArrange(void) -{ - clear(); -} - -void CakWndArrange::clear() -{ - m_vecWndChild.clear(); -} - -void CakWndArrange::setParentWnd( CWnd* pWnd ) -{ - m_pWndParent = pWnd; - pWnd->GetClientRect(m_rectOriginal); -} - -void CakWndArrange::addChildWnd( CWnd* pWnd, int nStyle ) -{ - - _WndData data; - data.nStyle = nStyle; - data.hWnd = pWnd->GetSafeHwnd(); - - pWnd->GetWindowRect(&data.rectOrginal); - m_pWndParent->ScreenToClient(&data.rectOrginal); - - m_vecWndChild.push_back(data); -} - -void CakWndArrange::setChildStyle( CWnd* pWnd, int nStyle ) -{ - HWND hWnd = pWnd->GetSafeHwnd(); - for(int i=0; i<m_vecWndChild.size(); i++) - { - if(m_vecWndChild[i].hWnd == hWnd) - { - m_vecWndChild[i].nStyle = nStyle; - } - } -} - -void CakWndArrange::process( int nWidth, int nHeight ) -{ - if(nWidth*nHeight <= 0) return; - int nSize = m_vecWndChild.size(); - - _WndData WndChild; - CRect rectParentOrg = m_rectOriginal; - CRect rectNew; - for(int i=0; i<nSize; i++) - { - WndChild = m_vecWndChild[i]; - - rectNew = WndChild.rectOrginal; - if(WA_RIGHTTOP & WndChild.nStyle) - { - rectNew.left = nWidth - ((rectParentOrg.right)-WndChild.rectOrginal.left); - rectNew.right = rectNew.left + WndChild.rectOrginal.Width(); - } - else if(WA_LEFTBOTTOM & WndChild.nStyle) - { - rectNew.top = nHeight - ((rectParentOrg.bottom)-WndChild.rectOrginal.top); - rectNew.bottom = rectNew.top + WndChild.rectOrginal.Height(); - } - else if(WA_RIGHTBOTTOM & WndChild.nStyle) - { - rectNew.left = nWidth - ((rectParentOrg.right)-WndChild.rectOrginal.left); - rectNew.right = rectNew.left + WndChild.rectOrginal.Width(); - } - else if(WA_LEFTTOP & WndChild.nStyle) - { - - } - - if(WA_RESIZE_WIDTH & WndChild.nStyle) - { - rectNew.right += (nWidth-rectParentOrg.Width()); - } - if(WA_RESIZE_HEIGHT & WndChild.nStyle) - { - rectNew.bottom += (nHeight-rectParentOrg.Height()); - } - - MoveWindow(WndChild.hWnd, rectNew.left, rectNew.top, rectNew.Width(), rectNew.Height(), TRUE); - } - -} diff --git a/ReviewHistory/ReveiwHistory/akWndArrange.h b/ReviewHistory/ReveiwHistory/akWndArrange.h deleted file mode 100644 index 4ffca31..0000000 --- a/ReviewHistory/ReveiwHistory/akWndArrange.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -//다이얼로그 크기변화에 따른 크기 위치 자동 지정 태현[2016/12/23] -#include <vector> - -enum _POSSIZETYPE -{ - WA_LEFTTOP = 0x1, - WA_LEFTBOTTOM = 0x2, - WA_RIGHTTOP = 0x4, - WA_RIGHTBOTTOM = 0x8, - WA_RESIZE_WIDTH = 0x10, - WA_RESIZE_HEIGHT = 0x20, -}; - -class CakWndArrange -{ -public: - CakWndArrange(void); - virtual ~CakWndArrange(void); - -protected: - struct _WndData - { - HWND hWnd; - CRect rectOrginal; - int nStyle; - }; - -public: - void clear(); - void setParentWnd(CWnd* pWnd); - void addChildWnd(CWnd* pWnd, int nStyle); - void setChildStyle(CWnd* pWnd, int nStyle); - - void process(int nWidth, int nHeight);//void OnSize(UINT nType, int cx, int cy) 함수에서 호출 -protected: - CWnd* m_pWndParent; - CRect m_rectOriginal; - std::vector<_WndData> m_vecWndChild; -}; diff --git a/ReviewHistory/ReveiwHistory/res/History.ico b/ReviewHistory/ReveiwHistory/res/History.ico deleted file mode 100644 index 4bc9664..0000000 --- a/ReviewHistory/ReveiwHistory/res/History.ico +++ /dev/null Binary files differ diff --git a/ReviewHistory/ReveiwHistory/res/ReveiwHistory.ico b/ReviewHistory/ReveiwHistory/res/ReveiwHistory.ico deleted file mode 100644 index d56fbcd..0000000 --- a/ReviewHistory/ReveiwHistory/res/ReveiwHistory.ico +++ /dev/null Binary files differ diff --git a/ReviewHistory/ReveiwHistory/res/ReveiwHistory.rc2 b/ReviewHistory/ReveiwHistory/res/ReveiwHistory.rc2 deleted file mode 100644 index d8e7531..0000000 --- a/ReviewHistory/ReveiwHistory/res/ReveiwHistory.rc2 +++ /dev/null Binary files differ diff --git a/ReviewHistory/ReveiwHistory/resource.h b/ReviewHistory/ReveiwHistory/resource.h deleted file mode 100644 index a06eef9..0000000 --- a/ReviewHistory/ReveiwHistory/resource.h +++ /dev/null @@ -1,102 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++에서 생성한 포함 파일입니다. -// ReveiwHistory.rc에서 사용되고 있습니다. -// -#define IDM_ABOUTBOX 0x0010 -#define IDD_ABOUTBOX 100 -#define IDS_ABOUTBOX 101 -#define IDD_DLG_REVIEWHISTORY 102 -#define IDD_DIALOG_FORMLIST 104 -#define IDD_DLG_ALIGN 104 -#define IDR_MAINFRAME 128 -#define IDR_MENU1 132 -#define IDD_DLG_PATH_SETTING 133 -#define IDB_SPLASH 137 -#define IDI_ICON1 149 -#define IDR_ICON1 149 -#define IDC_BUTTON1 1000 -#define IDC_PROCESS_RUN 1000 -#define IDC_BTN_BIN_PATH 1000 -#define IDC_STATIC_FORMATIONMAP 1001 -#define IDC_EDIT_BIN_PATH 1001 -#define IDC_EDIT_RAWFILENAME 1002 -#define IDC_BTN_INSPECTOR_PATH 1002 -#define IDC_EDIT_GLASSWIDTH 1003 -#define IDC_EDIT_INSPECTOR_PATH 1003 -#define IDC_EDIT_GLASSHEIGHT 1004 -#define IDC_BTN_REVIEW_PATH 1004 -#define IDC_STATIC_FORMATIONMAP2 1004 -#define IDC_EDIT_RESULT_DEFECENUM 1005 -#define IDC_EDIT_REVIEW_PATH 1005 -#define IDC_EDIT_RESULT_GROUPROUND 1006 -#define IDC_BTN_ALIGN_PATH 1006 -#define IDC_EDIT_RESULT_GROUPLINE 1007 -#define IDC_EDIT_ALIGN_PATH 1007 -#define IDC_EDIT_RESULT_NONEGROUP 1008 -#define IDC_BTN_SAVE 1008 -#define IDC_EDIT_FILE_COUNT 1008 -#define IDC_BUTTON_SHOWLABELTEXT 1009 -#define IDC_EDIT_MERGEX 1010 -#define IDC_EDIT_MERGEY 1011 -#define IDC_EDIT_MERGELIMIT 1012 -#define IDC_CHECK_SHOWGROUPLINE 1013 -#define IDC_CHECK_SHOWGROUPINDEX 1014 -#define IDC_CHECK_SHOWDEFECTNORMAL 1015 -#define IDC_CHECK_SHOWDEFECTROUND 1016 -#define IDC_CHECK_SHOWDEFECTLINE 1017 -#define IDC_EDIT_FORMLINE_LIMITHEIGHT 1018 -#define IDC_CHECK_RAWDATAXYFLIP 1019 -#define IDC_CHECK_SHOWDEFECTCOLORTYPE 1020 -#define IDC_CHECK_SHOWDEFECTOUTLINE 1021 -#define IDC_BUTTON_MAPVIEW_FIT 1022 -#define IDC_BTN_MAPVIEW_FIT 1022 -#define IDC_CHECK_SHOWCELL 1023 -#define IDC_BUTTON_SHOWDEFECTLIST 1024 -#define IDC_COMBO_SHOWLABEL 1025 -#define IDC_COMBO_SHOWSIZE 1026 -#define IDC_BUTTON2 1026 -#define IDC_BTN_FIND_BIN 1026 -#define IDC_BUTTON_SHOWFORMLIST 1027 -#define IDC_CHECK_SHOWNOFILTEREDDEFECT 1028 -#define IDC_EDIT_RESULT_SUMMERY 1029 -#define IDC_RECT_GRIDDEFECT2 1030 -#define IDC_STATIC_GRID_GLASS 1030 -#define IDC_STATIC_GRID_ALIGN 1030 -#define IDC_COMBO_METHOD_LABEL 1031 -#define IDC_IMG_ALIGN1 1031 -#define IDC_STATIC_GRID_DEFECT 1031 -#define IDC_IMG_ALIGN2 1032 -#define IDC_STATIC_GRID_GLASS_INFO 1032 -#define IDC_STATIC_FILE_LIST 1033 -#define IDC_STATIC_DEFECT 1034 -#define IDC_STATIC_IMG_REVIEW 1035 -#define IDC_STATIC_IMG_INSPECTOR 1036 -#define IDC_STATIC_IMG_ALIGN1 1037 -#define IDC_STATIC_IMG_ALIGN2 1038 -#define IDC_SLIDER_IMG 1039 -#define IDC_EDIT_COUNT 1040 -#define IDC_CHK_All_DEFECT 1041 -#define IDC_CHK_REVIEW_DEFECT 1042 -#define IDC_BUTTON3 1043 -#define IDC_CHK_MUTI 1044 -#define IDC_CHK_SINGLE 1045 -#define IDC_STATIC_DEFECT2 1046 -#define IDC_PROGRESS_FILE 1047 -#define IDC_PROGRESS1 1048 -#define IDC_PROGRESS_LOAD 1048 -#define ID_OPTION_PATHSETTING 32771 -#define ID_VIEW_ALLDEFECT 32772 -#define ID_VIEW_REVIEWDEFECT 32773 -#define ID_ALIGN_ALIGNVIEW 32774 -#define ID_ALIGN_VIEW 32775 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 150 -#define _APS_NEXT_COMMAND_VALUE 32776 -#define _APS_NEXT_CONTROL_VALUE 1054 -#define _APS_NEXT_SYMED_VALUE 104 -#endif -#endif diff --git a/ReviewHistory/ReveiwHistory/stdafx.cpp b/ReviewHistory/ReveiwHistory/stdafx.cpp deleted file mode 100644 index 2c9e56f..0000000 --- a/ReviewHistory/ReveiwHistory/stdafx.cpp +++ /dev/null @@ -1,137 +0,0 @@ -癤� -// stdafx.cpp : �몴以� �룷�븿 �뙆�씪留� �뱾�뼱 �엳�뒗 �냼�뒪 �뙆�씪�엯�땲�떎. -// ReveiwHistory.pch�뒗 誘몃━ 而댄뙆�씪�맂 �뿤�뜑媛� �맗�땲�떎. -// stdafx.obj�뿉�뒗 誘몃━ 而댄뙆�씪�맂 �삎�떇 �젙蹂닿� �룷�븿�맗�땲�떎. - -#include "stdafx.h" - - -CCriticalSection g_criticalExe; -CCriticalSection g_criticalLog; - - -CString GetExePath() -{ - g_criticalExe.Lock(); - - static TCHAR pBuf[256] = { 0, }; - - memset(pBuf, NULL, sizeof(pBuf)); - - if (AfxGetApp()) - GetModuleFileName(AfxGetApp()->m_hInstance, pBuf, sizeof(pBuf)); - else - GetModuleFileName(NULL, pBuf, sizeof(pBuf)); - - CString strFilePath; - - strFilePath.Format(_T("%s"), pBuf); - - strFilePath = strFilePath.Left(strFilePath.ReverseFind(_T('\\'))); - - g_criticalExe.Unlock(); - - return strFilePath.GetString(); -} - -void LOG(int nType, const char* fmt, ...) -{ - g_criticalLog.Lock(); - - static _TCHAR szLog[5096]; - - FILE* fp = NULL; - CTime tm = CTime::GetCurrentTime(); - CString strLog = _T(""); - CString strPath = _T(""); - va_list args; - SYSTEMTIME cur_time; - - if (fmt == NULL) - { - g_criticalLog.Unlock(); - - return; - } - - ZeroMemory(szLog, 5096); - va_start(args, fmt); - wvsprintf(szLog, fmt, args); - va_end(args); - - strPath.Format("%s\\Log\\%s", GetExePath(), tm.Format("%Y_%m_%d_%H.log").GetString()); - - fopen_s(&fp, (LPSTR)(LPCSTR)strPath, "a+"); - - GetLocalTime(&cur_time); - - strLog.Format("%04d-%02d-%02d %02d:%02d:%02d:%03ld : ", - cur_time.wYear, - cur_time.wMonth, - cur_time.wDay, - cur_time.wHour, - cur_time.wMinute, - cur_time.wSecond, - cur_time.wMilliseconds); - - if (fp != NULL) - { - switch (nType) - { - case Normal: strLog += _T("[NORMAL ] : "); break; - case Dbg: strLog += _T("[DEBUG ] : "); break; - case Operation: strLog += _T("[OPERATION ] : "); break; - case Err: strLog += _T("[ERROR ] : "); break; - } - - strLog += szLog; - - fprintf(fp, "%s\r\n", (LPSTR)(LPCSTR)strLog); - fflush(fp); - fclose(fp); - } - - g_criticalLog.Unlock(); -} - -void INIWriteStr(CString strAppName, CString strKeyName, CString strValue, CString strFilePath) -{ - WritePrivateProfileString(strAppName, strKeyName, strValue, strFilePath); -} - -CString INIReadStr(CString strAppName, CString strKeyName, CString strFilePath) -{ - TCHAR szReturnString[1024] = { 0, }; - - memset(szReturnString, NULL, 1024); - - GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); - - CString str; - - str.Format(_T("%s"), szReturnString); - - return str; -} - -void INIWriteInt(CString strAppName, CString strKeyName, int nValue, CString strFilePath) -{ - CString str; - - str.Format(_T("%d"), nValue); - - WritePrivateProfileString(strAppName, strKeyName, str, strFilePath); -} - -int INIReadInt(CString strAppName, CString strKeyName, CString strFilePath) -{ - TCHAR szReturnString[1024] = { 0, }; - - memset(szReturnString, NULL, 1024); - - GetPrivateProfileString(strAppName, strKeyName, _T(""), szReturnString, 1024, strFilePath); - - int nRet = atoi(szReturnString); - - return nRet; -} \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/stdafx.h b/ReviewHistory/ReveiwHistory/stdafx.h deleted file mode 100644 index b9827a1..0000000 --- a/ReviewHistory/ReveiwHistory/stdafx.h +++ /dev/null @@ -1,85 +0,0 @@ -癤� -// stdafx.h : �옄二� �궗�슜�븯吏�留� �옄二� 蹂�寃쎈릺吏��뒗 �븡�뒗 -// �몴以� �떆�뒪�뀥 �룷�븿 �뙆�씪 諛� �봽濡쒖젥�듃 愿��젴 �룷�븿 �뙆�씪�씠 -// �뱾�뼱 �엳�뒗 �룷�븿 �뙆�씪�엯�땲�떎. - -#pragma once - -#ifndef VC_EXTRALEAN -#define VC_EXTRALEAN // 嫄곗쓽 �궗�슜�릺吏� �븡�뒗 �궡�슜�� Windows �뿤�뜑�뿉�꽌 �젣�쇅�빀�땲�떎. -#endif - -#include "targetver.h" - -#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // �씪遺� CString �깮�꽦�옄�뒗 紐낆떆�쟻�쑝濡� �꽑�뼵�맗�땲�떎. - -// MFC�쓽 怨듯넻 遺�遺꾧낵 臾댁떆 媛��뒫�븳 寃쎄퀬 硫붿떆吏��뿉 ���븳 �닲湲곌린瑜� �빐�젣�빀�땲�떎. -#define _AFX_ALL_WARNINGS - -#include <afxwin.h> // MFC �빑�떖 諛� �몴以� 援ъ꽦 �슂�냼�엯�땲�떎. -#include <afxext.h> // MFC �솗�옣�엯�땲�떎. - - -#include <afxdisp.h> // MFC �옄�룞�솕 �겢�옒�뒪�엯�땲�떎. - - - -#ifndef _AFX_NO_OLE_SUPPORT -#include <afxdtctl.h> // Internet Explorer 4 怨듭슜 而⑦듃濡ㅼ뿉 ���븳 MFC 吏��썝�엯�땲�떎. -#endif -#ifndef _AFX_NO_AFXCMN_SUPPORT -#include <afxcmn.h> // Windows 怨듭슜 而⑦듃濡ㅼ뿉 ���븳 MFC 吏��썝�엯�땲�떎. -#endif // _AFX_NO_AFXCMN_SUPPORT - -#include <afxcontrolbars.h> // MFC�쓽 由щ낯 諛� 而⑦듃濡� 留됰� 吏��썝 -#include <afxwin.h> -#include <afxcontrolbars.h> -#include <afxcontrolbars.h> -#include <afxcontrolbars.h> -#include <afxcontrolbars.h> -#include <afxcontrolbars.h> - - - - - - - - - -#ifdef _UNICODE -#if defined _M_IX86 -#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") -#elif defined _M_X64 -#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") -#else -#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") -#endif -#endif - -enum LogType -{ - Normal = 0, - Dbg, - Operation, - Err -}; - -#define GRID_FIX_COLOR RGB(0,128,255) -#define GRID_COLOR RGB(242,242,242) -#define GRID_TEXT_COLOR RGB(255,255,255) -#define GRID_ALARM_TEXT_COLOR RGB(255,0,0) -#define GRID_LINE_COLOR GRID_FIX_COLOR - -extern CCriticalSection g_criticalExe; -extern CCriticalSection g_criticalLog; - -CString GetExePath(); - -void LOG(int nType, const char* fmt, ...); - -CString INIReadStr(CString strAppName, CString strKeyName, CString strFilePath); -void INIWriteStr(CString strAppName, CString strKeyName, CString strValue, CString strFilePath); - -int INIReadInt(CString strAppName, CString strKeyName, CString strFilePath); -void INIWriteInt(CString strAppName, CString strKeyName, int nValue, CString strFilePath); diff --git a/ReviewHistory/ReveiwHistory/targetver.h b/ReviewHistory/ReveiwHistory/targetver.h deleted file mode 100644 index 4464219..0000000 --- a/ReviewHistory/ReveiwHistory/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -癤�#pragma once - -// SDKDDKVer.h瑜� �룷�븿�븯硫� 理쒓퀬 �닔以��쓽 媛��슜�꽦�쓣 媛�吏� Windows �뵆�옯�뤌�씠 �젙�쓽�맗�땲�떎. - -// �씠�쟾 Windows �뵆�옯�뤌�뿉 ���빐 �쓳�슜 �봽濡쒓렇�옩�쓣 鍮뚮뱶�븯�젮�뒗 寃쎌슦�뿉�뒗 SDKDDKVer.h瑜� �룷�븿�븯湲� �쟾�뿉 -// WinSDKVer.h瑜� �룷�븿�븯怨� _WIN32_WINNT 留ㅽ겕濡쒕�� 吏��썝�븯�젮�뒗 �뵆�옯�뤌�쑝濡� �꽕�젙�븯�떗�떆�삤. - -#include <SDKDDKVer.h> diff --git a/ReviewHistory/ReveiwHistory/x64/Debug/reveiwhistorydlg.obj.enc b/ReviewHistory/ReveiwHistory/x64/Debug/reveiwhistorydlg.obj.enc deleted file mode 100644 index a4d3930..0000000 --- a/ReviewHistory/ReveiwHistory/x64/Debug/reveiwhistorydlg.obj.enc +++ /dev/null Binary files differ diff --git a/ReviewHistory/ReviewHistory.sln b/ReviewHistory/ReviewHistory.sln deleted file mode 100644 index 28a1f04..0000000 --- a/ReviewHistory/ReviewHistory.sln +++ /dev/null @@ -1,37 +0,0 @@ -癤� -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.779 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReviewHistroy", "ReveiwHistory\ReveiwHistory.vcxproj", "{FDD89A84-12C4-4024-8101-0E719E2BD9F6}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - Template|x64 = Template|x64 - Template|x86 = Template|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Debug|x64.ActiveCfg = Debug|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Debug|x64.Build.0 = Debug|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Debug|x86.ActiveCfg = Debug|Win32 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Debug|x86.Build.0 = Debug|Win32 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Release|x64.ActiveCfg = Release|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Release|x64.Build.0 = Release|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Release|x86.ActiveCfg = Release|Win32 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Release|x86.Build.0 = Release|Win32 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Template|x64.ActiveCfg = Release|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Template|x64.Build.0 = Release|x64 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Template|x86.ActiveCfg = Release|Win32 - {FDD89A84-12C4-4024-8101-0E719E2BD9F6}.Template|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {9EC23A79-F150-4305-894D-F8D9C663D1D2} - EndGlobalSection -EndGlobal diff --git a/ReviewHistory/include/akCore/akBit.h b/ReviewHistory/include/akCore/akBit.h deleted file mode 100644 index 32c6701..0000000 --- a/ReviewHistory/include/akCore/akBit.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -//namespace akCore -//{ - - class AKCORE_DLLSPEC CakBit - { - public: - CakBit(void); - CakBit(int nBit); - ~CakBit(void); - - - void setBit(int nBit); - void setBitFlag(int nBitIndex, bool bFlag); - - int getBit(); - bool getBitFlag(int nBitIndex); - - - protected: - int m_nBit; - - public: - //비트 체크(on되있으면 true 반환) - static int bitChk(int orig, int target) - { - if(target<32 && (orig&(0x1 << target)))return 1; - else return 0; - } - - //비트 온 - static int bitOn(int orig, int target) - { - if(target<32)return orig|(0x1 << target); - else return orig; - } - - //비트 오프 - static int bitOff(int orig, int target) - { - if(target<32)return orig&(~(0x1 << target)); - else return orig; - } - - //비트 스위치 - static int bitTurn(int orig, int target) - { - if(target<32)return orig^(0x1 << target); - else return orig; - } - }; - -//}; \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akColorStruct.h b/ReviewHistory/include/akCore/akColorStruct.h deleted file mode 100644 index dc1b73e..0000000 --- a/ReviewHistory/include/akCore/akColorStruct.h +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - -#include "khLinker.h" - -#define _USE_MATH_DEFINES -#include <math.h> - -namespace KimHeart -{ - struct KIMHEART_DLLSPEC khVector3d - { - double pos[3]; - - khVector3d(); - khVector3d(double x,double y, double z); - inline void set(double x,double y, double z); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - inline double z(){return pos[2];}; - - double& operator()(int index){return pos[index];}; - - inline khVector3d operator+(const khVector3d& vec3d); - inline khVector3d operator-(const khVector3d& vec3d); - inline khVector3d& operator=(const khVector3d& vec3d); - inline khVector3d& operator+=(const khVector3d& vec3d); - inline khVector3d& operator-=(const khVector3d& vec3d); - khVector3d operator*(float& a) - { - khVector3d returnval; - - returnval.pos[0] = pos[0] * a; - returnval.pos[1] = pos[1] * a; - returnval.pos[2] = pos[2] * a; - - return returnval; - }; - - khVector3d operator *(khVector3d &vec) - { - khVector3d vc; - vc.pos[0] = pos[1]*vec.pos[2] - pos[2]*vec.pos[1]; - vc.pos[1] = pos[2]*vec.pos[0] - pos[0]*vec.pos[2]; - vc.pos[2] = pos[0]*vec.pos[1] - pos[1]*vec.pos[0]; - return vc; - } - - float Dot(khVector3d vec) - { - return (float)(vec.pos[0] * pos[0] + vec.pos[1] * pos[1] + vec.pos[2] * pos[2]); - }; - float Mag() - { - return (float)sqrt(pos[0]*pos[0]+pos[1]*pos[1]); - }; - void Normalize() - { - float length; - - //벡터의 길이를 계산한다. - length = (float)sqrt((pos[0]*pos[0]) + (pos[1]*pos[1]) +(pos[2]*pos[2])); - // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. - if(length == 0.0f) length = 1.0f; - - // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. - pos[0] = pos[0] / length; - pos[1] = pos[1] / length; - pos[2] = pos[2] / length; - - }; - }; - - struct KIMHEART_DLLSPEC khVector2d - { - double pos[2]; - - khVector2d(); - khVector2d(double x,double y); - inline void set(double x,double y); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - - double& operator()(int index){return pos[index];}; - - inline khVector2d operator+(const khVector2d& vec3d); - inline khVector2d operator-(const khVector2d& vec3d); - inline khVector2d& operator=(const khVector2d& vec3d); - inline khVector2d& operator+=(const khVector2d& vec3d); - inline khVector2d& operator-=(const khVector2d& vec3d); - - }; - - struct KIMHEART_DLLSPEC khColor4f - { - float color[4]; - - khColor4f(); - khColor4f(float R, float G, float B, float A=0.0f); - void set(float R, float G, float B, float A=0.0f); - inline float R(){return color[0];}; - inline float G(){return color[1];}; - inline float B(){return color[2];}; - inline float A(){return color[3];}; - inline khColor4f& operator=(const khColor4f& ksgcolor); - }; - - struct KIMHEART_DLLSPEC khRect - { - double pos[4]; - - khRect(); - khRect(double left, double top, double right, double bottom); - void set(double left, double top, double right, double bottom); - inline khRect& operator=(const khRect& rect); - inline double Left(){return pos[0];}; - inline double Top(){return pos[1];}; - inline double Right(){return pos[2];}; - inline double Bottom(){return pos[3];}; - inline double Width(){return pos[2]-pos[0];}; - inline double Height(){return pos[3]-pos[1];}; - inline void SetAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - inline bool CheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - inline bool CheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - inline bool CheckHeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - - }; -}; diff --git a/ReviewHistory/include/akCore/akCoordinate.h b/ReviewHistory/include/akCore/akCoordinate.h deleted file mode 100644 index d6273e2..0000000 --- a/ReviewHistory/include/akCore/akCoordinate.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -namespace akCore -{ - - class AKCORE_DLLSPEC CakCoordinate - { - public: - CakCoordinate(void); - ~CakCoordinate(void); - - //Degree를 도분초로 변환 - static double GetDMStoDgree(int d, int m, double s); - //도분초를 Degree로 변환 - static void GetDgreetoDMS(double degree, int* d, int* m, double* s); - //Degree값을 180방위 + 방향(W,E)로 변환 - static void GetMakeDMS180(int degree, int* rDeg, char* rDir); - //Degree값을 90방위 + 방향(S,N)로 변환 - static void GetMakeDMS90(int degree, int* rDeg, char* rDir); - //Degree값을 //-180~+180로 변환 - static double GetMakeDegree180(double degree); - //Degree값을 //-90~+90로 변환 - static double GetMakeDegree90(double degree); - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akCoreLinker.h b/ReviewHistory/include/akCore/akCoreLinker.h deleted file mode 100644 index f28ee9a..0000000 --- a/ReviewHistory/include/akCore/akCoreLinker.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once - -#pragma warning(disable:4251) - -//inline void memset4byte(void* dest, const int data, const unsigned int count) -//{ -// __asm -// { -// mov edi, dest; -// mov ecx, count -// mov eax, data -// rep stosd -// }; -//}; -typedef unsigned int uint; -typedef unsigned char byte; - -#ifdef _AKCORE_EXPORTS -#define AKCORE_DLLSPEC __declspec( dllexport ) -#else -#define AKCORE_DLLSPEC __declspec( dllimport ) -#endif - - - -#ifndef _AKCORE_EXPORTS - - #undef _AUTOLIBNAME - #undef _AKPROJECTNAME - #undef _AKVCVER - #undef _AKDEBUG - - #define _AKPROJECTNAME "akCore" - - #ifdef _DEBUG - #define _AKDEBUG "d" - #else - #define _AKDEBUG "" - #endif - - #if(_MSC_VER < 1910) - #define _AKWINDOWSDK "" - #else - #define _AKWINDOWSDK "_WS10" - #endif - - - #ifdef WIN64 - #define _AKX64 "_x64" - #elif _WIN64 - #define _AKX64 "_x64" - #else - #define _AKX64 "" - #endif - - #define _AUTOLIBNAME _AKPROJECTNAME""_AKDEBUG""_AKWINDOWSDK""_AKX64".lib" - - // You may turn off this include message by defining _NOPSAUTOLIB - #ifndef _NOPSAUTOLIBMSG - #pragma message( ">>Kim Tae Hyun - akCore<< Will automatically link with " _AUTOLIBNAME ) - #endif - #pragma comment(lib, _AUTOLIBNAME) -#endif diff --git a/ReviewHistory/include/akCore/akDE.h b/ReviewHistory/include/akCore/akDE.h deleted file mode 100644 index 445c9e6..0000000 --- a/ReviewHistory/include/akCore/akDE.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -#define _USE_MATH_DEFINES - -#include <math.h> -#include <windows.h> - - -namespace akCore -{ - class AKCORE_DLLSPEC CakDE { - public: - CakDE(void); - ~CakDE(void); - // TODO: 여기에 메서드를 추가합니다. - - public: - /** - * 함수명 : getMovingPostion - * 현제의 좌표로부터 속도와 시간만큼 움직였을때의 좌표 도출 - * Parameters: - * double* posX //X좌표(결과값 반환) - * double* posY //Y좌표(결과값 반환) - * double* posZ //Z좌표(결과값 반환) - * double heading //Heading(0~360) - * double pitch //Pitch(0~360) - * double velocity //속도(m/s - * unsigned int Framerate //프레임(Hz) - * Returns: - * 정상적인 계산 완료시 True 반환 - */ - bool getMovingPostion(double* posX,double* posY,double* posZ,double heading,double pitch, double velocity, unsigned int Framerate); - bool getNextPostion(double* posX,double* posY,double* posZ,double heading,double pitch, double velocity, double Dt); - - /** - * 함수명 : getRotatePostion - * 현제 좌표로부터 Heading,Pitch방향으로 정해진 값만큼 움직였을때 좌표 도출 - * Parameters: - * double* posX //X좌표(결과값 반환) - * double* posY //Y좌표(결과값 반환) - * double* posZ //Z좌표(결과값 반환) - * double heading //Heading(0~360) - * double pitch //Pitch(0~360) - * double radius //거리 - * Returns: - * 정상적인 계산 완료시 True 반환 - */ - bool getRotatePostion(double* posX, double* posY, double* posZ, double heading, double pitch, double radius); - - /** - * 함수명 : getAngle3d - * 두 좌표가 이루는 각을 환산 - * Parameters: - * double x1 // 첫번째 좌표 - * double y1 // 첫번째 좌표 - * double z1 // 첫번째 좌표 - * double x2 // 두번째 좌표 - * double y2 // 두번째 좌표 - * double z2 // 두번째 좌표 - * double heading //Heading(결과값 반환) - * double pitch //Pitch(결과값 반환) - * Returns: - */ - void getAngle3d(double x1, double y1, double z1, double x2, double y2, double z2, double* heading, double* pitch); - - /** - * 함수명 : AngleClosing - * 두 각의 간격 크기 - * Parameters: - * double center // 중심 각 - * double angle // 회전 각 - * int option // 0은 무조건 가까운쪽 각 - * Returns: - * 중심각과 회전각의 간격 반환 - */ - double GetAngleClosing(double center, double angle, int option = 0); - - /** - * 함수명 : GetAngle360 - * 각을 0~360도 환산 - * Parameters: - * double angle // 입력 각 - * Returns: - * 0~360도로 환산된 각 - */ - inline double GetAngle360(double angle); - - /** - * 함수명 : GetAngle180 - * 각을 -180~180도 환산 - * Parameters: - * double angle // 입력 각 - * Returns: - * -180~180도로 환산된 각 - */ - static inline double GetAngle180(double angle); - - - - static void getRoate2d(double angle, double orgx,double orgy, double* x, double* y); - - double distance3d(double x1, double y1, double z1, double x2, double y2, double z2); - - void rotateposition3d(double x1,double y1, double z1, double* x2, double* y2, double* z2, double h, double p); - - void axisrotate( double* nx, double* ny, double* nz, - double cx, double cy, double cz, - double tx, double ty, double tz, - double heading, double pitch, double roll ); - - bool missilesim(double msx, double msy, double msz, double msh, double msp, double msah, double msap, double tgx, double tgy, double tgz, double velocty, double acceleration, int FrameRate); - - inline static double getHeading(double x , double y); - - inline double RadianToDegree(double radian); - inline double DegreeToRadian(double degree); - inline bool GetCheckAngleRange(double p1, double stAngle, double endAngle); - private: - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akDE2.h b/ReviewHistory/include/akCore/akDE2.h deleted file mode 100644 index 9612d37..0000000 --- a/ReviewHistory/include/akCore/akDE2.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once - - -#include "akLinker.h" - -#define _USE_MATH_DEFINES - -#include <math.h> -#include <windows.h> - - -namespace akCore -{ - class akCore_DLLSPEC CakDE { - public: - CakDE(void); - ~CakDE(void); - // TODO: 여기에 메서드를 추가합니다. - - public: - /** - * 함수명 : getMovingPostion - * 현제의 좌표로부터 속도와 시간만큼 움직였을때의 좌표 도출 - * Parameters: - * double* posX //X좌표(결과값 반환) - * double* posY //Y좌표(결과값 반환) - * double* posZ //Z좌표(결과값 반환) - * double heading //Heading(0~360) - * double pitch //Pitch(0~360) - * double velocity //속도(m/s - * unsigned int Framerate //프레임(Hz) - * Returns: - * 정상적인 계산 완료시 True 반환 - */ - bool getMovingPostion(double* posX,double* posY,double* posZ,double heading,double pitch, double velocity, unsigned int Framerate); - bool getNextPostion(double* posX,double* posY,double* posZ,double heading,double pitch, double velocity, double Dt); - - /** - * 함수명 : getRotatePostion - * 현제 좌표로부터 Heading,Pitch방향으로 정해진 값만큼 움직였을때 좌표 도출 - * Parameters: - * double* posX //X좌표(결과값 반환) - * double* posY //Y좌표(결과값 반환) - * double* posZ //Z좌표(결과값 반환) - * double heading //Heading(0~360) - * double pitch //Pitch(0~360) - * double radius //거리 - * Returns: - * 정상적인 계산 완료시 True 반환 - */ - bool getRotatePostion(double* posX, double* posY, double* posZ, double heading, double pitch, double radius); - - /** - * 함수명 : getAngle3d - * 두 좌표가 이루는 각을 환산 - * Parameters: - * double x1 // 첫번째 좌표 - * double y1 // 첫번째 좌표 - * double z1 // 첫번째 좌표 - * double x2 // 두번째 좌표 - * double y2 // 두번째 좌표 - * double z2 // 두번째 좌표 - * double heading //Heading(결과값 반환) - * double pitch //Pitch(결과값 반환) - * Returns: - */ - void getAngle3d(double x1, double y1, double z1, double x2, double y2, double z2, double* heading, double* pitch); - - /** - * 함수명 : AngleClosing - * 두 각의 간격 크기 - * Parameters: - * double center // 중심 각 - * double angle // 회전 각 - * int option // 0은 무조건 가까운쪽 각 - * Returns: - * 중심각과 회전각의 간격 반환 - */ - double GetAngleClosing(double center, double angle, int option = 0); - - /** - * 함수명 : GetAngle360 - * 각을 0~360도 환산 - * Parameters: - * double angle // 입력 각 - * Returns: - * 0~360도로 환산된 각 - */ - inline double GetAngle360(double angle); - - /** - * 함수명 : GetAngle180 - * 각을 -180~180도 환산 - * Parameters: - * double angle // 입력 각 - * Returns: - * -180~180도로 환산된 각 - */ - static inline double GetAngle180(double angle); - - - - static void getRoate2d(double angle, double orgx,double orgy, double* x, double* y); - - double distance3d(double x1, double y1, double z1, double x2, double y2, double z2); - - void rotateposition3d(double x1,double y1, double z1, double* x2, double* y2, double* z2, double h, double p); - - void axisrotate( double* nx, double* ny, double* nz, - double cx, double cy, double cz, - double tx, double ty, double tz, - double heading, double pitch, double roll ); - - bool missilesim(double msx, double msy, double msz, double msh, double msp, double msah, double msap, double tgx, double tgy, double tgz, double velocty, double acceleration, int FrameRate); - - inline static double getHeading(double x , double y); - - inline double RadianToDegree(double radian); - inline double DegreeToRadian(double degree); - inline bool GetCheckAngleRange(double p1, double stAngle, double endAngle); - private: - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akDefine.h b/ReviewHistory/include/akCore/akDefine.h deleted file mode 100644 index e885285..0000000 --- a/ReviewHistory/include/akCore/akDefine.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - - - -#define AK_SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } -#define AK_SAFE_DELETE_ARRAY(p) { if(p) { delete [] (p); (p)=NULL; } } - -#define AK_SAVE_DELETE_DIALOG(Dlg) { if(p) { delete (p); (p)=NULL; } } - -#define AK_SWAP_DOUBLE(a,b) { double t=a; a=b; b=t; } \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akFileDB.h b/ReviewHistory/include/akCore/akFileDB.h deleted file mode 100644 index 1bef2aa..0000000 --- a/ReviewHistory/include/akCore/akFileDB.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -#include <atlstr.h> -#include <map> -#include <vector> -#include <Windows.h> - -//hash_map을 사용하는 경우 -//1. 많은 자료를 저장하고, 검색 속도가 빨라야 한다. -//2. 너무 빈번하게 자료를 삽입, 삭제 하지 않는다. -#define ITEMSEP "_#" //구분자 - -#define mapIDVal std::map<CString, CString> -#define mapIDValIt mapIDVal::iterator - - - -class AKCORE_DLLSPEC CakFileDB -{ -public: - CakFileDB(void); - ~CakFileDB(void); - - bool openfile(char* filename); - bool savefile(char* filename); - void clear(); - - void setWriteEnter(); //동기화 객체 시작 - void setWriteRelease(); //동기화 객체 중지 - - //단일 데이터 - void setItem(char* strKey, char* strVal); - void setItem(char* strKey, int nVal); - void setItem(char* strKey, float fVal); - void setItem(char* strKey, double dVal); - void setItem(char* strKey, long dVal); - - void getItem(char* strKey, CString* strVal, char* strDefaultVal = ""); - void getItem(char* strKey, char* strVal, char* strDefaultVal = ""); - void getItem(char* strKey, int* nVal, int nDefaultVal = 0); - void getItem(char* strKey, float* fVal, float fDefaultVal = 0); - void getItem(char* strKey, double* dVal, double dDefaultVal = 0); - void getItem(char* strKey, long* dVal, long dDefaultVal = 0); - - char* getItemPoint(char* strKey); - - //다중 데이터 관리 - void setItemClear(char* strKey); - int getItemNum(char* strKey); - - void setItem(int nIndex, char* strKey, char* strVal); - void setItem(int nIndex, char* strKey, int nVal); - void setItem(int nIndex, char* strKey, float fVal); - void setItem(int nIndex, char* strKey, double dVal); - - void getItem(int nIndex, char* strKey, CString* strVal, char* strDefaultVal = ""); - void getItem(int nIndex, char* strKey, char* strVal, char* strDefaultVal = ""); - void getItem(int nIndex, char* strKey, int* nVal, int nDefaultVal = 0); - void getItem(int nIndex, char* strKey, float* fVal, float fDefaultVal = 0); - void getItem(int nIndex, char* strKey, double* dVal, double dDefaultVal = 0); - - char* getItemPoint(int nIndex, char* strKey); - - - - - int deleteItem(char* strKey); // - int deleteItem(int nIndex); // - - - -protected: - mapIDVal m_mapData; - std::vector<mapIDValIt> m_vecOrder; - - CRITICAL_SECTION m_csAkFileDB; - -}; diff --git a/ReviewHistory/include/akCore/akFileDBHash.h b/ReviewHistory/include/akCore/akFileDBHash.h deleted file mode 100644 index 20a690c..0000000 --- a/ReviewHistory/include/akCore/akFileDBHash.h +++ /dev/null @@ -1,72 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -#include <map> -#include <hash_map> -#include <string> -#include <Windows.h> -#include <atlstr.h> - -//hash_map을 사용하는 경우 -//1. 많은 자료를 저장하고, 검색 속도가 빨라야 한다. -//2. 너무 빈번하게 자료를 삽입, 삭제 하지 않는다. -//3. key값으로 Cstring을 쓰지 못한다.(구분해서 클래스를 만든 이유!!) -#define ITEMSEP "_#" //구분자 - - - -//#define mapIDVal std::multimap<CString, CString> -#define mapHash stdext::hash_map<std::string, std::string> -#define mapHashIt mapHash::iterator - -class AKCORE_DLLSPEC CakFileDBHash -{ -public: - CakFileDBHash(void); - ~CakFileDBHash(void); - bool openfile(char* filename); - bool savefile(char* filename); - void clear(); - - void setWriteEnter(); //동기화 객체 시작 - void setWriteRelease(); //동기화 객체 중지 - - //단일 데이터 - void setItem(char* strKey, char* strVal); - void setItem(char* strKey, int nVal); - void setItem(char* strKey, float fVal); - void setItem(char* strKey, double dVal); - - void getItem(char* strKey, CString* strVal, char* strDefaultVal = ""); - void getItem(char* strKey, char* strVal, char* strDefaultVal = ""); - void getItem(char* strKey, int* nVal, int nDefaultVal = 0); - void getItem(char* strKey, float* fVal, float fDefaultVal = 0); - void getItem(char* strKey, double* dVal, double dDefaultVal = 0); - - char* getItemPoint(char* strKey); - - //다중 데이터 관리 - void setItemClear(char* strKey); - int getItemNum(char* strKey); - - void setItem(int nIndex, char* strKey, char* strVal); - void setItem(int nIndex, char* strKey, int nVal); - void setItem(int nIndex, char* strKey, float fVal); - void setItem(int nIndex, char* strKey, double dVal); - - void getItem(int nIndex, char* strKey, CString* strVal, char* strDefaultVal = ""); - void getItem(int nIndex, char* strKey, char* strVal, char* strDefaultVal = ""); - void getItem(int nIndex, char* strKey, int* nVal, int nDefaultVal = 0); - void getItem(int nIndex, char* strKey, float* fVal, float fDefaultVal = 0); - void getItem(int nIndex, char* strKey, double* dVal, double dDefaultVal = 0); - - char* getItemPoint(int nIndex, char* strKey); - - - -protected: - mapHash m_mapData; - - CRITICAL_SECTION m_csAkFileDB; -}; diff --git a/ReviewHistory/include/akCore/akFileMgr.h b/ReviewHistory/include/akCore/akFileMgr.h deleted file mode 100644 index 9c50e5c..0000000 --- a/ReviewHistory/include/akCore/akFileMgr.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - - - -#include "akCoreLinker.h" -#include <vector> - -struct AKCORE_DLLSPEC _Attribute -{ - _Attribute() - { - memset(Title , 0, sizeof(char)*128); - memset(Attribute , 0, sizeof(char)*128); - memset(Value , 0, sizeof(char)*128); - } - char Title[128]; - char Attribute[128]; - char Value[128]; -}; - -struct AKCORE_DLLSPEC _Title -{ - _Title(char* title) - { - strcpy(Title, title); - }; - bool compare(char* title) - { - if(strcmp(title, Title) == 0 && strlen(title) == strlen(Title)) - { - return true; - } - return false; - }; - void clear() - { - memset(Title, 0, sizeof(char)*128); - }; - char Title[128]; -}; - -namespace akCore -{ - class AKCORE_DLLSPEC CakFileMgr - { - public: - CakFileMgr(void); - ~CakFileMgr(void); - - //타이틀 설정(OpenFile()함수와 MakeFile()함수를 호출하면 타이틀셋팅은 Null이 된다) - void SetTitle(char* title); - - //쓰기 관련 - //타이틀을 정한다. - bool SetAttribute(char* Attribute, int value); - bool SetAttribute(char* Attribute, double value); - bool SetAttribute(char* Attribute, char* value); - bool SetAttribute(char* Attribute, float value); - //쓰기 버퍼에 저장된 데이터를 파일로 저장 - bool MakeFile(char* filepath); - - - //읽기 관련 - //파일 열기(쓰기준비중이였다면 쓰기 버퍼는 초기화 된다) - bool OpenFile(char* filepath); - bool GetAttribute(char* Attribute, int& value); - bool GetAttribute(char* Attribute, double& value); - bool GetAttribute(char* Attribute, char* value); - bool GetAttribute(char* Attribute, float& value); - - private: - //빠른 찾기를 위해서 저장된 데이터 정렬 - void DataSort(); - char m_Title[128]; - std::vector<_Attribute> m_data; - - char* m_buffer; - int m_fastIndex; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akFileMgrAdv.h b/ReviewHistory/include/akCore/akFileMgrAdv.h deleted file mode 100644 index a0b54bc..0000000 --- a/ReviewHistory/include/akCore/akFileMgrAdv.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include <vector> - -//파일 구조 -//float version; -//size_t structTotalSize;//구조체 총 크기 -//size_t structNum;//구조체 갯수 -//char rev[128]; //예약된 임시공간 -//size_t nSize[] 각각의 구조체 크기 -//void* pData //실제 데이터 저장 공간 - -namespace akCore -{ - struct AKCORE_DLLSPEC _akFileMgrHeader - { - float version; - - size_t structTotalSize;//구조체 총 크기 - size_t structNum;// - char rev[128]; - }; - - class AKCORE_DLLSPEC CakFileMgrAdv - { - public: - CakFileMgrAdv(void); - ~CakFileMgrAdv(void); - - public: - //파일 쓰기 - bool writeFile(char* pFileName, float fVer=1.0); - - //파일 읽기 - //0은 실패 1은 정상 - //10001 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10002 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10003 읽어올 구조체와 파일크기가 같음. 하지만 구조체 구성이 다름(struct size == file size) - int readFile(char* filepath, bool bErrorCheck = false); - - //데이터/크기 수정(기존의 파일정보를 읽어서 새 데이터로 수정) - bool editFile(char* filepath, int nIndex, void* pData, size_t nSize); - - - //데이터/크기 초기화 - void clear(); - //데이터/크기 추가 - void addDataSize(void* pData, size_t nSize); - //데이터/크기 수정 - void setDataSize(int nIndex, void* pData, size_t nSize); - - _akFileMgrHeader getFileHeaderInfo(char* pFileName); - - - - - private: - struct _datasize - { - _datasize(void* pData1, size_t nSize1) - { - pData = pData1; - nSize = nSize1; - } - void* pData; - size_t nSize; - }; - std::vector<_datasize> m_vecData; - - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akFileMgrB.h b/ReviewHistory/include/akCore/akFileMgrB.h deleted file mode 100644 index cab9409..0000000 --- a/ReviewHistory/include/akCore/akFileMgrB.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include <vector> - - - - -namespace akCore -{ - class AKCORE_DLLSPEC CakFileMgrB - { - public: - CakFileMgrB(void); - ~CakFileMgrB(void); - - //쓰기 관련 - void SetDataSize(unsigned int HeadSize, unsigned int BodySize); - bool SetHead(void* head); - bool AddBody(void* body); - void ClearWriteBuffer(); //쓰기할려고 저장한 데이터 모두 삭제 - - //읽기 관련 - void MakeFile(char* filepath); - bool OpenFile(char* filepath); - void* GetBodyData(); - void* GetHeadData(); - int MoveNext(); - void ClearReadBuffer(); - - private: - int m_headSize, m_bodySize; - void* m_WriteHead; - std::vector<void*> m_vecWriteBody; - int m_readindex; - void* m_ReadHead; - std::vector<void*> m_vecReadBody; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akFileUtil.h b/ReviewHistory/include/akCore/akFileUtil.h deleted file mode 100644 index 810f368..0000000 --- a/ReviewHistory/include/akCore/akFileUtil.h +++ /dev/null @@ -1,79 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -#include <vector> -#include <io.h> - - -using namespace std; -typedef vector<_finddatai64_t> VECFINDDATA; - -class AKCORE_DLLSPEC CakFileUtil -{ -public: - CakFileUtil(void); - virtual ~CakFileUtil(void); - - //분석결과 초기화 - void clear(); - - //파일 찾기 - void FindFile(char* pTargetPathName, bool bFindSubDir = true); - //파이 이름 변경 - void RenameFile(char* pTargetPathName, char* pNewFileName, bool bFindSubDir = true); - void RenameFile(char* pTargetPathName, char* pFindWord, char* pReplaceWord, bool bFindSubDir = true); - //파일삭제 - void DeleteFiles( char* pTargetPathName, bool bFindSubDir /*= true*/ ); - - //폴더 찾기 - void FindFolder(char* pTargetPath, bool bFindSubDir = true); - //폴더 이름 변경 - void RenameFolder(char* pTargetPath, char* pNewFolderName, bool bFindSubDir = true); - void RenameFolder(char* pTargetPath, char* pFindWord, char* pReplaceWord, bool bFindSubDir = true); - //폴더 삭제 - static void DeleteFolder( char* pTargetPath, bool bFindSubDir /*= true*/ ); - - //마지막 에러 정보 - int getLastError(){return m_nLastError;}; - - //분석 결과 얻기 - VECFINDDATA* getFindData(){return &m_vecFinds;}; - int getFindSubDirCount(){return m_nFindSubCount;}; - VECFINDDATA* getProcessData(){return &m_vecProcess;}; - _finddatai64_t* getFindData(char* pName); - char* getProcessPath(){return m_nProcessPath;}; - - //폴더간 복사 태현[2016/4/5] - static int CopyFolder(char* strSrc, char* strDest, bool bSubDir = true); - static int MoveFolder(char* strSrc, char* strDest, bool bSubDir = true); - - static void MakeDirectory(char* pPath); - - //일반기능함수 - static char* getFileName(char* pPathFileName); - static char* getFileExt(char* pPathFileName); - static void getPath(char* strDest, int nDestSize, const char* strSource); - static int getLastPath(char* strDest, int nDestSize, char* strSource); - static char* getLastPath(char* pPath); - - - //경로정리 변경(ex. ./aaa/bb/./bbb/../ -> ./aaa/bb/) - static void changeAbsolutePath(char* pPathFileName); - - static int isNetworkPath(char* pPath);//네티워크 경로가 맞다면 끝부분 경로를 반환한다. 태현[2016/4/8] -protected: - void FindFileSubDir(char* pTargetPath, char* pWildcard); - //void DeleteFolderSubDir(char* pTargetPath); - void makeAbPathWildcard(char* pTargetPath, char* pNewPath, int nNewPathSize, char* pWildcard, int nWildcardSize); //절대 경로 생성과 와일드 카드를 분리 하는 역할 - void FindFolderSubDir(const char* pTargetPath, const char* pWildcard); - void makeAbPathWildcardFolder(char* pTargetPath, char* pNewPath, int nNewPathSize, char* pWildcard, int nWildcardSize); //절대 경로 생성과 와일드 카드를 분리 하는 역할(폴더로 구성되었을 경우) - -protected: - char m_nProcessPath[512]; - VECFINDDATA m_vecFinds; - VECFINDDATA m_vecProcess; - int m_nLastError; - int m_nFindSubCount; -}; diff --git a/ReviewHistory/include/akCore/akInterpolation.h b/ReviewHistory/include/akCore/akInterpolation.h deleted file mode 100644 index 07c2a08..0000000 --- a/ReviewHistory/include/akCore/akInterpolation.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include <vector> - -namespace akCore -{ - class AKCORE_DLLSPEC CakInterpolation - { - public: - struct _Data - { - _Data() - { - x = y = 0; - } - double x; - double y; - }; - - public: - CakInterpolation(); - ~CakInterpolation(); - - //폴리노미얼 데이터 생성(rate:데이터 간격) - void CaculationPolinomial(double min, double max, double rate); - //큐빅스플라인 데이터 생성(rate:점과 점사이의 데이터 갯수) - void CaculationCubicSpline(double rate); - //Linear(rate:점과 점사이의 데이터 갯수) - void CaculationLinear(int step); - - void AddPoint(double x, double y); - inline void ClearPoint(){m_vecInterPoint.clear();}; - - inline _Data GetData(int index); - inline int GetDataNum(){return (int)m_vecInterPoint.size();}; - - - - - protected: - std::vector<_Data> m_vecOrgPoint; - std::vector<_Data> m_vecInterPoint; - private: - void solveTridiag(double* khb, double* diag, double* khp, double* b, int n) ; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akLogger.h b/ReviewHistory/include/akCore/akLogger.h deleted file mode 100644 index 7a4e5f8..0000000 --- a/ReviewHistory/include/akCore/akLogger.h +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" -#include <queue> -#include <windows.h> -#include "akSTL/akQueueCircle.h" - -class AKCORE_DLLSPEC CakLogger -{ -public: - CakLogger(int nBufferSize = 200, int nStringLen = 512 ); - virtual ~CakLogger(void); - - struct _LoggerData - { - unsigned int nIndex; - char nLevel; - char nSection; - //char strDate[16]; - //char strTime[16]; - SYSTEMTIME stTime; - char* pData; - }; - - //pFileName을 C:\AOIServer\Log\AOILog <- 여기 까지 기입, 그러면 뒤에 날자 붙이고 .log붙여서 파일명 완성 [김태현 2018/11/19] - virtual void setWriteFileMode(char* pFileName, int nIntervalWrite = 500); - //dit 로그 모드 - virtual void setWriteFileMode2(char* pPathName, char* pFileName, int nIntervalWrite = 500); - - //TRACE - virtual void setLog(char* format, ...); - virtual void getDateTime(char* pStrDate, char* pStrTime); - - virtual void setLogDataToFile(FILE* pf, _LoggerData* pData); //함수 호출전에 동기화 해야함. [김태현 2018/11/19] - - void resetLogCount(BOOL bWaitWrite = TRUE); - - _LoggerData* GetLogData(int nIdx); //가장 나중에 쓴 로그가 0번 [김태현 2018/11/19] - int GetLogDataNum(){return m_nLogCount<m_nLogBufferSize?m_nLogCount:m_nLogBufferSize;}; //가장 최근이 0 [김태현 2018/11/19] - -public: - int getBufferSize(){return m_nLogBufferSize;}; - int getLogStringLen(){return m_nLogStringLen;}; - -protected: - static void threadLogFileSave(void* pArg); - virtual void funcLogFileSave(); - int m_nThreadFlag; - int m_nFileSaveIndex; - -protected: - int m_nLogBufferSize; - int m_nLogStringLen; - _LoggerData* m_pLogData; - - unsigned long m_nLogCount; - int m_nLogInputIndex; // [김태현 2018/11/19] - int m_nLogWriteIndex; - - - int m_nLogFileType; //0은 기존 모드, 1은 날자가 앞에 있는 모드 - char m_strLogPathName[256]; - char m_strLogFileName[256]; - int m_nLogFileWriteInterval; - - - CRITICAL_SECTION m_csTrace; - -}; diff --git a/ReviewHistory/include/akCore/akMath.h b/ReviewHistory/include/akCore/akMath.h deleted file mode 100644 index 886716a..0000000 --- a/ReviewHistory/include/akCore/akMath.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include "akStruct.h" - - -namespace akCore -{ - - class AKCORE_DLLSPEC CakMath - { - public: - CakMath(void); - ~CakMath(void); - - public: - //세점이 이루는 각도를 산출 - double GetAngle3Point(double cX, double cY, double x1, double y1, double x2, double y2 ); - //평면 폴리곤위에 점이 존재 하는지 검사 - bool GetIsPointOnPolygon(akVector2d point, akVector2d* polygon, int length); - //한 선위에 점이 있는지 검사 - bool GetLineOnPoint(akVector3d point, akVector3d line1, akVector3d line2); - //2d 회전 좌표(중심점에서 - akVector2d GetRotatePosition(akVector2d center, akVector2d point1, double angle); - - //두선의 교차점 구하기(교차점이 있으면 true 반환) - bool GetIntersectPoint(akVector2d a1, akVector2d a2, akVector2d b1, akVector2d b2, akVector2d* IP); - - //사각형과 직선 교차점 구하기(교차점이 있으면 true 반환) - //bool GetIntersectRectLine(CakRectd rectSqure, CakPointd p1, CakPointd p2, CakPointd* pResult, int* pResultFaceID); - //사각형과 폴리곤의 교차점 구하기(교차점이 있으면 true 반환) - //bool GetIntersectRectPolygon(CakRectd rectSqure, CakPointd* pPolygon, int nPolygonNum, CakPointd* pResult, int* pResultNum); - - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akMatrix.h b/ReviewHistory/include/akCore/akMatrix.h deleted file mode 100644 index 460f543..0000000 --- a/ReviewHistory/include/akCore/akMatrix.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -namespace akCore -{ - class AKCORE_DLLSPEC CakMatrix4x4 - { - public: - CakMatrix4x4(void); - ~CakMatrix4x4(void); - - inline bool MatrixClear(); //매트릭스 리셋 - inline bool SetMatrix(double *matrix); //매트릭스 세팅 - inline bool SetRotateH(double H); //회전 매트리릭스 곱셈 - inline bool SetRotateP(double P); //회전 매트리릭스 곱셈 - inline bool SetRotateR(double R); //회전 매트리릭스 곱셈 - inline bool SetTransform(double x, double y, double z); //이동 매트리릭스 곱셈 - inline bool MakeResult(double* x, double* y, double* z);//매트릭스 적용 좌표값 산출 - inline bool MakeResult(float* x, float* y, float* z);//매트릭스 적용 좌표값 산출 - inline void MatrixPrint(); //현재 매트릭스 출력 - inline CakMatrix4x4& operator=(const CakMatrix4x4& matrix); - inline CakMatrix4x4& operator*(const CakMatrix4x4& matrix); - protected: - inline bool Multiplication(double* matrix); //현재 매트릭스에 입력값 곱셈 - - public: - double m_Matrix[16]; - - - private: - bool m_bSet; //초기화가 되어있는지 확인 - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akPathFileUtil.h b/ReviewHistory/include/akCore/akPathFileUtil.h deleted file mode 100644 index 3f137c9..0000000 --- a/ReviewHistory/include/akCore/akPathFileUtil.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -//akAdvBackup에 if(PathFileExists(strFilePathName.GetBuffer()))등의 내용을 참고할것!! 태현[2016/2/17] - -namespace akCore -{ - class AKCORE_DLLSPEC akPathFileUtil - { - public: - akPathFileUtil(void); - ~akPathFileUtil(void); - - static bool CopytoFile(char* srcfilename, char* cpyfilename); - //상대경로가 '/', '\\'로 시작하면 안됨(나중에 수정하도록 하자..API문제인듯) - static bool CopytoFolder(char* srcfilename, char* cpyFolder); - - //상대경로가 '/', '\\'로 시작하면 안됨, 와일드 카드 사용가능 - static bool RemoveFile(char* filename); - - static void CreateFolder(char* pFullPath); //상대경로는 안됨 태현[2016/2/15] - }; -} diff --git a/ReviewHistory/include/akCore/akRandom.h b/ReviewHistory/include/akCore/akRandom.h deleted file mode 100644 index d4e42ee..0000000 --- a/ReviewHistory/include/akCore/akRandom.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -namespace akCore -{ -//#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) - - class AKCORE_DLLSPEC CakRandom - { - public: - CakRandom(void); - ~CakRandom(void); - - //정규분포, Normal, 가우시안... (다 같은말) - double Gaussian(float stddev, float mean); //stddev:평균, mean:표준편차 - - static int GetRandom(int min, int max); - - private: - static int ms_randomseed; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akString.h b/ReviewHistory/include/akCore/akString.h deleted file mode 100644 index 0415b25..0000000 --- a/ReviewHistory/include/akCore/akString.h +++ /dev/null @@ -1,143 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -#include <iostream> -#include <tchar.h> - - -extern AKCORE_DLLSPEC wchar_t* m_pWstrTemp; -AKCORE_DLLSPEC wchar_t* charToWchar(char* pstrSrc); - - -namespace akCore -{ - class AKCORE_DLLSPEC CakString - { - public: - CakString(void); - ~CakString(void); - - public: - //wstring ToWString(const char * in_val); - //string ToString(const wstring &in_val); - - - - //찾고자하는 문자의 위치를 반환해주는 함수(-1이 반환되면 찾지 못한것임, 찾았으면 1이상의 값을 반환) - static int StringFind(const char* str, const char* keyward); - - - static inline std::wstring ToWString(const char * in_val) - { - std::wstring temp; - while (*in_val != '\0') - temp += *in_val++; - return temp; - } - - static inline std::string ToString(const std::wstring &in_val) - { - std::string temp; - std::wstring::const_iterator b = in_val.begin(); - const std::wstring::const_iterator e = in_val.end(); - while (b != e) - { - temp += static_cast<char>(*b); - ++b; - } - return temp; - } - - static bool IsNumber(char* strSource); - static void StringReplace(char* strSource, char cSourceChar, char cDestChar); - static void StringReplace(char* strSource, char* strSourceString, char* strDestString); - static bool GetFullPathName(char* strDest, int nDestSize, const char* strSourceFront, const char* strSourceEnd); - static void GetPath(char* strDest, int nDestSize, const char* strSource); - static void GetName(char* strDest, int nDestSize, const char* strSource); - static bool GetExt(char* strDest, int nDestSize, const char* strSource); - static char* GetExt(const char* strSource); - static int Find(const char* strSource, char cChar); - static int Find(const char* strSource, char* strFindString); - static int ReverseFind(const char* strSource, char cChar); - static void MakeLower(char* strSource); - static void MakeUpper(char* strSource); - static bool Left(const char* strSource, char* strDest, int nDestLength, int nLeftCount); - static bool Mid(const char* strSource, char* strDest, int nDestLength, int nFirstIndex, int nCount = -1); - static bool Right(const char* strSource, char* strDest, int nDestLength, int nRightCount); - - - - private: - - }; -} - - -// -//void CksgFontMaker::DrawStringOverray( -// GLfloat x, -// GLfloat y, -// int windowWidth, -// int windowHeight, -// char* s -// ,...) -//{ -// // Draws the given text string at the given location. -// -// char text[256]={}; -// va_list ap; -// va_start(ap, s); -// vsprintf(text, s, ap); -// va_end(ap); -// -// GLsizei len = GLsizei(strlen(text)); -// if (text && len > 0) -// { -// glPushMatrix(); -// { -// glPushAttrib( GL_LIGHTING_BIT ); -// glDisable(GL_LIGHTING); -// glMatrixMode(GL_PROJECTION); -// glPushMatrix(); -// { -// glLoadIdentity(); -// gluOrtho2D(0, windowWidth, 0,windowHeight); -// -// glMatrixMode(GL_MODELVIEW); -// -// glPushMatrix(); -// { -// glLoadIdentity(); -// -// -// -// -// glRasterPos2i(x, windowHeight+m_logfont.lfHeight-y); -// -// glPushAttrib(GL_LIST_BIT); -// { -// glListBase(m_fontListBase); -// glCallLists(len, GL_UNSIGNED_BYTE, (const GLvoid*)text); -// } glPopAttrib(); -// -// -// }glPopMatrix(); -// -// glMatrixMode(GL_PROJECTION); -// -// }glPopMatrix(); -// -// glMatrixMode(GL_MODELVIEW); -// -// -// glPopAttrib(); -// //glEnable(GL_DEPTH_TEST); -// -// }glPopMatrix(); -// -// -// -// } -//} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akStruct.h b/ReviewHistory/include/akCore/akStruct.h deleted file mode 100644 index df2eee0..0000000 --- a/ReviewHistory/include/akCore/akStruct.h +++ /dev/null @@ -1,134 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" -#include "akStructPoint.h" -#include "akStructVector.h" -//#include "akStructRect.h" -//#include "akStructColor.h" - - - -//#define _USE_MATH_DEFINES -//#include <math.h> -// -//namespace akCore -//{ -// struct AKCORE_DLLSPEC khVector3d -// { -// double pos[3]; -// -// khVector3d(); -// khVector3d(double x,double y, double z); -// inline void set(double x,double y, double z); -// inline double x(){return pos[0];}; -// inline double y(){return pos[1];}; -// inline double z(){return pos[2];}; -// -// double& operator()(int index){return pos[index];}; -// -// inline khVector3d operator+(const khVector3d& vec3d); -// inline khVector3d operator-(const khVector3d& vec3d); -// inline khVector3d& operator=(const khVector3d& vec3d); -// inline khVector3d& operator+=(const khVector3d& vec3d); -// inline khVector3d& operator-=(const khVector3d& vec3d); -// khVector3d operator*(float& a) -// { -// khVector3d returnval; -// -// returnval.pos[0] = pos[0] * a; -// returnval.pos[1] = pos[1] * a; -// returnval.pos[2] = pos[2] * a; -// -// return returnval; -// }; -// -// khVector3d operator *(khVector3d &vec) -// { -// khVector3d vc; -// vc.pos[0] = pos[1]*vec.pos[2] - pos[2]*vec.pos[1]; -// vc.pos[1] = pos[2]*vec.pos[0] - pos[0]*vec.pos[2]; -// vc.pos[2] = pos[0]*vec.pos[1] - pos[1]*vec.pos[0]; -// return vc; -// } -// -// float Dot(khVector3d vec) -// { -// return (float)(vec.pos[0] * pos[0] + vec.pos[1] * pos[1] + vec.pos[2] * pos[2]); -// }; -// float Mag() -// { -// return (float)sqrt(pos[0]*pos[0]+pos[1]*pos[1]); -// }; -// void Normalize() -// { -// float length; -// -// //벡터의 길이를 계산한다. -// length = (float)sqrt((pos[0]*pos[0]) + (pos[1]*pos[1]) +(pos[2]*pos[2])); -// // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. -// if(length == 0.0f) length = 1.0f; -// -// // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. -// pos[0] = pos[0] / length; -// pos[1] = pos[1] / length; -// pos[2] = pos[2] / length; -// -// }; -// }; -// -// struct AKCORE_DLLSPEC khVector2d -// { -// double pos[2]; -// -// khVector2d(); -// khVector2d(double x,double y); -// inline void set(double x,double y); -// inline double x(){return pos[0];}; -// inline double y(){return pos[1];}; -// -// double& operator()(int index){return pos[index];}; -// -// inline khVector2d operator+(const khVector2d& vec3d); -// inline khVector2d operator-(const khVector2d& vec3d); -// inline khVector2d& operator=(const khVector2d& vec3d); -// inline khVector2d& operator+=(const khVector2d& vec3d); -// inline khVector2d& operator-=(const khVector2d& vec3d); -// -// }; -// -// struct AKCORE_DLLSPEC khColor4f -// { -// float color[4]; -// -// khColor4f(); -// khColor4f(float R, float G, float B, float A=0.0f); -// void set(float R, float G, float B, float A=0.0f); -// inline float R(){return color[0];}; -// inline float G(){return color[1];}; -// inline float B(){return color[2];}; -// inline float A(){return color[3];}; -// inline khColor4f& operator=(const khColor4f& ksgcolor); -// }; -// -// struct AKCORE_DLLSPEC khRect -// { -// double pos[4]; -// -// khRect(); -// khRect(double left, double top, double right, double bottom); -// void set(double left, double top, double right, double bottom); -// inline khRect& operator=(const khRect& rect); -// inline double Left(){return pos[0];}; -// inline double Top(){return pos[1];}; -// inline double Right(){return pos[2];}; -// inline double Bottom(){return pos[3];}; -// inline double Width(){return pos[2]-pos[0];}; -// inline double Height(){return pos[3]-pos[1];}; -// inline void SetAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. -// inline bool CheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 -// inline bool CheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 -// inline bool CheCakeightIn(double p1); //y포인트 가운데 점이 있는지 검사 -// -// -// }; -//}; diff --git a/ReviewHistory/include/akCore/akStructColor.h b/ReviewHistory/include/akCore/akStructColor.h deleted file mode 100644 index c892c17..0000000 --- a/ReviewHistory/include/akCore/akStructColor.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - - -namespace akCore -{ - class AKCORE_DLLSPEC khColor4f - { - public: - khColor4f(void); - khColor4f(float R, float G, float B, float A=0.0f); - ~khColor4f(void); - - - void set(float R, float G, float B, float A=0.0f); - inline khColor4f& operator=(const khColor4f& ksgcolor); - - public: - float r,g,b,a; - }; - -}; diff --git a/ReviewHistory/include/akCore/akStructPoint.h b/ReviewHistory/include/akCore/akStructPoint.h deleted file mode 100644 index e02888c..0000000 --- a/ReviewHistory/include/akCore/akStructPoint.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - - -namespace akCore -{ - - class AKCORE_DLLSPEC khPoint - { - public: - khPoint(void) - { - X = Y = 0; - }; - - khPoint(const khPoint &point) - { - X = point.X; - Y = point.Y; - }; - khPoint(int x, int y) - { - X = x; - Y = y; - }; - - khPoint operator+(const khPoint& point) const - { - return khPoint(X + point.X, - Y + point.Y); - }; - - khPoint operator-(const khPoint& point) const - { - return khPoint(X - point.X, - Y - point.Y); - }; - - bool Equals(const khPoint& point) - { - return (X == point.X) && (Y == point.Y); - }; - - public: - - long X; - long Y; - }; - -}; diff --git a/ReviewHistory/include/akCore/akStructRect.h b/ReviewHistory/include/akCore/akStructRect.h deleted file mode 100644 index c8221eb..0000000 --- a/ReviewHistory/include/akCore/akStructRect.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - - -namespace akCore -{ - class AKCORE_DLLSPEC khRect - { - public: - khRect(void); - khRect(int l, int t, int r, int b); - virtual ~khRect(void); - - - - void set(int l, int t, int r, int b); - khRect& operator=(const khRect& rect); - inline int getWidth(){return right-left;}; - inline int getHeight(){return bottom-top;}; - inline int getCenter(){return int(left+(right-left)/2.0);}; - inline int getVCenter(){return int(top+(bottom-top)/2.0);}; - void setAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - bool getCheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - bool getCheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - bool getCheCakeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - - public: - int left, top, right, bottom; - }; - - - class AKCORE_DLLSPEC khRect4d - { - public: - khRect4d(void); - khRect4d(double l, double t, double r, double b); - virtual ~khRect4d(void); - - - - void set(double l, double t, double r, double b); - khRect4d& operator=(const khRect4d& rect); - inline double getWidth(){return right-left;}; - inline double getHeight(){return bottom-top;}; - inline double getCenter(){return left+(right-left)/2.0;}; - inline double getVCenter(){return top+(bottom-top)/2.0;}; - void setAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - bool getCheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - bool getCheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - bool getCheCakeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - public: - double left, top, right, bottom; - }; - - -}; diff --git a/ReviewHistory/include/akCore/akStructVector.h b/ReviewHistory/include/akCore/akStructVector.h deleted file mode 100644 index d769997..0000000 --- a/ReviewHistory/include/akCore/akStructVector.h +++ /dev/null @@ -1,165 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -#define _USE_MATH_DEFINES -#include <math.h> - - - - -#define KHVECTOR_HEADER(akVector3d, double) \ -class AKCORE_DLLSPEC akVector3d \ - { \ - public: \ - \ - akVector3d(); \ - akVector3d(double px,double py, double pz); \ - inline void set(double px,double py, double pz); \ - \ - inline akVector3d operator+(const akVector3d& vec3d); \ - inline akVector3d operator-(const akVector3d& vec3d); \ - inline akVector3d& operator=(const akVector3d& vec3d); \ - inline akVector3d& operator+=(const akVector3d& vec3d); \ - inline akVector3d& operator-=(const akVector3d& vec3d); \ - akVector3d operator*(float& a) \ - { \ - akVector3d returnval; \ - \ - returnval.x = x * a; \ - returnval.y = y * a; \ - returnval.z = z * a; \ - \ - return returnval; \ - }; \ - \ - akVector3d operator *(akVector3d &vec) \ - { \ - akVector3d vc; \ - vc.x = y*vec.z - z*vec.y; \ - vc.y = z*vec.x - x*vec.z; \ - vc.z = x*vec.y - y*vec.x; \ - return vc; \ - } \ - \ - double Dot(akVector3d vec) \ - { \ - return (vec.x * x + vec.y * y + vec.z * z); \ - }; \ - double Mag() \ - { \ - return sqrt(x*x+y*y); \ - }; \ - double getLength() \ - { \ - return sqrt(x*x+y*y+z*z); \ - }; \ - void Normalize() \ - { \ - double length; \ - \ - length = sqrt((x*x) + (y*y) +(z*z)); \ - if(length == 0.0f) length = 1.0f; \ - \ - x = x / length; \ - y = y / length; \ - z = z / length; \ - \ - }; \ - public: \ - double x,y,z; \ - }; - - -namespace akCore -{ - class AKCORE_DLLSPEC akVector3d - { - public: - - akVector3d(); - akVector3d(double px,double py, double pz); - inline void set(double px,double py, double pz); - - inline akVector3d operator+(const akVector3d& vec3d); - inline akVector3d operator-(const akVector3d& vec3d); - inline akVector3d& operator=(const akVector3d& vec3d); - inline akVector3d& operator+=(const akVector3d& vec3d); - inline akVector3d& operator-=(const akVector3d& vec3d); - akVector3d operator*(float& a) - { - akVector3d returnval; - - returnval.x = x * a; - returnval.y = y * a; - returnval.z = z * a; - - return returnval; - }; - - akVector3d operator *(akVector3d &vec) - { - akVector3d vc; - vc.x = y*vec.z - z*vec.y; - vc.y = z*vec.x - x*vec.z; - vc.z = x*vec.y - y*vec.x; - return vc; - } - - //내적 - double Dot(akVector3d vec) - { - return (vec.x * x + vec.y * y + vec.z * z); - }; - double Mag() - { - return sqrt(x*x+y*y); - }; - double getLength() - { - return sqrt(x*x+y*y+z*z); - }; - void Normalize() - { - double length; - - //벡터의 길이를 계산한다. - length = sqrt((x*x) + (y*y) +(z*z)); - // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. - if(length == 0.0f) length = 1.0f; - - // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. - x = x / length; - y = y / length; - z = z / length; - - }; - public: - double x,y,z; - }; - - ////////////////////////////////////////////////////////////////////////// - // khVector3f - KHVECTOR_HEADER(khVector3f, float) - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - class AKCORE_DLLSPEC akVector2d - { - public: - akVector2d(); - akVector2d(double px,double py); - inline void set(double px,double py); - - - - - inline akVector2d operator+(const akVector2d& vec3d); - inline akVector2d operator-(const akVector2d& vec3d); - inline akVector2d& operator=(const akVector2d& vec3d); - inline akVector2d& operator+=(const akVector2d& vec3d); - inline akVector2d& operator-=(const akVector2d& vec3d); - public: - double x,y,z; - }; -}; diff --git a/ReviewHistory/include/akCore/akSyncObject.h b/ReviewHistory/include/akCore/akSyncObject.h deleted file mode 100644 index 9d9d73d..0000000 --- a/ReviewHistory/include/akCore/akSyncObject.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -namespace akCore -{ - class AKCORE_DLLSPEC CakSyncObject - { - public: - CakSyncObject(void); - virtual ~CakSyncObject(void); - - public: - //읽기 지정을 하였을때... 이미 어디서 쓰고 있다면.. 기다렸다가 다음을 수행한다. - //bWait = false 일경우.. 어딘가에서 쓰고 있다면 false를 반환하고 끝내버린다. - bool SetRead(bool bWait = true); - //쓰기 지정을 하였을때... 이미 어디서 읽고 있다면.. 기다렸다가 다음을 수행한다. - bool SetWrite(bool bWait = true); - int SetReadRelease(); //현재 남아있는 읽기 카운트 반환 - void SetWriteRelease(); - - int GetReadCount(){return m_nReadCount;}; //읽기 호출한 횟수 반환 - bool GetWriteState(){return m_bWrite;}; //0이 될때까지 그리는 루틴은 무한 루프가 돈다. - - - protected: - - private: - bool m_bWrite; - int m_nReadCount; - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akText.h b/ReviewHistory/include/akCore/akText.h deleted file mode 100644 index b9cacfa..0000000 --- a/ReviewHistory/include/akCore/akText.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -class AKCORE_DLLSPEC CakText -{ -public: - CakText(void); - virtual ~CakText(void); - - ////////////////////////////////////////////////////////////////////////// - //시간 반환 함수 - char* getTime(); - char* getTime(char* pSeparator); - char* getTime(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //날자 반환 함수 - char* getDate(); - char* getDate(char* pSeparator); - char* getDate(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //시스템 정보 반환 - char* getModuleFileName(); //실행되는 파일 이름 반환 - char* getCurrentDirectory(); //현재 작업 폴더 반환 - - char* getFormat(char* format, ...); - ////////////////////////////////////////////////////////////////////////// - //버퍼 관리 함수 - //내부적으로 많은 양의 크기를 요구하는 문자열의 경우 - //자동으로 크기를 재 할당하므로 별도의 버퍼크기를 조절 하지 않아도 괜찮아요~ -public: - char* getBuffer(int index){return m_pBuffer[index];}; - int getBufferSize(int index){return m_pBufferSize[index];}; - int getBufferNum(){return m_nBufferNum;}; - void setBufferSize(int nNum); -public: - char* getBufferNew(int nSize); - -private: - char** m_pBuffer; //m_nBufferNum*m_nBuffersize - int* m_pBufferSize; // - int m_nBufferNum; //기본 버퍼갯수8개 - int m_nBufferCurIndex; -}; - - diff --git a/ReviewHistory/include/akCore/akTextExt.h b/ReviewHistory/include/akCore/akTextExt.h deleted file mode 100644 index 92099f4..0000000 --- a/ReviewHistory/include/akCore/akTextExt.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "akText.h" - -//응용1 -#define AKTEXT CakTextExt::getInstance() -class AKCORE_DLLSPEC CakTextExt : public CakText -{ -public: - CakTextExt(void){}; - virtual ~CakTextExt(void){}; - - static CakText* getInstance(){return &m_akText;}; -private: - static CakText m_akText; -}; diff --git a/ReviewHistory/include/akCore/akTimeManager.h b/ReviewHistory/include/akCore/akTimeManager.h deleted file mode 100644 index d007cc4..0000000 --- a/ReviewHistory/include/akCore/akTimeManager.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" -#include <Windows.h> - - -namespace akCore -{ - class AKCORE_DLLSPEC CakTimeManager - { - public: - enum PlayMode - { - Play, - Stop, - Pause, - Playing, - PlayEnd, - SettingTime - }; - public: - CakTimeManager(void); - virtual ~CakTimeManager(void); - - //시작 중지(구버전) //배속 적용 안받음 - inline void SetBegin(); - inline void SetEnd(); - inline double GetRunTimeSec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetRunTimeMsec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetFrameRate(); - - //플레이바 기능(신버전) - void SetInit();//초기 설정으로 되돌림 - virtual inline void SetPlay(); - virtual inline void SetStop(); - virtual inline void SetTime(int msec); - virtual inline void SetPause(); - - - virtual inline double GetTime(int type=0); //0=Sec, 1=MSec - virtual inline void GetTime(int* h, int* m, int* s, int* ms); - virtual inline PlayMode GetPlayMode(); - virtual inline void SetSpeedRate(double speedrate); //배속 설정(0보다 큰 실수 입력가능) - virtual inline double GetSpeedRate(); //배속 설정값 읽기 - - protected: - LARGE_INTEGER m_Frequency; - LARGE_INTEGER m_BeginTime; - LARGE_INTEGER m_Endtime; - - double m_PauseTime; - double m_LastTime; - PlayMode m_PlayState; - double m_SpeedRate; //배속 - - //콜백 데이터 관리 - public: - typedef void (*MsgCallbackFunc) (int msg, void*); - void setMsgCallbackFunc(MsgCallbackFunc userFunc, void* data = NULL) - { - m_msgCallbackFunc = userFunc; - m_MsgCallbackFuncData = data; - }; - protected: - void* m_MsgCallbackFuncData; - MsgCallbackFunc m_msgCallbackFunc; - int m_nSyncObject; - }; - - class AKCORE_DLLSPEC CakTimeManagerAdv : public CakTimeManager - { - public: - CakTimeManagerAdv(void); - virtual ~CakTimeManagerAdv(void); - - public: - virtual inline void SetPlay(); - virtual inline void SetTime(int msec); - virtual inline void SetStop(); - protected: - void setEnd();//플레이 시간이 최대 시간을 넘었을 경우 호출 - public: - double m_timeMax; - - public: - static void threadPlayer(void* arg); - int m_flagThreadPlayer; - - private: - bool m_bPlaying; - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akTrace.h b/ReviewHistory/include/akCore/akTrace.h deleted file mode 100644 index 9c1a5c4..0000000 --- a/ReviewHistory/include/akCore/akTrace.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - - - - -#include "akCoreLinker.h" -#include <queue> -#include <windows.h> -#include "akSTL/akQueueCircle.h" - -class AKCORE_DLLSPEC CakTrace -{ -public: - CakTrace(void); - virtual ~CakTrace(void); - - enum Mode - { - TM_MEMORY = 0, - TM_FILE, - TM_BOTHMEMFILE - }; - //0은 메모리에 데이터 관리 하는 모드, 1은 파일에 데이터를 관리 하는 모드, 2는 둘다 - virtual void setMode(Mode nMode); - - //TRACE - virtual void setTrace(char* format, ...); - - - - - ////////////////////////////////////////////////////////////////////////// - //파일모드 일경우 사용 함수 - ////////////////////////////////////////////////////////////////////////// - - //저장할 파일 이름 지정 - bool setTraceFileName(char* filename, bool bClear = true); - - - - - ////////////////////////////////////////////////////////////////////////// - //메모리 모드 일경우 사용 함수 - ////////////////////////////////////////////////////////////////////////// - //저장공간 초기화 - void clear(); - //데이터 갯수 획득 - int getTraceNum(); - //저장된 데이터 획득 - char* getTraceFront(); - //젤 앞에 데이터를 획득하고 삭제 - void getTracePop(char* pBuffer); - //메모리에 있는 데이터를 파일로 저장 - void setWriteFile(char* filename, bool bAdd = true); - - - - -protected: - Mode m_nMode; - - std::queue<char*> m_vecTraceData; - char* m_pTraceFileName; - CRITICAL_SECTION m_csTrace; - FILE* m_pf; -}; diff --git a/ReviewHistory/include/akCore/akTraceExt.h b/ReviewHistory/include/akCore/akTraceExt.h deleted file mode 100644 index 3de3a40..0000000 --- a/ReviewHistory/include/akCore/akTraceExt.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#define _AKTRACE - -#if defined _AKTRACE -#define AKTRACEEXT(fmt,...) CakTraceExt::setTraceWithDateTime(fmt,##__VA_ARGS__) -#else -#define AKTRACEEXT(fmt,...) -#endif - -#if defined _AKTRACE -#define AKTRACE(fmt,...) CakTraceExt::getInstance()->setTrace(fmt,##__VA_ARGS__) -#else -#define AKTRACE(fmt,...) -#endif - - -#include "akTrace.h" - - -class AKCORE_DLLSPEC CakTraceExt -{ -protected: - CakTraceExt(void); - virtual ~CakTraceExt(void); - -public: - ////////////////////////////////////////////////////////////////////////// - static CakTrace *getInstance() {return &m_Instance;}; - - static void setTraceWithDateTime(char* format, ...); - - - -protected: - static CakTrace m_Instance; - -}; diff --git a/ReviewHistory/include/akCore/akTrajectoryModel.h b/ReviewHistory/include/akCore/akTrajectoryModel.h deleted file mode 100644 index 3e4c1af..0000000 --- a/ReviewHistory/include/akCore/akTrajectoryModel.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include "akStruct.h" -#include "akDE.h" -#include <vector> -namespace akCore -{ - struct _Waypoint - { - double x; - double y; - double z; - double speed; - }; - - class AKCORE_DLLSPEC CakTrajcetoryModel - { - public: - CakTrajcetoryModel(void); - ~CakTrajcetoryModel(void); - - public: - virtual int calculate(float dTime); //더이상 계산할 경로점이 없을 경우 2를 반환 - void setCurrentByWaypoint(int nWaypointIndex); //현재값을 경로점 기준으로 셋팅 - - - - public: - //현재 값 - akVector3d m_position; //위치 - akVector3d m_rotate; //자세 - double m_velocity; //속도 - double m_acc; //가속도 - akVector3d m_rotateAcc; //각속도 - - //부여 받은 명령 설정 - akVector3d m_TaskPosition; - double m_TaskVelocity; - double m_TaskAcc; - - //객체 정보 관리 - double mass; //무게 - double maxSpeed; //최대 속도 - double minSpeed; //최저 속도 - double maxAcceleration; //가속도 - double maxDeceleration; //감속도 - - akVector3d m_rotateVelRate; - - //경로점 관리 - public: - int m_nWaypointType; //0 마지막 경로점이면 끝낸다, 1경로점 순회, 2경로점 왕복 - int m_nWaypointSet; //현재 설정된 경로점 - std::vector<_Waypoint> m_vecWaypoint; - - - protected: - void getAngle3d(double x1, double y1, double z1, double x2, double y2, double z2, double* heading, double* pitch); - double getHeading(double x , double y); - protected: - CakDE m_movementmodel; - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akCore/akVector.h b/ReviewHistory/include/akCore/akVector.h deleted file mode 100644 index ec4fb48..0000000 --- a/ReviewHistory/include/akCore/akVector.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" - -namespace akCore -{ - template <class type> class AKCORE_DLLSPEC khVector - { - public: - khVector(void); - ~khVector(void); - - public: - private: - type* m_pDB; - - }; - -} diff --git a/ReviewHistory/include/akCore/akWGS84.h b/ReviewHistory/include/akCore/akWGS84.h deleted file mode 100644 index 2016375..0000000 --- a/ReviewHistory/include/akCore/akWGS84.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "akCoreLinker.h" - -class AKCORE_DLLSPEC CakWGS84 -{ -public: - CakWGS84(void); - ~CakWGS84(void); - - //- 중부원점: N38, E127 - static void getPosition(double lat1 , double lon1 , double x , double y , double &lat2 , double &lon2); - static void getRange(double lat1 , double lon1 , double lat2 , double lon2 , double &x , double &y); - - static void _TM2Bessel(double tm_x, double tm_y, double lonOrg, double latOrg, double *lon, double *lat); - static void _Bessel2TM(double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - static void Bessel2TM (double alt, double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - - //태현추가 - static double getBearing(double lon, double lat, double lonOrg, double latOrg); - static void getRangePosition(double bearing, double range, double lonOrg, double latOrg, double *lon, double *lat); -}; diff --git a/ReviewHistory/include/akCore/akWaypoint.h b/ReviewHistory/include/akCore/akWaypoint.h deleted file mode 100644 index a430730..0000000 --- a/ReviewHistory/include/akCore/akWaypoint.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akCoreLinker.h" -#include "akStructVector.h" - -namespace akCore -{ - class AKCORE_DLLSPEC CakWaypoint - { - public: - CakWaypoint(void); - ~CakWaypoint(void); - - public: - void clear(); - void pointAdd(akVector3d point); - void pointInsert(unsigned int index, akVector3d point);//범위를 넘어가면 젤 뒤에 추가 - void pointDelete(unsigned int index); - - int size(){return m_nPointsNum;}; - - akVector3d& operator [](unsigned int nindex){return m_pPoints[nindex];}; - CakWaypoint& operator= (CakWaypoint& waypoint); - - private: - void secureMemory(); - - private: - int m_nMakePoints; //확보 메모리 사이즈 - int m_nPointsNum; //현재 입력된 Point 갯수 - akVector3d* m_pPoints; //데이터 변수 - - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akGraph/akColorSettingDlg.h b/ReviewHistory/include/akGraph/akColorSettingDlg.h deleted file mode 100644 index 4940ddd..0000000 --- a/ReviewHistory/include/akGraph/akColorSettingDlg.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - - - - -#include "akGraph/akGraphLinker.h" -#include "akGraph/akResource.h" - - -#define COLORSETTINGUPDATE WM_USER+0x109 - - -class CakColorSettingDlg : public CDialog -{ - DECLARE_DYNAMIC(CakColorSettingDlg) - -public: - CakColorSettingDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakColorSettingDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKCOLORSETTINGDLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - -public: - void SetUpdateData(bool bToVariable); //true --> 변수로 저장, false-->다이얼로그에 표시 - void SetTitle(char* strTitle); - void SetReverse(bool bReverse); -public: - COLORREF m_Color; - int nDataIndex; -public: - double m_RangeMin; - double m_RangeMax; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - - int m_nID; -private: - CString m_strTitle; - CWnd* m_pParent; - bool m_bReverse;//최대, 최소 반대로 설정 - - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - - virtual BOOL OnInitDialog(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); - virtual BOOL DestroyWindow(); - - afx_msg void OnKillFocus(CWnd* pNewWnd); -}; diff --git a/ReviewHistory/include/akGraph/akColorTable.h b/ReviewHistory/include/akGraph/akColorTable.h deleted file mode 100644 index 7698288..0000000 --- a/ReviewHistory/include/akGraph/akColorTable.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - - -#include "akGraph/akGraphLinker.h" - -#include <iostream> -#include <vector> - - - - - - - - -class AFX_EXT_CLASS CakColorTable -{ -public: - CakColorTable(void); - ~CakColorTable(void); - -public: - struct AFX_EXT_CLASS _COLOR_TABLE - { - char name[255]; - unsigned char R[64]; - unsigned char G[64]; - unsigned char B[64]; - }; - - - - - void setFile(char *file); - void setColorTable(int index , int level , float min , float max , float value , unsigned char &R , unsigned char &G , unsigned char &B , bool inverse); - void setColorTableSmooth(int index , int level , float min , float max , float value , unsigned char &R , unsigned char &G , unsigned char &B , bool inverse); - - int getTotalColorTable(void); - char *getColorName(int index); - - void rendColorTableBar(CDC *dc , int x , int y , int width , int height , int index , int level , bool inverse , bool vertical); - - - -protected: - -private: - - -public: - std::vector<_COLOR_TABLE> m_vecColorTable; - -protected: - - -private: - -}; diff --git a/ReviewHistory/include/akGraph/akColorTableOption.h b/ReviewHistory/include/akGraph/akColorTableOption.h deleted file mode 100644 index 08d8a61..0000000 --- a/ReviewHistory/include/akGraph/akColorTableOption.h +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -//#define IDD_AKCOLORTABLEOPTIONDLG 11000 - -#include "akGraph/akResource.h" -#include "akGraph/akGraphBase.h" -#include "afxwin.h" - -// CakColorTableOptionDlg 대화 상자입니다. -#define COLORTABLEOPTIONUPDATE WM_USER+0x100 - - - -class CakColorTableOptionDlg : public CDialog -{ - DECLARE_DYNAMIC(CakColorTableOptionDlg) - -public: - CakColorTableOptionDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakColorTableOptionDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKCOLORTABLEOPTIONDLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - -public: - void SetData(int index, int level, int min, int max, bool inverse, bool interpolation, bool colorauto); - -public: - CWnd* m_pParent; - - CComboBox m_ctrlColorIndex; - CComboBox m_ctrlColorLevel; - CButton m_ctrlCheckInverse; - CButton m_ctrlCheckInterpolation; - CEdit m_ctrlEditMin; - CEdit m_ctrlEditMax; - - - - int m_index; - int m_level; - int m_colorMin; - int m_colorMax; - BOOL m_colorInverse; - BOOL m_colorInterpolation; - BOOL m_colorAuto; - int m_colorMinAuto; - int m_colorMaxAuto; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - - -public: - afx_msg void OnBnClickedCancel(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - CButton m_ctrlColorAuto; - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); -}; diff --git a/ReviewHistory/include/akGraph/akDDSettingDlg.h b/ReviewHistory/include/akGraph/akDDSettingDlg.h deleted file mode 100644 index 997056c..0000000 --- a/ReviewHistory/include/akGraph/akDDSettingDlg.h +++ /dev/null @@ -1,67 +0,0 @@ -#pragma once - -//#define IDD_AKCOLORTABLEOPTIONDLG 11000 - -#include "akGraph/akResource.h" -#include "akGraph/akGraphBase.h" -#include "afxwin.h" - -// CakDDSettingDlg 대화 상자입니다. -#define DDSETTINGUPDATE WM_USER+0x105 - - - -class CakDDSettingDlg : public CDialog -{ - DECLARE_DYNAMIC(CakDDSettingDlg) - -public: - CakDDSettingDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakDDSettingDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKDDSETTINGDLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - -public: - void SetUpdate(); -public: - CWnd* m_pParent; - - CEdit m_ctrlEditXMin; - CEdit m_ctrlEditXMax; - CEdit m_ctrlEditGraphDepth1; - CEdit m_ctrlEditGraphDepth2; - CEdit m_ctrlEditGraphDepth3; - CEdit m_ctrlEditGraphDepth4; - CEdit m_ctrlEditStd; - - double m_RangeXMin; - double m_RangeXMax; - int m_GraphDepth1; - int m_GraphDepth2; - int m_GraphDepth3; - int m_GraphDepth4; - int m_Standard; - double m_DetectPoint[4][4]; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - - -public: - afx_msg void OnBnClickedCancel(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - CStatic m_ctrlDetectPoint[4][4]; - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); -}; diff --git a/ReviewHistory/include/akGraph/akDataBasic1.h b/ReviewHistory/include/akGraph/akDataBasic1.h deleted file mode 100644 index 8bb7dac..0000000 --- a/ReviewHistory/include/akGraph/akDataBasic1.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -//시리즈가 하나이고 등간격 데이터 일 경우 - -class AFX_EXT_CLASS CakDataBasic1 -{ -public: - CakDataBasic1(void); - ~CakDataBasic1(void); - - - -public: - - virtual void SetDataNum(int datanum); - int GetDataNum(){return m_dataNum;}; - void SetData(int index, double value); - - void SetHidden(bool enable, int startIndex, int endIndex); - -protected: - int m_dataNum; -public: - double *m_pData; - bool *m_pHidden; -}; diff --git a/ReviewHistory/include/akGraph/akDataBasic2.h b/ReviewHistory/include/akGraph/akDataBasic2.h deleted file mode 100644 index aa9c3e0..0000000 --- a/ReviewHistory/include/akGraph/akDataBasic2.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -//시리즈가 하나만 있고 등간격 데이터가 아닐경우 - -struct _DataBasic2 -{ - _DataBasic2(double x1, double y1) - { - x = x1; - y = y1; - } - _DataBasic2() - { - x=y=0; - } - void set(double x1, double y1) - { - x = x1; - y = y1; - } - double x; - double y; -}; - -class AFX_EXT_CLASS CakDataBasic2 -{ -public: - CakDataBasic2(void); - ~CakDataBasic2(void); - -public: - CakDataBasic2& operator=(CakDataBasic2& data); - -public: - - virtual void SetDataNum(int datanum); - int GetDataNum(){return m_dataNum;}; - void SetData(int index, double x, double y); - - void SetHidden(bool enable, int startIndex, int endIndex); - -protected: - int m_dataNum; -public: - _DataBasic2 *m_pData; - bool *m_pHidden; -}; diff --git a/ReviewHistory/include/akGraph/akDataBasic3.h b/ReviewHistory/include/akGraph/akDataBasic3.h deleted file mode 100644 index 2257142..0000000 --- a/ReviewHistory/include/akGraph/akDataBasic3.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -//등간격 데이터가 아니고 -//데이터가 여러개 존재할경우 - -#include "akGraph/akDataBasic2.h" -#include "akGraph/akGraphStruct.h" - -class AFX_EXT_CLASS CakDataBasic3 -{ -public: - CakDataBasic3(void); - virtual ~CakDataBasic3(void); - - -public: - - virtual void SetSeriesNum(int subsetNum); //기존 데이터 초기화 - //기존 데이터 해당 인덱스에 추가(인덱스가 0보다 작거나 생성된 Subset갯수보다 많으면 젤 뒤에 추가된다) - virtual void SetSeriesAdd(int index = -1); - virtual bool SetSeriesDelete(int index); //해당 인덱스 삭제 - - int GetSeriesNum(){return m_SeriesNum;}; - - void SetSelectSeries(int index); - int GetSelectSeries(){return m_nSelectedSeriesindex;}; - - virtual void SetDataNum(int nDataNum); - virtual bool SetData(int index, double x, double y); - - virtual void SetHidden(bool enable, int startIndex, int endIndex); - - virtual void calculateMinMax(double* xmin, double* xmax, double* ymin, double* ymax); -protected: - int m_SeriesNum; - int m_nSelectedSeriesindex; -public: - CakDataBasic2 *m_pSeriesData; - bool *m_pSeriesHidden; - CSeries* m_pSeries; - CLegendOption m_LegendOption; -}; diff --git a/ReviewHistory/include/akGraph/akDataImage.h b/ReviewHistory/include/akGraph/akDataImage.h deleted file mode 100644 index 99fe52d..0000000 --- a/ReviewHistory/include/akGraph/akDataImage.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#include "akGraph/akGraphStruct.h" -#include <vector> - -class AFX_EXT_CLASS CakDataImage -{ -public: - CakDataImage(void); - virtual ~CakDataImage(void); - - struct _DataImage - { - _DataImage() - { - m_nDrawPosX = m_nDrawPosY = 0; - m_nRoate = 0; - m_nDrawWidth = m_nDrawHeight = 0; - - m_bReverseX = m_bReverseY = false; - } - CString m_strBitmapFilename; - CBitmap m_Bitmap; - BITMAP m_Bits; - - unsigned char* m_pBitmapData; - - //그리기 정보 [김태현 2018/12/7] - int m_nProjectionType; - int m_nDrawPosX,m_nDrawPosY; - int m_nDrawWidth,m_nDrawHeight; - float m_nRoate; - bool m_bReverseX, m_bReverseY; - }; - -public: - int SetImageData(char* pFileName, int nImageIndex = 0); //add가 아니면 0번 인덱스에 넣는다. - int AddImageData(char* pFileName); //add가 아니면 0번 인덱스에 넣는다. - _DataImage* GetImageData(int nImageIndex = 0); - int GetImageDataNum(){return m_vecImageData.size();}; -public: - virtual void calculateMinMax(double* xmin, double* xmax, double* ymin, double* ymax); -protected: - -public: - std::vector<_DataImage*> m_vecImageData; -}; diff --git a/ReviewHistory/include/akGraph/akDataMesh.h b/ReviewHistory/include/akGraph/akDataMesh.h deleted file mode 100644 index 8772e7e..0000000 --- a/ReviewHistory/include/akGraph/akDataMesh.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -//시리즈가 하나만 있고 등간격 데이터가 아닐경우 - - -class AFX_EXT_CLASS CakDataMesh -{ -public: - CakDataMesh(void); - ~CakDataMesh(void); - -public: - CakDataMesh& operator=(CakDataMesh& data); - -public: - virtual void SetDataNum(int sizex, int sizey); - virtual int GetDataNumX(){return m_dataNumX;}; - virtual int GetDataNumY(){return m_dataNumY;}; - - virtual void SetNoDataValue(double val){m_NoDataValue = val;}; - - virtual void SetDataValueX(double min, double max){m_DataValueXMin = min;m_DataValueXMax = max;}; - virtual void SetDataValueY(double min, double max){m_DataValueYMin = min;m_DataValueYMax = max;}; -public: - double m_DataValueYMin, m_DataValueYMax;// <<--중요함.. 들어온 데이터의 가로축 범위가 어딘지 셋팅해줘야됨. - double m_DataValueXMin, m_DataValueXMax;// <<--중요함.. 들어온 데이터의 세로축 범위가 어딘지 셋팅해줘야됨. - - double **m_pData; - - double m_NoDataValue; //데이터가 없는 곳의 값 처리 - -protected: - int m_dataNumX, m_dataNumY; -}; diff --git a/ReviewHistory/include/akGraph/akDataVector2.h b/ReviewHistory/include/akGraph/akDataVector2.h deleted file mode 100644 index 1f61337..0000000 --- a/ReviewHistory/include/akGraph/akDataVector2.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#include <vector> -#include "akGraphStruct.h" - -struct _DataVector2 -{ - _DataVector2(double x1, double y1) - { - x = x1; - y = y1; - hidden = false; - } - _DataVector2() - { - x=y=0; - hidden = false; - } - void set(double x1, double y1) - { - x = x1; - y = y1; - } - double x; - double y; - bool hidden; -}; - -class AFX_EXT_CLASS CakDataVector2 -{ -public: - CakDataVector2(void); - ~CakDataVector2(void); - -public: - CakDataVector2& operator=(CakDataVector2& data); - -public: - - - int GetDataNum(){return int(m_vecData.size());}; - - virtual void Clear(); - //지정 인덱스가 존재하지 않는다면 데이터변경을 하지 않는다. - virtual bool SetData(int index, double x, double y); - //인덱스가 현제 존재하는 데이터 범위를 벗어나면 젤끝에 추가한다. - virtual void AddData(double x, double y, int index = -1); - - virtual void SetHidden(bool enable, int startIndex, int endIndex); - -protected: - -public: - std::vector<_DataVector2> m_vecData; - CSeries m_SeriesOption; - -}; diff --git a/ReviewHistory/include/akGraph/akGraphBase.h b/ReviewHistory/include/akGraph/akGraphBase.h deleted file mode 100644 index 2ace320..0000000 --- a/ReviewHistory/include/akGraph/akGraphBase.h +++ /dev/null @@ -1,312 +0,0 @@ -#pragma once - -#include "akGraph/akGraphLinker.h" - -#include "akGraph/akMemDC.h" -#include "akGraph/akGraphStruct.h" -#include "akGraph/akSyncObject.h" -#include "akSTL/akStruct.h" - - -// akGraphBase - -#define AKGRAPH_BUTTONDOWN WM_USER+0x1001 -#define AKGRAPH_MOUSEMOVE WM_USER+0x1002 - - -#include <process.h> -class AFX_EXT_CLASS CakGraphThreadDraw; - -class AFX_EXT_CLASS CakGraphBase : public CWnd, public CakSyncObject -{ - DECLARE_DYNAMIC(CakGraphBase) - -public: - CakGraphBase(); - virtual ~CakGraphBase(); - -protected: - DECLARE_MESSAGE_MAP() - - - CakMouseState m_MouseState; - - -public: - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - - virtual void RenderBegin(CDC* pDC, CRect rectDC); - virtual void RenderGrid(Graphics* grfx, CDC* pDC){}; - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - virtual void RenderSeries(Graphics* grfx, CDC* pDC){}; //데이터 선/바 그리기 - virtual void RenderLegend(Graphics* grfx, CDC* pDC){}; //범례 - virtual void RenderAxis(Graphics* grfx, CDC* pDC); //축 영역 그리기 - virtual void RenderTitle(Graphics* grfx, CDC* pDC); //제목 영역 그리기 - virtual void RenderLabel(Graphics* grfx, CDC* pDC){}; //해당 축에 틱그리기, 데이터 영역 외각선 그리기 - virtual void RenderEnd(Graphics* grfx, CDC* pDC); //그리는 부분 마지막에 추가(Redraw false 할때도 그림) - virtual void RenderClossLine(CDC* pDC); //마우스 크로스 라인 그리기 [김태현 2018/9/7] - virtual void RenderMouseHoverInfo(CDC* pDC){}; //마우스 올려져 있을 경우 데이터표시 그리기 [김태현 2018/9/7] - - virtual void RenderPerformance(Graphics* grfx, CDC* pDC); - - virtual void GetRenderFrame(CDC* pDC, CRect rect); - - virtual void ReDraw(bool bReDrawALL = true); - - virtual void SetAutoScale(){}; //이런건 기본적으로 있어야됨!! - - virtual void SetTitle(char* titlename); - virtual char* GetTitle(); - virtual void SetAxisXTitle(char* titlename){m_AxisX.m_strTitle = titlename;}; - virtual void SetAxisYTitle(char* titlename){m_AxisY.m_strTitle = titlename;}; - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown //키보드 입력 이벤트 처리 - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); //마우스 입력 이벤트처리 - virtual void MouseInput(CakMouseState mousestate){}; //마우스 상태처리 - virtual void OnSystemKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown //키보드 입력 이벤트 처리 - - virtual void EnableThreadDrawMode(int nSleepTime = 30, int nSleepTimeMin = 1);//한번 키면 끝 - void SetDragStyle(akDragStyle style){m_DragStyle = style;} ; //0은 끄기, 1은 양쪽모두, 2은 세로선만, 3는 가로선만 - akDragStyle GetDragStyle(){return m_DragStyle;}; - CPoint GetMousePos(){return m_MouseState.Point;}; - - void SetWindowSize(int x, int y, int width, int height, UINT flag = NULL, bool reDraw = true); - void SetWindowSize(int width, int height, UINT flag = NULL, bool reDraw = true); - void GetWindowSize(int* width, int* height); - - inline CakRect GetDataArea(){return m_rectData;}; - inline CakRect GetTitleArea(){return m_rectTitle;}; - inline CakRect GetAxisXArea(){return m_rectAxisX;}; - inline CakRect GetAxisYArea(){return m_rectAxisY;}; - - void SetTitleSize(int height);//타이틀바 세로축 크기 - void SetAxisXSize(int height);//x축 세로 크기 - void SetAxisYSize(int width);//y축 가로 크기 - - void SetSaveImage(char* strFilepathname); - - void SetClossLine(bool flag = true){m_bClossLine = flag;}; - - //마우스 제어 모드(0:우클릭 이동모드, 1:좌클릭 이동모드) [김태현 2018/8/22] - void SetMouseControlMode(int nType){m_nMouseControlMode = nType;}; - inline void SetID(int nID); - inline int GetID(); - - virtual void FuncThreadDraw(); -protected: - virtual void CaculatorGraphSize(); - virtual void getLbuttonDragPoint(int* px1, int* py1, int* px2, int* py2); - - -private: - - -public: - int m_nID;//메세지 보낼때 같이 보내주면서.. 인스턴스를 구분한다. - - CAxis m_AxisX; - CAxis m_AxisY; - CAxis m_AxisY2;//오른쪽 y공간 - - CTitle m_Title; - - CMouseMoveInfo m_MouseMoveInfo;//마우스 움직임에 따라 화면에 표시되는 내용 - - CakRectd m_AutoScaleMarginRate;//자동스케일 양옆 아래,위 여백 비율 설정 - CakRect m_rectLabelAdjust; - - bool m_bCheckDC; //올바른 DC인가 확인 절차를 생략할 것인지 여부 - - bool m_bClossLine; - - int m_nMouseControlMode; - - CakGraphThreadDraw* m_pThreadDraw; -protected: - CWnd* m_pParent; //부모 윈도우 클래스 - - - - //메모리 디씨~ - CDC m_GraphDC; - CBitmap m_GraphBitmap, *m_pGraphOldBitmap; - CRect m_rectGraphBitmap; - - //그래프 다시 그려야 할때 - bool m_bReRender; - - //그리는 부분 영역 크기 - int m_nWindowSizeWidth, m_nWindowSizeHeight; - - //그리는 영역 각각의 크기(매번 CaculatorGraphSize() 함수에 의해 계산이 된다) - CakRect m_rectData; //순수하게 그래프 그리는 부분 영역 - CakRect m_rectChartMargin; //데이터 그리는 부분 오른쪽 여백 - CakRect m_rectAxisX; - CakRect m_rectAxisY; - CakRect m_rectTitle; - - - CFont m_fontData; //데이터 폰트 - - bool m_bRenderState; - bool m_bHover; - -public: - COLORREF m_colorBack; //배경색 - COLORREF m_colorDataArea; //데이터 그리는부분 배경색 -protected: - akDragStyle m_DragStyle; -private: - CFont m_fontWaterMake; - ULONG_PTR m_gdiplusToken; //GDI+ 토큰 - CString m_strSaveFilePath; - - //성능 체크 관련 -private: - int m_nShowPerformance; - int m_nTimeRenderTotal; - int m_nTimeRenderDraw1stBuffer; - int m_nTimeRenderDraw2ndBuffer; - - int m_nTimeTempTotal; - int m_nTimeTempDraw1stBuffer; - int m_nTimeTempDraw2ndBuffer; - int m_nTimeRenderCount; - - int m_nTimerRenderTotalMax; - int m_nTimerRenderTotalMin; - - - -public: - static bool m_bAK; - static void setAK(){CakGraphBase::m_bAK = false;}; - afx_msg void OnPaint(); - afx_msg void OnSize(UINT nType, int cx, int cy); - virtual BOOL PreTranslateMessage(MSG* pMsg); - - afx_msg void OnShowWindow(BOOL bShow, UINT nStatus); - afx_msg BOOL OnEraseBkgnd(CDC* pDC); - - //int m_DataState; - //afx_msg void OnTimer(UINT nIDEvent); - afx_msg void OnTimer(UINT_PTR nIDEvent); -}; - - -class AFX_EXT_CLASS CakGraphThreadDraw -{ -public: - CakGraphThreadDraw() - { - m_bThreadDrawMode = FALSE; - m_bDrawByThread = FALSE; - m_nThreadDrawFlag = 0; - m_nThreadDrawSleepTimeMin = 1; - m_nThreadDrawSleepTime = 30; - - InitializeCriticalSection(&m_csThreadDraw); - }; - virtual ~CakGraphThreadDraw() - { - if(GetThreadDrawMode()) - { - m_nThreadDrawFlag = 2; - int nReTryCount = 10; - while (m_nThreadDrawFlag != 0 && nReTryCount--) - { - Sleep(1); - } - } - - }; - -public: - virtual BOOL CreateThreadDraw(CakGraphBase* pBase) - { - if(pBase == NULL) return FALSE; - - //if(GetThreadDrawMode()) - { - m_nThreadDrawFlag = 1; - //_beginthread(threadThreadDraw, NULL, this); - AfxBeginThread(threadThreadDraw, this, NULL); - m_pGraphBase = pBase; - m_bDrawByThread = TRUE; - } - return TRUE; - } - void SetDrawByThread(BOOL bFlag){m_bDrawByThread = bFlag;}; - void SetThreadDrawMode(BOOL bFlag){m_bThreadDrawMode = bFlag;}; - BOOL GetThreadDrawMode(){return m_bThreadDrawMode;}; - CRITICAL_SECTION* GetCriticalSection(){return &m_csThreadDraw;}; - void SleepMsg(IN DWORD dwMilliseconds) - { - DWORD dwStart = 0; - MSG msg = {0,}; - - dwStart = GetTickCount(); - while (GetTickCount() - dwStart < dwMilliseconds) - { - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - // Lower CPU Usage - ::Sleep(1); - } - } - -public: - int m_nThreadDrawSleepTime; - int m_nThreadDrawSleepTimeMin; -protected: - BOOL m_bThreadDrawMode; - - //CDC m_ThreadDrawDC; - //CBitmap m_ThreadDrawBitmap; - //CRect m_rectThreadDrawBitmap; - int m_nThreadDrawFlag; - BOOL m_bDrawByThread; - - CRITICAL_SECTION m_csThreadDraw; - CakGraphBase* m_pGraphBase; - - -protected: - //static void threadThreadDraw(void* arg) - static UINT threadThreadDraw(LPVOID arg) - { - CakGraphThreadDraw* pThis = (CakGraphThreadDraw*)arg; - while (pThis->m_nThreadDrawFlag == 1) - { - DWORD dwTimeStart = GetTickCount(); - if(pThis->m_bDrawByThread) - { - pThis->m_bDrawByThread = FALSE; - pThis->funcThreadDraw(); - } - else - { - - } - - int nSleepTimeDynamic = pThis->m_nThreadDrawSleepTime-(GetTickCount()-dwTimeStart); - nSleepTimeDynamic = max(nSleepTimeDynamic, pThis->m_nThreadDrawSleepTimeMin); - - nSleepTimeDynamic = pThis->m_nThreadDrawSleepTime; - Sleep(nSleepTimeDynamic); - //pThis->SleepMsg(nSleepTimeDynamic); - } - pThis->m_nThreadDrawFlag = 0; - - return TRUE; - }; - - virtual void funcThreadDraw() - { - m_pGraphBase->FuncThreadDraw(); - }; -}; diff --git a/ReviewHistory/include/akGraph/akGraphBasic3.h b/ReviewHistory/include/akGraph/akGraphBasic3.h deleted file mode 100644 index fb361fb..0000000 --- a/ReviewHistory/include/akGraph/akGraphBasic3.h +++ /dev/null @@ -1,104 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBase.h" -#include "akGraph/akDataBasic3.h" - -#include "akGraph/akRangeSettingNormalDlg.h" -#include "akGraph/akRangeSettingTimeDlg.h" - - -//class AFX_EXT_CLASS CakGraphType3 : public CakGraphULS -class AFX_EXT_CLASS CakGraphBasic3 : public CakGraphBase , public CakDataBasic3 -{ -public: - CakGraphBasic3(void); - virtual ~CakGraphBasic3(void); - - - DECLARE_MESSAGE_MAP() -public: - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - - virtual void RenderGrid(Graphics* grfx, CDC* pDC); - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - virtual void RenderSeries(Graphics* grfx, CDC* pDC); //데이터 선/바 그리기 - virtual void RenderLegend(Graphics* grfx, CDC* pDC); - virtual void RenderAxis(Graphics* grfx, CDC* pDC); //축 영역 그리기 - virtual void RenderTitle(Graphics* grfx, CDC* pDC); //제목 영역 그리기 - virtual void RenderLabel(Graphics* grfx, CDC* pDC); //해당 축에 틱그리기, 데이터 영역 외각선 그리기 - virtual void RenderMouseMoveInfo(Graphics* grfx, CDC* pDC);//마우스 움직일때 위치값 표시하는부분 - virtual void RenderEnd(Graphics* grfx, CDC* pDC); //그리는 부분 마지막에 추가(Redraw false 할때도 그림) - - - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - virtual void MouseInput(CakMouseState mousestate); - - //데이터 클래스 동기화 객체 추가 - virtual void SetSeriesNum(int subsetNum); //기존 데이터 초기화 - virtual void SetSeriesAdd(int index = -1); - virtual bool SetSeriesDelete(int index); - virtual void SetDataNum(int nDataNum); - //virtual bool SetData(int index, double x, double y); <--요녀석은 알아서 동기화 시키도록.. 성능!! - virtual void SetHidden(bool enable, int startIndex, int endIndex); - - virtual void SetColorType(int nIndex); - - inline int GetWindowPosX(double xvalue); //위치 값에 따른 윈도우 좌표 - inline int GetWindowPosY(double yvalue); //위치 값에 따른 윈도우 좌표 - inline double GetValuePosDataX(int xpos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - inline double GetValuePosDataY(int ypos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - - void SetReverseModeX(bool flag); //x축 역방향 표시 - bool GetReverseModeX(){return m_bReverseX;}; //x축 역방향 표시 - void SetReverseModeY(bool flag); //y축 역방향 표시 - bool GetReverseModeY(){return m_bReverseY;}; //y축 역방향 표시 - - - void SetClossLinePos(double x, double y); - - virtual void SetAutoScale(); - - double getValueY(int nSeriesIndex, double xpos); - int getDataIndex(int nSeriesIndex, double xpos); - - LRESULT OnRangeSettingNormalUpdate(WPARAM wParam, LPARAM lParam); - LRESULT OnRangeSettingTimeUpdate(WPARAM wParam, LPARAM lParam); - - -protected: - - bool m_bGrid; - bool m_bReverseX; - bool m_bReverseY; - -public: - CakRangeSettingNormalDlg* m_pRangeYSettingDlg; - CakRangeSettingNormalDlg* m_pRangeXSettingDlg; - bool m_bRangeYSetting; - bool m_bRangeXSetting; - bool m_bFastDrawAlg; - afx_msg void OnDestroy(); - afx_msg void OnKillFocus(CWnd* pNewWnd); -}; - - -//X축 값을 h/m/s/ms 표현이 가능하게 -class AFX_EXT_CLASS CakGraphType3Time : public CakGraphBasic3 -{ -public: - -public: - CakGraphType3Time(void){}; - virtual ~CakGraphType3Time(void){}; - -public: - virtual void RenderGrid(Graphics* grfx, CDC* pDC); - virtual void RenderLabel(Graphics* grfx, CDC* pDC); //해당 축에 틱그리기, 데이터 영역 외각선 그리기 - virtual void RenderMouseMoveInfo(Graphics* grfx, CDC* pDC); - - void getTime(double timeval, int *hour, int *min, int *sec, float *msec); -}; - - diff --git a/ReviewHistory/include/akGraph/akGraphCodeJ.h b/ReviewHistory/include/akGraph/akGraphCodeJ.h deleted file mode 100644 index 27896e4..0000000 --- a/ReviewHistory/include/akGraph/akGraphCodeJ.h +++ /dev/null @@ -1,90 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBase.h" -#include "akGraph/akDataBasic1.h" -#include "akGraph/akColorSettingDlg.h" -#include <vector> - -class AFX_EXT_CLASS CakGraphCodeJ : public CakGraphBase, public CakDataBasic1 -{ -public: - -public: - CakGraphCodeJ(void); - virtual ~CakGraphCodeJ(void); - -public: - virtual void RenderBegin( CDC* pDC, CRect rectDC ); - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - - virtual void RenderAxis(Graphics* grfx, CDC* pDC); // - virtual void RenderLabel(Graphics* grfx, CDC* pDC); // - virtual void RenderTitle(Graphics* grfx, CDC* pDC); - virtual void RenderEnd(Graphics* grfx, CDC* pDC); - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - virtual void MouseInput(CakMouseState mousestate); - - inline int GetWindowPosX(double xvalue); //위치 값에 따른 윈도우 좌표 - inline int GetWindowPosY(double yvalue); //위치 값에 따른 윈도우 좌표 - inline double GetValuePosDataX(int xpos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - inline double GetValuePosDataY(int ypos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - - virtual void SetAutoScale(); - virtual void SetDataNum(int datanum); - - virtual void ReDraw(bool bReDrawALL); - - void SetHorMode(bool bFlag = true); //가로 모드 - - void SetCalculatorAvr();//값들의 평균을 화면에 표시 - CString m_strAVR; - - void SetAutoBarScale(int margin); - int m_nBarGab; //막대 그래프 사이의 간격 - - void SetFullScreen(bool flag); - void SetFullMode(bool flag, int x, int y, int width, int height); //풀 모드 키고 끔.. 그리고 풀모드 싸이즈 - - void GraphType(int nType); - - bool GetValuebyMousePos(int mousex, int mousey, int* index, double* val); - -private: - - -protected: - bool m_bGrid; - CakColorSettingDlg* m_pColorSettingDlg; -public: - bool m_bIntegerAxisX; - bool m_bIntegerAxisY; - - bool m_bAVR;//화면에 평균값 표시 할 것인지에 대한 플레그 - std::vector<double> m_vecProbabilityData; //이상이하확률계산데이터 - int m_nBarWidth; - - - CakRect m_rectFullMode; - CakRect m_rectNormalMode; - - int m_nGraphType; //0은 바타입 선 타입 모두 표현, 1은 바타입만 표현 - int m_nTextValueShowLevel; //그래프 위에 텍스트로 값 표시(-1은 표시 안함 0에서 3까지 소수 자리수 표현) - - CString* m_strAxisXText; - COLORREF* m_clrAxisXColor; - double m_avr; -protected: - double m_nTimeline; - bool m_bFullScreen; - bool m_bFullMode; - - bool m_bHorMode; - -public: - DECLARE_MESSAGE_MAP() - afx_msg void OnDestroy(); - LRESULT OnColorSettingUpdate(WPARAM wParam, LPARAM lParam); -}; diff --git a/ReviewHistory/include/akGraph/akGraphImage.h b/ReviewHistory/include/akGraph/akGraphImage.h deleted file mode 100644 index 9482200..0000000 --- a/ReviewHistory/include/akGraph/akGraphImage.h +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBase.h" -#include "akGraph/akDataImage.h" - -#include "akGraph/akRangeSettingNormalDlg.h" -#include "akGraph/akRangeSettingTimeDlg.h" - - -class AFX_EXT_CLASS CakGraphImage : public CakGraphBase , public CakDataImage -{ -public: - CakGraphImage(void); - virtual ~CakGraphImage(void); - - - DECLARE_MESSAGE_MAP() -public: - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - - virtual void RenderGrid(Graphics* grfx, CDC* pDC); - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - - - virtual void RenderAxis(Graphics* grfx, CDC* pDC); //축 영역 그리기 - virtual void RenderTitle(Graphics* grfx, CDC* pDC); //제목 영역 그리기 - virtual void RenderLabel(Graphics* grfx, CDC* pDC); //해당 축에 틱그리기, 데이터 영역 외각선 그리기 - virtual void RenderMouseMoveInfo(Graphics* grfx, CDC* pDC);//마우스 움직일때 위치값 표시하는부분 - virtual void RenderEnd(Graphics* grfx, CDC* pDC); //그리는 부분 마지막에 추가(Redraw false 할때도 그림) - - virtual void RenderImage(Graphics* grfx, CDC* pDC); - - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - virtual void MouseInput(CakMouseState mousestate); - - - virtual void SetColorType(int nIndex); - - inline int GetWindowPosX(double xvalue); //위치 값에 따른 윈도우 좌표 - inline int GetWindowPosY(double yvalue); //위치 값에 따른 윈도우 좌표 - inline double GetValuePosDataX(int xpos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - inline double GetValuePosDataY(int ypos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - - double GetValuePosRangeX(int nValue){return abs(GetValuePosDataX(nValue)-GetValuePosDataX(0));}; - double GetValuePosRangeY(int nValue){return abs(GetValuePosDataY(nValue)-GetValuePosDataY(0));}; - int GetWindowPosRangeX(double dValue){return abs(GetWindowPosX(dValue)-GetWindowPosX(0));}; - int GetWindowPosRangeY(double dValue){return abs(GetWindowPosY(dValue)-GetWindowPosY(0));}; - - void SetReverseModeX(bool flag); //x축 역방향 표시 - bool GetReverseModeX(){return m_bReverseX;}; //x축 역방향 표시 - void SetReverseModeY(bool flag); //y축 역방향 표시 - bool GetReverseModeY(){return m_bReverseY;}; //y축 역방향 표시 - - - void SetClossLinePos(double x, double y); - - virtual void SetAutoScale(); - - double getValueY(int nSeriesIndex, double xpos); - int getDataIndex(int nSeriesIndex, double xpos); - - LRESULT OnRangeSettingNormalUpdate(WPARAM wParam, LPARAM lParam); - LRESULT OnRangeSettingTimeUpdate(WPARAM wParam, LPARAM lParam); - - -protected: - - bool m_bGrid; - bool m_bReverseX; - bool m_bReverseY; - -public: - CakRangeSettingNormalDlg* m_pRangeYSettingDlg; - CakRangeSettingNormalDlg* m_pRangeXSettingDlg; - bool m_bRangeYSetting; - bool m_bRangeXSetting; - bool m_bFastDrawAlg; - afx_msg void OnDestroy(); - afx_msg void OnKillFocus(CWnd* pNewWnd); -}; - - diff --git a/ReviewHistory/include/akGraph/akGraphLinker.h b/ReviewHistory/include/akGraph/akGraphLinker.h deleted file mode 100644 index 08f5314..0000000 --- a/ReviewHistory/include/akGraph/akGraphLinker.h +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include <afxext.h> // MFC 익스텐션 -#include <afxwin.h> - -#pragma comment(lib, "gdiplus.lib") -#include <GdiPlus.h> -using namespace Gdiplus; - - -//#ifdef _akGraph -//#include "resource.h" -//#endif - - -#ifndef _AKGRAPH_EXPORTS - - #undef _AUTOLIBNAME - #undef _AKPROJECTNAME - #undef _AKVCVER - #undef _AKDEBUG - - #define _AKPROJECTNAME "akGraph" - - #ifdef _DEBUG - #define _AKDEBUG "d" - #else - #define _AKDEBUG "" - #endif - - #ifdef WIN64 - #define _AKX64 "_x64" - #elif _WIN64 - #define _AKX64 "_x64" - #else - #define _AKX64 "" - #endif - - #if(_MSC_VER == 1200) //vs6.0 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1300) //vs2003 vc7 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1400) //vs2005 vc8 - #define _AKVCVER "_vc8" - #elif(_MSC_VER == 1500) //vs2008 vc9 - #define _AKVCVER "_vc9" - #elif(_MSC_VER == 1600) //vs2010 - #define _AKVCVER "_vc10" - #elif(_MSC_VER == 1700) //vs2012 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1800) //vs2013 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER >= 1910 && _MSC_VER < 1950) //vs2017 15.0 - #define _AKVCVER "_vc15" - #else - //#define _AKVCVER "" - #pragma message( "해당버전은 지원하지 않습니다. " _MSC_VER ) - #error _MSC_VER 해당버전은 지원하지 않습니다. - #endif - - #define _AUTOLIBNAME _AKPROJECTNAME""_AKDEBUG""_AKX64""_AKVCVER".lib" - - // You may turn off this include message by defining _NOPSAUTOLIB - #ifndef _NOPSAUTOLIBMSG - #pragma message( ">>Kim Tae Hyun - akGraph<< Will automatically link with " _AUTOLIBNAME ) - #endif - #pragma comment(lib, _AUTOLIBNAME) -#endif - diff --git a/ReviewHistory/include/akGraph/akGraphMesh.h b/ReviewHistory/include/akGraph/akGraphMesh.h deleted file mode 100644 index cffabc6..0000000 --- a/ReviewHistory/include/akGraph/akGraphMesh.h +++ /dev/null @@ -1,106 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBase.h" -#include "akGraph/akDataMesh.h" -#include "akGraph/akColorTable.h" -#include "akGraph/akColorTableOption.h" -#include "akGraph/akRangeSettingNormalDlg.h" - -class AFX_EXT_CLASS CakGraphMesh : public CakGraphBase, public CakDataMesh -{ -public: - CakGraphMesh(void); - virtual ~CakGraphMesh(void); - -public: - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - virtual void RenderAxis(Graphics* grfx, CDC* pDC); // - virtual void RenderLabel(Graphics* grfx, CDC* pDC); // - virtual void RenderTitle(Graphics* grfx, CDC* pDC); - virtual void RenderEnd(Graphics* grfx, CDC* pDC); - virtual void RenderMouseHoverInfo(CDC* pDC); - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - virtual void CaculatorGraphSize(); - - virtual void SetDataNum(int sizex, int sizey); - - void SetReverseModeX(bool flag); //x축 역방향 표시 - bool GetReverseModeX(){return m_bReverseX;}; //x축 역방향 표시 - void SetReverseModeY(bool flag); //x축 역방향 표시 - bool GetReverseModeY(){return m_bReverseY;}; //x축 역방향 표시 - - inline int GetWindowPosX(double xvalue); //위치 값에 따른 윈도우 좌표 - inline int GetWindowPosY(double yvalue); //위치 값에 따른 윈도우 좌표 - inline double GetValuePosDataX(int xpos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - inline double GetValuePosDataY(int ypos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - - virtual void SetAutoScale(); - - double GetDataValue(double posx, double posy);// - void CaculatorDataRange(double *min, double *max); - - void SetColorTableFile(char* pFileName); - virtual BOOL ShowColorTableOptionDlg(CPoint point); -protected: - -protected: - bool m_bReverseX; - bool m_bReverseY; - -public: - double m_NoDataValue; //데이터가 없는 곳의 값 처리 - - - CakColorTableOptionDlg* m_pColorTableOption; - CakRangeSettingNormalDlg* m_pRangeXSettingDlg; - CakRangeSettingNormalDlg* m_pRangeYSettingDlg; - - bool m_bRangeYSetting; - bool m_bRangeXSetting; - - bool m_bDataMinAnti; - bool m_bDataMaxAnti; - - CString m_strComment;//데이터 영역 우측 상단에 코멘트 표시 -protected: - CakColorTable m_ColorTable; - - //컬러테이블 관련 -public: - bool m_bColorBar;//색상바 표시 설정 - bool m_bColorTableTickBar; - CakRect m_rectColorTablebar; - COLORREF m_ColorBarFontColor; //컬러바 폰트 컬러 - int m_colorMin; - int m_colorMax; - int m_colorLevel; - int m_colorIndex; - bool m_colorInverse; - bool m_colorInterpolation; - bool m_colorAuto; - - -public: - DECLARE_MESSAGE_MAP() - - afx_msg LRESULT OnColorTableOptionUpdate(WPARAM wParam, LPARAM lParam); - - afx_msg LRESULT OnRangeSettingUpdate(WPARAM wParam, LPARAM lParam); - - - -protected: -// virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); -public: - afx_msg void OnKillFocus(CWnd* pNewWnd); -// virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); - virtual BOOL PreTranslateMessage(MSG* pMsg); - - - - -}; diff --git a/ReviewHistory/include/akGraph/akGraphStruct.h b/ReviewHistory/include/akGraph/akGraphStruct.h deleted file mode 100644 index 645672a..0000000 --- a/ReviewHistory/include/akGraph/akGraphStruct.h +++ /dev/null @@ -1,290 +0,0 @@ -#pragma once - -#include "akSTL/akRect.h" - -class AFX_EXT_CLASS CMaker -{ -public: - CMaker() - { - m_nShape = 0; - }; - ~CMaker(){}; - -public: - int m_nShape; - -}; - -class AFX_EXT_CLASS CMouseMoveInfo -{ -public: - CMouseMoveInfo() - { - m_bEnable = true; - m_font.CreatePointFont(90, _T("Tahoma")); - m_fontColor = RGB(255,255,255); - m_fontAlign = TA_RIGHT|TA_BASELINE; - m_nTypeNum = 2; - m_nType = 1; - m_nPositionType = 1; - - m_nPositionX = -10; - m_nPositionY = -10; - - }; - ~CMouseMoveInfo(){}; - -public: - bool m_bEnable; - int m_nType; //0마우스 위치값 표시, 1마우스 위치에 따른 데이터 값 표시 - int m_nTypeNum; - CFont m_font; - COLORREF m_fontColor; - - int m_nPositionType; //0일때 아래 위치로 표시, 1일때 우측 하단 - unsigned int m_fontAlign; //정렬 - int m_nPositionX;//그리는 위치(나중에...) - int m_nPositionY;//그리는 위치(나중에...) -}; - -class AFX_EXT_CLASS CLegendOption -{ -public: - CLegendOption() - { - m_bEnable = false; - m_font.CreatePointFont(90, _T("Tahoma")); - m_fontColor = RGB(0,0,0); - m_nType = 1; - }; - ~CLegendOption(){}; - -public: - bool m_bEnable; - int m_nType; //-1:그리는 모양에 따라서 다르게, 0:선타입, 1:사각형, 2:동그라미 - CFont m_font; - COLORREF m_fontColor; - - int m_nPosition;//그리는 위치(나중에...) -}; - -class AFX_EXT_CLASS CSeries -{ -public: - CSeries() - { - m_nType = 1; - for(int i=0; i<5; i++) - { - m_Color[i] = RGB(0,0,255); - m_nLineWidth[i] = 1; - } - memset(m_strLegend, 0, sizeof(char)*32); - }; - ~CSeries(){}; - -public: - int m_nType; //1:선타입, 2:바타입, 3:믹스, 0:hide - int m_nLineWidth[5]; - COLORREF m_Color[5]; - char m_strLegend[32]; //제목 - - -}; - -class AFX_EXT_CLASS CScroll -{ -public: - CScroll() - { - m_nEnable = 0; - m_nSize = 25; - - //m_bruScrollRect.CreateSolidBrush() - m_bSelected = false; - }; - -public: - int m_nEnable; //0은 비사용, 1항상 사용, 2필요할때만 표시 - int m_nSize; //표시 크기 -public: - -public: - double m_nScrollMin; - double m_nScrollMax; - -public: - CakRect m_rectScroll; - CakRect m_rectThumb; - bool m_bSelected;//마우스로 선택이 되었는지 체크 태현[2016/5/2] -}; - -class AFX_EXT_CLASS CAxis -{ -public: - CAxis() - { - m_RangeValueMin = 0; - m_RangeValueMax = 10; - m_Size = 50; - m_TickGabPixel = 50; - m_TickGabStep = -1; - m_MinorTickNum = 3; - m_FontTick.CreatePointFont(90, _T("Tahoma")); - m_strTitle = "Axis"; - m_Font.CreatePointFont(90, _T("Tahoma")); - m_FontColor = RGB(0,0,0); - m_TickColor = RGB(0,0,0); - m_LabelColor = RGB(0,0,0); - } - - void SetVerticalFont() - { - LOGFONT logfont; - m_Font.GetLogFont(&logfont); - //logfont.lfHeight = 20; - logfont.lfEscapement = 900; - m_Font.DeleteObject(); - m_Font.CreateFontIndirect(&logfont); - }; //설정된 폰트를 세로로 바꾼다. - - void SetRotateFont(CFont* pFont, int nDeg) - { - LOGFONT logfont; - pFont->GetLogFont(&logfont); - //logfont.lfHeight = 20; - logfont.lfEscapement = nDeg*10; - pFont->DeleteObject(); - pFont->CreateFontIndirect(&logfont); - }; //설정된 폰트를 세로로 바꾼다. - - - inline double GetRangeValue() - { - return m_RangeValueMax - m_RangeValueMin; - } - inline void SetRangeMove(double dValue)//dValue만큼 움직임 - { - m_RangeValueMin += dValue; - m_RangeValueMax += dValue; - } - inline void SetRangePos(double dValue)//해당 위치의 가운데로 이동 - { - double dRangeHalf = GetRangeValue()/2.0; - m_RangeValueMin = dValue-dRangeHalf; - m_RangeValueMax = dValue+dRangeHalf; - } - -public: - double m_RangeValueMin; //데이터 범위 - double m_RangeValueMax; //데이터 범위 - int m_Size; //축 크기(x축은 세로크기, y축은 가로 크기) - - int m_TickGabPixel; //라벨 & 틱이 표시되는 최소 픽셀 간격(라벨의 표시는 자동연산으로) - double m_TickGabStep; //라벨과 틱이 표시되는 값의 간격 - COLORREF m_TickColor; - int m_MinorTickNum; //틱과 틱사이의 작은 틱 갯수 - CFont m_FontTick; //폰트 - - CString m_strTitle; //제목 - - CFont m_Font; //폰트 - COLORREF m_FontColor; - COLORREF m_LabelColor; - - CScroll m_Scroll; -}; - -class AFX_EXT_CLASS CTitle -{ -public: - CTitle() - { - m_Size = 60; - m_strTitle = "Advance Kim Graph 2015"; - m_Font.CreatePointFont(150, _T("맑은 고딕")); - m_FontColor = RGB(0,0,0); - } - -public: - CString m_strTitle; - int m_Size; - CFont m_Font; //폰트 - COLORREF m_FontColor; -}; - -class AFX_EXT_CLASS CakMouseState -{ -public: - CakMouseState() - { - bDragState = 0; - apply = false; - Point.SetPoint(0,0); - memset(MouseButtonState,0,sizeof(MouseButtonState)); - } - inline void setPoint(CPoint pos) - { - //if(apply == true) - { - prePoint = Point; - Point = pos; - apply = false; - } - /*else - { - Point = pos; - }*/ - } - - bool apply; - CPoint Point; //현제 마우스 포인트 - CPoint prePoint; //이전 마우스 포인트 - CPoint stPointDrag; - bool MouseButtonState[10]; - //마우스 드레그 관리 변수 - int bDragState;//0:꺼짐 1:온 2:온->오프 - CPoint ClickPointL; - CPoint ClickPointR; - CPoint DragEndPoint;//사각형이 그려진 부분 크기 - -}; - -enum akMouseEvent -{ - MouseNone, - MouseMove, - MouseLeftButtonDown, - MouseLeftButtonUp, - MouseLeftButtonDoubleClick, - MouseMiddleButtonDown, - MouseMiddleButtonUp, - MouseMiddleButtonDoubleClick, - MouseRightButtonDown, - MouseRightButtonUp, - MouseRightButtonDoubleClick, - MouseWheelDown, - MouseWheelUp, - MouseLeftButtonDrag, - MouseRightButtonDrag -}; - -enum khMousetButtonState -{ - LEFTBUTTONDOWN, - RIGHTBUTTONDOWN, - WHEELUP, - WHEELDOWN -}; - -enum akDragStyle -{ - DS_None, //없음 - DS_All, //모두 - DS_All_VER, //세로기준 - DS_All_HOR, //가로기준 - DS_Vertical, //세로 - DS_Horizontal, - DS_MAX -}; diff --git a/ReviewHistory/include/akGraph/akGraphType2V.h b/ReviewHistory/include/akGraph/akGraphType2V.h deleted file mode 100644 index 38a2923..0000000 --- a/ReviewHistory/include/akGraph/akGraphType2V.h +++ /dev/null @@ -1,72 +0,0 @@ -#pragma once - -#include "akGraph/akGraphBase.h" -#include "akGraph/akDataVector2.h" - -#include "akGraph/akRangeSettingNormalDlg.h" -#include "akGraph/akRangeSettingTimeDlg.h" - -//벡터 데이터를 쓰는 시리즈 한개뿐인 비등간격 데이터 - -class AFX_EXT_CLASS CakGraphType2V : public CakGraphBase , public CakDataVector2 -{ -public: - -public: - CakGraphType2V(void); - virtual ~CakGraphType2V(void); - - - DECLARE_MESSAGE_MAP() -public: - virtual BOOL CreateGraph(CWnd* pParent, CRect rect); - - virtual void RenderGrid(Graphics* grfx, CDC* pDC); - virtual void RenderDataArea(Graphics* grfx, CDC* pDC); //데이터 영역 그리기 - virtual void RenderSeries(Graphics* grfx, CDC* pDC); //데이터 선/바 그리기 - virtual void RenderAxis(Graphics* grfx, CDC* pDC); //축 영역 그리기 - virtual void RenderTitle(Graphics* grfx, CDC* pDC); //제목 영역 그리기 - virtual void RenderLabel(Graphics* grfx, CDC* pDC); //해당 축에 틱그리기, 데이터 영역 외각선 그리기 - virtual void RenderEnd(Graphics* grfx, CDC* pDC); //그리는 부분 마지막에 추가(Redraw false 할때도 그림) - - virtual void OnKeyInput(int key, int mode); //mode 0==keyup, mode 1==keydown - virtual void OnMouseInput(akMouseEvent mouseevent, CPoint point); - virtual void MouseInput(CakMouseState mousestate); - - //데이터 클래스 동기화 객체 추가 - virtual void Clear(); - virtual bool SetData(int index, double x, double y); //들어있는 데이터 값 변경 - virtual void AddData(double x, double y, int index = -1); //데이터 추가 - virtual void SetHidden(bool enable, int startIndex, int endIndex); - - - inline int GetWindowPosX(double xvalue); //위치 값에 따른 윈도우 좌표 - inline int GetWindowPosY(double yvalue); //위치 값에 따른 윈도우 좌표 - inline double GetValuePosDataX(int xpos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - inline double GetValuePosDataY(int ypos, bool dataArea = false); //윈도우 좌표에 따른 데이터 - - void SetReverseModeX(bool flag); //x축 역방향 표시 - bool GetReverseModeX(){return m_bReverseX;}; //x축 역방향 표시 - void SetReverseModeY(bool flag); //y축 역방향 표시 - bool GetReverseModeY(){return m_bReverseY;}; //y축 역방향 표시 - - void SetAxisXMode(bool flag){m_nAxisXMode = flag;}; - - virtual void SetAutoScale(); - - double GetYvalueByXposition(double xpos){return 0;};//미구현 - - LRESULT OnRangeSettingNormalUpdate(WPARAM wParam, LPARAM lParam); - LRESULT OnRangeSettingTimeUpdate(WPARAM wParam, LPARAM lParam); - - -private: - bool m_bGrid; - bool m_bReverseX; - bool m_bReverseY; - int m_nAxisXMode; //0:일반 모드, 1:초단위 시간표시, 2:ms단위 시간표시 -public: - CakRangeSettingNormalDlg* m_pRangeYSettingDlg; - CakRangeSettingNormalDlg* m_pRangeXSettingDlg; - afx_msg void OnDestroy(); -}; diff --git a/ReviewHistory/include/akGraph/akGraphUtil.h b/ReviewHistory/include/akGraph/akGraphUtil.h deleted file mode 100644 index c23daf9..0000000 --- a/ReviewHistory/include/akGraph/akGraphUtil.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#include "akGraph/akGraphLinker.h" -#include "akSTL/akStruct.h" - - - -#define AKSWAP_INT(a,b) { int t=a; a=b; b=t; } -#define AKSWAP_DOUBLE(a,b) { double t=a; a=b; b=t; } -#define AKSWAP_FLOAT(a,b) { float t=a; a=b; b=t; } - -class AFX_EXT_CLASS CakGraphUtil -{ -public: - CakGraphUtil(void); - ~CakGraphUtil(void); - - static CakRect SetakRectAlign(CakRect rect); //왼쪽이 작은값 윗쪽이 작은값 순으로 바꾼다. - static bool GetCheckInArea(CakRect rect, double x, double y);//현재 영역안에 점이 있는지 검사 - static bool GetCheckInArea(double x1, double y1, double x2, double y2, double x, double y);//현재 영역안에 점이 있는지 검사 - static bool GetCheckInRangeX(CakRect rect, double x1); //한선상의 점이 해당 범위 안에 있는지 검사 - static bool GetCheckInRangeY(CakRect rect, double y1); //한선상의 점이 해당 범위 안에 있는지 검사 - static bool GetCheckInRange(double x1, double x2, double p1); //한선상의 점이 해당 범위 안에 있는지 검사 - - static CRect akRectToCRect(CakRect rect); - - static BOOL GetEncCLSID(WCHAR *mime, CLSID *pClsid); - - //DC를 받아서 이미지 파일로 제작(0:jpg, 1:bmp); - static bool MakeImageFile(CDC* pDC, char* filename, unsigned int imageformat=0); - - static void CalculationTickPostionNormal( - double minval, //최소값 - double maxval, //최대값 - unsigned int length, //윈도우 길이 - unsigned int limitLength, //최소 윈도우 길이 - OUT double* tickgabval, //값들의 간격 - OUT int* decimal //소수점이하자릿수 - ); - static void CalculationTickPostionTime( - double minval, //최소값 - double maxval, //최대값 - unsigned int length, // - unsigned int limitLength, // - OUT double* tickgabval //값들의 간격 - ); - static void CalculationTickPostionMSecTime( - double minval, - double maxval, - unsigned int length, - unsigned int limitLength, - OUT double* tickgabval - ); - static void CalculationTickPostionDegree( - double minval, - double maxval, - int length, - int limitLength, - OUT double* tickgabval - ); -}; diff --git a/ReviewHistory/include/akGraph/akMemDC.h b/ReviewHistory/include/akGraph/akMemDC.h deleted file mode 100644 index ff23d8e..0000000 --- a/ReviewHistory/include/akGraph/akMemDC.h +++ /dev/null @@ -1,90 +0,0 @@ - -#pragma once - - -class CakMemDC : public CDC -{ -public: - - CakMemDC(CDC* pDC, CRect rectDC) : CDC() - { - ASSERT(pDC != NULL); - - m_pDC = pDC; - m_pOldBitmap = NULL; - m_bMemDC = false; - m_hDC = NULL; - if(pDC == NULL) - { - CreateCompatibleDC(pDC); - return; - } - -#ifndef WCE_NO_PRINTING - m_bMemDC = !pDC->IsPrinting(); -#else - m_bMemDC = FALSE; -#endif - - if (m_bMemDC) - { - //pDC->GetClipBox(&m_rect); - m_rect = rectDC; - CreateCompatibleDC(pDC); - m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height()); - m_pOldBitmap = SelectObject(&m_bitmap); -#ifndef _WIN32_WCE - //SetWindowOrg(m_rect.left, m_rect.top); - SetWindowOrg(0,0); -#endif - FillSolidRect(m_rect, pDC->GetBkColor()); - } - else - { -#ifndef WCE_NO_PRINTING - m_bPrinting = pDC->m_bPrinting; -#endif - m_hDC = pDC->m_hDC; - m_hAttribDC = pDC->m_hAttribDC; - } - - } - - virtual ~CakMemDC() - { - if (m_bMemDC) - { - m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.right, m_rect.bottom, - this, m_rect.left, m_rect.top, SRCCOPY); - - - SelectObject(m_pOldBitmap); - //DeleteDC(); - //m_bitmap.DeleteObject(); - - } - else - { - m_hDC = m_hAttribDC = NULL; - } - } - - CakMemDC* operator->() - { - return this; - } - - operator CakMemDC*() - { - return this; - } - -private: - CBitmap m_bitmap; // Offscreen bitmap - CBitmap* m_pOldBitmap; // bitmap originally found in CakMemDC - CDC* m_pDC; // Saves CDC passed in constructor - BOOL m_bMemDC; // TRUE if CDC really is a Memory DC. -public: - CRect m_rect; // Rectangle of drawing area. -} -; diff --git a/ReviewHistory/include/akGraph/akPixel.h b/ReviewHistory/include/akGraph/akPixel.h deleted file mode 100644 index 4f92f9d..0000000 --- a/ReviewHistory/include/akGraph/akPixel.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "akGraph/akGraphLinker.h" - -class AFX_EXT_CLASS CakPixel -{ -public: - CakPixel(CDC* pSrc); - ~CakPixel(); - COLORREF GetPixel(int x, int y); - BYTE* GetPixelSrc(int x, int y); - - LPVOID GetBitmapBits(){return m_pBits;}; - BITMAPINFO* GetBitmapInfo(){return m_pbmi;}; - -protected: - CakPixel(); - LPVOID m_pBits; - int m_nBytePerLine; - BITMAPINFO* m_pbmi; - int m_nDepth; - - COLORREF (CakPixel::*m_pGetPixel)(int x, int y); - - COLORREF GetPixel8(int x, int y); - - COLORREF GetPixel16(int x, int y); - COLORREF GetPixel24(int x, int y); - COLORREF GetPixel32(int x, int y); - - COLORREF GetPixel16ByTable555(int x, int y); - COLORREF GetPixel16ByTable565(int x, int y); - COLORREF GetPixel32ByTable(int x, int y); -}; \ No newline at end of file diff --git a/ReviewHistory/include/akGraph/akRangeSettingDlg.h b/ReviewHistory/include/akGraph/akRangeSettingDlg.h deleted file mode 100644 index c7d34ff..0000000 --- a/ReviewHistory/include/akGraph/akRangeSettingDlg.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -//#define IDD_AKCOLORTABLEOPTIONDLG 11000 - -#include "akGraph/akResource.h" -#include "akGraph/akGraphBase.h" - -// CakRangeSettingDlg 대화 상자입니다. -#define RANGESETTINGUPDATE WM_USER+0x101 - - - -class CakRangeSettingDlg : public CDialog -{ - DECLARE_DYNAMIC(CakRangeSettingDlg) - -public: - CakRangeSettingDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakRangeSettingDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKRANGESETTINGDLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - -public: - void SetUpdate(); -public: - CWnd* m_pParent; - - CEdit m_ctrlEditXMin; - CEdit m_ctrlEditXMax; - CEdit m_ctrlEditYMin; - CEdit m_ctrlEditYMax; - - double m_RangeXMin; - double m_RangeXMax; - double m_RangeYMin; - double m_RangeYMax; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - - -public: - afx_msg void OnBnClickedCancel(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); -}; diff --git a/ReviewHistory/include/akGraph/akRangeSettingNormalDlg.h b/ReviewHistory/include/akGraph/akRangeSettingNormalDlg.h deleted file mode 100644 index 86db602..0000000 --- a/ReviewHistory/include/akGraph/akRangeSettingNormalDlg.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - - - - -#include "akGraph/akGraphLinker.h" -#include "akGraph/akResource.h" - - -#define RANGESETTINGNORMALUPDATE WM_USER+0x106 - - -class CakRangeSettingNormalDlg : public CDialog -{ - DECLARE_DYNAMIC(CakRangeSettingNormalDlg) - -public: - CakRangeSettingNormalDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakRangeSettingNormalDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKRANGESETTINGDLG_NORMAL }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - -public: - void SetUpdateData(bool bToVariable); //true --> 변수로 저장, false-->다이얼로그에 표시 - void SetTitle(char* strTitle); - void SetReverse(bool bReverse); -public: - double m_RangeMin; - double m_RangeMax; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - - int m_nID; -private: - CString m_strTitle; - CWnd* m_pParent; - bool m_bReverse;//최대, 최소 반대로 설정 - - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - - virtual BOOL OnInitDialog(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); - virtual BOOL DestroyWindow(); - - afx_msg void OnKillFocus(CWnd* pNewWnd); -}; diff --git a/ReviewHistory/include/akGraph/akRangeSettingTimeDlg.h b/ReviewHistory/include/akGraph/akRangeSettingTimeDlg.h deleted file mode 100644 index 58b3e02..0000000 --- a/ReviewHistory/include/akGraph/akRangeSettingTimeDlg.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "akGraph/akGraphLinker.h" -#include "akGraph/akResource.h" - - -#define RANGESETTINGTIMEUPDATE WM_USER+0x107 - -class CakRangeSettingTimeDlg : public CDialog -{ - DECLARE_DYNAMIC(CakRangeSettingTimeDlg) - -public: - CakRangeSettingTimeDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakRangeSettingTimeDlg(); - - // 대화 상자 데이터입니다. - enum { IDD = IDD_AKRANGESETTINGDLG_TIME }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - -public: - void SetUpdateData(bool bToVariable); //true --> 변수로 저장, false-->다이얼로그에 표시 - void SetTitle(char* strTitle); - void SetReverse(bool bReverse); -public: - int m_RangeMin; - int m_RangeMax; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - CString m_strTitle; - CWnd* m_pParent; - bool m_bReverse;//최대, 최소 반대로 설정 - - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - - virtual BOOL OnInitDialog(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); - virtual BOOL DestroyWindow(); - -}; diff --git a/ReviewHistory/include/akGraph/akRaySettingDlg.h b/ReviewHistory/include/akGraph/akRaySettingDlg.h deleted file mode 100644 index 19b25fa..0000000 --- a/ReviewHistory/include/akGraph/akRaySettingDlg.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -//#define IDD_AKCOLORTABLEOPTIONDLG 11000 - -#include "akGraph/akResource.h" -#include "akGraph/akGraphBase.h" - -// CakRaySettingDlg 대화 상자입니다. -#define RAYSETTINGUPDATE WM_USER+0x102 - - - -class CakRaySettingDlg : public CDialog -{ - DECLARE_DYNAMIC(CakRaySettingDlg) - -public: - CakRaySettingDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakRaySettingDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKRAYESETTINGDLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - void setFAIMS3Mode(); -public: - -public: - CWnd* m_pParent; - - void SetUpdate(); //현제 데이터를 화면에 전시 - - CEdit m_ctrlRayNum; - CEdit m_ctrlRayMin; - CEdit m_ctrlRayMax; - - int m_RayNum; - int m_RayMin; - int m_RayMax; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - - -public: - afx_msg void OnBnClickedCancel(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); -}; diff --git a/ReviewHistory/include/akGraph/akResource.h b/ReviewHistory/include/akGraph/akResource.h deleted file mode 100644 index e19c4ec..0000000 --- a/ReviewHistory/include/akGraph/akResource.h +++ /dev/null @@ -1,89 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by akGraph.rc -// -#define IDD_AKCOLORTABLEOPTIONDLG 11000 -#define IDC_CHECK_COLORINVERSE 11000 -#define IDC_CHECK_COLORINTERPOLATION 11001 -#define IDD_AKRANGESETTINGDLG 11001 -#define IDC_EDIT_COLORMIN 11002 -#define IDD_AKSELECTDATADLG 11002 -#define IDC_EDIT_COLORMAX 11003 -#define IDD_AKRAYESETTINGDLG 11003 -#define IDC_COMBO_COLORLEVEL 11004 -#define IDC_EDIT_COLORMIN2 11004 -#define IDC_EDIT_RANGEMINY 11004 -#define IDD_AKDDSETTINGDLG 11004 -#define IDC_COMBO_COLORINDEX 11005 -#define IDC_EDIT_COLORMAX2 11005 -#define IDC_AK_COMBO_DATA 11005 -#define IDC_EDIT_RANGEMAXY 11005 -#define IDC_EDIT_RAYNUM 11006 -#define IDC_CHECK_COLORAUTORANGE 11006 -#define IDD_AKRANGESETTINGDLG_NORMAL 11007 -#define IDC_EDIT_RAYMIN 11008 -#define IDC_EDIT_RAYMAX 11009 -#define IDC_EDIT_RANGEMINX 11010 -#define IDC_EDIT_RANGEMAXX 11011 -#define IDC_SELECTDATA_COLOR1 11012 -#define IDC_EDIT_GRAPHDEPTH1 11012 -#define IDC_SELECTDATA_COLOR2 11013 -#define IDC_EDIT_GRAPHDEPTH2 11013 -#define IDC_EDIT_RANGEMAX 11013 -#define IDC_SELECTDATA_COLOR3 11014 -#define IDC_EDIT_GRAPHDEPTH3 11014 -#define IDC_EDIT_RANGEMIN 11014 -#define IDC_SELECTDATA_COLOR4 11015 -#define IDC_EDIT_RANGEMINX5 11015 -#define IDC_EDIT_GRAPHDEPTH4 11015 -#define IDC_AK_TITLE 11015 -#define IDC_EDIT_DDSTD 11016 -#define IDC_AK_CMT1 11016 -#define IDC_AK_TITLE3 11016 -#define IDD_RANGESETTINGTIMEDLG 11017 -#define IDD_AKRANGESETTINGDLG_TIME 11017 -#define IDC_AK_CMT2 11017 -#define IDC_AK_TITLE2 11017 -#define IDC_AK_CMT3 11018 -#define IDC_DETECTPOINT1_1 11018 -#define IDD_AKCOLORSETTINGDLG 11018 -#define IDC_AK_CMT4 11019 -#define IDC_DETECTPOINT2_1 11019 -#define IDC_DETECTPOINT3_1 11020 -#define IDC_DETECTPOINT4_1 11021 -#define IDC_AK_CMT3_3 11022 -#define IDC_DETECTPOINT1_2 11023 -#define IDC_DETECTPOINT2_2 11024 -#define IDC_DETECTPOINT3_2 11025 -#define IDC_DETECTPOINT4_2 11026 -#define IDC_DETECTPOINT1_3 11027 -#define IDC_DETECTPOINT2_3 11028 -#define IDC_DETECTPOINT3_3 11029 -#define IDC_DETECTPOINT4_3 11030 -#define IDC_AK_CMT3_4 11031 -#define IDC_AK_CMT3_5 11032 -#define IDC_AK_CMT3_6 11033 -#define IDC_AK_CMT3_7 11034 -#define IDC_AK_CMT3_8 11035 -#define IDC_AK_CMT3_9 11036 -#define IDC_AK_CMT2_1 11037 -#define IDC_AK_CMT3_1 11038 -#define IDC_AK_CMT3_2 11039 -#define IDC_AK_UNIT1 11040 -#define IDC_AK_UNIT2 11041 -#define IDC_AK_UNIT3 11042 -#define IDC_AK_UNIT4 11043 -#define IDC_EDIT_COLOR_R 11046 -#define IDC_EDIT_COLOR_G 11047 -#define IDC_EDIT_COLOR_B 11048 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 11001 -#define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 11048 -#define _APS_NEXT_SYMED_VALUE 11018 -#endif -#endif diff --git a/ReviewHistory/include/akGraph/akSelectDataDlg.h b/ReviewHistory/include/akGraph/akSelectDataDlg.h deleted file mode 100644 index 268d316..0000000 --- a/ReviewHistory/include/akGraph/akSelectDataDlg.h +++ /dev/null @@ -1,59 +0,0 @@ -#pragma once - -//#define IDD_AKCOLORTABLEOPTIONDLG 11000 - -#include "akGraph/akResource.h" -#include "akGraph/akGraphBase.h" - -// CakSelectDataDlg 대화 상자입니다. -#define SELECTDATAUPDATE WM_USER+0x103 - - - -class CakSelectDataDlg : public CDialog -{ - DECLARE_DYNAMIC(CakSelectDataDlg) - -public: - CakSelectDataDlg(CWnd* pParent = NULL); // 표준 생성자입니다. - virtual ~CakSelectDataDlg(); - -// 대화 상자 데이터입니다. - enum { IDD = IDD_AKSELECTDATADLG }; - -protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다. - - DECLARE_MESSAGE_MAP() -public: - afx_msg void OnBnClickedOk(); - virtual BOOL OnInitDialog(); - -public: - void SetUpdate(); -public: - CWnd* m_pParent; - - CComboBox m_ctrlSelectData; - - COLORREF m_SelectColor; - int m_selectData; - int m_selectedAxisY; - - CFont m_fontTitle, m_fontText; - CBrush m_bruTitle, m_bruText; - -private: - - -public: - afx_msg void OnBnClickedCancel(); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnBnClickedButton1(); - afx_msg void OnBnClickedSelectdataColor1(); - afx_msg void OnBnClickedSelectdataColor2(); - afx_msg void OnBnClickedSelectdataColor3(); - afx_msg void OnBnClickedSelectdataColor4(); - afx_msg void OnPaint(); - afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); -}; diff --git a/ReviewHistory/include/akGraph/akSyncObject.h b/ReviewHistory/include/akGraph/akSyncObject.h deleted file mode 100644 index bd36270..0000000 --- a/ReviewHistory/include/akGraph/akSyncObject.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - - - - -class AFX_EXT_CLASS CakSyncObject -{ -public: - CakSyncObject(void); - virtual ~CakSyncObject(void); - -public: - //읽기 지정을 하였을때... 이미 어디서 쓰고 있다면.. 기다렸다가 다음을 수행한다. - //bWait = false 일경우.. 어딘가에서 쓰고 있다면 false를 반환하고 끝내버린다. - bool SetRead(bool bWait = true); - //쓰기 지정을 하였을때... 이미 어디서 읽고 있다면.. 기다렸다가 다음을 수행한다. - bool SetWrite(bool bWait = true); - int SetReadRelease(); //현재 남아있는 읽기 카운트 반환 - void SetWriteRelease(); - - int GetReadCount(){return m_nReadCount;}; //읽기 호출한 횟수 반환 - bool GetWriteState(){return m_bWrite;}; //0이 될때까지 그리는 루틴은 무한 루프가 돈다. - - -protected: - -private: - bool m_bWrite; - int m_nReadCount; - -}; diff --git a/ReviewHistory/include/akGraph/akUnit.h b/ReviewHistory/include/akGraph/akUnit.h deleted file mode 100644 index 4ad7abc..0000000 --- a/ReviewHistory/include/akGraph/akUnit.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - - -// enum khUnitType -// { -// Distance, -// Velocity, -// Temp, -// Weight -// }; - -enum akUnit -{ - km,m,kyd,ft -}; - -class CakUnit -{ -public: - CakUnit(void); - virtual ~CakUnit(void); - - -public: - //void SetUnitType(khUnitType type); - void SetDefaultUnit(int index, akUnit unit); - bool SetChangeUnit(int index, akUnit unit); - -public: - char* GetCurrentUnitString(int index); - char* GetUnitString(int index, akUnit unit); - -protected: - akUnit m_DefaultUnit[10];//기준 단위 - akUnit m_ChangeUnit[10];//변경되는 단위 - -}; diff --git a/ReviewHistory/include/akGraph/khDataBase.h b/ReviewHistory/include/akGraph/khDataBase.h deleted file mode 100644 index 94d49a1..0000000 --- a/ReviewHistory/include/akGraph/khDataBase.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - - -#include "akGraph/khSyncObject.h" - -class AFX_EXT_CLASS CkhDataBase -{ -public: - CkhDataBase(void); - virtual ~CkhDataBase(void); - -public: - CkhSyncObject m_khSyncObject; -}; diff --git a/ReviewHistory/include/akGridCtrl/CellRange.h b/ReviewHistory/include/akGridCtrl/CellRange.h deleted file mode 100644 index 9d96b4b..0000000 --- a/ReviewHistory/include/akGridCtrl/CellRange.h +++ /dev/null @@ -1,148 +0,0 @@ -/////////////////////////////////////////////////////////////////////// -// CellRange.h: header file -// -// MFC Grid Control - interface for the CCellRange class. -// -// Written by Chris Maunder <cmaunder@mail.com> -// Copyright (c) 1998-2002. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.20+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) -#define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -// The code contained in this file is based on the original -// WorldCom Grid control written by Joe Willcoxson, -// mailto:chinajoe@aol.com -// http://users.aol.com/chinajoe - -class CCellID -{ -// Attributes -public: - int row, col; - -// Operations -public: - explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {} - - int IsValid() const { return (row >= 0 && col >= 0); } - int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); } - int operator!=(const CCellID& rhs) const { return !operator==(rhs); } -}; - -class CCellRange -{ -public: - - CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1) - { - Set(nMinRow, nMinCol, nMaxRow, nMaxCol); - } - - void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1); - - int IsValid() const; - int InRange(int row, int col) const; - int InRange(const CCellID& cellID) const; - int Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); } - - CCellID GetTopLeft() const; - CCellRange Intersect(const CCellRange& rhs) const; - - int GetMinRow() const {return m_nMinRow;} - void SetMinRow(int minRow) {m_nMinRow = minRow;} - - int GetMinCol() const {return m_nMinCol;} - void SetMinCol(int minCol) {m_nMinCol = minCol;} - - int GetMaxRow() const {return m_nMaxRow;} - void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;} - - int GetMaxCol() const {return m_nMaxCol;} - void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;} - - int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;} - int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;} - - void operator=(const CCellRange& rhs); - int operator==(const CCellRange& rhs); - int operator!=(const CCellRange& rhs); - -protected: - int m_nMinRow; - int m_nMinCol; - int m_nMaxRow; - int m_nMaxCol; -}; - -inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol) -{ - m_nMinRow = minRow; - m_nMinCol = minCol; - m_nMaxRow = maxRow; - m_nMaxCol = maxCol; -} - -inline void CCellRange::operator=(const CCellRange& rhs) -{ - if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol); -} - -inline int CCellRange::operator==(const CCellRange& rhs) -{ - return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) && - (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol)); -} - -inline int CCellRange::operator!=(const CCellRange& rhs) -{ - return !operator==(rhs); -} - -inline int CCellRange::IsValid() const -{ - return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 && - m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol); -} - -inline int CCellRange::InRange(int row, int col) const -{ - return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol); -} - -inline int CCellRange::InRange(const CCellID& cellID) const -{ - return InRange(cellID.row, cellID.col); -} - -inline CCellID CCellRange::GetTopLeft() const -{ - return CCellID(m_nMinRow, m_nMinCol); -} - -inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const -{ - return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol), - min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol)); -} - -#endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/GridCell.h b/ReviewHistory/include/akGridCtrl/GridCell.h deleted file mode 100644 index 335e6a6..0000000 --- a/ReviewHistory/include/akGridCtrl/GridCell.h +++ /dev/null @@ -1,143 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// GridCell.h : header file -// -// MFC Grid Control - Grid cell class header file -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.20+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) -#define AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -class CakGridCtrl; -#include "GridCellBase.h" - -// Each cell contains one of these. Fields "row" and "column" are not stored since we -// will usually have acces to them in other ways, and they are an extra 8 bytes per -// cell that is probably unnecessary. - -class CGridCell : public CGridCellBase -{ - friend class CakGridCtrl; - DECLARE_DYNCREATE(CGridCell) - -// Construction/Destruction -public: - CGridCell(); - virtual ~CGridCell(); - -// Attributes -public: - void operator=(const CGridCell& cell); - - virtual void SetText(LPCTSTR szText) { m_strText = szText; } - virtual void SetImage(int nImage) { m_nImage = nImage; } - virtual void SetData(LPARAM lParam) { m_lParam = lParam; } - virtual void SetGrid(CakGridCtrl* pGrid) { m_pGrid = pGrid; } - // virtual void SetState(const DWORD nState); - use base class version - virtual void SetFormat(DWORD nFormat) { m_nFormat = nFormat; } - virtual void SetTextClr(COLORREF clr) { m_crFgClr = clr; } - virtual void SetBackClr(COLORREF clr) { m_crBkClr = clr; } - virtual void SetFont(const LOGFONT* plf); - virtual void SetMargin(UINT nMargin) { m_nMargin = nMargin; } - virtual CWnd* GetEditWnd() const { return m_pEditWnd; } - virtual void SetCoords(int /*nRow*/, int /*nCol*/) {} // don't need to know the row and - // column for base implementation - - virtual LPCTSTR GetText() const { return (m_strText.IsEmpty())? _T("") : LPCTSTR(m_strText); } - virtual int GetImage() const { return m_nImage; } - virtual LPARAM GetData() const { return m_lParam; } - virtual CakGridCtrl* GetGrid() const { return m_pGrid; } - // virtual DWORD GetState() const - use base class - virtual DWORD GetFormat() const; - virtual COLORREF GetTextClr() const { return m_crFgClr; } // TODO: change to use default cell - virtual COLORREF GetBackClr() const { return m_crBkClr; } - virtual LOGFONT* GetFont() const; - virtual CFont* GetFontObject() const; - virtual UINT GetMargin() const; - - virtual BOOL IsEditing() const { return m_bEditing; } - virtual BOOL IsDefaultFont() const { return (m_plfFont == NULL); } - virtual void Reset(); - -// editing cells -public: - virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); - virtual void EndEdit(); -protected: - virtual void OnEndEdit(); - -protected: - CString m_strText; // Cell text (or binary data if you wish...) - LPARAM m_lParam; // 32-bit value to associate with item - int m_nImage; // Index of the list view item뭩 icon - DWORD m_nFormat; - COLORREF m_crFgClr; - COLORREF m_crBkClr; - LOGFONT* m_plfFont; - UINT m_nMargin; - - BOOL m_bEditing; // Cell being edited? - - CakGridCtrl* m_pGrid; // Parent grid control - CWnd* m_pEditWnd; -}; - -// This class is for storing grid default values. It's a little heavy weight, so -// don't use it in bulk -class CGridDefaultCell : public CGridCell -{ - DECLARE_DYNCREATE(CGridDefaultCell) - -// Construction/Destruction -public: - CGridDefaultCell(); - virtual ~CGridDefaultCell(); - -public: - virtual DWORD GetStyle() const { return m_dwStyle; } - virtual void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } - virtual int GetWidth() const { return m_Size.cx; } - virtual int GetHeight() const { return m_Size.cy; } - virtual void SetWidth(int nWidth) { m_Size.cx = nWidth; } - virtual void SetHeight(int nHeight) { m_Size.cy = nHeight; } - - // Disable these properties - virtual void SetData(LPARAM /*lParam*/) { ASSERT(FALSE); } - virtual void SetState(DWORD /*nState*/) { ASSERT(FALSE); } - virtual DWORD GetState() const { return CGridCell::GetState()|GVIS_READONLY; } - virtual void SetCoords( int /*row*/, int /*col*/) { ASSERT(FALSE); } - virtual void SetFont(const LOGFONT* /*plf*/); - virtual LOGFONT* GetFont() const; - virtual CFont* GetFontObject() const; - -protected: - CSize m_Size; // Default Size - CFont m_Font; // Cached font - DWORD m_dwStyle; // Cell Style - unused -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/GridCellBase.h b/ReviewHistory/include/akGridCtrl/GridCellBase.h deleted file mode 100644 index 0fb94d6..0000000 --- a/ReviewHistory/include/akGridCtrl/GridCellBase.h +++ /dev/null @@ -1,175 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// GridCellBase.h : header file -// -// MFC Grid Control - Grid cell base class header file -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.22+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) -#define AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -class CakGridCtrl; - -// Cell states -#define GVIS_FOCUSED 0x0001 -#define GVIS_SELECTED 0x0002 -#define GVIS_DROPHILITED 0x0004 -#define GVIS_READONLY 0x0008 -#define GVIS_FIXED 0x0010 -#define GVIS_FIXEDROW 0x0020 -#define GVIS_FIXEDCOL 0x0040 -#define GVIS_MODIFIED 0x0080 - -// Cell data mask -#define GVIF_TEXT LVIF_TEXT -#define GVIF_IMAGE LVIF_IMAGE -#define GVIF_PARAM LVIF_PARAM -#define GVIF_STATE LVIF_STATE -#define GVIF_BKCLR (GVIF_STATE<<1) -#define GVIF_FGCLR (GVIF_STATE<<2) -#define GVIF_FORMAT (GVIF_STATE<<3) -#define GVIF_FONT (GVIF_STATE<<4) -#define GVIF_MARGIN (GVIF_STATE<<5) -#define GVIF_ALL (GVIF_TEXT|GVIF_IMAGE|GVIF_PARAM|GVIF_STATE|GVIF_BKCLR|GVIF_FGCLR| \ - GVIF_FORMAT|GVIF_FONT|GVIF_MARGIN) - -// Used for Get/SetItem calls. -typedef struct _GV_ITEM { - int row,col; // Row and Column of item - UINT mask; // Mask for use in getting/setting cell data - UINT nState; // cell state (focus/hilighted etc) - DWORD nFormat; // Format of cell - int iImage; // index of the list view item뭩 icon - COLORREF crBkClr; // Background colour (or CLR_DEFAULT) - COLORREF crFgClr; // Forground colour (or CLR_DEFAULT) - LPARAM lParam; // 32-bit value to associate with item - LOGFONT lfFont; // Cell font - UINT nMargin; // Internal cell margin - CString strText; // Text in cell -} GV_ITEM; - - -// Each cell contains one of these. Fields "row" and "column" are not stored since we -// will usually have acces to them in other ways, and they are an extra 8 bytes per -// cell that is probably unnecessary. - -#define TRACEAK(fmt,...) -//#define TRACEAK(fmt,...) TRACEAK(fmt,##__VA_ARGS__) - -class CGridCellBase : public CObject -{ - friend class CakGridCtrl; - DECLARE_DYNAMIC(CGridCellBase) - -// Construction/Destruction -public: - CGridCellBase(); - virtual ~CGridCellBase(); - -// Attributes -public: - virtual void SetText(LPCTSTR /* szText */) = 0 ; - virtual void SetImage(int /* nImage */) = 0 ; - virtual void SetData(LPARAM /* lParam */) = 0 ; - virtual void SetState(DWORD nState) { m_nState = nState; } - virtual void SetFormat(DWORD /* nFormat */) = 0 ; - virtual void SetTextClr(COLORREF /* clr */) = 0 ; - virtual void SetBackClr(COLORREF /* clr */) = 0 ; - virtual void SetFont(const LOGFONT* /* plf */) = 0 ; - virtual void SetMargin( UINT /* nMargin */) = 0 ; - virtual void SetGrid(CakGridCtrl* /* pGrid */) = 0 ; - virtual void SetCoords( int /* nRow */, int /* nCol */) = 0 ; - - virtual LPCTSTR GetText() const = 0 ; - virtual LPCTSTR GetTipText() const { return GetText(); } // may override TitleTip return - virtual int GetImage() const = 0 ; - virtual LPARAM GetData() const = 0 ; - virtual DWORD GetState() const { return m_nState; } - virtual DWORD GetFormat() const = 0 ; - virtual COLORREF GetTextClr() const = 0 ; - virtual COLORREF GetBackClr() const = 0 ; - virtual LOGFONT * GetFont() const = 0 ; - virtual CFont * GetFontObject() const = 0 ; - virtual CakGridCtrl* GetGrid() const = 0 ; - virtual CWnd * GetEditWnd() const = 0 ; - virtual UINT GetMargin() const = 0 ; - - virtual CGridCellBase* GetDefaultCell() const; - - virtual BOOL IsDefaultFont() const = 0 ; - virtual BOOL IsEditing() const = 0 ; - virtual BOOL IsFocused() const { return (m_nState & GVIS_FOCUSED); } - virtual BOOL IsFixed() const { return (m_nState & GVIS_FIXED); } - virtual BOOL IsFixedCol() const { return (m_nState & GVIS_FIXEDCOL); } - virtual BOOL IsFixedRow() const { return (m_nState & GVIS_FIXEDROW); } - virtual BOOL IsSelected() const { return (m_nState & GVIS_SELECTED); } - virtual BOOL IsReadOnly() const { return (m_nState & GVIS_READONLY); } - virtual BOOL IsModified() const { return (m_nState & GVIS_MODIFIED); } - virtual BOOL IsDropHighlighted() const { return (m_nState & GVIS_DROPHILITED); } - -// Operators -public: - virtual void operator=(const CGridCellBase& cell); - -// Operations -public: - virtual void Reset(); - - virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); - virtual BOOL GetTextRect( LPRECT pRect); // i/o: i=dims of cell rect; o=dims of text rect - virtual BOOL GetTipTextRect( LPRECT pRect) { return GetTextRect( pRect); } // may override for btns, etc. - virtual CSize GetTextExtent(LPCTSTR str, CDC* pDC = NULL); - virtual CSize GetCellExtent(CDC* pDC); - - // Editing - virtual BOOL Edit( int /* nRow */, int /* nCol */, CRect /* rect */, CPoint /* point */, - UINT /* nID */, UINT /* nChar */) { ASSERT( FALSE); return FALSE;} - virtual BOOL ValidateEdit(LPCTSTR str); - virtual void EndEdit() {} - - // EFW - Added to print cells properly - virtual BOOL PrintCell(CDC* pDC, int nRow, int nCol, CRect rect); - - // add additional protected grid members required of cells - LRESULT SendMessageToParent(int nRow, int nCol, int nMessage); - -protected: - virtual void OnEndEdit(); - virtual void OnMouseEnter(); - virtual void OnMouseOver(); - virtual void OnMouseLeave(); - virtual void OnClick( CPoint PointCellRelative); - virtual void OnClickDown( CPoint PointCellRelative); - virtual void OnRClick( CPoint PointCellRelative); - virtual void OnDblClick( CPoint PointCellRelative); - virtual BOOL OnSetCursor(); - -protected: - DWORD m_nState; // Cell state (selected/focus etc) -}; - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCELLBASE_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/GridCellCheck.h b/ReviewHistory/include/akGridCtrl/GridCellCheck.h deleted file mode 100644 index baf5fcf..0000000 --- a/ReviewHistory/include/akGridCtrl/GridCellCheck.h +++ /dev/null @@ -1,68 +0,0 @@ -#if !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) -#define AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -///////////////////////////////////////////////////////////////////////////// -// GridCellCheck.h : header file -// -// MFC Grid Control - Grid combo cell class header file -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.22+ -// -////////////////////////////////////////////////////////////////////// - - -#include "GridCell.h" - - -class CGridCellCheck : public CGridCell -{ - friend class CakGridCtrl; - DECLARE_DYNCREATE(CGridCellCheck) - -public: - CGridCellCheck(); - -public: - BOOL SetCheck(BOOL bChecked = TRUE); - BOOL GetCheck(); - -// Operations - virtual CSize GetCellExtent(CDC* pDC); - virtual void OnClick( CPoint PointCellRelative); - virtual BOOL GetTextRect( LPRECT pRect); - -protected: - CRect GetCheckPlacement(); - - virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); - -protected: - BOOL m_bChecked; - CRect m_Rect; -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/GridDropTarget.h b/ReviewHistory/include/akGridCtrl/GridDropTarget.h deleted file mode 100644 index 4cc377f..0000000 --- a/ReviewHistory/include/akGridCtrl/GridDropTarget.h +++ /dev/null @@ -1,82 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// GridDropTarget.h : header file -// -// MFC Grid Control - Drag/Drop target implementation -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.10+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_) -#define AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - - -#include <afxole.h> - -class CakGridCtrl; - -///////////////////////////////////////////////////////////////////////////// -// CGridDropTarget command target - -class CGridDropTarget : public COleDropTarget -{ -public: - CGridDropTarget(); - virtual ~CGridDropTarget(); - -// Attributes -public: - CakGridCtrl* m_pGridCtrl; - BOOL m_bRegistered; - -// Operations -public: - BOOL Register(CakGridCtrl *pGridCtrl); - virtual void Revoke(); - - BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point); - DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); - void OnDragLeave(CWnd* pWnd); - DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); - DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point); - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CGridDropTarget) - //}}AFX_VIRTUAL - -// Implementation -protected: - - // Generated message map functions - //{{AFX_MSG(CGridDropTarget) - //}}AFX_MSG - - DECLARE_MESSAGE_MAP() -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDDROPTARGET_H__5C610981_BD36_11D1_97CD_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/InPlaceEdit.h b/ReviewHistory/include/akGridCtrl/InPlaceEdit.h deleted file mode 100644 index 62da970..0000000 --- a/ReviewHistory/include/akGridCtrl/InPlaceEdit.h +++ /dev/null @@ -1,83 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// InPlaceEdit.h : header file -// -// MFC Grid Control - inplace editing class -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.10+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) -#define AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -class CInPlaceEdit : public CEdit -{ -// Construction -public: - CInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID, - int nRow, int nColumn, CString sInitText, UINT nFirstChar); - -// Attributes -public: - -// Operations -public: - void EndEdit(); - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CInPlaceEdit) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - protected: - virtual void PostNcDestroy(); - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CInPlaceEdit(); - -// Generated message map functions -protected: - //{{AFX_MSG(CInPlaceEdit) - afx_msg void OnKillFocus(CWnd* pNewWnd); - afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg UINT OnGetDlgCode(); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() - -private: - int m_nRow; - int m_nColumn; - CString m_sInitText; - UINT m_nLastChar; - BOOL m_bExitOnArrows; - CRect m_Rect; -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/MemDC.h b/ReviewHistory/include/akGridCtrl/MemDC.h deleted file mode 100644 index 5ae5099..0000000 --- a/ReviewHistory/include/akGridCtrl/MemDC.h +++ /dev/null @@ -1,106 +0,0 @@ -#if !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_) -#define AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 -// MemDC.h : header file -// - -////////////////////////////////////////////////// -// CMemDC - memory DC -// -// Author: Keith Rule -// Email: keithr@europa.com -// Copyright 1996-1997, Keith Rule -// -// You may freely use or modify this code provided this -// Copyright is included in all derived versions. -// -// History - 10/3/97 Fixed scrolling bug. -// Added print support. -// 25 feb 98 - fixed minor assertion bug -// -// This class implements a memory Device Context - -class CMemDC : public CDC -{ -public: - - // constructor sets up the memory DC - CMemDC(CDC* pDC) : CDC() - { - ASSERT(pDC != NULL); - - m_pDC = pDC; - m_pOldBitmap = NULL; -#ifndef _WIN32_WCE_NO_PRINTING - m_bMemDC = !pDC->IsPrinting(); -#else - m_bMemDC = FALSE; -#endif - - if (m_bMemDC) // Create a Memory DC - { - pDC->GetClipBox(&m_rect); - CreateCompatibleDC(pDC); - m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height()); - m_pOldBitmap = SelectObject(&m_bitmap); -#ifndef _WIN32_WCE - SetWindowOrg(m_rect.left, m_rect.top); -#endif - // EFW - Bug fix - Fill background in case the user has overridden - // WM_ERASEBKGND. We end up with garbage otherwise. - // CJM - moved to fix a bug in the fix. - FillSolidRect(m_rect, pDC->GetBkColor()); - } - else // Make a copy of the relevent parts of the current DC for printing - { -#if !defined(_WIN32_WCE) || ((_WIN32_WCE > 201) && !defined(_WIN32_WCE_NO_PRINTING)) - m_bPrinting = pDC->m_bPrinting; -#endif - m_hDC = pDC->m_hDC; - m_hAttribDC = pDC->m_hAttribDC; - } - - } - - // Destructor copies the contents of the mem DC to the original DC - ~CMemDC() - { - if (m_bMemDC) - { - // Copy the offscreen bitmap onto the screen. - m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(), - this, m_rect.left, m_rect.top, SRCCOPY); - - //Swap back the original bitmap. - SelectObject(m_pOldBitmap); - } else { - // All we need to do is replace the DC with an illegal value, - // this keeps us from accidently deleting the handles associated with - // the CDC that was passed to the constructor. - m_hDC = m_hAttribDC = NULL; - } - } - - // Allow usage as a pointer - CMemDC* operator->() {return this;} - - // Allow usage as a pointer - operator CMemDC*() {return this;} - -private: - CBitmap m_bitmap; // Offscreen bitmap - CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC - CDC* m_pDC; // Saves CDC passed in constructor - CRect m_rect; // Rectangle of drawing area. - BOOL m_bMemDC; // TRUE if CDC really is a Memory DC. -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_MEMDC_H__CA1D3541_7235_11D1_ABBA_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCheck.h b/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCheck.h deleted file mode 100644 index e620cf8..0000000 --- a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCheck.h +++ /dev/null @@ -1,68 +0,0 @@ -#if !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) -#define AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -///////////////////////////////////////////////////////////////////////////// -// GridCellCheck.h : header file -// -// MFC Grid Control - Grid combo cell class header file -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.22+ -// -////////////////////////////////////////////////////////////////////// - - -#include "akGridCtrl/GridCell.h" - - -class AFX_EXT_CLASS CGridCellCheck : public CGridCell -{ - friend class CakGridCtrl; - DECLARE_DYNCREATE(CGridCellCheck) - -public: - CGridCellCheck(); - -public: - BOOL SetCheck(BOOL bChecked = TRUE); - BOOL GetCheck(); - -// Operations - virtual CSize GetCellExtent(CDC* pDC); - virtual void OnClick( CPoint PointCellRelative); - virtual BOOL GetTextRect( LPRECT pRect); - -protected: - CRect GetCheckPlacement(); - - virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); - -protected: - BOOL m_bChecked; - CRect m_Rect; -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCELLCHECK_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCombo.h b/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCombo.h deleted file mode 100644 index 7a1df74..0000000 --- a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCombo.h +++ /dev/null @@ -1,177 +0,0 @@ -#if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) -#define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -///////////////////////////////////////////////////////////////////////////// -// GridCellCombo.h : header file -// -// MFC Grid Control - Grid combo cell class header file -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.10 -// -////////////////////////////////////////////////////////////////////// - - -#include "akGridCtrl/GridCell.h" - - -class AFX_EXT_CLASS CGridCellCombo : public CGridCell -{ - friend class CakGridCtrl; - DECLARE_DYNCREATE(CGridCellCombo) - -public: - CGridCellCombo(); - -// editing cells -public: - virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); - virtual CWnd* GetEditWnd() const; - virtual void EndEdit(); - -// Operations -public: - virtual CSize GetCellExtent(CDC* pDC); - -// CGridCellCombo specific calls -public: - void SetOptions(const CStringArray& ar); - void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } - DWORD GetStyle() { return m_dwStyle; } - -protected: - virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); - - CStringArray m_Strings; - DWORD m_dwStyle; -}; - - - -///////////////////////////////////////////////////////////////////////////// -// CComboEdit window - -#define IDC_COMBOEDIT 1001 - -class CComboEdit : public CEdit -{ -// Construction -public: - CComboEdit(); - -// Attributes -public: - -// Operations -public: - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CComboEdit) - virtual BOOL PreTranslateMessage(MSG* pMsg); - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CComboEdit(); - - // Generated message map functions -protected: - //{{AFX_MSG(CComboEdit) - afx_msg void OnKillFocus(CWnd* pNewWnd); - afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); - //}}AFX_MSG - - DECLARE_MESSAGE_MAP() -}; - -///////////////////////////////////////////////////////////////////////////// -// CInPlaceList window - -class CInPlaceList : public CComboBox -{ - friend class CComboEdit; - -// Construction -public: - CInPlaceList(CWnd* pParent, // parent - CRect& rect, // dimensions & location - DWORD dwStyle, // window/combobox style - UINT nID, // control ID - int nRow, int nColumn, // row and column - COLORREF crFore, COLORREF crBack, // Foreground, background colour - CStringArray& Items, // Items in list - CString sInitText, // initial selection - UINT nFirstChar); // first character to pass to control - -// Attributes -public: - CComboEdit m_edit; // subclassed edit control - -// Operations -public: - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CInPlaceList) - protected: - virtual void PostNcDestroy(); - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CInPlaceList(); - void EndEdit(); - -protected: - int GetCorrectDropWidth(); - -// Generated message map functions -protected: - //{{AFX_MSG(CInPlaceList) - afx_msg void OnKillFocus(CWnd* pNewWnd); - afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnDropdown(); - afx_msg UINT OnGetDlgCode(); - afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); - //}}AFX_MSG - //afx_msg void OnSelendOK(); - - DECLARE_MESSAGE_MAP() - -private: - int m_nNumLines; - CString m_sInitText; - int m_nRow; - int m_nCol; - UINT m_nLastChar; - BOOL m_bExitOnArrows; - COLORREF m_crForeClr, m_crBackClr; -}; - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellDateTime.h b/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellDateTime.h deleted file mode 100644 index 828d4f6..0000000 --- a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellDateTime.h +++ /dev/null @@ -1,92 +0,0 @@ -// GridCellDateTime.h: interface for the CGridCellDateTime class. -// -// Provides the implementation for a datetime picker cell type of the -// grid control. -// -// For use with CGridCtrl v2.22+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) -#define AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "akGridCtrl/GridCell.h" -#include "afxdtctl.h" // for CDateTimeCtrl - -class AFX_EXT_CLASS CGridCellDateTime : public CGridCell -{ - friend class CakGridCtrl; - DECLARE_DYNCREATE(CGridCellDateTime) - - CTime m_cTime; - DWORD m_dwStyle; - -public: - CGridCellDateTime(); - CGridCellDateTime(DWORD dwStyle); - virtual ~CGridCellDateTime(); - virtual CSize GetCellExtent(CDC* pDC); - - // editing cells -public: - void Init(DWORD dwStyle); - virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); - virtual CWnd* GetEditWnd() const; - virtual void EndEdit(); - - - CTime* GetTime() {return &m_cTime;}; - void SetTime(CTime time); -}; - -class CInPlaceDateTime : public CDateTimeCtrl -{ -// Construction -public: - CInPlaceDateTime(CWnd* pParent, // parent - CRect& rect, // dimensions & location - DWORD dwStyle, // window/combobox style - UINT nID, // control ID - int nRow, int nColumn, // row and column - COLORREF crFore, COLORREF crBack, // Foreground, background colour - CTime* pcTime, - UINT nFirstChar); // first character to pass to control - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CInPlaceList) - protected: - virtual void PostNcDestroy(); - //}}AFX_VIRTUAL - -// Implementation -public: - virtual ~CInPlaceDateTime(); - void EndEdit(); - -// Generated message map functions -protected: - //{{AFX_MSG(CInPlaceList) - afx_msg void OnKillFocus(CWnd* pNewWnd); - afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg UINT OnGetDlgCode(); - //}}AFX_MSG - //afx_msg void OnSelendOK(); - - DECLARE_MESSAGE_MAP() - -private: - CTime* m_pcTime; - int m_nRow; - int m_nCol; - UINT m_nLastChar; - BOOL m_bExitOnArrows; - COLORREF m_crForeClr, m_crBackClr; -}; - -#endif // !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellNumeric.h b/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellNumeric.h deleted file mode 100644 index 4b58de4..0000000 --- a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellNumeric.h +++ /dev/null @@ -1,26 +0,0 @@ -// GridCellNumeric.h: interface for the CGridCellNumeric class. -// -// Written by Andrew Truckle [ajtruckle@wsatkins.co.uk] -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) -#define AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "akGridCtrl/GridCell.h"//#include "../GridCtrl_src/GridCell.h" - -class AFX_EXT_CLASS CGridCellNumeric : public CGridCell -{ - DECLARE_DYNCREATE(CGridCellNumeric) - -public: - virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); - virtual void EndEdit(); - -}; - -#endif // !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridURLCell.h b/ReviewHistory/include/akGridCtrl/NewCellTypes/GridURLCell.h deleted file mode 100644 index d1a9a98..0000000 --- a/ReviewHistory/include/akGridCtrl/NewCellTypes/GridURLCell.h +++ /dev/null @@ -1,55 +0,0 @@ -// GridURLCell.h: interface for the CGridURLCell class. -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) -#define AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - -#include "akGridCtrl/GridCell.h" - -typedef struct { - LPCTSTR szURLPrefix; - size_t nLength; -} URLStruct; - - - -class AFX_EXT_CLASS CGridURLCell : public CGridCell -{ - DECLARE_DYNCREATE(CGridURLCell) - -public: - CGridURLCell(); - virtual ~CGridURLCell(); - - virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); - virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); - virtual LPCTSTR GetTipText() { return NULL; } - void SetAutoLaunchUrl(BOOL bLaunch = TRUE) { m_bLaunchUrl = bLaunch; } - BOOL GetAutoLaunchUrl() { return m_bLaunchUrl; } - -protected: - virtual BOOL OnSetCursor(); - virtual void OnClick(CPoint PointCellRelative); - - BOOL HasUrl(CString str); - BOOL OverURL(CPoint& pt, CString& strURL); - -protected: -#ifndef _WIN32_WCE - static HCURSOR g_hLinkCursor; // Hyperlink mouse cursor - HCURSOR GetHandCursor(); -#endif - static URLStruct g_szURIprefixes[]; - -protected: - COLORREF m_clrUrl; - BOOL m_bLaunchUrl; - CRect m_Rect; -}; - -#endif // !defined(AFX_GRIDURLCELL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/TitleTip.h b/ReviewHistory/include/akGridCtrl/TitleTip.h deleted file mode 100644 index 63d6d47..0000000 --- a/ReviewHistory/include/akGridCtrl/TitleTip.h +++ /dev/null @@ -1,87 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Titletip.h : header file -// -// MFC Grid Control - cell titletips -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.10+ -// -////////////////////////////////////////////////////////////////////// - -#if !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_) -#define AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -#define TITLETIP_CLASSNAME _T("ZTitleTip") - -///////////////////////////////////////////////////////////////////////////// -// CTitleTip window - -class CTitleTip : public CWnd -{ -// Construction -public: - CTitleTip(); - virtual ~CTitleTip(); - virtual BOOL Create( CWnd *pParentWnd); - -// Attributes -public: - void SetParentWnd(CWnd* pParentWnd) { m_pParentWnd = pParentWnd; } - CWnd* GetParentWnd() { return m_pParentWnd; } - -// Operations -public: - void Show(CRect rectTitle, LPCTSTR lpszTitleText, - int xoffset = 0, LPRECT lpHoverRect = NULL, - const LOGFONT* lpLogFont = NULL, - COLORREF crTextClr = CLR_DEFAULT, COLORREF crBackClr = CLR_DEFAULT); - void Hide(); - -// Overrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CTitleTip) - public: - virtual BOOL PreTranslateMessage(MSG* pMsg); - virtual BOOL DestroyWindow(); - //}}AFX_VIRTUAL - -// Implementation -protected: - CWnd *m_pParentWnd; - CRect m_rectTitle; - CRect m_rectHover; - DWORD m_dwLastLButtonDown; - DWORD m_dwDblClickMsecs; - BOOL m_bCreated; - - // Generated message map functions -protected: - //{{AFX_MSG(CTitleTip) - afx_msg void OnMouseMove(UINT nFlags, CPoint point); - //}}AFX_MSG - DECLARE_MESSAGE_MAP() -}; - -///////////////////////////////////////////////////////////////////////////// -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_TITLETIP_H__C7165DA1_187F_11D1_992F_895E185F9C72__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/akGridCtrl.h b/ReviewHistory/include/akGridCtrl/akGridCtrl.h deleted file mode 100644 index 472b7f4..0000000 --- a/ReviewHistory/include/akGridCtrl/akGridCtrl.h +++ /dev/null @@ -1,925 +0,0 @@ -// -////////////////////////////////////////////////////////////////////////// -//이 모듈은 Chris Maunder가 제작한 것을 수정 보안한 그리드 컨트롤 입니다. -// -// -/* -사용방법 -1. 리소스 창에 커스텀 컨트롤 생성 -2. 생성한 커스텀컨트롤 -> 속성 -> Class에 akGridCtrl 입력 -3. CGridCtrl 클래스로 컨트롤 변수 등록 -*/ - -///////////////////////////////////////////////////////////////////////////// -// GridCtrl.h : header file -// -// MFC Grid Control - main header -// -// Written by Chris Maunder <chris@codeproject.com> -// Copyright (c) 1998-2005. All Rights Reserved. -// -// This code may be used in compiled form in any way you desire. This -// file may be redistributed unmodified by any means PROVIDING it is -// not sold for profit without the authors written consent, and -// providing that this notice and the authors name and all copyright -// notices remains intact. -// -// An email letting me know how you are using it would be nice as well. -// -// This file is provided "as is" with no expressed or implied warranty. -// The author accepts no liability for any damage/loss of business that -// this product may cause. -// -// For use with CGridCtrl v2.20+ -// -////////////////////////////////////////////////////////////////////// - - -#if !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) -#define AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_ - -#if _MSC_VER >= 1000 -#pragma once -#endif // _MSC_VER >= 1000 - -#include "akGridCtrlLinker.h" -#include "CellRange.h" -#include "GridCell.h" -#include <afxtempl.h> -#include <vector> - - -/////////////////////////////////////////////////////////////////////////////////// -// Defines - these determine the features (and the final size) of the final code -/////////////////////////////////////////////////////////////////////////////////// - -//#define GRIDCONTROL_NO_TITLETIPS // Do not use titletips for cells with large data -//#define GRIDCONTROL_NO_DRAGDROP // Do not use OLE drag and drop -//#define GRIDCONTROL_NO_CLIPBOARD // Do not use clipboard routines - -#ifdef _WIN32_WCE -# define GRIDCONTROL_NO_TITLETIPS // Do not use titletips for cells with large data -# define GRIDCONTROL_NO_DRAGDROP // Do not use OLE drag and drop -# define GRIDCONTROL_NO_CLIPBOARD // Do not use clipboard routines -# define GRIDCONTROL_NO_PRINTING // Do not use printing routines -# ifdef WCE_NO_PRINTING // Older versions of CE had different #def's -# define _WIN32_WCE_NO_PRINTING -# endif -# ifdef WCE_NO_CURSOR -# define _WIN32_WCE_NO_CURSOR -# endif -#endif // _WIN32_WCE - -// Use this as the classname when inserting this control as a custom control -// in the MSVC++ dialog editor -#define GRIDCTRL_CLASSNAME _T("akGridCtrl") // Window class name -#define IDC_INPLACE_CONTROL 8 // ID of inplace edit controls - - -/////////////////////////////////////////////////////////////////////////////////// -// Conditional includes -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef GRIDCONTROL_NO_TITLETIPS -# include "TitleTip.h" -#endif - -#ifndef GRIDCONTROL_NO_DRAGDROP -# include "GridDropTarget.h" -# undef GRIDCONTROL_NO_CLIPBOARD // Force clipboard functions on -#endif - -#ifndef GRIDCONTROL_NO_CLIPBOARD -# include <afxole.h> -#endif - - -/////////////////////////////////////////////////////////////////////////////////// -// Helper functions -/////////////////////////////////////////////////////////////////////////////////// - -// Handy functions -#define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0 ) -#define IsCTRLpressed() ( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 ) - -// Backwards compatibility for pre 2.20 grid versions -#define DDX_GridControl(pDX, nIDC, rControl) DDX_Control(pDX, nIDC, rControl) - - -/////////////////////////////////////////////////////////////////////////////////// -// Structures -/////////////////////////////////////////////////////////////////////////////////// - -// This structure sent to Grid's parent in a WM_NOTIFY message -typedef struct AFX_EXT_CLASS tagNM_GRIDVIEW { - NMHDR hdr; - int iRow; - int iColumn; -} NM_GRIDVIEW; - -// This is sent to the Grid from child in-place edit controls -typedef struct AFX_EXT_CLASS tagGV_DISPINFO { - NMHDR hdr; - GV_ITEM item; -} GV_DISPINFO; - -// This is sent to the Grid from child in-place edit controls -typedef struct AFX_EXT_CLASS tagGV_CACHEHINT { - NMHDR hdr; - CCellRange range; -} GV_CACHEHINT; - -// storage typedef for each row in the grid -typedef CTypedPtrArray<CObArray, CGridCellBase*> GRID_ROW; - -// For virtual mode callback -typedef BOOL (CALLBACK* GRIDCALLBACK)(GV_DISPINFO *, LPARAM); - -/////////////////////////////////////////////////////////////////////////////////// -// Defines -/////////////////////////////////////////////////////////////////////////////////// - -// Grid line/scrollbar selection -#define GVL_NONE 0L // Neither -#define GVL_HORZ 1L // Horizontal line or scrollbar -#define GVL_VERT 2L // Vertical line or scrollbar -#define GVL_BOTH 3L // Both - -// Autosizing option -#define GVS_DEFAULT 0 -#define GVS_HEADER 1 // Size using column fixed cells data only -#define GVS_DATA 2 // Size using column non-fixed cells data only -#define GVS_BOTH 3 // Size using column fixed and non-fixed - -// Cell Searching options -#define GVNI_FOCUSED 0x0001 -#define GVNI_SELECTED 0x0002 -#define GVNI_DROPHILITED 0x0004 -#define GVNI_READONLY 0x0008 -#define GVNI_FIXED 0x0010 -#define GVNI_MODIFIED 0x0020 - -#define GVNI_ABOVE LVNI_ABOVE -#define GVNI_BELOW LVNI_BELOW -#define GVNI_TOLEFT LVNI_TOLEFT -#define GVNI_TORIGHT LVNI_TORIGHT -#define GVNI_ALL (LVNI_BELOW|LVNI_TORIGHT|LVNI_TOLEFT) -#define GVNI_AREA (LVNI_BELOW|LVNI_TORIGHT) - -// Hit test values (not yet implemented) -#define GVHT_DATA 0x0000 -#define GVHT_TOPLEFT 0x0001 -#define GVHT_COLHDR 0x0002 -#define GVHT_ROWHDR 0x0004 -#define GVHT_COLSIZER 0x0008 -#define GVHT_ROWSIZER 0x0010 -#define GVHT_LEFT 0x0020 -#define GVHT_RIGHT 0x0040 -#define GVHT_ABOVE 0x0080 -#define GVHT_BELOW 0x0100 - -// Messages sent to the grid's parent (More will be added in future) -#define GVN_BEGINDRAG LVN_BEGINDRAG // LVN_FIRST-9 -#define GVN_BEGINLABELEDIT LVN_BEGINLABELEDIT // LVN_FIRST-5 -#define GVN_BEGINRDRAG LVN_BEGINRDRAG -#define GVN_COLUMNCLICK LVN_COLUMNCLICK -#define GVN_DELETEITEM LVN_DELETEITEM -#define GVN_ENDLABELEDIT LVN_ENDLABELEDIT // LVN_FIRST-6 -#define GVN_SELCHANGING LVN_ITEMCHANGING -#define GVN_SELCHANGED LVN_ITEMCHANGED -#define GVN_GETDISPINFO LVN_GETDISPINFO -#define GVN_ODCACHEHINT LVN_ODCACHEHINT - -class CakGridCtrl; - -///////////////////////////////////////////////////////////////////////////// -// CGridCtrl window - -typedef bool (*PVIRTUALCOMPARE)(int, int); - -class AFX_EXT_CLASS CakGridCtrl : public CWnd -{ - DECLARE_DYNCREATE(CakGridCtrl) - friend class CGridCell; - friend class CGridCellBase; - -// Construction -public: - CakGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0); - - BOOL Create(const RECT& rect, CWnd* parent, UINT nID, - DWORD dwStyle = WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE); - -/////////////////////////////////////////////////////////////////////////////////// -// Attributes -/////////////////////////////////////////////////////////////////////////////////// -public: - int GetRowCount() const { return m_nRows; } - int GetColumnCount() const { return m_nCols; } - int GetFixedRowCount() const { return m_nFixedRows; } - int GetFixedColumnCount() const { return m_nFixedCols; } - BOOL SetRowCount(int nRows = 10); - BOOL SetColumnCount(int nCols = 10); - BOOL SetFixedRowCount(int nFixedRows = 1); - BOOL SetFixedColumnCount(int nFixedCols = 1); - - int GetRowHeight(int nRow) const; - BOOL SetRowHeight(int row, int height); - int GetColumnWidth(int nCol) const; - BOOL SetColumnWidth(int col, int width); - - BOOL GetCellOrigin(int nRow, int nCol, LPPOINT p); - BOOL GetCellOrigin(const CCellID& cell, LPPOINT p); - BOOL GetCellRect(int nRow, int nCol, LPRECT pRect); - BOOL GetCellRect(const CCellID& cell, LPRECT pRect); - - BOOL GetTextRect(const CCellID& cell, LPRECT pRect); - BOOL GetTextRect(int nRow, int nCol, LPRECT pRect); - - CCellID GetCellFromPt(CPoint point, BOOL bAllowFixedCellCheck = TRUE); - - int GetFixedRowHeight() const; - int GetFixedColumnWidth() const; - long GetVirtualWidth() const; - long GetVirtualHeight() const; - - CSize GetTextExtent(int nRow, int nCol, LPCTSTR str); - // EFW - Get extent of current text in cell - inline CSize GetCellTextExtent(int nRow, int nCol) { return GetTextExtent(nRow, nCol, GetItemText(nRow,nCol)); } - - void SetGridBkColor(COLORREF clr) { m_crGridBkColour = clr; } - COLORREF GetGridBkColor() const { return m_crGridBkColour; } - void SetGridLineColor(COLORREF clr) { m_crGridLineColour = clr; } - COLORREF GetGridLineColor() const { return m_crGridLineColour; } - - void SetTitleTipBackClr(COLORREF clr = CLR_DEFAULT) { m_crTTipBackClr = clr; } - COLORREF GetTitleTipBackClr() { return m_crTTipBackClr; } - void SetTitleTipTextClr(COLORREF clr = CLR_DEFAULT) { m_crTTipTextClr = clr; } - COLORREF GetTitleTipTextClr() { return m_crTTipTextClr; } - - // ***************************************************************************** // - // These have been deprecated. Use GetDefaultCell and then set the colors - void SetTextColor(COLORREF clr) { m_cellDefault.SetTextClr(clr); } - COLORREF GetTextColor() { return m_cellDefault.GetTextClr(); } - void SetTextBkColor(COLORREF clr) { m_cellDefault.SetBackClr(clr); } - COLORREF GetTextBkColor() { return m_cellDefault.GetBackClr(); } - void SetFixedTextColor(COLORREF clr) { m_cellFixedRowDef.SetTextClr(clr); - m_cellFixedColDef.SetTextClr(clr); - m_cellFixedRowColDef.SetTextClr(clr); } - COLORREF GetFixedTextColor() const { return m_cellFixedRowDef.GetTextClr(); } - void SetFixedBkColor(COLORREF clr) { m_cellFixedRowDef.SetBackClr(clr); - m_cellFixedColDef.SetBackClr(clr); - m_cellFixedRowColDef.SetBackClr(clr); } - COLORREF GetFixedBkColor() const { return m_cellFixedRowDef.GetBackClr(); } - void SetGridColor(COLORREF clr) { SetGridLineColor(clr); } - COLORREF GetGridColor() { return GetGridLineColor(); } - void SetBkColor(COLORREF clr) { SetGridBkColor(clr); } - COLORREF GetBkColor() { return GetGridBkColor(); } - - void SetDefCellMargin( int nMargin) { m_cellDefault.SetMargin(nMargin); - m_cellFixedRowDef.SetMargin(nMargin); - m_cellFixedColDef.SetMargin(nMargin); - m_cellFixedRowColDef.SetMargin(nMargin); } - int GetDefCellMargin() const { return m_cellDefault.GetMargin(); } - - int GetDefCellHeight() const { return m_cellDefault.GetHeight(); } - void SetDefCellHeight(int nHeight) { m_cellDefault.SetHeight(nHeight); - m_cellFixedRowDef.SetHeight(nHeight); - m_cellFixedColDef.SetHeight(nHeight); - m_cellFixedRowColDef.SetHeight(nHeight); } - int GetDefCellWidth() const { return m_cellDefault.GetWidth(); } - void SetDefCellWidth(int nWidth) { m_cellDefault.SetWidth(nWidth); - m_cellFixedRowDef.SetWidth(nWidth); - m_cellFixedColDef.SetWidth(nWidth); - m_cellFixedRowColDef.SetWidth(nWidth); } - - // ***************************************************************************** // - - int GetSelectedCount() const { return (int)m_SelectedCellMap.GetCount(); } - - CCellID SetFocusCell(CCellID cell); - CCellID SetFocusCell(int nRow, int nCol); - CCellID GetFocusCell() const { return m_idCurrentCell; } - - - void SetVirtualMode(BOOL bVirtual); - BOOL GetVirtualMode() const { return m_bVirtualMode; } - void SetCallbackFunc(GRIDCALLBACK pCallback, - LPARAM lParam) { m_pfnCallback = pCallback; m_lParam = lParam; } - GRIDCALLBACK GetCallbackFunc() { return m_pfnCallback; } - - - void SetImageList(CImageList* pList) { m_pImageList = pList; } - CImageList* GetImageList() const { return m_pImageList; } - - void SetGridLines(int nWhichLines = GVL_BOTH); - int GetGridLines() const { return m_nGridLines; } - void SetEditable(BOOL bEditable = TRUE) { m_bEditable = bEditable; } - BOOL IsEditable() const { return m_bEditable; } - void SetListMode(BOOL bEnableListMode = TRUE); - BOOL GetListMode() const { return m_bListMode; } - void SetSingleRowSelection(BOOL bSing = TRUE) { m_bSingleRowSelection = bSing; } - BOOL GetSingleRowSelection() { return m_bSingleRowSelection & m_bListMode; } - void SetSingleColSelection(BOOL bSing = TRUE) { m_bSingleColSelection = bSing; } - BOOL GetSingleColSelection() { return m_bSingleColSelection; } - void EnableSelection(BOOL bEnable = TRUE) { ResetSelectedRange(); m_bEnableSelection = bEnable; ResetSelectedRange(); } - BOOL IsSelectable() const { return m_bEnableSelection; } - void SetFixedColumnSelection(BOOL bSelect) { m_bFixedColumnSelection = bSelect;} - BOOL GetFixedColumnSelection() { return m_bFixedColumnSelection; } - void SetFixedRowSelection(BOOL bSelect) { m_bFixedRowSelection = bSelect; } - BOOL GetFixedRowSelection() { return m_bFixedRowSelection; } - void EnableDragAndDrop(BOOL bAllow = TRUE) { m_bAllowDragAndDrop = bAllow; } - BOOL GetDragAndDrop() const { return m_bAllowDragAndDrop; } - void SetRowResize(BOOL bResize = TRUE) { m_bAllowRowResize = bResize; } - BOOL GetRowResize() const { return m_bAllowRowResize; } - void SetColumnResize(BOOL bResize = TRUE) { m_bAllowColumnResize = bResize; } - BOOL GetColumnResize() const { return m_bAllowColumnResize; } - void SetHeaderSort(BOOL bSortOnClick = TRUE) { m_bSortOnClick = bSortOnClick; } - BOOL GetHeaderSort() const { return m_bSortOnClick; } - void SetHandleTabKey(BOOL bHandleTab = TRUE) { m_bHandleTabKey = bHandleTab; } - BOOL GetHandleTabKey() const { return m_bHandleTabKey; } - void SetDoubleBuffering(BOOL bBuffer = TRUE) { m_bDoubleBuffer = bBuffer; } - BOOL GetDoubleBuffering() const { return m_bDoubleBuffer; } - void EnableTitleTips(BOOL bEnable = TRUE) { m_bTitleTips = bEnable; } - BOOL GetTitleTips() { return m_bTitleTips; } - void SetSortColumn(int nCol); - int GetSortColumn() const { return m_nSortColumn; } - void SetSortAscending(BOOL bAscending) { m_bAscending = bAscending; } - BOOL GetSortAscending() const { return m_bAscending; } - void SetTrackFocusCell(BOOL bTrack) { m_bTrackFocusCell = bTrack; } - BOOL GetTrackFocusCell() { return m_bTrackFocusCell; } - void SetFrameFocusCell(BOOL bFrame) { m_bFrameFocus = bFrame; } - BOOL GetFrameFocusCell() { return m_bFrameFocus; } - void SetAutoSizeStyle(int nStyle = GVS_BOTH) { m_nAutoSizeColumnStyle = nStyle; } - int GetAutoSizeStyle() { return m_nAutoSizeColumnStyle; } - - void EnableHiddenColUnhide(BOOL bEnable = TRUE){ m_bHiddenColUnhide = bEnable; } - BOOL GetHiddenColUnhide() { return m_bHiddenColUnhide; } - void EnableHiddenRowUnhide(BOOL bEnable = TRUE){ m_bHiddenRowUnhide = bEnable; } - BOOL GetHiddenRowUnhide() { return m_bHiddenRowUnhide; } - - void EnableColumnHide(BOOL bEnable = TRUE) { m_bAllowColHide = bEnable; } - BOOL GetColumnHide() { return m_bAllowColHide; } - void EnableRowHide(BOOL bEnable = TRUE) { m_bAllowRowHide = bEnable; } - BOOL GetRowHide() { return m_bAllowRowHide; } - -/////////////////////////////////////////////////////////////////////////////////// -// default Grid cells. Use these for setting default values such as colors and fonts -/////////////////////////////////////////////////////////////////////////////////// -public: - CGridCellBase* GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const; - -/////////////////////////////////////////////////////////////////////////////////// -// Grid cell Attributes -/////////////////////////////////////////////////////////////////////////////////// -public: - CGridCellBase* GetCell(int nRow, int nCol) const; // Get the actual cell! - - void SetModified(BOOL bModified = TRUE, int nRow = -1, int nCol = -1); - BOOL GetModified(int nRow = -1, int nCol = -1); - BOOL IsCellFixed(int nRow, int nCol); - - BOOL SetItem(const GV_ITEM* pItem); - BOOL GetItem(GV_ITEM* pItem); - BOOL SetItemText(int nRow, int nCol, LPCTSTR str); - // The following was virtual. If you want to override, use - // CGridCellBase-derived class's GetText() to accomplish same thing - CString GetItemText(int nRow, int nCol) const; - - // EFW - 06/13/99 - Added to support printf-style formatting codes. - // Also supports use with a string resource ID -#if !defined(_WIN32_WCE) || (_WIN32_WCE >= 210) - BOOL SetItemTextFmt(int nRow, int nCol, LPCTSTR szFmt, ...); - BOOL SetItemTextFmtID(int nRow, int nCol, UINT nID, ...); -#endif - - BOOL SetItemData(int nRow, int nCol, LPARAM lParam); - LPARAM GetItemData(int nRow, int nCol) const; - BOOL SetItemImage(int nRow, int nCol, int iImage); - int GetItemImage(int nRow, int nCol) const; - BOOL SetItemState(int nRow, int nCol, UINT state); - UINT GetItemState(int nRow, int nCol) const; - BOOL SetItemFormat(int nRow, int nCol, UINT nFormat); - UINT GetItemFormat(int nRow, int nCol) const; - BOOL SetItemBkColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT); - COLORREF GetItemBkColour(int nRow, int nCol) const; - BOOL SetItemFgColour(int nRow, int nCol, COLORREF cr = CLR_DEFAULT); - COLORREF GetItemFgColour(int nRow, int nCol) const; - BOOL SetItemFont(int nRow, int nCol, const LOGFONT* lf); - const LOGFONT* GetItemFont(int nRow, int nCol); - - BOOL IsItemEditing(int nRow, int nCol); - - BOOL SetCellType(int nRow, int nCol, CRuntimeClass* pRuntimeClass); - BOOL SetDefaultCellType( CRuntimeClass* pRuntimeClass); - -/////////////////////////////////////////////////////////////////////////////////// -// Operations -/////////////////////////////////////////////////////////////////////////////////// -public: - int InsertColumn(LPCTSTR strHeading, UINT nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE, - int nColumn = -1); - int InsertRow(LPCTSTR strHeading, int nRow = -1); - BOOL DeleteColumn(int nColumn); - BOOL DeleteRow(int nRow); - BOOL DeleteNonFixedRows(); - BOOL DeleteAllItems(); - - void ClearCells(CCellRange Selection); - - BOOL AutoSizeRow(int nRow, BOOL bResetScroll = TRUE); - BOOL AutoSizeColumn(int nCol, UINT nAutoSizeStyle = GVS_DEFAULT, BOOL bResetScroll = TRUE); - void AutoSizeRows(); - void AutoSizeColumns(UINT nAutoSizeStyle = GVS_DEFAULT); - void AutoSize(UINT nAutoSizeStyle = GVS_DEFAULT); - void ExpandColumnsToFit(BOOL bExpandFixed = TRUE); - void ExpandLastColumn(); - void ExpandRowsToFit(BOOL bExpandFixed = TRUE); - void ExpandToFit(BOOL bExpandFixed = TRUE); - - void Refresh(); - void AutoFill(); // Fill grid with blank cells - - void EnsureVisible(CCellID &cell) { EnsureVisible(cell.row, cell.col); } - void EnsureVisible(int nRow, int nCol); - BOOL IsCellVisible(int nRow, int nCol); - BOOL IsCellVisible(CCellID cell); - BOOL IsCellEditable(int nRow, int nCol) const; - BOOL IsCellEditable(CCellID &cell) const; - BOOL IsCellSelected(int nRow, int nCol) const; - BOOL IsCellSelected(CCellID &cell) const; - - // SetRedraw stops/starts redraws on things like changing the # rows/columns - // and autosizing, but not for user-intervention such as resizes - void SetRedraw(BOOL bAllowDraw, BOOL bResetScrollBars = FALSE); - BOOL RedrawCell(int nRow, int nCol, CDC* pDC = NULL); - BOOL RedrawCell(const CCellID& cell, CDC* pDC = NULL); - BOOL RedrawRow(int row); - BOOL RedrawColumn(int col); - -#ifndef _WIN32_WCE - BOOL Save(LPCTSTR filename, TCHAR chSeparator = _T(',')); - BOOL Load(LPCTSTR filename, TCHAR chSeparator = _T(',')); -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Cell Ranges -/////////////////////////////////////////////////////////////////////////////////// - public: - CCellRange GetCellRange() const; - CCellRange GetSelectedCellRange() const; - void SetSelectedRange(const CCellRange& Range, BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE); - void SetSelectedRange(int nMinRow, int nMinCol, int nMaxRow, int nMaxCol, - BOOL bForceRepaint = FALSE, BOOL bSelectCells = TRUE); - BOOL IsValid(int nRow, int nCol) const; - BOOL IsValid(const CCellID& cell) const; - BOOL IsValid(const CCellRange& range) const; - -/////////////////////////////////////////////////////////////////////////////////// -// Clipboard, drag and drop, and cut n' paste operations -/////////////////////////////////////////////////////////////////////////////////// -#ifndef GRIDCONTROL_NO_CLIPBOARD - virtual void CutSelectedText(); - virtual COleDataSource* CopyTextFromGrid(); - virtual BOOL PasteTextToGrid(CCellID cell, COleDataObject* pDataObject, BOOL bSelectPastedCells=TRUE); -#endif - -#ifndef GRIDCONTROL_NO_DRAGDROP - public: - virtual void OnBeginDrag(); - virtual DROPEFFECT OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); - virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point); - virtual void OnDragLeave(); - virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point); -#endif - -#ifndef GRIDCONTROL_NO_CLIPBOARD - virtual void OnEditCut(); - virtual void OnEditCopy(); - virtual void OnEditPaste(); -#endif - virtual void OnEditSelectAll(); - -/////////////////////////////////////////////////////////////////////////////////// -// Misc. -/////////////////////////////////////////////////////////////////////////////////// -public: - CCellID GetNextItem(CCellID& cell, int nFlags) const; - - BOOL SortItems(int nCol, BOOL bAscending, LPARAM data = 0); - BOOL SortTextItems(int nCol, BOOL bAscending, LPARAM data = 0); - BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data = 0); - - void SetCompareFunction(PFNLVCOMPARE pfnCompare); - - // in-built sort functions - static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); - static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); - -/////////////////////////////////////////////////////////////////////////////////// -// Printing -/////////////////////////////////////////////////////////////////////////////////// -#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING) -public: - void Print(CPrintDialog* pPrntDialog = NULL); - - // EFW - New printing support functions - void EnableWysiwygPrinting(BOOL bEnable = TRUE) { m_bWysiwygPrinting = bEnable; } - BOOL GetWysiwygPrinting() { return m_bWysiwygPrinting; } - - void SetShadedPrintOut(BOOL bEnable = TRUE) { m_bShadedPrintOut = bEnable; } - BOOL GetShadedPrintOut(void) { return m_bShadedPrintOut; } - - // Use -1 to have it keep the existing value - void SetPrintMarginInfo(int nHeaderHeight, int nFooterHeight, - int nLeftMargin, int nRightMargin, int nTopMargin, - int nBottomMargin, int nGap); - - void GetPrintMarginInfo(int &nHeaderHeight, int &nFooterHeight, - int &nLeftMargin, int &nRightMargin, int &nTopMargin, - int &nBottomMargin, int &nGap); - -/////////////////////////////////////////////////////////////////////////////////// -// Printing overrides for derived classes -/////////////////////////////////////////////////////////////////////////////////// -public: - virtual void OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo); - virtual void OnPrint(CDC *pDC, CPrintInfo *pInfo); - virtual void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo); - -#endif // #if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING) - -// Implementation -public: - virtual ~CakGridCtrl(); - - static BOOL RegisterWindowClass(); -protected: - - BOOL Initialise(); - void SetupDefaultCells(); - - LRESULT SendMessageToParent(int nRow, int nCol, int nMessage) const; - LRESULT SendDisplayRequestToParent(GV_DISPINFO* pDisplayInfo) const; - LRESULT SendCacheHintToParent(const CCellRange& range) const; - - BOOL InvalidateCellRect(const int row, const int col); - BOOL InvalidateCellRect(const CCellID& cell); - BOOL InvalidateCellRect(const CCellRange& cellRange); - void EraseBkgnd(CDC* pDC); - - BOOL GetCellRangeRect(const CCellRange& cellRange, LPRECT lpRect); - - BOOL SetCell(int nRow, int nCol, CGridCellBase* pCell); - - int SetMouseMode(int nMode) { int nOldMode = m_MouseMode; m_MouseMode = nMode; return nOldMode; } - int GetMouseMode() const { return m_MouseMode; } - - BOOL MouseOverRowResizeArea(CPoint& point); - BOOL MouseOverColumnResizeArea(CPoint& point); - - CCellID GetTopleftNonFixedCell(BOOL bForceRecalculation = FALSE); - CCellRange GetUnobstructedNonFixedCellRange(BOOL bForceRecalculation = FALSE); - CCellRange GetVisibleNonFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE); - CCellRange GetVisibleFixedCellRange(LPRECT pRect = NULL, BOOL bForceRecalculation = FALSE); - - BOOL IsVisibleVScroll() { return ( (m_nBarState & GVL_VERT) > 0); } - BOOL IsVisibleHScroll() { return ( (m_nBarState & GVL_HORZ) > 0); } - void ResetSelectedRange(); - void ResetScrollBars(); - void EnableScrollBars(int nBar, BOOL bEnable = TRUE); - int GetScrollPos32(int nBar, BOOL bGetTrackPos = FALSE); - BOOL SetScrollPos32(int nBar, int nPos, BOOL bRedraw = TRUE); - - BOOL SortTextItems(int nCol, BOOL bAscending, int low, int high); - BOOL SortItems(PFNLVCOMPARE pfnCompare, int nCol, BOOL bAscending, LPARAM data, - int low, int high); - - CPoint GetPointClicked(int nRow, int nCol, const CPoint& point); - - void ValidateAndModifyCellContents(int nRow, int nCol, LPCTSTR strText); - -// Overrrides - // ClassWizard generated virtual function overrides - //{{AFX_VIRTUAL(CGridCtrl) - protected: - virtual void PreSubclassWindow(); - //}}AFX_VIRTUAL - -protected: -#if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING) - // Printing - virtual void PrintFixedRowCells(int nStartColumn, int nStopColumn, int& row, CRect& rect, - CDC *pDC, BOOL& bFirst); - virtual void PrintColumnHeadings(CDC *pDC, CPrintInfo *pInfo); - virtual void PrintHeader(CDC *pDC, CPrintInfo *pInfo); - virtual void PrintFooter(CDC *pDC, CPrintInfo *pInfo); - virtual void PrintRowButtons(CDC *pDC, CPrintInfo* /*pInfo*/); -#endif - -#ifndef GRIDCONTROL_NO_DRAGDROP - // Drag n' drop - virtual CImageList* CreateDragImage(CPoint *pHotSpot); // no longer necessary -#endif - - // Mouse Clicks - virtual void OnFixedColumnClick(CCellID& cell); - virtual void OnFixedRowClick(CCellID& cell); - - // Editing - virtual void OnEditCell(int nRow, int nCol, CPoint point, UINT nChar); - virtual void OnEndEditCell(int nRow, int nCol, CString str); - virtual BOOL ValidateEdit(int nRow, int nCol, LPCTSTR str); - virtual void EndEditing(); - - // Drawing - virtual void OnDraw(CDC* pDC); - - // CGridCellBase Creation and Cleanup - virtual CGridCellBase* CreateCell(int nRow, int nCol); - virtual void DestroyCell(int nRow, int nCol); - -// Attributes -protected: - // General attributes - COLORREF m_crFixedTextColour, m_crFixedBkColour; - COLORREF m_crGridBkColour, m_crGridLineColour; - COLORREF m_crWindowText, m_crWindowColour, m_cr3DFace, // System colours - m_crShadow; - COLORREF m_crTTipBackClr, m_crTTipTextClr; // Titletip colours - FNA - - BOOL m_bVirtualMode; - LPARAM m_lParam; // lParam for callback - GRIDCALLBACK m_pfnCallback; // The callback function - - int m_nGridLines; - BOOL m_bEditable; - BOOL m_bModified; - BOOL m_bAllowDragAndDrop; - BOOL m_bListMode; - BOOL m_bSingleRowSelection; - BOOL m_bSingleColSelection; - BOOL m_bAllowDraw; - BOOL m_bEnableSelection; - BOOL m_bFixedRowSelection, m_bFixedColumnSelection; - BOOL m_bSortOnClick; - BOOL m_bHandleTabKey; - BOOL m_bDoubleBuffer; - BOOL m_bTitleTips; - int m_nBarState; - BOOL m_bWysiwygPrinting; - BOOL m_bHiddenColUnhide, m_bHiddenRowUnhide; - BOOL m_bAllowColHide, m_bAllowRowHide; - BOOL m_bAutoSizeSkipColHdr; - BOOL m_bTrackFocusCell; - BOOL m_bFrameFocus; - UINT m_nAutoSizeColumnStyle; - - // Cell size details - int m_nRows, m_nFixedRows, m_nCols, m_nFixedCols; - CUIntArray m_arRowHeights, m_arColWidths; - int m_nVScrollMax, m_nHScrollMax; - - // Fonts and images - CRuntimeClass* m_pRtcDefault; // determines kind of Grid Cell created by default - CGridDefaultCell m_cellDefault; // "default" cell. Contains default colours, font etc. - CGridDefaultCell m_cellFixedColDef, m_cellFixedRowDef, m_cellFixedRowColDef; - CFont m_PrinterFont; // for the printer - CImageList* m_pImageList; - - // Cell data - CTypedPtrArray<CObArray, GRID_ROW*> m_RowData; - - // Mouse operations such as cell selection - int m_MouseMode; - BOOL m_bLMouseButtonDown, m_bRMouseButtonDown; - CPoint m_LeftClickDownPoint, m_LastMousePoint; - CCellID m_LeftClickDownCell, m_SelectionStartCell; - CCellID m_idCurrentCell, m_idTopLeftCell; - INT_PTR m_nTimerID; - int m_nTimerInterval; - int m_nResizeCaptureRange; - BOOL m_bAllowRowResize, m_bAllowColumnResize; - int m_nRowsPerWheelNotch; - CMap<DWORD,DWORD, CCellID, CCellID&> m_SelectedCellMap, m_PrevSelectedCellMap; - -#ifndef GRIDCONTROL_NO_TITLETIPS - CTitleTip m_TitleTip; // Title tips for cells -#endif - - // Drag and drop - CCellID m_LastDragOverCell; -#ifndef GRIDCONTROL_NO_DRAGDROP - CGridDropTarget m_DropTarget; // OLE Drop target for the grid -#endif - - // Printing information - CSize m_CharSize; - int m_nPageHeight; - CSize m_LogicalPageSize, // Page size in gridctrl units. - m_PaperSize; // Page size in device units. - // additional properties to support Wysiwyg printing - int m_nPageWidth; - int m_nPrintColumn; - int m_nCurrPrintRow; - int m_nNumPages; - int m_nPageMultiplier; - - // sorting - int m_bAscending; - int m_nSortColumn; - PFNLVCOMPARE m_pfnCompare; - - // EFW - Added to support shaded/unshaded printout. If true, colored - // cells will print as-is. If false, all text prints as black on white. - BOOL m_bShadedPrintOut; - - // EFW - Added support for user-definable margins. Top and bottom are in - // lines. Left, right, and gap are in characters (avg width is used). - int m_nHeaderHeight, m_nFooterHeight, m_nLeftMargin, - m_nRightMargin, m_nTopMargin, m_nBottomMargin, m_nGap; - -protected: - void SelectAllCells(); - void SelectColumns(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE); - void SelectRows(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE); - void SelectCells(CCellID currentCell, BOOL bForceRedraw=FALSE, BOOL bSelectCells=TRUE); - void OnSelecting(const CCellID& currentCell); - - // Generated message map functions - //{{AFX_MSG(CGridCtrl) - afx_msg void OnPaint(); - afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); - afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); - afx_msg void OnSize(UINT nType, int cx, int cy); - afx_msg void OnLButtonUp(UINT nFlags, CPoint point); - afx_msg void OnLButtonDown(UINT nFlags, CPoint point); - afx_msg void OnMouseMove(UINT nFlags, CPoint point); - afx_msg void OnTimer(UINT_PTR nIDEvent); - afx_msg UINT OnGetDlgCode(); - afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); - afx_msg BOOL OnEraseBkgnd(CDC* pDC); - afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); - afx_msg void OnUpdateEditSelectAll(CCmdUI* pCmdUI); - //}}AFX_MSG -#ifndef _WIN32_WCE_NO_CURSOR - afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); -#endif -#ifndef _WIN32_WCE - afx_msg void OnRButtonDown(UINT nFlags, CPoint point); - afx_msg void OnRButtonUp(UINT nFlags, CPoint point); // EFW - Added - afx_msg void OnSysColorChange(); -#endif -#ifndef _WIN32_WCE_NO_CURSOR - afx_msg void OnCaptureChanged(CWnd *pWnd); -#endif -#ifndef GRIDCONTROL_NO_CLIPBOARD - afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI); - afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI); - afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI); -#endif -#if (_MFC_VER >= 0x0421) || (_WIN32_WCE >= 210) - afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection); -#endif -#if !defined(_WIN32_WCE) && (_MFC_VER >= 0x0421) - afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); -#endif - afx_msg LRESULT OnSetFont(WPARAM hFont, LPARAM lParam); - afx_msg LRESULT OnGetFont(WPARAM hFont, LPARAM lParam); - afx_msg LRESULT OnImeChar(WPARAM wCharCode, LPARAM lParam); - afx_msg void OnEndInPlaceEdit(NMHDR* pNMHDR, LRESULT* pResult); - DECLARE_MESSAGE_MAP() - - enum eMouseModes { MOUSE_NOTHING, MOUSE_SELECT_ALL, MOUSE_SELECT_COL, MOUSE_SELECT_ROW, - MOUSE_SELECT_CELLS, MOUSE_SCROLLING_CELLS, - MOUSE_OVER_ROW_DIVIDE, MOUSE_SIZING_ROW, - MOUSE_OVER_COL_DIVIDE, MOUSE_SIZING_COL, - MOUSE_PREPARE_EDIT, -#ifndef GRIDCONTROL_NO_DRAGDROP - MOUSE_PREPARE_DRAG, MOUSE_DRAGGING -#endif - }; -// for sort in virtual mode, and column order, save and load layer -public: - typedef std::vector<int> intlist; - void Reorder(int From, int To); - void SetVirtualCompare(PVIRTUALCOMPARE VirtualCompare) { m_pfnVirtualCompare = VirtualCompare;} - int m_CurCol; - void AllowReorderColumn(bool b=true) { m_AllowReorderColumn = b;} - void EnableDragRowMode(bool b=true) { m_bDragRowMode = b; if(b) EnableDragAndDrop(); } // to change row order - int GetLayer(int** pLayer); // gives back the number of ints of the area (do not forget to delete *pLayer) - void SetLayer(int* pLayer); // coming from a previous GetLayer (ignored if not same number of column, or the same revision number) - void ForceQuitFocusOnTab(bool b=true) { m_QuitFocusOnTab = b;} // use only if GetParent() is a CDialog - void AllowSelectRowInFixedCol(bool b=true) { m_AllowSelectRowInFixedCol = b;} // -// allow acces? - intlist m_arRowOrder, m_arColOrder; - static CakGridCtrl* m_This; -protected: - virtual void AddSubVirtualRow(int Num, int Nb); - bool m_bDragRowMode; - int m_CurRow; -private: - void ResetVirtualOrder(); - PVIRTUALCOMPARE m_pfnVirtualCompare; - static bool NotVirtualCompare(int c1, int c2); - bool m_InDestructor; - bool m_AllowReorderColumn; - bool m_QuitFocusOnTab; - bool m_AllowSelectRowInFixedCol; - -}; - -// Returns the default cell implementation for the given grid region -inline CGridCellBase* CakGridCtrl::GetDefaultCell(BOOL bFixedRow, BOOL bFixedCol) const -{ - if (bFixedRow && bFixedCol) return (CGridCellBase*) &m_cellFixedRowColDef; - if (bFixedRow) return (CGridCellBase*) &m_cellFixedRowDef; - if (bFixedCol) return (CGridCellBase*) &m_cellFixedColDef; - return (CGridCellBase*) &m_cellDefault; -} - -inline CGridCellBase* CakGridCtrl::GetCell(int nRow, int nCol) const -{ - if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) - return NULL; - - if (GetVirtualMode()) - { - CGridCellBase* pCell = GetDefaultCell(nRow < m_nFixedRows, nCol < m_nFixedCols); - static GV_DISPINFO gvdi; - gvdi.item.row = nRow; - gvdi.item.col = nCol; - gvdi.item.mask = 0xFFFFFFFF; - gvdi.item.nState = 0; - gvdi.item.nFormat = pCell->GetFormat(); - gvdi.item.iImage = pCell->GetImage(); - gvdi.item.crBkClr = pCell->GetBackClr(); - gvdi.item.crFgClr = pCell->GetTextClr(); - gvdi.item.lParam = pCell->GetData(); - memcpy(&gvdi.item.lfFont, pCell->GetFont(), sizeof(LOGFONT)); - gvdi.item.nMargin = pCell->GetMargin(); - gvdi.item.strText.Empty(); - - // Fix the state bits - if (IsCellSelected(nRow, nCol)) gvdi.item.nState |= GVIS_SELECTED; - if (nRow < GetFixedRowCount()) gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDROW); - if (nCol < GetFixedColumnCount()) gvdi.item.nState |= (GVIS_FIXED | GVIS_FIXEDCOL); - if (GetFocusCell() == CCellID(nRow, nCol)) gvdi.item.nState |= GVIS_FOCUSED; - if(!m_InDestructor) - { - gvdi.item.row = m_arRowOrder[nRow]; - gvdi.item.col = m_arColOrder[nCol]; - - if (m_pfnCallback) - m_pfnCallback(&gvdi, m_lParam); - else - SendDisplayRequestToParent(&gvdi); - gvdi.item.row = nRow; - gvdi.item.col = nCol; - } - static CGridCell cell; - cell.SetState(gvdi.item.nState); - cell.SetFormat(gvdi.item.nFormat); - cell.SetImage(gvdi.item.iImage); - cell.SetBackClr(gvdi.item.crBkClr); - cell.SetTextClr(gvdi.item.crFgClr); - cell.SetData(gvdi.item.lParam); - cell.SetFont(&(gvdi.item.lfFont)); - cell.SetMargin(gvdi.item.nMargin); - cell.SetText(gvdi.item.strText); - cell.SetGrid((CakGridCtrl*)this); - - return (CGridCellBase*) &cell; - } - - GRID_ROW* pRow = m_RowData[nRow]; - if (!pRow) return NULL; - return pRow->GetAt(m_arColOrder[nCol]); -} - -inline BOOL CakGridCtrl::SetCell(int nRow, int nCol, CGridCellBase* pCell) -{ - if (GetVirtualMode()) - return FALSE; - - if (nRow < 0 || nRow >= m_nRows || nCol < 0 || nCol >= m_nCols) - return FALSE; - - GRID_ROW* pRow = m_RowData[nRow]; - if (!pRow) return FALSE; - - pCell->SetCoords( nRow, nCol); - pRow->SetAt(nCol, pCell); - - return TRUE; -} - -///////////////////////////////////////////////////////////////////////////// - -//{{AFX_INSERT_LOCATION}} -// Microsoft Developer Studio will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_GRIDCTRL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) diff --git a/ReviewHistory/include/akGridCtrl/akGridCtrlLinker.h b/ReviewHistory/include/akGridCtrl/akGridCtrlLinker.h deleted file mode 100644 index 6491106..0000000 --- a/ReviewHistory/include/akGridCtrl/akGridCtrlLinker.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - - -#ifdef _AKGRIDCTRL_EXPORTS -#define AKGRIDCTRL_DLLSPEC __declspec( dllexport ) -#else -#define AKGRIDCTRL_DLLSPEC __declspec( dllimport ) -#endif - - - - -#ifndef _AKGRIDCTRL_EXPORTS - - #undef _AUTOLIBNAME - #undef _AKPROJECTNAME - #undef _AKVCVER - #undef _AKDEBUG - - #define _AKPROJECTNAME "akGridCtrl" - - #ifdef _DEBUG - #define _AKDEBUG "d" - #else - #define _AKDEBUG "" - #endif - - #ifdef WIN64 - #define _AKX64 "_x64" - #elif _WIN64 - #define _AKX64 "_x64" - #else - #define _AKX64 "" - #endif - - #if(_MSC_VER == 1200) //vs6.0 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1300) //vs2003 vc7 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1400) //vs2005 vc8 - #define _AKVCVER "_vc8" - #elif(_MSC_VER == 1500) //vs2008 vc9 - #define _AKVCVER "_vc9" - #elif(_MSC_VER == 1600) //vs2010 - #define _AKVCVER "_vc10" - #elif(_MSC_VER == 1700) //vs2012 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER == 1800) //vs2013 - #error 해당버전은 지원하지 않습니다. - #elif(_MSC_VER >= 1910 && _MSC_VER < 1950) //vs2017 15.0 - #define _AKVCVER "_vc15" - #else - //#define _AKVCVER "" - #pragma message( "해당버전은 지원하지 않습니다. " _MSC_VER ) - #error _MSC_VER 해당버전은 지원하지 않습니다. - #endif - - #define _AUTOLIBNAME _AKPROJECTNAME""_AKDEBUG""_AKX64""_AKVCVER".lib" - - // You may turn off this include message by defining _NOPSAUTOLIB - #ifndef _NOPSAUTOLIBMSG - #pragma message( ">>Kim Tae Hyun - akGrid<< Will automatically link with " _AUTOLIBNAME ) - #endif - #pragma comment(lib, _AUTOLIBNAME) -#endif diff --git a/ReviewHistory/include/akGridCtrl/testCtrl.h b/ReviewHistory/include/akGridCtrl/testCtrl.h deleted file mode 100644 index c178507..0000000 --- a/ReviewHistory/include/akGridCtrl/testCtrl.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - - -// ctest11 -#define WND_CLASSNAME _T("testCtrl") // Window class name - -class AFX_EXT_CLASS CtestCtrl : public CWnd -{ - DECLARE_DYNAMIC(CtestCtrl) - -public: - CtestCtrl(); - virtual ~CtestCtrl(); - - static BOOL RegisterWindowClass(HINSTANCE hInstance); - -protected: - DECLARE_MESSAGE_MAP() - -public: - virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); - afx_msg void OnPaint(); -}; - - diff --git a/ReviewHistory/include/akSTL/akColor.h b/ReviewHistory/include/akSTL/akColor.h deleted file mode 100644 index 796fb2c..0000000 --- a/ReviewHistory/include/akSTL/akColor.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - - -//namespace akSTL -//{ - class AKSTL_DLLSPEC akColor4f - { - public: - akColor4f(void); - akColor4f(float R, float G, float B, float A=0.0f); - ~akColor4f(void); - - - void set(float R, float G, float B, float A=0.0f); - inline akColor4f& operator=(const akColor4f& ksgcolor); - - public: - float r,g,b,a; - }; - -//}; diff --git a/ReviewHistory/include/akSTL/akPoint.h b/ReviewHistory/include/akSTL/akPoint.h deleted file mode 100644 index 372fed3..0000000 --- a/ReviewHistory/include/akSTL/akPoint.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" -#include "akPointT.h" - -#define CakPointToCPoint(akPoint) CPoint(akPoint.x, akPoint.y) -#define CPointToCakPoint(point) CakPoint(point.x, point.y) - -class AKSTL_DLLSPEC CakPoint : public CakPointT<long> -{ -public: - - CakPoint(){}; - virtual ~CakPoint(){}; - - CakPoint(const long& X, const long& Y) - { - x=X,y=Y; - }; - - void test(); -}; - -class AKSTL_DLLSPEC CakPointf : public CakPointT<float> -{ -public: - - CakPointf(){}; - virtual ~CakPointf(){}; - - CakPointf(const float& X, const float& Y) - { - x=X,y=Y; - }; -}; - -class AKSTL_DLLSPEC CakPointd : public CakPointT<double> -{ -public: - - CakPointd(){}; - virtual ~CakPointd(){}; - - CakPointd(const double& X, const double& Y) - { - x=X,y=Y; - }; -}; \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akPointT.h b/ReviewHistory/include/akSTL/akPointT.h deleted file mode 100644 index 878f0bd..0000000 --- a/ReviewHistory/include/akSTL/akPointT.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - -template<typename T> -class CakPointT -{ -public: - CakPointT(void){}; - CakPointT(const T& X, const T& Y):x(X),y(Y) {}; - //~CakPointT(void){}; - - // Operations - - // translate the point - void Offset(T xOffset, T yOffset) throw(); - void Offset(CakPointT<T> point) throw(); - void SetPoint(T X, T Y) throw(); - - bool operator==(CakPointT<T> point) const throw(); - bool operator!=(CakPointT<T> point) const throw(); - void operator+=(CakPointT<T> point) throw(); - void operator-=(CakPointT<T> point) throw(); - - // Operators returning CPoint values - CakPointT<T> operator-() const throw(); - CakPointT<T> operator+(CakPointT<T> point) const throw(); - CakPointT<T> operator-(CakPointT<T> point) const throw(); - - - -public: - T x; - T y; -}; - -#include "inl/akPointT.inl" \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akQueue.h b/ReviewHistory/include/akSTL/akQueue.h deleted file mode 100644 index 92c0046..0000000 --- a/ReviewHistory/include/akSTL/akQueue.h +++ /dev/null @@ -1,100 +0,0 @@ -#pragma once - - -#include "akSTLLinker.h" -#include <memory.h> - - class AKSTL_DLLSPEC CakQueue - { - public: - CakQueue(void); - ~CakQueue(void); - - public: - bool empty() - { - return m_nDataSize == 0 ? true : false; - } - - size_t size() - { - return m_nDataSize; - } - - char* front() - { - return &m_pQueue[m_stPoint]; - } - - char* back() - { - return &m_pQueue[m_stPoint+m_nDataSize-1]; - } - - void push(char _Val) - { - if(m_stPoint+m_nDataSize >= m_nMemSize) - { - size_t newsize = m_nMemSize*2; - char* pNewQueue = new char [newsize]; - memcpy(pNewQueue, &m_pQueue[m_stPoint], sizeof(char)*(m_nMemSize-m_stPoint)); - m_nMemSize = newsize; - m_stPoint = 0; - char* pTemp = m_pQueue; - m_pQueue = pNewQueue; - delete [] pTemp; - - } - - - m_pQueue[m_stPoint+m_nDataSize] = _Val; - m_nDataSize++; - } - - void push(char* pVal, int nSize) - { - if(m_stPoint+m_nDataSize + nSize >= m_nMemSize) - { - size_t newsize = m_nMemSize+nSize*2; - char* pNewQueue = new char [newsize]; - memcpy(pNewQueue, &m_pQueue[m_stPoint], sizeof(char)*(m_nMemSize-m_stPoint)); - m_nMemSize = newsize; - m_stPoint = 0; - char* pTemp = m_pQueue; - m_pQueue = pNewQueue; - delete [] pTemp; - - } - - //m_enPoint++; - memcpy(&m_pQueue[m_stPoint+m_nDataSize], pVal, sizeof(char)*nSize); - m_nDataSize+=nSize; - } - - void pop() - { - m_stPoint++; - m_nDataSize--; - - if(m_nDataSize == 0) - { - m_stPoint=m_nDataSize=0; - } - } - void pop(int nSize) - { - m_stPoint += nSize; - m_nDataSize -= nSize; - - if(m_nDataSize == 0) - { - m_stPoint=m_nDataSize=0; - } - } - private: - size_t m_stPoint; //메모리 시작위치 - size_t m_nDataSize; //메모리 끝 위치 - size_t m_nMemSize; //할당된 메모리 사이즈 - char* m_pQueue; - - }; diff --git a/ReviewHistory/include/akSTL/akQueueCircle.h b/ReviewHistory/include/akSTL/akQueueCircle.h deleted file mode 100644 index c0fb42a..0000000 --- a/ReviewHistory/include/akSTL/akQueueCircle.h +++ /dev/null @@ -1,151 +0,0 @@ -#pragma once - - -#include "akSTLLinker.h" - - template <typename T> - class CakQueueCircle - { - public: - CakQueueCircle(); - ~CakQueueCircle(); - - - void clear(); //메모리 삭제는 안됨 - void setMemSize(unsigned int memsize); //memsize가 0일때 메모리 삭제 - - void pushData(T point); - void setData( unsigned int nindex , T point ); - void getData(T* pPointBuffer, unsigned int nBufferLength); - - int size(){return m_nPointNum;}; - - T& operator [](unsigned int nindex); - CakQueueCircle& operator= (CakQueueCircle& traj); - - //static unsigned int s_TrajectorySize; - - - //가능하면 아래의 멤버 변수에 직접 수정은 하지 말것!! - public: - int m_nMemSize; //확보 메모리 사이즈 - int m_nPointIndex; //현재 인덱스 - int m_nPointNum; //현재 입력된 Point 갯수 - T* m_pPoints; //데이터 변수 - public: - unsigned long m_nPushCount; - }; - - - template <typename T> - CakQueueCircle<T>::CakQueueCircle(void) - { - m_pPoints = NULL; - m_nMemSize = 0; - m_nPushCount = 0; - - clear(); - setMemSize(100); - }; - - - template <typename T> - CakQueueCircle<T>::~CakQueueCircle(void) - { - setMemSize(0); - }; - - template <typename T> - void CakQueueCircle<T>::clear() //메모리 삭제는 안됨 - { - m_nMemSize; //확보 메모리 사이즈 - m_nPointIndex = -1; //현재 인덱스 - m_nPointNum = 0; //현재 입력된 Point 갯수 - //m_pPoints; //데이터 변수 - m_nPushCount = 0; - } - - template <typename T> - void CakQueueCircle<T>::setMemSize(unsigned int memsize) //memsize가 0일때 메모리 삭제 - { - //clear - if(m_pPoints != NULL) - { - clear(); - m_nMemSize = 0; - delete [] m_pPoints; - m_pPoints = NULL; - } - - if(memsize > 0) - { - m_nMemSize = memsize; - - m_pPoints = new T [m_nMemSize]; - } - - } - - template <typename T> - void CakQueueCircle<T>::pushData(T point) - { - m_nPointIndex++; - if(m_nPointIndex >= m_nMemSize) - { - m_nPointIndex = 0; - } - - m_nPointNum++; - if(m_nPointNum >= m_nMemSize) - { - m_nPointNum = m_nMemSize; - } - - m_pPoints[m_nPointIndex] = point; - m_nPushCount++; - } - - template <typename T> - void CakQueueCircle<T>::setData( unsigned int nindex , T point ) - { - int pointindex = m_nPointIndex-nindex; - - if(pointindex<0) pointindex = m_nPointNum + pointindex; - - m_pPoints[pointindex] = point; - } - - template <typename T> - T& CakQueueCircle<T>::operator[]( unsigned int nindex ) - { - int pointindex = m_nPointIndex-nindex; - - if(pointindex<0) pointindex = m_nPointNum + pointindex; - - return m_pPoints[pointindex]; - } - - template <typename T> - CakQueueCircle<T>& CakQueueCircle<T>::operator=( CakQueueCircle<T>& queuecircle ) - { - if(m_nMemSize != queuecircle.m_nMemSize) - { - if(m_pPoints) - { - delete [] m_pPoints; - } - - m_pPoints = new T[queuecircle.m_nMemSize]; - } - - - m_nMemSize = queuecircle.m_nMemSize; - m_nPointIndex = queuecircle.m_nPointIndex; - m_nPointNum = queuecircle.m_nPointNum; - - memcpy(m_pPoints, queuecircle.m_pPoints, sizeof(T)*queuecircle.m_nMemSize); - - - - return *this; - } \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akRect.h b/ReviewHistory/include/akSTL/akRect.h deleted file mode 100644 index 22a9119..0000000 --- a/ReviewHistory/include/akSTL/akRect.h +++ /dev/null @@ -1,117 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" -#include "akRectT.h" -#include "akPoint.h" - -#define CakRectToCRect(akRect) CRect(akRect.left, akRect.top, akRect.right, akRect.bottom) -#define CRectToCakRect(rect) CakRect(rect.left, rect.top, rect.right, rect.bottom) -#define CakRectSet(rectDes, rectSrc) rectDes.SetRect(rectSrc.left, rectSrc.top, rectSrc.right, rectSrc.bottom) - -class AKSTL_DLLSPEC CakRect : public CakRectT<long> -{ -public: - - CakRect(){}; - CakRect(const long l, const long t, const long r, const long b){ - left=l,top=t,right=r,bottom=b; - }; - virtual ~CakRect(){}; - -public: - - // reference to the top-left point - CakPoint TopLeft() throw(); - // reference to the bottom-right point - CakPoint BottomRight() throw(); - // const reference to the top-left point - const CakPoint TopLeft() const throw(); - // const reference to the bottom-right point - const CakPoint BottomRight() const throw(); - // the geometric center point of the rectangle - CakPoint CenterPoint() const throw(); - - bool PtInRect(CakPoint point) const throw(); - -}; - -class AKSTL_DLLSPEC CakRectn : public CakRectT<int> -{ -public: - - CakRectn(){}; - CakRectn(int l, int t, int r, int b){ - left=l,top=t,right=r,bottom=b; - }; - virtual ~CakRectn(){}; - -public: - - // reference to the top-left point - CakPoint TopLeft() throw(); - // reference to the bottom-right point - CakPoint BottomRight() throw(); - // const reference to the top-left point - const CakPoint TopLeft() const throw(); - // const reference to the bottom-right point - const CakPoint BottomRight() const throw(); - // the geometric center point of the rectangle - CakPoint CenterPoint() const throw(); - - bool PtInRect(CakPoint point) const throw(); - -}; - -class AKSTL_DLLSPEC CakRectf : public CakRectT<float> -{ -public: - - CakRectf(){}; - CakRectf(float l, float t, float r, float b){ - left=l,top=t,right=r,bottom=b; - }; - virtual ~CakRectf(){}; - -public: - - // reference to the top-left point - CakPointf& TopLeft() throw(); - // reference to the bottom-right point - CakPointf& BottomRight() throw(); - // const reference to the top-left point - const CakPointf& TopLeft() const throw(); - // const reference to the bottom-right point - const CakPointf& BottomRight() const throw(); - // the geometric center point of the rectangle - CakPointf CenterPoint() const throw(); - - bool PtInRect(CakPointf point) const throw(); - -}; - -class AKSTL_DLLSPEC CakRectd : public CakRectT<double> -{ -public: - - CakRectd(){}; - CakRectd(double l, double t, double r, double b){ - left=l,top=t,right=r,bottom=b; - }; - virtual ~CakRectd(){}; - -public: - - // reference to the top-left point - CakPointd TopLeft() throw(); - // reference to the bottom-right point - CakPointd BottomRight() throw(); - // const reference to the top-left point - const CakPointd TopLeft() const throw(); - // const reference to the bottom-right point - const CakPointd BottomRight() const throw(); - // the geometric center point of the rectangle - CakPointd CenterPoint() const throw(); - - bool PtInRect(CakPointd point) const throw(); - -}; \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akRectT.h b/ReviewHistory/include/akSTL/akRectT.h deleted file mode 100644 index c3f11bc..0000000 --- a/ReviewHistory/include/akSTL/akRectT.h +++ /dev/null @@ -1,196 +0,0 @@ -#pragma once - - - -template<typename T> -class CakRectT -{ -public: - T left; - T top; - T right; - T bottom; - -public: - CakRectT(void); - //CakRectT(T l, T t, T r, T b); - CakRectT(const T l, const T t, const T r, const T b):left(l),top(t),right(r),bottom(b) {}; - virtual ~CakRectT(void); - - - //Attirbute - // retrieves the width - T Width() const throw(); - // returns the height - T Height() const throw(); - - //{ - // // reference to the top-left point - // CPoint& TopLeft() throw(); - // // reference to the bottom-right point - // CPoint& BottomRight() throw(); - // // const reference to the top-left point - // const CPoint& TopLeft() const throw(); - // // const reference to the bottom-right point - // const CPoint& BottomRight() const throw(); - // // the geometric center point of the rectangle - // CPoint CenterPoint() const throw(); - // - // bool PtInRect(POINT point) const throw(); - //} - - // swap the left and right - void SwapLeftRight() throw(); - void SwapTopBottom() throw(); - - - - // returns TRUE if rectangle has no area - bool IsRectEmpty() const throw(); - // returns TRUE if rectangle is at (0,0) and has no area - bool IsRectNull() const throw(); - // returns TRUE if point is within rectangle - - bool PtInRect(T x, T y) const throw(); - - // Operations - - // set rectangle from left, top, right, and bottom - void SetRect(T x1, T y1, T x2, T y2) throw(); - //void SetRect(POINT topLeft, POINT bottomRight) throw(); - // empty the rectangle - void SetRectEmpty() throw(); - // copy from another rectangle - void CopyRect(const CakRectT<T>* lpSrcRect) throw(); - // TRUE if exactly the same as another rectangle - bool EqualRect(const CakRectT<T>* lpRect) const throw(); - - // Inflate rectangle's width and height by - // x units to the left and right ends of the rectangle - // and y units to the top and bottom. - void InflateRect(T x, T y) throw(); - void InflateRect(T l, T t, T r, T b) throw(); - void InflateRect(CakRectT<T>* lpRect) throw(); - - // deflate the rectangle's width and height without - // moving its top or left - void DeflateRect(T x, T y) throw(); - void DeflateRect(T l, T t, T r, T b) throw(); - //void DeflateRect(SIZE size) throw(); - void DeflateRect(CakRectT<T>* lpRect) throw(); - - // translate the rectangle by moving its top and left - void OffsetRect(T x, T y) throw(); - //void OffsetRect(SIZE size) throw(); - //void OffsetRect(POINT point) throw(); - void NormalizeRect() throw(); - - // absolute position of rectangle - void MoveToY(T y) throw(); - void MoveToX(T x) throw(); - void MoveToXY(T x, T y) throw(); - //void MoveToXY(POINT point) throw(); - - // 두사각형이 겹치는 부분만 검출 없을시 0으로 셋팅(Return은 겹치는 부분이 있으면 True) - bool IntersectRect(CakRectT<T>* lpRect1, CakRectT<T>* lpRect2) throw(); - - // 두 사각형의 테두리 부분 검출(Return은 겹치는 부분이 있으면 True) - bool UnionRect(CakRectT<T>* lpRect1, CakRectT<T>* lpRect2) throw(); - - // set this rectangle to minimum of two others - //bool SubtractRect(CakRectT<T>* lpRectSrc1, CakRectT<T>* lpRectSrc2) throw(); - - // Additional Operations - void operator=(const CakRectT<T>& srcRect) throw(); - bool operator==(const CakRectT<T>& rect) const throw(); - bool operator!=(const CakRectT<T>& rect) const throw(); - void operator+=(CakRectT<T>* lpRect) throw(); - void operator-=(CakRectT<T>* lpRect) throw(); - //void operator&=(const CakRectT<T>& rect) throw(); - //void operator|=(const CakRectT<T>& rect) throw(); - - // Operators returning CakRectT<T> values - //CakRectT<T> operator+(POINT point) const throw(); - //CakRectT<T> operator-(POINT point) const throw(); - CakRectT<T> operator+(CakRectT<T>* lpRect) const throw(); - //CakRectT<T> operator+(SIZE size) const throw(); - //CakRectT<T> operator-(SIZE size) const throw(); - CakRectT<T> operator-(CakRectT<T>* lpRect) const throw(); - //CakRectT<T> operator&(const CakRectT<T>& rect2) const throw(); - //CakRectT<T> operator|(const CakRectT<T>& rect2) const throw(); - - CakRectT<T> MulDiv(T nMultiplier, T nDivisor) const throw(); - - //예전에 쓰던 함수들 -public: - inline void set(T l, T t, T r, T b) - { - left = l; - top = t; - right = r; - bottom = b; - }; - inline T getWidth(){return right-left;}; - inline T getHeight(){return bottom-top;}; - inline T getCenter(){return T(left+(right-left)/2.0);}; - inline T getVCenter(){return T(top+(bottom-top)/2.0);}; - void setAlign(){NormalizeRect();}; //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - bool getCheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - bool getCheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - bool getCheckHeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - - -}; - - -template<typename T> -bool CakRectT<T>::IntersectRect( CakRectT<T>* lpRect1, CakRectT<T>* lpRect2 ) throw() -{ - - if ( lpRect1->left < lpRect2->right && - lpRect1->top < lpRect2->bottom && - lpRect1->right > lpRect2->left && - lpRect1->bottom > lpRect2->top ) - { - //*this = *lpRect2; - - lpRect1->left > lpRect2->left ? left = lpRect1->left : left = lpRect2->left ; - lpRect1->top > lpRect2->top ? top = lpRect1->top : top = lpRect2->top ; - lpRect1->right < lpRect2->right ? right = lpRect1->right : right = lpRect2->right ; - lpRect1->bottom < lpRect2->bottom ? bottom = lpRect1->bottom : bottom= lpRect2->bottom ; - - return true; - } - - set(0,0,0,0); - - return false; -} - -template<typename T> -bool CakRectT<T>::UnionRect( CakRectT<T>* lpRect1, CakRectT<T>* lpRect2 ) throw() -{ - - lpRect1->left < lpRect2->left ? left = lpRect1->left : left = lpRect2->left ; - lpRect1->top < lpRect2->top ? top = lpRect1->top : top = lpRect2->top ; - lpRect1->right > lpRect2->right ? right = lpRect1->right : right = lpRect2->right ; - lpRect1->bottom > lpRect2->bottom ? bottom = lpRect1->bottom : bottom= lpRect2->bottom ; - - if ( lpRect1->left < lpRect2->right && - lpRect1->top < lpRect2->bottom && - lpRect1->right > lpRect2->left && - lpRect1->bottom > lpRect2->top ) - { - return true; - } - - return false; -} - - - - - - -#include "inl/akRectT.inl" \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akSTLLinker.h b/ReviewHistory/include/akSTL/akSTLLinker.h deleted file mode 100644 index 6074873..0000000 --- a/ReviewHistory/include/akSTL/akSTLLinker.h +++ /dev/null @@ -1,56 +0,0 @@ -#pragma once - -//#pragma warning(disable:4251) -// -// typedef unsigned int uint; -// typedef unsigned char byte; - -#ifdef AKSTL_EXPORTS -#define AKSTL_DLLSPEC __declspec( dllexport ) -#else -#define AKSTL_DLLSPEC __declspec( dllimport ) -#endif - - - -#ifndef AKSTL_EXPORTS - - #undef _AUTOLIBNAME - #undef _AKPROJECTNAME - #undef _AKVCVER - #undef _AKDEBUG - #undef _AKWINDOWSDK - - #define _AKPROJECTNAME "akSTL" - - - #ifdef _DEBUG - #define _AKDEBUG "d" - #else - #define _AKDEBUG "" - #endif - - #if(_MSC_VER < 1910) - #define _AKWINDOWSDK "" - #else - #define _AKWINDOWSDK "_WS10" - #endif - - - #ifdef WIN64 - #define _AKX64 "_x64" - #elif _WIN64 - #define _AKX64 "_x64" - #else - #define _AKX64 "" - #endif - - #define _AUTOLIBNAME _AKPROJECTNAME""_AKDEBUG""_AKWINDOWSDK""_AKX64".lib" - - // You may turn off this include message by defining _NOPSAUTOLIB - #ifndef _NOPSAUTOLIBMSG - //#pragma message( ">>Advance Kim Templet Library<< Will automatically link with " _AUTOLIBNAME ) - #pragma message( ">>Kim Tae Hyun - akSTL<< Will automatically link with " _AUTOLIBNAME ) - #endif - #pragma comment(lib, _AUTOLIBNAME) -#endif diff --git a/ReviewHistory/include/akSTL/akStruct.h b/ReviewHistory/include/akSTL/akStruct.h deleted file mode 100644 index 06ede5d..0000000 --- a/ReviewHistory/include/akSTL/akStruct.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - -#include "akPoint.h" -#include "akRect.h" -#include "akColor.h" - diff --git a/ReviewHistory/include/akSTL/akTrace.h b/ReviewHistory/include/akSTL/akTrace.h deleted file mode 100644 index dd561cc..0000000 --- a/ReviewHistory/include/akSTL/akTrace.h +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - - - - -#include "akLinker.h" -#include <queue> -#include <windows.h> - -class akSTL_DLLSPEC CakTrace -{ -public: - CakTrace(void); - virtual ~CakTrace(void); - - enum Mode - { - TM_MEMORY = 0, - TM_FILE - }; - //0은 메모리에 데이터 관리 하는 모드, 1은 파일에 데이터를 관리 하는 모드 - virtual void setMode(Mode nMode); - - //TRACE - virtual void setTrace(char* format, ...); - - - - - ////////////////////////////////////////////////////////////////////////// - //파일모드 일경우 사용 함수 - ////////////////////////////////////////////////////////////////////////// - - //저장할 파일 이름 지정 - bool setTraceFileName(char* filename, bool bClear = true); - - - - - ////////////////////////////////////////////////////////////////////////// - //메모리 모드 일경우 사용 함수 - ////////////////////////////////////////////////////////////////////////// - //저장공간 초기화 - void clear(); - //데이터 갯수 획득 - int getTraceNum(); - //저장된 데이터 획득 - char* getTraceFront(); - //젤 앞에 데이터를 획득하고 삭제 - void getTracePop(char* pBuffer); - //메모리에 있는 데이터를 파일로 저장 - void setWriteFile(char* filename, bool bAdd = true); - - -protected: - std::queue<char*> m_vecTraceData; - char* m_pTraceFileName; - Mode m_nMode; - CRITICAL_SECTION m_csTrace; - FILE* m_pf; -}; diff --git a/ReviewHistory/include/akSTL/akTrajectory.h b/ReviewHistory/include/akSTL/akTrajectory.h deleted file mode 100644 index 493caa5..0000000 --- a/ReviewHistory/include/akSTL/akTrajectory.h +++ /dev/null @@ -1,170 +0,0 @@ -#pragma once - - -#include "akLinker.h" -//#include "akSTLVector.h" - -//namespace akSTL -//{ -#include <vector> - - - - - template <typename T> - class CakTrajectory - { - public: - CakTrajectory(); - ~CakTrajectory(); - - - void clear(); //메모리 삭제는 안됨 - void setMemSize(unsigned int memsize); //memsize가 0일때 메모리 삭제 - - void pointAdd(T point); - void pointSet( unsigned int nindex , T point ); - void getPoints(T* pPointBuffer, unsigned int nBufferLength); - - int size(){return m_nPointNum;}; - T& operator [](unsigned int nindex); - CakTrajectory& operator= (CakTrajectory& traj); - - static unsigned int s_TrajectorySize; - - - //가능하면 아래의 멤버 변수에 직접 수정은 하지 말것!! - public: - int m_nMemSize; //확보 메모리 사이즈 - int m_nPointIndex; //현재 인덱스 - int m_nPointNum; //현재 입력된 Point 갯수 - T* m_pPoints; //데이터 변수 - }; - - - - - //} - - - - - - - - template <typename T> - unsigned int CakTrajectory<T>::s_TrajectorySize = 100; - - - template <typename T> - CakTrajectory<T>::CakTrajectory(void) - { - m_pPoints = NULL; - m_nMemSize = 0; - - clear(); - setMemSize(s_TrajectorySize); - }; - - - template <typename T> - CakTrajectory<T>::~CakTrajectory(void) - { - setMemSize(0); - }; - - template <typename T> - void CakTrajectory<T>::clear() //메모리 삭제는 안됨 - { - m_nMemSize; //확보 메모리 사이즈 - m_nPointIndex = -1; //현재 인덱스 - m_nPointNum = 0; //현재 입력된 Point 갯수 - //m_pPoints; //데이터 변수 - } - - template <typename T> - void CakTrajectory<T>::setMemSize(unsigned int memsize) //memsize가 0일때 메모리 삭제 - { - //clear - if(m_pPoints != NULL) - { - clear(); - m_nMemSize = 0; - delete [] m_pPoints; - m_pPoints = NULL; - } - - if(memsize > 0) - { - m_nMemSize = memsize; - - m_pPoints = new T [m_nMemSize]; - } - - } - - template <typename T> - void CakTrajectory<T>::pointAdd(T point) - { - m_nPointIndex++; - if(m_nPointIndex >= m_nMemSize) - { - m_nPointIndex = 0; - } - - m_nPointNum++; - if(m_nPointNum >= m_nMemSize) - { - m_nPointNum = m_nMemSize; - } - - m_pPoints[m_nPointIndex] = point; - } - - template <typename T> - void CakTrajectory<T>::pointSet( unsigned int nindex , T point ) - { - int pointindex = m_nPointIndex-nindex; - - if(pointindex<0) pointindex = m_nPointNum + pointindex; - - m_pPoints[pointindex] = point; - } - - template <typename T> - T& CakTrajectory<T>::operator[]( unsigned int nindex ) - { - int pointindex = m_nPointIndex-nindex; - - if(pointindex<0) pointindex = m_nPointNum + pointindex; - - return m_pPoints[pointindex]; - } - - template <typename T> - CakTrajectory<T>& CakTrajectory<T>::operator=( CakTrajectory<T>& traj ) - { - if(m_nMemSize != traj.m_nMemSize) - { - if(m_pPoints) - { - delete [] m_pPoints; - } - - m_pPoints = new T[traj.m_nMemSize]; - } - - - m_nMemSize = traj.m_nMemSize; - m_nPointIndex = traj.m_nPointIndex; - m_nPointNum = traj.m_nPointNum; - - memcpy(m_pPoints, traj.m_pPoints, sizeof(khVector3d)*traj.m_nMemSize); - - - - - - - return *this; - } \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/akVector.h b/ReviewHistory/include/akSTL/akVector.h deleted file mode 100644 index 7ee2918..0000000 --- a/ReviewHistory/include/akSTL/akVector.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" -#include "akVectorT.h" - -//#define CakPointToCPoint(akPoint) CPoint(akPoint.x, akPoint.y) -//#define CPointToCakPoint(point) CakPoint(point.x, point.y) - - -class AKSTL_DLLSPEC akVector3d : public CakVectorT<double> -{ -public: - - akVector3d(){}; - virtual ~akVector3d(){}; - - akVector3d(const double& X, const double& Y, const double& Z) - { - x=X,y=Y,z=Z; - }; - - akVector3d operator*(double& a) - { - akVector3d returnval; - - returnval.x = x * a; - returnval.y = y * a; - returnval.z = z * a; - - return returnval; - }; - - akVector3d operator *(akVector3d &vec) - { - akVector3d vc; - vc.x = y*vec.z - z*vec.y; - vc.y = z*vec.x - x*vec.z; - vc.z = x*vec.y - y*vec.x; - return vc; - } - - - - -}; diff --git a/ReviewHistory/include/akSTL/akVectorT.h b/ReviewHistory/include/akSTL/akVectorT.h deleted file mode 100644 index 6cccbbb..0000000 --- a/ReviewHistory/include/akSTL/akVectorT.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - - -#define _USE_MATH_DEFINES -#include <math.h> - -template<typename T> -class CakVectorT -{ -public: - CakVectorT(void){}; - CakVectorT(const T& X, const T& Y, const T& Z):x(X),y(Y),z(Z) {}; - //~CakVectorT(void){}; - - // Operations - - // translate the point - void Offset(T xOffset, T yOffset, T zOffset) throw(); - void Offset(CakVectorT<T> vector) throw(); - void set(T X, T Y, T Z) throw(); - - bool operator==(CakVectorT<T> vector) const throw(); - bool operator!=(CakVectorT<T> vector) const throw(); - void operator+=(CakVectorT<T> vector) throw(); - void operator-=(CakVectorT<T> vector) throw(); - - // Operators returning CakVector values - CakVectorT<T> operator-() const throw(); - CakVectorT<T> operator+(CakVectorT<T> vector) const throw(); - CakVectorT<T> operator-(CakVectorT<T> vector) const throw(); - - CakVectorT<T> operator*(T& a) const throw(); - CakVectorT<T> operator*(CakVectorT<T> &vec) const throw(); - - - //내적 - T Dot(CakVectorT<T> vec){ return (vec.x * x + vec.y * y + vec.z * z); }; - T Mag() { return sqrt(x*x+y*y); }; - T getLength() { return sqrt(x*x+y*y+z*z); }; - void Normalize(); -public: - T x,y,z; -}; - - - - -#include "inl/akVectorT.inl" \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akColorStruct.h b/ReviewHistory/include/akSTL/backup/akColorStruct.h deleted file mode 100644 index dc1b73e..0000000 --- a/ReviewHistory/include/akSTL/backup/akColorStruct.h +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - -#include "khLinker.h" - -#define _USE_MATH_DEFINES -#include <math.h> - -namespace KimHeart -{ - struct KIMHEART_DLLSPEC khVector3d - { - double pos[3]; - - khVector3d(); - khVector3d(double x,double y, double z); - inline void set(double x,double y, double z); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - inline double z(){return pos[2];}; - - double& operator()(int index){return pos[index];}; - - inline khVector3d operator+(const khVector3d& vec3d); - inline khVector3d operator-(const khVector3d& vec3d); - inline khVector3d& operator=(const khVector3d& vec3d); - inline khVector3d& operator+=(const khVector3d& vec3d); - inline khVector3d& operator-=(const khVector3d& vec3d); - khVector3d operator*(float& a) - { - khVector3d returnval; - - returnval.pos[0] = pos[0] * a; - returnval.pos[1] = pos[1] * a; - returnval.pos[2] = pos[2] * a; - - return returnval; - }; - - khVector3d operator *(khVector3d &vec) - { - khVector3d vc; - vc.pos[0] = pos[1]*vec.pos[2] - pos[2]*vec.pos[1]; - vc.pos[1] = pos[2]*vec.pos[0] - pos[0]*vec.pos[2]; - vc.pos[2] = pos[0]*vec.pos[1] - pos[1]*vec.pos[0]; - return vc; - } - - float Dot(khVector3d vec) - { - return (float)(vec.pos[0] * pos[0] + vec.pos[1] * pos[1] + vec.pos[2] * pos[2]); - }; - float Mag() - { - return (float)sqrt(pos[0]*pos[0]+pos[1]*pos[1]); - }; - void Normalize() - { - float length; - - //벡터의 길이를 계산한다. - length = (float)sqrt((pos[0]*pos[0]) + (pos[1]*pos[1]) +(pos[2]*pos[2])); - // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. - if(length == 0.0f) length = 1.0f; - - // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. - pos[0] = pos[0] / length; - pos[1] = pos[1] / length; - pos[2] = pos[2] / length; - - }; - }; - - struct KIMHEART_DLLSPEC khVector2d - { - double pos[2]; - - khVector2d(); - khVector2d(double x,double y); - inline void set(double x,double y); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - - double& operator()(int index){return pos[index];}; - - inline khVector2d operator+(const khVector2d& vec3d); - inline khVector2d operator-(const khVector2d& vec3d); - inline khVector2d& operator=(const khVector2d& vec3d); - inline khVector2d& operator+=(const khVector2d& vec3d); - inline khVector2d& operator-=(const khVector2d& vec3d); - - }; - - struct KIMHEART_DLLSPEC khColor4f - { - float color[4]; - - khColor4f(); - khColor4f(float R, float G, float B, float A=0.0f); - void set(float R, float G, float B, float A=0.0f); - inline float R(){return color[0];}; - inline float G(){return color[1];}; - inline float B(){return color[2];}; - inline float A(){return color[3];}; - inline khColor4f& operator=(const khColor4f& ksgcolor); - }; - - struct KIMHEART_DLLSPEC khRect - { - double pos[4]; - - khRect(); - khRect(double left, double top, double right, double bottom); - void set(double left, double top, double right, double bottom); - inline khRect& operator=(const khRect& rect); - inline double Left(){return pos[0];}; - inline double Top(){return pos[1];}; - inline double Right(){return pos[2];}; - inline double Bottom(){return pos[3];}; - inline double Width(){return pos[2]-pos[0];}; - inline double Height(){return pos[3]-pos[1];}; - inline void SetAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - inline bool CheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - inline bool CheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - inline bool CheckHeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - - }; -}; diff --git a/ReviewHistory/include/akSTL/backup/akCoordinate.h b/ReviewHistory/include/akSTL/backup/akCoordinate.h deleted file mode 100644 index a2e1caa..0000000 --- a/ReviewHistory/include/akSTL/backup/akCoordinate.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ - - class akSTL_DLLSPEC CakCoordinate - { - public: - CakCoordinate(void); - ~CakCoordinate(void); - - //Degree를 도분초로 변환 - static double GetDMStoDgree(int d, int m, double s); - //도분초를 Degree로 변환 - static void GetDgreetoDMS(double degree, int* d, int* m, double* s); - //Degree값을 180방위 + 방향(W,E)로 변환 - static void GetMakeDMS180(int degree, int* rDeg, char* rDir); - //Degree값을 90방위 + 방향(S,N)로 변환 - static void GetMakeDMS90(int degree, int* rDeg, char* rDir); - //Degree값을 //-180~+180로 변환 - static double GetMakeDegree180(double degree); - //Degree값을 //-90~+90로 변환 - static double GetMakeDegree90(double degree); - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akFileMgr.h b/ReviewHistory/include/akSTL/backup/akFileMgr.h deleted file mode 100644 index 158d0b9..0000000 --- a/ReviewHistory/include/akSTL/backup/akFileMgr.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - - - -#include "akLinker.h" -#include <vector> - -struct akSTL_DLLSPEC _Attribute -{ - _Attribute() - { - memset(Title , 0, sizeof(char)*128); - memset(Attribute , 0, sizeof(char)*128); - memset(Value , 0, sizeof(char)*128); - } - char Title[128]; - char Attribute[128]; - char Value[128]; -}; - -struct akSTL_DLLSPEC _Title -{ - _Title(char* title) - { - strcpy(Title, title); - }; - bool compare(char* title) - { - if(strcmp(title, Title) == 0 && strlen(title) == strlen(Title)) - { - return true; - } - return false; - }; - void clear() - { - memset(Title, 0, sizeof(char)*128); - }; - char Title[128]; -}; - -namespace akSTL -{ - class akSTL_DLLSPEC CakFileMgr - { - public: - CakFileMgr(void); - ~CakFileMgr(void); - - //타이틀 설정(OpenFile()함수와 MakeFile()함수를 호출하면 타이틀셋팅은 Null이 된다) - void SetTitle(char* title); - - //쓰기 관련 - //타이틀을 정한다. - bool SetAttribute(char* Attribute, int value); - bool SetAttribute(char* Attribute, double value); - bool SetAttribute(char* Attribute, char* value); - bool SetAttribute(char* Attribute, float value); - //쓰기 버퍼에 저장된 데이터를 파일로 저장 - bool MakeFile(char* filepath); - - - //읽기 관련 - //파일 열기(쓰기준비중이였다면 쓰기 버퍼는 초기화 된다) - bool OpenFile(char* filepath); - bool GetAttribute(char* Attribute, int& value); - bool GetAttribute(char* Attribute, double& value); - bool GetAttribute(char* Attribute, char* value); - bool GetAttribute(char* Attribute, float& value); - - private: - //빠른 찾기를 위해서 저장된 데이터 정렬 - void DataSort(); - char m_Title[128]; - std::vector<_Attribute> m_data; - - char* m_buffer; - int m_fastIndex; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akFileMgrAdv.h b/ReviewHistory/include/akSTL/backup/akFileMgrAdv.h deleted file mode 100644 index 8bdf758..0000000 --- a/ReviewHistory/include/akSTL/backup/akFileMgrAdv.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - -//파일 구조 -//float version; -//size_t structTotalSize;//구조체 총 크기 -//size_t structNum;//구조체 갯수 -//char rev[128]; //예약된 임시공간 -//size_t nSize[] 각각의 구조체 크기 -//void* pData //실제 데이터 저장 공간 - -namespace akSTL -{ - struct akSTL_DLLSPEC _akFileMgrHeader - { - float version; - - size_t structTotalSize;//구조체 총 크기 - size_t structNum;// - char rev[128]; - }; - - class akSTL_DLLSPEC CakFileMgrAdv - { - public: - CakFileMgrAdv(void); - ~CakFileMgrAdv(void); - - public: - //파일 쓰기 - bool writeFile(char* pFileName, float fVer=1.0); - - //파일 읽기 - //0은 실패 1은 정상 - //10001 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10002 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10003 읽어올 구조체와 파일크기가 같음. 하지만 구조체 구성이 다름(struct size == file size) - int readFile(char* filepath, bool bErrorCheck = false); - - //데이터/크기 수정(기존의 파일정보를 읽어서 새 데이터로 수정) - bool editFile(char* filepath, int nIndex, void* pData, size_t nSize); - - - //데이터/크기 초기화 - void clear(); - //데이터/크기 추가 - void addDataSize(void* pData, size_t nSize); - //데이터/크기 수정 - void setDataSize(int nIndex, void* pData, size_t nSize); - - _akFileMgrHeader getFileHeaderInfo(char* pFileName); - - - - - private: - struct _datasize - { - _datasize(void* pData1, size_t nSize1) - { - pData = pData1; - nSize = nSize1; - } - void* pData; - size_t nSize; - }; - std::vector<_datasize> m_vecData; - - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akFileMgrB.h b/ReviewHistory/include/akSTL/backup/akFileMgrB.h deleted file mode 100644 index a2f377c..0000000 --- a/ReviewHistory/include/akSTL/backup/akFileMgrB.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - - - - -namespace akSTL -{ - class akSTL_DLLSPEC CakFileMgrB - { - public: - CakFileMgrB(void); - ~CakFileMgrB(void); - - //쓰기 관련 - void SetDataSize(unsigned int HeadSize, unsigned int BodySize); - bool SetHead(void* head); - bool AddBody(void* body); - void ClearWriteBuffer(); //쓰기할려고 저장한 데이터 모두 삭제 - - //읽기 관련 - void MakeFile(char* filepath); - bool OpenFile(char* filepath); - void* GetBodyData(); - void* GetHeadData(); - int MoveNext(); - void ClearReadBuffer(); - - private: - int m_headSize, m_bodySize; - void* m_WriteHead; - std::vector<void*> m_vecWriteBody; - int m_readindex; - void* m_ReadHead; - std::vector<void*> m_vecReadBody; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akFileUtil.h b/ReviewHistory/include/akSTL/backup/akFileUtil.h deleted file mode 100644 index 7838e51..0000000 --- a/ReviewHistory/include/akSTL/backup/akFileUtil.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "akLinker.h" - - -namespace akSTL -{ - class akSTL_DLLSPEC khFileUtil - { - public: - khFileUtil(void); - ~khFileUtil(void); - - static bool CopytoFile(char* srcfilename, char* cpyfilename); - //상대경로가 '/', '\\'로 시작하면 안됨(나중에 수정하도록 하자..API문제인듯) - static bool CopytoFolder(char* srcfilename, char* cpyFolder); - - //상대경로가 '/', '\\'로 시작하면 안됨, 와일드 카드 사용가능 - static bool RemoveFile(char* filename); - }; -} diff --git a/ReviewHistory/include/akSTL/backup/akInterpolation.h b/ReviewHistory/include/akSTL/backup/akInterpolation.h deleted file mode 100644 index 57f4d4f..0000000 --- a/ReviewHistory/include/akSTL/backup/akInterpolation.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - -namespace akSTL -{ - class akSTL_DLLSPEC CakInterpolation - { - public: - struct _Data - { - _Data() - { - x = y = 0; - } - double x; - double y; - }; - - public: - CakInterpolation(); - ~CakInterpolation(); - - //폴리노미얼 데이터 생성(rate:데이터 간격) - void CaculationPolinomial(double min, double max, double rate); - //큐빅스플라인 데이터 생성(rate:점과 점사이의 데이터 갯수) - void CaculationCubicSpline(double rate); - //Linear(rate:점과 점사이의 데이터 갯수) - void CaculationLinear(int step); - - void AddPoint(double x, double y); - inline void ClearPoint(){m_vecInterPoint.clear();}; - - inline _Data GetData(int index); - inline int GetDataNum(){return (int)m_vecInterPoint.size();}; - - - - - protected: - std::vector<_Data> m_vecOrgPoint; - std::vector<_Data> m_vecInterPoint; - private: - void solveTridiag(double* khb, double* diag, double* khp, double* b, int n) ; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akMath.h b/ReviewHistory/include/akSTL/backup/akMath.h deleted file mode 100644 index 7d84e61..0000000 --- a/ReviewHistory/include/akSTL/backup/akMath.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include "akSTL.h" - -namespace akSTL -{ - - class akSTL_DLLSPEC CakMath - { - public: - CakMath(void); - ~CakMath(void); - - public: - //세점이 이루는 각도를 산출 - double GetAngle3Point(double cX, double cY, double x1, double y1, double x2, double y2 ); - //평면 폴리곤위에 점이 존재 하는지 검사 - bool GetIsPointOnPolygon(khVector2d point, khVector2d* polygon, int length); - //한 선위에 점이 있는지 검사 - bool GetLineOnPoint(khVector3d point, khVector3d line1, khVector3d line2); - //2d 회전 좌표(중심점에서 - khVector2d GetRotatePosition(khVector2d center, khVector2d point1, double angle); - - //두선의 교차점 구하기(교차점이 있으면 true 반환) - bool GetIntersectPoint(khVector2d a1, khVector2d a2, khVector2d b1, khVector2d b2, khVector2d* IP); - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akMatrix.h b/ReviewHistory/include/akSTL/backup/akMatrix.h deleted file mode 100644 index e8b8272..0000000 --- a/ReviewHistory/include/akSTL/backup/akMatrix.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akLinker.h" - -namespace akSTL -{ - class akSTL_DLLSPEC CakMatrix4x4 - { - public: - CakMatrix4x4(void); - ~CakMatrix4x4(void); - - inline bool MatrixClear(); //매트릭스 리셋 - inline bool SetMatrix(double *matrix); //매트릭스 세팅 - inline bool SetRotateH(double H); //회전 매트리릭스 곱셈 - inline bool SetRotateP(double P); //회전 매트리릭스 곱셈 - inline bool SetRotateR(double R); //회전 매트리릭스 곱셈 - inline bool SetTransform(double x, double y, double z); //이동 매트리릭스 곱셈 - inline bool MakeResult(double* x, double* y, double* z);//매트릭스 적용 좌표값 산출 - inline bool MakeResult(float* x, float* y, float* z);//매트릭스 적용 좌표값 산출 - inline void MatrixPrint(); //현재 매트릭스 출력 - inline CakMatrix4x4& operator=(const CakMatrix4x4& matrix); - inline CakMatrix4x4& operator*(const CakMatrix4x4& matrix); - protected: - inline bool Multiplication(double* matrix); //현재 매트릭스에 입력값 곱셈 - - public: - double m_Matrix[16]; - - - private: - bool m_bSet; //초기화가 되어있는지 확인 - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akMemory.h b/ReviewHistory/include/akSTL/backup/akMemory.h deleted file mode 100644 index 22f4979..0000000 --- a/ReviewHistory/include/akSTL/backup/akMemory.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ -#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } -#define SAFE_DELETE_ARRAY(p) { if(p) { delete [] (p); (p)=NULL; } } - - class akSTL_DLLSPEC CakMemory - { - public: - CakMemory(void); - ~CakMemory(void); - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akRandom.h b/ReviewHistory/include/akSTL/backup/akRandom.h deleted file mode 100644 index 15d8119..0000000 --- a/ReviewHistory/include/akSTL/backup/akRandom.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ -//#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) - - class akSTL_DLLSPEC CakRandom - { - public: - CakRandom(void); - ~CakRandom(void); - - //정규분포, Normal, 가우시안... (다 같은말) - double Gaussian(float stddev, float mean); //stddev:평균, mean:표준편차 - - static int GetRandom(int min, int max); - - private: - static int ms_randomseed; - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akString.h b/ReviewHistory/include/akSTL/backup/akString.h deleted file mode 100644 index 652089d..0000000 --- a/ReviewHistory/include/akSTL/backup/akString.h +++ /dev/null @@ -1,143 +0,0 @@ -#pragma once - - -#include "akLinker.h" - -#include <iostream> -#include <tchar.h> - - -extern akSTL_DLLSPEC wchar_t* m_pWstrTemp; -akSTL_DLLSPEC wchar_t* charToWchar(char* pstrSrc); - - -namespace akSTL -{ - class akSTL_DLLSPEC CakString - { - public: - CakString(void); - ~CakString(void); - - public: - //wstring ToWString(const char * in_val); - //string ToString(const wstring &in_val); - - - - //찾고자하는 문자의 위치를 반환해주는 함수(-1이 반환되면 찾지 못한것임, 찾았으면 1이상의 값을 반환) - static int StringFind(const char* str, const char* keyward); - - - static inline std::wstring ToWString(const char * in_val) - { - std::wstring temp; - while (*in_val != '\0') - temp += *in_val++; - return temp; - } - - static inline std::string ToString(const std::wstring &in_val) - { - std::string temp; - std::wstring::const_iterator b = in_val.begin(); - const std::wstring::const_iterator e = in_val.end(); - while (b != e) - { - temp += static_cast<char>(*b); - ++b; - } - return temp; - } - - static bool IsNumber(char* strSource); - static void StringReplace(char* strSource, char cSourceChar, char cDestChar); - static void StringReplace(char* strSource, char* strSourceString, char* strDestString); - static bool GetFullPathName(char* strDest, int nDestSize, const char* strSourceFront, const char* strSourceEnd); - static void GetPath(char* strDest, int nDestSize, const char* strSource); - static void GetName(char* strDest, int nDestSize, const char* strSource); - static bool GetExt(char* strDest, int nDestSize, const char* strSource); - static char* GetExt(const char* strSource); - static int Find(const char* strSource, char cChar); - static int Find(const char* strSource, char* strFindString); - static int ReverseFind(const char* strSource, char cChar); - static void MakeLower(char* strSource); - static void MakeUpper(char* strSource); - static bool Left(const char* strSource, char* strDest, int nDestLength, int nLeftCount); - static bool Mid(const char* strSource, char* strDest, int nDestLength, int nFirstIndex, int nCount = -1); - static bool Right(const char* strSource, char* strDest, int nDestLength, int nRightCount); - - - - private: - - }; -} - - -// -//void CksgFontMaker::DrawStringOverray( -// GLfloat x, -// GLfloat y, -// int windowWidth, -// int windowHeight, -// char* s -// ,...) -//{ -// // Draws the given text string at the given location. -// -// char text[256]={}; -// va_list ap; -// va_start(ap, s); -// vsprintf(text, s, ap); -// va_end(ap); -// -// GLsizei len = GLsizei(strlen(text)); -// if (text && len > 0) -// { -// glPushMatrix(); -// { -// glPushAttrib( GL_LIGHTING_BIT ); -// glDisable(GL_LIGHTING); -// glMatrixMode(GL_PROJECTION); -// glPushMatrix(); -// { -// glLoadIdentity(); -// gluOrtho2D(0, windowWidth, 0,windowHeight); -// -// glMatrixMode(GL_MODELVIEW); -// -// glPushMatrix(); -// { -// glLoadIdentity(); -// -// -// -// -// glRasterPos2i(x, windowHeight+m_logfont.lfHeight-y); -// -// glPushAttrib(GL_LIST_BIT); -// { -// glListBase(m_fontListBase); -// glCallLists(len, GL_UNSIGNED_BYTE, (const GLvoid*)text); -// } glPopAttrib(); -// -// -// }glPopMatrix(); -// -// glMatrixMode(GL_PROJECTION); -// -// }glPopMatrix(); -// -// glMatrixMode(GL_MODELVIEW); -// -// -// glPopAttrib(); -// //glEnable(GL_DEPTH_TEST); -// -// }glPopMatrix(); -// -// -// -// } -//} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akSyncObject.h b/ReviewHistory/include/akSTL/backup/akSyncObject.h deleted file mode 100644 index db91012..0000000 --- a/ReviewHistory/include/akSTL/backup/akSyncObject.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ - class akSTL_DLLSPEC CakSyncObject - { - public: - CakSyncObject(void); - virtual ~CakSyncObject(void); - - public: - //읽기 지정을 하였을때... 이미 어디서 쓰고 있다면.. 기다렸다가 다음을 수행한다. - //bWait = false 일경우.. 어딘가에서 쓰고 있다면 false를 반환하고 끝내버린다. - bool SetRead(bool bWait = true); - //쓰기 지정을 하였을때... 이미 어디서 읽고 있다면.. 기다렸다가 다음을 수행한다. - bool SetWrite(bool bWait = true); - int SetReadRelease(); //현재 남아있는 읽기 카운트 반환 - void SetWriteRelease(); - - int GetReadCount(){return m_nReadCount;}; //읽기 호출한 횟수 반환 - bool GetWriteState(){return m_bWrite;}; //0이 될때까지 그리는 루틴은 무한 루프가 돈다. - - - protected: - - private: - bool m_bWrite; - int m_nReadCount; - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akText.h b/ReviewHistory/include/akSTL/backup/akText.h deleted file mode 100644 index f22348f..0000000 --- a/ReviewHistory/include/akSTL/backup/akText.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "akLinker.h" - -class akSTL_DLLSPEC CakText -{ -public: - CakText(void); - virtual ~CakText(void); - - ////////////////////////////////////////////////////////////////////////// - //시간 반환 함수 - char* getTime(); - char* getTime(char* pSeparator); - char* getTime(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //날자 반환 함수 - char* getDate(); - char* getDate(char* pSeparator); - char* getDate(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //시스템 정보 반환 - char* getModuleFileName(); //실행되는 파일 이름 반환 - char* getCurrentDirectory(); //현재 작업 폴더 반환 - - - ////////////////////////////////////////////////////////////////////////// - //버퍼 관리 함수 - //내부적으로 많은 양의 크기를 요구하는 문자열의 경우 - //자동으로 크기를 재 할당하므로 별도의 버퍼크기를 조절 하지 않아도 괜찮아요~ -public: - char* getBuffer(int index){return m_pBuffer[index];}; - int getBufferSize(){return m_nBuffersize;}; - int getBufferNum(){return m_nBufferNum;}; - void setBufferSize(int nNum, int nSize); - -private: - char** m_pBuffer; //m_nBufferNum*m_nBuffersize - int m_nBufferNum; //기본 버퍼갯수8개 - int m_nBuffersize; //기본크기 64 - int m_nBufferCurIndex; -}; - - diff --git a/ReviewHistory/include/akSTL/backup/akTextExt.h b/ReviewHistory/include/akSTL/backup/akTextExt.h deleted file mode 100644 index b834058..0000000 --- a/ReviewHistory/include/akSTL/backup/akTextExt.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "akText.h" - -//응용1 -#define AKTEXT CakTextExt::getInstance() -class akSTL_DLLSPEC CakTextExt : public CakText -{ -public: - CakTextExt(void){}; - virtual ~CakTextExt(void){}; - - static CakText* getInstance(){return &m_akText;}; -private: - static CakText m_akText; -}; diff --git a/ReviewHistory/include/akSTL/backup/akTimeManager.h b/ReviewHistory/include/akSTL/backup/akTimeManager.h deleted file mode 100644 index 376df37..0000000 --- a/ReviewHistory/include/akSTL/backup/akTimeManager.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include "akLinker.h" -#include <Windows.h> - - -namespace akSTL -{ - class akSTL_DLLSPEC CakTimeManager - { - public: - enum PlayMode - { - Play, - Stop, - Pause, - Playing, - PlayEnd, - SettingTime - }; - public: - CakTimeManager(void); - virtual ~CakTimeManager(void); - - //시작 중지(구버전) //배속 적용 안받음 - inline void SetBegin(); - inline void SetEnd(); - inline double GetRunTimeSec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetRunTimeMsec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetFrameRate(); - - //플레이바 기능(신버전) - void SetInit();//초기 설정으로 되돌림 - virtual inline void SetPlay(); - virtual inline void SetStop(); - virtual inline void SetTime(int msec); - virtual inline void SetPause(); - - - virtual inline double GetTime(int type=0); //0=Sec, 1=MSec - virtual inline void GetTime(int* h, int* m, int* s, int* ms); - virtual inline PlayMode GetPlayMode(); - virtual inline void SetSpeedRate(double speedrate); //배속 설정(0보다 큰 실수 입력가능) - virtual inline double GetSpeedRate(); //배속 설정값 읽기 - - protected: - LARGE_INTEGER m_Frequency; - LARGE_INTEGER m_BeginTime; - LARGE_INTEGER m_Endtime; - - double m_PauseTime; - double m_LastTime; - PlayMode m_PlayState; - double m_SpeedRate; //배속 - - //콜백 데이터 관리 - public: - typedef void (*MsgCallbackFunc) (int msg, void*); - void setMsgCallbackFunc(MsgCallbackFunc userFunc, void* data = NULL) - { - m_msgCallbackFunc = userFunc; - m_MsgCallbackFuncData = data; - }; - protected: - void* m_MsgCallbackFuncData; - MsgCallbackFunc m_msgCallbackFunc; - int m_nSyncObject; - }; - - class akSTL_DLLSPEC CakTimeManagerAdv : public CakTimeManager - { - public: - CakTimeManagerAdv(void); - virtual ~CakTimeManagerAdv(void); - - public: - virtual inline void SetPlay(); - virtual inline void SetTime(int msec); - virtual inline void SetStop(); - protected: - void setEnd();//플레이 시간이 최대 시간을 넘었을 경우 호출 - public: - double m_timeMax; - - public: - static void threadPlayer(void* arg); - int m_flagThreadPlayer; - - private: - bool m_bPlaying; - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akTraceExt.h b/ReviewHistory/include/akSTL/backup/akTraceExt.h deleted file mode 100644 index c06ba33..0000000 --- a/ReviewHistory/include/akSTL/backup/akTraceExt.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#define _AKTRACE - -#if defined _AKTRACE -#define AKTRACEEXT(fmt,...) CakTraceExt::setTraceWithDateTime(fmt,##__VA_ARGS__) -#else -#define AKTRACEEXT(fmt,...) -#endif - -#if defined _AKTRACE -#define AKTRACE(fmt,...) CakTraceExt::getInstance()->setTrace(fmt,##__VA_ARGS__) -#else -#define AKTRACE(fmt,...) -#endif - - -#include "akTrace.h" -#include "akTextExt.h" -#include <Windows.h> -class akSTL_DLLSPEC CakTraceExt -{ -protected: - CakTraceExt(void); - virtual ~CakTraceExt(void); - -public: - ////////////////////////////////////////////////////////////////////////// - static CakTrace *getInstance() {return &m_Instance;}; - - static void setTraceWithDateTime(char* format, ...) - { - char text[512]={}; - va_list ap; - va_start(ap, format); - vsprintf(text, format, ap); - va_end(ap); - - m_Instance.setTrace("%s%s : %s", AKTEXT->getDate(), AKTEXT->getTime(), text); - }; - - - -protected: - static CakTrace m_Instance; - -}; diff --git a/ReviewHistory/include/akSTL/backup/akTrajectoryModel.h b/ReviewHistory/include/akSTL/backup/akTrajectoryModel.h deleted file mode 100644 index c9e74bd..0000000 --- a/ReviewHistory/include/akSTL/backup/akTrajectoryModel.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include "akSTL.h" -#include "akDE.h" -#include <vector> -namespace akSTL -{ - struct _Waypoint - { - double x; - double y; - double z; - double speed; - }; - - class akSTL_DLLSPEC CakTrajcetoryModel - { - public: - CakTrajcetoryModel(void); - ~CakTrajcetoryModel(void); - - public: - virtual int calculate(float dTime); //더이상 계산할 경로점이 없을 경우 2를 반환 - void setCurrentByWaypoint(int nWaypointIndex); //현재값을 경로점 기준으로 셋팅 - - - - public: - //현재 값 - khVector3d m_position; //위치 - khVector3d m_rotate; //자세 - double m_velocity; //속도 - double m_acc; //가속도 - khVector3d m_rotateAcc; //각속도 - - //부여 받은 명령 설정 - khVector3d m_TaskPosition; - double m_TaskVelocity; - double m_TaskAcc; - - //객체 정보 관리 - double mass; //무게 - double maxSpeed; //최대 속도 - double minSpeed; //최저 속도 - double maxAcceleration; //가속도 - double maxDeceleration; //감속도 - - khVector3d m_rotateVelRate; - - //경로점 관리 - public: - int m_nWaypointType; //0 마지막 경로점이면 끝낸다, 1경로점 순회, 2경로점 왕복 - int m_nWaypointSet; //현재 설정된 경로점 - std::vector<_Waypoint> m_vecWaypoint; - - - protected: - void getAngle3d(double x1, double y1, double z1, double x2, double y2, double z2, double* heading, double* pitch); - double getHeading(double x , double y); - protected: - CakDE m_movementmodel; - }; - -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/backup/akWGS84.h b/ReviewHistory/include/akSTL/backup/akWGS84.h deleted file mode 100644 index 7f8cb20..0000000 --- a/ReviewHistory/include/akSTL/backup/akWGS84.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - -class AKSTL_DLLSPEC CakWGS84 -{ -public: - CakWGS84(void); - ~CakWGS84(void); - - //- 중부원점: N38, E127 - static void getPosition(double lat1 , double lon1 , double x , double y , double &lat2 , double &lon2); - static void getRange(double lat1 , double lon1 , double lat2 , double lon2 , double &x , double &y); - - static void _TM2Bessel(double tm_x, double tm_y, double lonOrg, double latOrg, double *lon, double *lat); - static void _Bessel2TM(double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - static void Bessel2TM (double alt, double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - - //태현추가 - static double getBearing(double lon, double lat, double lonOrg, double latOrg); - static void getRangePosition(double bearing, double range, double lonOrg, double latOrg, double *lon, double *lat); -}; diff --git a/ReviewHistory/include/akSTL/backup/akWaypoint.h b/ReviewHistory/include/akSTL/backup/akWaypoint.h deleted file mode 100644 index 465d882..0000000 --- a/ReviewHistory/include/akSTL/backup/akWaypoint.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akSTLLinker.h" -#include "akSTLVector.h" - -namespace akSTL -{ - class AKSTL_DLLSPEC CakWaypoint - { - public: - CakWaypoint(void); - ~CakWaypoint(void); - - public: - void clear(); - void pointAdd(khVector3d point); - void pointInsert(unsigned int index, khVector3d point);//범위를 넘어가면 젤 뒤에 추가 - void pointDelete(unsigned int index); - - int size(){return m_nPointsNum;}; - - khVector3d& operator [](unsigned int nindex){return m_pPoints[nindex];}; - CakWaypoint& operator= (CakWaypoint& waypoint); - - private: - void secureMemory(); - - private: - int m_nMakePoints; //확보 메모리 사이즈 - int m_nPointsNum; //현재 입력된 Point 갯수 - khVector3d* m_pPoints; //데이터 변수 - - - }; -} \ No newline at end of file diff --git a/ReviewHistory/include/akSTL/inl/akPointT.inl b/ReviewHistory/include/akSTL/inl/akPointT.inl deleted file mode 100644 index 9d0f5f7..0000000 --- a/ReviewHistory/include/akSTL/inl/akPointT.inl +++ /dev/null @@ -1,70 +0,0 @@ - -//#include "../akPointT.h" -#define AKINLINE inline - - - -template<typename T> AKINLINE -CakPointT<T> CakPointT<T>::operator-( CakPointT<T> point ) const throw() -{ - return CakPointT(x - point.x, y - point.y); -} - -template<typename T> AKINLINE -CakPointT<T> CakPointT<T>::operator+( CakPointT<T> point ) const throw() -{ - return CakPointT(x + point.x, y + point.y); -} - -template<typename T> AKINLINE -CakPointT<T> CakPointT<T>::operator-() const throw() -{ - return CakPointT(-x,-y); -} - -template<typename T> AKINLINE -void CakPointT<T>::operator-=( CakPointT<T> point ) throw() -{ - x -= point.x; - y -= point.y; -} - -template<typename T> AKINLINE -void CakPointT<T>::operator+=( CakPointT<T> point ) throw() -{ - x += point.x; - y += point.y; -} - -template<typename T> AKINLINE -bool CakPointT<T>::operator!=( CakPointT<T> point ) const throw() -{ - return (x != point.x || y != point.y); -} - -template<typename T> AKINLINE -bool CakPointT<T>::operator==( CakPointT<T> point ) const throw() -{ - return (x == point.x && y == point.y); -} - -template<typename T> AKINLINE -void CakPointT<T>::SetPoint( T X, T Y ) throw() -{ - x = X; - y = Y; -} - -template<typename T> AKINLINE -void CakPointT<T>::Offset( CakPointT<T> point ) throw() -{ - x += point.x; - y += point.y; -} - -template<typename T> AKINLINE -void CakPointT<T>::Offset( T xOffset, T yOffset ) throw() -{ - x += xOffset; - y += yOffset; -} diff --git a/ReviewHistory/include/akSTL/inl/akRectT.inl b/ReviewHistory/include/akSTL/inl/akRectT.inl deleted file mode 100644 index a0f0a7f..0000000 --- a/ReviewHistory/include/akSTL/inl/akRectT.inl +++ /dev/null @@ -1,368 +0,0 @@ - -#define AKINLINE inline - -template<typename T> AKINLINE -CakRectT<T>::CakRectT( void ) -{ - -} - -// template<typename T> AKINLINE -// CakRectT<T>::CakRectT( T l, T t, T r, T b ) -// { -// left = l; -// top = t; -// right = r; -// bottom = b; -// } - -// template<typename T> AKINLINE -// CakRectT<T>::CakRectT( CakRectT<T> rect ) -// { -// left = rect.left; -// top = rect.top; -// right = rect.right; -// bottom = rect.bottom; -// } - -template<typename T> AKINLINE -CakRectT<T>::~CakRectT( void ) -{ - -} - -template<typename T> AKINLINE -T CakRectT<T>::Width() const throw() -{ - return right - left; -} - -template<typename T> AKINLINE -T CakRectT<T>::Height() const throw() -{ - return bottom - top; -} - - - - - -template<typename T> AKINLINE -bool CakRectT<T>::PtInRect( T x, T y ) const throw() -{ - if( x <= left || x >= right || - y <= top || y >= bottom ) - { - return false; - } - - return true; -} - -template<typename T> AKINLINE -bool CakRectT<T>::IsRectEmpty() const throw() -{ - if(left-right == 0) return true; - if(top-bottom == 0) return true; - - return false; -} - -template<typename T> AKINLINE -bool CakRectT<T>::IsRectNull() const throw() -{ - return (left == 0 && right == 0 && top == 0 && bottom == 0); -} - - -template<typename T> AKINLINE -void CakRectT<T>::SwapLeftRight() throw() -{ - T temp = left; - left = right; - right = temp; -} - -template<typename T> AKINLINE -void CakRectT<T>::SwapTopBottom() throw() -{ - T temp = top; - top = bottom; - bottom = temp; -} - -template<typename T> AKINLINE -bool CakRectT<T>::EqualRect(const CakRectT<T>* lpRect ) const throw() -{ - if((left == lpRect->left && - top == lpRect->top && - right == lpRect->right && - bottom == lpRect->bottom) == true) - return true; - - return false; -} - -template<typename T> AKINLINE -void CakRectT<T>::SetRect( T x1, T y1, T x2, T y2 ) throw() -{ - left = x1; - top = y1; - right = x2; - bottom = y2; -} - - -template<typename T> AKINLINE -void CakRectT<T>::SetRectEmpty() throw() -{ - left = 0; - top = 0; - right = 0; - bottom = 0; -} - - - - -template<typename T> AKINLINE -void CakRectT<T>::CopyRect(const CakRectT<T>* lpSrcRect ) throw() -{ - left = lpSrcRect->left ; - top = lpSrcRect->top ; - right = lpSrcRect->right ; - bottom = lpSrcRect->bottom ; -} - - -template<typename T> AKINLINE -void CakRectT<T>::InflateRect( T x, T y ) throw() -{ - left -= x; - top -= y; - right += x; - bottom += y; -} - -template<typename T> AKINLINE -void CakRectT<T>::InflateRect( T l, T t, T r, T b ) throw() -{ - left -= l; - top -= t; - right += r; - bottom += b; -} - - - -template<typename T> AKINLINE -void CakRectT<T>::DeflateRect( T x, T y ) throw() -{ - left += x; - top += y; - right -= x; - bottom -= y; -} - -template<typename T> AKINLINE -void CakRectT<T>::DeflateRect( T l, T t, T r, T b ) throw() -{ - left += l; - top += t; - right -= r; - bottom -= b; -} - - -template<typename T> AKINLINE -void CakRectT<T>::OffsetRect( T x, T y ) throw() -{ - left += x; - top += y; - right += x; - bottom += y; -} - - - -template<typename T> AKINLINE -void CakRectT<T>::NormalizeRect() throw() -{ - T nTemp; - if (left > right) - { - nTemp = left; - left = right; - right = nTemp; - } - if (top > bottom) - { - nTemp = top; - top = bottom; - bottom = nTemp; - } -} - -template<typename T> AKINLINE -void CakRectT<T>::MoveToY( T y ) throw() -{ - bottom = Height() + y; top = y; -} - -template<typename T> AKINLINE -void CakRectT<T>::MoveToX( T x ) throw() -{ - right = Width() + x; left = x; -} - -template<typename T> AKINLINE -void CakRectT<T>::MoveToXY( T x, T y ) throw() -{ - MoveToX(x); MoveToY(y); -} - -template<typename T> AKINLINE -void CakRectT<T>::DeflateRect( CakRectT<T>* lpRect ) throw() -{ - left += lpRect->left; top += lpRect->top; - right -= lpRect->right; bottom -= lpRect->bottom; -} - -template<typename T> AKINLINE -void CakRectT<T>::InflateRect( CakRectT<T>* lpRect ) throw() -{ - left -= lpRect->left; top -= lpRect->top; - right += lpRect->right; bottom += lpRect->bottom; -} - -template<typename T> AKINLINE -void CakRectT<T>::operator=( const CakRectT<T>& srcRect ) throw() -{ - CopyRect(&srcRect); -} -template<typename T> AKINLINE -bool CakRectT<T>::operator==( const CakRectT<T>& rect ) const throw() -{ - return EqualRect(&rect); -} - -template<typename T> AKINLINE -bool CakRectT<T>::operator!=( const CakRectT<T>& rect ) const throw() -{ - return !EqualRect(&rect); -} - -template<typename T> AKINLINE -void CakRectT<T>::operator+=( CakRectT<T>* lpRect ) throw() -{ - InflateRect(lpRect); -} - - -template<typename T> AKINLINE -void CakRectT<T>::operator-=( CakRectT<T>* lpRect ) throw() -{ - DeflateRect(lpRect); -} -template<typename T> AKINLINE -CakRectT<T> CakRectT<T>::operator+( CakRectT<T>* lpRect ) const throw() -{ - CakRectT<T> rect(left,top,right,bottom); - rect.InflateRect(lpRect); return rect; -} - -template<typename T> AKINLINE -CakRectT<T> CakRectT<T>::operator-( CakRectT<T>* lpRect ) const throw() -{ - CakRectT<T> rect(left,top,right,bottom); - rect.DeflateRect(lpRect); - return rect; -} - - - - -template<typename T> AKINLINE -CakRectT<T> CakRectT<T>::MulDiv( T nMultiplier, T nDivisor ) const throw() -{ - //나중에 다시 보자!! - return CakRectT<T>( - T((float)left*(float)nMultiplier/(float)nDivisor), - T((float)top*(float)nMultiplier/(float)nDivisor), - T((float)right*(float)nMultiplier/(float)nDivisor), - T((float)bottom*(float)nMultiplier/(float)nDivisor) - ); - //::MulDiv(left, nMultiplier, nDivisor), - //::MulDiv(top, nMultiplier, nDivisor), - //::MulDiv(right, nMultiplier, nDivisor), - //::MulDiv(bottom, nMultiplier, nDivisor)); -} - -// template<typename T> AKINLINE -// CakRectT<T>& CakRectT<T>::operator=(const CakRectT<T>& rect) -// { -// left = rect.left ; -// top = rect.top ; -// right = rect.right ; -// bottom = rect.bottom ; -// -// return *this; -// } - - -template<typename T> -bool CakRectT<T>::getCheckHeightIn( double p1 ) -{ - if(top < bottom) - { - if( (top <= p1 && bottom >= p1 ) ) - { - return true; - } - } - else - { - if( (bottom <= p1 && top >= p1 ) ) - { - return true; - } - } - - return false; -} - -template<typename T> -bool CakRectT<T>::getCheckWidthIn( double p1 ) -{ - if(left < right) - { - if( (left <= p1 && right >= p1 ) ) - { - return true; - } - } - else - { - if( (right <= p1 && left >= p1 ) ) - { - return true; - } - } - return false; -} - -template<typename T> -bool CakRectT<T>::getCheckAreaIn( double x, double y ) -{ - CakRectT<T> rectTemp = *this; - rectTemp.NormalizeRect(); - - - if( (rectTemp.left <= x && rectTemp.right >= x ) - && (rectTemp.top <= y && rectTemp.bottom >= y )) - { - return true; - } - - return false; -} diff --git a/ReviewHistory/include/akSTL/inl/akVectorT.inl b/ReviewHistory/include/akSTL/inl/akVectorT.inl deleted file mode 100644 index da0f966..0000000 --- a/ReviewHistory/include/akSTL/inl/akVectorT.inl +++ /dev/null @@ -1,109 +0,0 @@ - -//#include "../akvectorT.h" -#define AKINLINE inline - - - -template<typename T> AKINLINE -CakVectorT<T> CakVectorT<T>::operator-( CakVectorT<T> vector ) const throw() -{ - return CakVectorT(x - vector.x, y - vector.y, z - vector.z); -} - -template<typename T> AKINLINE -CakVectorT<T> CakVectorT<T>::operator+( CakVectorT<T> vector ) const throw() -{ - return CakVectorT(x + vector.x, y + vector.y, z + vector.z); -} - -template<typename T> AKINLINE -CakVectorT<T> CakVectorT<T>::operator-() const throw() -{ - return CakVectorT(-x,-y,-z); -} - -template<typename T> AKINLINE -void CakVectorT<T>::operator-=( CakVectorT<T> vector ) throw() -{ - x -= vector.x; - y -= vector.y; - z -= vector.z; -} - -template<typename T> AKINLINE -void CakVectorT<T>::operator+=( CakVectorT<T> vector ) throw() -{ - x += vector.x; - y += vector.y; - z += vector.z; -} - -template<typename T> AKINLINE -bool CakVectorT<T>::operator!=( CakVectorT<T> vector ) const throw() -{ - return (x != vector.x || y != vector.y || z != vector.z); -} - -template<typename T> AKINLINE -bool CakVectorT<T>::operator==( CakVectorT<T> vector ) const throw() -{ - return (x == vector.x && y == vector.y && z == vector.z); -} - -template<typename T> AKINLINE -void CakVectorT<T>::set( T X, T Y, T Z ) throw() -{ - x = X; - y = Y; - z = Z; -} - -template<typename T> AKINLINE -void CakVectorT<T>::Offset( CakVectorT<T> vector ) throw() -{ - x += vector.x; - y += vector.y; - z += vector.z; -} - -template<typename T> AKINLINE -void CakVectorT<T>::Offset( T xOffset, T yOffset, T zOffset) throw() -{ - x += xOffset; - y += yOffset; - z += zOffset; -} - -template<typename T> AKINLINE -CakVectorT<T> CakVectorT<T>::operator*(T& a) const throw() -{ - return CakVectorT(x * a, y * a, z * a); -} - - -template<typename T> AKINLINE -CakVectorT<T> CakVectorT<T>::operator*( CakVectorT<T> &vec ) const throw() -{ - CakVectorT<T> vc; - vc.x = y*vec.z - z*vec.y; - vc.y = z*vec.x - x*vec.z; - vc.z = x*vec.y - y*vec.x; - return vc; -}; - -template<typename T> AKINLINE -void CakVectorT<T>::Normalize() -{ - double length; - - //벡터의 길이를 계산한다. - length = sqrt((x*x) + (y*y) +(z*z)); - // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. - if(length == 0.0f) length = 1.0f; - - // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. - x = x / length; - y = y / length; - z = z / length; - -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akColorStruct.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akColorStruct.h" deleted file mode 100644 index dc1b73e..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akColorStruct.h" +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - -#include "khLinker.h" - -#define _USE_MATH_DEFINES -#include <math.h> - -namespace KimHeart -{ - struct KIMHEART_DLLSPEC khVector3d - { - double pos[3]; - - khVector3d(); - khVector3d(double x,double y, double z); - inline void set(double x,double y, double z); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - inline double z(){return pos[2];}; - - double& operator()(int index){return pos[index];}; - - inline khVector3d operator+(const khVector3d& vec3d); - inline khVector3d operator-(const khVector3d& vec3d); - inline khVector3d& operator=(const khVector3d& vec3d); - inline khVector3d& operator+=(const khVector3d& vec3d); - inline khVector3d& operator-=(const khVector3d& vec3d); - khVector3d operator*(float& a) - { - khVector3d returnval; - - returnval.pos[0] = pos[0] * a; - returnval.pos[1] = pos[1] * a; - returnval.pos[2] = pos[2] * a; - - return returnval; - }; - - khVector3d operator *(khVector3d &vec) - { - khVector3d vc; - vc.pos[0] = pos[1]*vec.pos[2] - pos[2]*vec.pos[1]; - vc.pos[1] = pos[2]*vec.pos[0] - pos[0]*vec.pos[2]; - vc.pos[2] = pos[0]*vec.pos[1] - pos[1]*vec.pos[0]; - return vc; - } - - float Dot(khVector3d vec) - { - return (float)(vec.pos[0] * pos[0] + vec.pos[1] * pos[1] + vec.pos[2] * pos[2]); - }; - float Mag() - { - return (float)sqrt(pos[0]*pos[0]+pos[1]*pos[1]); - }; - void Normalize() - { - float length; - - //벡터의 길이를 계산한다. - length = (float)sqrt((pos[0]*pos[0]) + (pos[1]*pos[1]) +(pos[2]*pos[2])); - // 길이가 0에 가까운 벡터에게 절절한 값을 항당하여 프로그램이 폭주하지 않도록 한다. - if(length == 0.0f) length = 1.0f; - - // 각 성분을 벡터의 길이로 나누면 단위 벡터가 된다. - pos[0] = pos[0] / length; - pos[1] = pos[1] / length; - pos[2] = pos[2] / length; - - }; - }; - - struct KIMHEART_DLLSPEC khVector2d - { - double pos[2]; - - khVector2d(); - khVector2d(double x,double y); - inline void set(double x,double y); - inline double x(){return pos[0];}; - inline double y(){return pos[1];}; - - double& operator()(int index){return pos[index];}; - - inline khVector2d operator+(const khVector2d& vec3d); - inline khVector2d operator-(const khVector2d& vec3d); - inline khVector2d& operator=(const khVector2d& vec3d); - inline khVector2d& operator+=(const khVector2d& vec3d); - inline khVector2d& operator-=(const khVector2d& vec3d); - - }; - - struct KIMHEART_DLLSPEC khColor4f - { - float color[4]; - - khColor4f(); - khColor4f(float R, float G, float B, float A=0.0f); - void set(float R, float G, float B, float A=0.0f); - inline float R(){return color[0];}; - inline float G(){return color[1];}; - inline float B(){return color[2];}; - inline float A(){return color[3];}; - inline khColor4f& operator=(const khColor4f& ksgcolor); - }; - - struct KIMHEART_DLLSPEC khRect - { - double pos[4]; - - khRect(); - khRect(double left, double top, double right, double bottom); - void set(double left, double top, double right, double bottom); - inline khRect& operator=(const khRect& rect); - inline double Left(){return pos[0];}; - inline double Top(){return pos[1];}; - inline double Right(){return pos[2];}; - inline double Bottom(){return pos[3];}; - inline double Width(){return pos[2]-pos[0];}; - inline double Height(){return pos[3]-pos[1];}; - inline void SetAlign(); //작은값이 왼쪽, 위, 큰값이 오른쪽 아래로 가게 한다. - inline bool CheckAreaIn(double x, double y); //사각형 영역에 x,y포인트가 있는지 검사 - inline bool CheckWidthIn(double p1); //x포인트 가운데 점이 있는지 검사 - inline bool CheckHeightIn(double p1); //y포인트 가운데 점이 있는지 검사 - - - }; -}; diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akCoordinate.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akCoordinate.h" deleted file mode 100644 index a2e1caa..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akCoordinate.h" +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ - - class akSTL_DLLSPEC CakCoordinate - { - public: - CakCoordinate(void); - ~CakCoordinate(void); - - //Degree를 도분초로 변환 - static double GetDMStoDgree(int d, int m, double s); - //도분초를 Degree로 변환 - static void GetDgreetoDMS(double degree, int* d, int* m, double* s); - //Degree값을 180방위 + 방향(W,E)로 변환 - static void GetMakeDMS180(int degree, int* rDeg, char* rDir); - //Degree값을 90방위 + 방향(S,N)로 변환 - static void GetMakeDMS90(int degree, int* rDeg, char* rDir); - //Degree값을 //-180~+180로 변환 - static double GetMakeDegree180(double degree); - //Degree값을 //-90~+90로 변환 - static double GetMakeDegree90(double degree); - }; - -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgr.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgr.h" deleted file mode 100644 index 158d0b9..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgr.h" +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once - - - -#include "akLinker.h" -#include <vector> - -struct akSTL_DLLSPEC _Attribute -{ - _Attribute() - { - memset(Title , 0, sizeof(char)*128); - memset(Attribute , 0, sizeof(char)*128); - memset(Value , 0, sizeof(char)*128); - } - char Title[128]; - char Attribute[128]; - char Value[128]; -}; - -struct akSTL_DLLSPEC _Title -{ - _Title(char* title) - { - strcpy(Title, title); - }; - bool compare(char* title) - { - if(strcmp(title, Title) == 0 && strlen(title) == strlen(Title)) - { - return true; - } - return false; - }; - void clear() - { - memset(Title, 0, sizeof(char)*128); - }; - char Title[128]; -}; - -namespace akSTL -{ - class akSTL_DLLSPEC CakFileMgr - { - public: - CakFileMgr(void); - ~CakFileMgr(void); - - //타이틀 설정(OpenFile()함수와 MakeFile()함수를 호출하면 타이틀셋팅은 Null이 된다) - void SetTitle(char* title); - - //쓰기 관련 - //타이틀을 정한다. - bool SetAttribute(char* Attribute, int value); - bool SetAttribute(char* Attribute, double value); - bool SetAttribute(char* Attribute, char* value); - bool SetAttribute(char* Attribute, float value); - //쓰기 버퍼에 저장된 데이터를 파일로 저장 - bool MakeFile(char* filepath); - - - //읽기 관련 - //파일 열기(쓰기준비중이였다면 쓰기 버퍼는 초기화 된다) - bool OpenFile(char* filepath); - bool GetAttribute(char* Attribute, int& value); - bool GetAttribute(char* Attribute, double& value); - bool GetAttribute(char* Attribute, char* value); - bool GetAttribute(char* Attribute, float& value); - - private: - //빠른 찾기를 위해서 저장된 데이터 정렬 - void DataSort(); - char m_Title[128]; - std::vector<_Attribute> m_data; - - char* m_buffer; - int m_fastIndex; - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrAdv.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrAdv.h" deleted file mode 100644 index 8bdf758..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrAdv.h" +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - -//파일 구조 -//float version; -//size_t structTotalSize;//구조체 총 크기 -//size_t structNum;//구조체 갯수 -//char rev[128]; //예약된 임시공간 -//size_t nSize[] 각각의 구조체 크기 -//void* pData //실제 데이터 저장 공간 - -namespace akSTL -{ - struct akSTL_DLLSPEC _akFileMgrHeader - { - float version; - - size_t structTotalSize;//구조체 총 크기 - size_t structNum;// - char rev[128]; - }; - - class akSTL_DLLSPEC CakFileMgrAdv - { - public: - CakFileMgrAdv(void); - ~CakFileMgrAdv(void); - - public: - //파일 쓰기 - bool writeFile(char* pFileName, float fVer=1.0); - - //파일 읽기 - //0은 실패 1은 정상 - //10001 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10002 읽어올 구조체 크기가 파일보다 큼(struct size > file size) - //10003 읽어올 구조체와 파일크기가 같음. 하지만 구조체 구성이 다름(struct size == file size) - int readFile(char* filepath, bool bErrorCheck = false); - - //데이터/크기 수정(기존의 파일정보를 읽어서 새 데이터로 수정) - bool editFile(char* filepath, int nIndex, void* pData, size_t nSize); - - - //데이터/크기 초기화 - void clear(); - //데이터/크기 추가 - void addDataSize(void* pData, size_t nSize); - //데이터/크기 수정 - void setDataSize(int nIndex, void* pData, size_t nSize); - - _akFileMgrHeader getFileHeaderInfo(char* pFileName); - - - - - private: - struct _datasize - { - _datasize(void* pData1, size_t nSize1) - { - pData = pData1; - nSize = nSize1; - } - void* pData; - size_t nSize; - }; - std::vector<_datasize> m_vecData; - - - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrB.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrB.h" deleted file mode 100644 index a2f377c..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileMgrB.h" +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - - - - -namespace akSTL -{ - class akSTL_DLLSPEC CakFileMgrB - { - public: - CakFileMgrB(void); - ~CakFileMgrB(void); - - //쓰기 관련 - void SetDataSize(unsigned int HeadSize, unsigned int BodySize); - bool SetHead(void* head); - bool AddBody(void* body); - void ClearWriteBuffer(); //쓰기할려고 저장한 데이터 모두 삭제 - - //읽기 관련 - void MakeFile(char* filepath); - bool OpenFile(char* filepath); - void* GetBodyData(); - void* GetHeadData(); - int MoveNext(); - void ClearReadBuffer(); - - private: - int m_headSize, m_bodySize; - void* m_WriteHead; - std::vector<void*> m_vecWriteBody; - int m_readindex; - void* m_ReadHead; - std::vector<void*> m_vecReadBody; - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileUtil.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileUtil.h" deleted file mode 100644 index 7838e51..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akFileUtil.h" +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "akLinker.h" - - -namespace akSTL -{ - class akSTL_DLLSPEC khFileUtil - { - public: - khFileUtil(void); - ~khFileUtil(void); - - static bool CopytoFile(char* srcfilename, char* cpyfilename); - //상대경로가 '/', '\\'로 시작하면 안됨(나중에 수정하도록 하자..API문제인듯) - static bool CopytoFolder(char* srcfilename, char* cpyFolder); - - //상대경로가 '/', '\\'로 시작하면 안됨, 와일드 카드 사용가능 - static bool RemoveFile(char* filename); - }; -} diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akInterpolation.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akInterpolation.h" deleted file mode 100644 index 57f4d4f..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akInterpolation.h" +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include <vector> - -namespace akSTL -{ - class akSTL_DLLSPEC CakInterpolation - { - public: - struct _Data - { - _Data() - { - x = y = 0; - } - double x; - double y; - }; - - public: - CakInterpolation(); - ~CakInterpolation(); - - //폴리노미얼 데이터 생성(rate:데이터 간격) - void CaculationPolinomial(double min, double max, double rate); - //큐빅스플라인 데이터 생성(rate:점과 점사이의 데이터 갯수) - void CaculationCubicSpline(double rate); - //Linear(rate:점과 점사이의 데이터 갯수) - void CaculationLinear(int step); - - void AddPoint(double x, double y); - inline void ClearPoint(){m_vecInterPoint.clear();}; - - inline _Data GetData(int index); - inline int GetDataNum(){return (int)m_vecInterPoint.size();}; - - - - - protected: - std::vector<_Data> m_vecOrgPoint; - std::vector<_Data> m_vecInterPoint; - private: - void solveTridiag(double* khb, double* diag, double* khp, double* b, int n) ; - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMath.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMath.h" deleted file mode 100644 index 7d84e61..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMath.h" +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include "akSTL.h" - -namespace akSTL -{ - - class akSTL_DLLSPEC CakMath - { - public: - CakMath(void); - ~CakMath(void); - - public: - //세점이 이루는 각도를 산출 - double GetAngle3Point(double cX, double cY, double x1, double y1, double x2, double y2 ); - //평면 폴리곤위에 점이 존재 하는지 검사 - bool GetIsPointOnPolygon(khVector2d point, khVector2d* polygon, int length); - //한 선위에 점이 있는지 검사 - bool GetLineOnPoint(khVector3d point, khVector3d line1, khVector3d line2); - //2d 회전 좌표(중심점에서 - khVector2d GetRotatePosition(khVector2d center, khVector2d point1, double angle); - - //두선의 교차점 구하기(교차점이 있으면 true 반환) - bool GetIntersectPoint(khVector2d a1, khVector2d a2, khVector2d b1, khVector2d b2, khVector2d* IP); - }; - -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMatrix.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMatrix.h" deleted file mode 100644 index e8b8272..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMatrix.h" +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akLinker.h" - -namespace akSTL -{ - class akSTL_DLLSPEC CakMatrix4x4 - { - public: - CakMatrix4x4(void); - ~CakMatrix4x4(void); - - inline bool MatrixClear(); //매트릭스 리셋 - inline bool SetMatrix(double *matrix); //매트릭스 세팅 - inline bool SetRotateH(double H); //회전 매트리릭스 곱셈 - inline bool SetRotateP(double P); //회전 매트리릭스 곱셈 - inline bool SetRotateR(double R); //회전 매트리릭스 곱셈 - inline bool SetTransform(double x, double y, double z); //이동 매트리릭스 곱셈 - inline bool MakeResult(double* x, double* y, double* z);//매트릭스 적용 좌표값 산출 - inline bool MakeResult(float* x, float* y, float* z);//매트릭스 적용 좌표값 산출 - inline void MatrixPrint(); //현재 매트릭스 출력 - inline CakMatrix4x4& operator=(const CakMatrix4x4& matrix); - inline CakMatrix4x4& operator*(const CakMatrix4x4& matrix); - protected: - inline bool Multiplication(double* matrix); //현재 매트릭스에 입력값 곱셈 - - public: - double m_Matrix[16]; - - - private: - bool m_bSet; //초기화가 되어있는지 확인 - - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMemory.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMemory.h" deleted file mode 100644 index 22f4979..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akMemory.h" +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ -#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } -#define SAFE_DELETE_ARRAY(p) { if(p) { delete [] (p); (p)=NULL; } } - - class akSTL_DLLSPEC CakMemory - { - public: - CakMemory(void); - ~CakMemory(void); - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akRandom.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akRandom.h" deleted file mode 100644 index 15d8119..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akRandom.h" +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ -//#define GetRandom( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) - - class akSTL_DLLSPEC CakRandom - { - public: - CakRandom(void); - ~CakRandom(void); - - //정규분포, Normal, 가우시안... (다 같은말) - double Gaussian(float stddev, float mean); //stddev:평균, mean:표준편차 - - static int GetRandom(int min, int max); - - private: - static int ms_randomseed; - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akString.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akString.h" deleted file mode 100644 index 652089d..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akString.h" +++ /dev/null @@ -1,143 +0,0 @@ -#pragma once - - -#include "akLinker.h" - -#include <iostream> -#include <tchar.h> - - -extern akSTL_DLLSPEC wchar_t* m_pWstrTemp; -akSTL_DLLSPEC wchar_t* charToWchar(char* pstrSrc); - - -namespace akSTL -{ - class akSTL_DLLSPEC CakString - { - public: - CakString(void); - ~CakString(void); - - public: - //wstring ToWString(const char * in_val); - //string ToString(const wstring &in_val); - - - - //찾고자하는 문자의 위치를 반환해주는 함수(-1이 반환되면 찾지 못한것임, 찾았으면 1이상의 값을 반환) - static int StringFind(const char* str, const char* keyward); - - - static inline std::wstring ToWString(const char * in_val) - { - std::wstring temp; - while (*in_val != '\0') - temp += *in_val++; - return temp; - } - - static inline std::string ToString(const std::wstring &in_val) - { - std::string temp; - std::wstring::const_iterator b = in_val.begin(); - const std::wstring::const_iterator e = in_val.end(); - while (b != e) - { - temp += static_cast<char>(*b); - ++b; - } - return temp; - } - - static bool IsNumber(char* strSource); - static void StringReplace(char* strSource, char cSourceChar, char cDestChar); - static void StringReplace(char* strSource, char* strSourceString, char* strDestString); - static bool GetFullPathName(char* strDest, int nDestSize, const char* strSourceFront, const char* strSourceEnd); - static void GetPath(char* strDest, int nDestSize, const char* strSource); - static void GetName(char* strDest, int nDestSize, const char* strSource); - static bool GetExt(char* strDest, int nDestSize, const char* strSource); - static char* GetExt(const char* strSource); - static int Find(const char* strSource, char cChar); - static int Find(const char* strSource, char* strFindString); - static int ReverseFind(const char* strSource, char cChar); - static void MakeLower(char* strSource); - static void MakeUpper(char* strSource); - static bool Left(const char* strSource, char* strDest, int nDestLength, int nLeftCount); - static bool Mid(const char* strSource, char* strDest, int nDestLength, int nFirstIndex, int nCount = -1); - static bool Right(const char* strSource, char* strDest, int nDestLength, int nRightCount); - - - - private: - - }; -} - - -// -//void CksgFontMaker::DrawStringOverray( -// GLfloat x, -// GLfloat y, -// int windowWidth, -// int windowHeight, -// char* s -// ,...) -//{ -// // Draws the given text string at the given location. -// -// char text[256]={}; -// va_list ap; -// va_start(ap, s); -// vsprintf(text, s, ap); -// va_end(ap); -// -// GLsizei len = GLsizei(strlen(text)); -// if (text && len > 0) -// { -// glPushMatrix(); -// { -// glPushAttrib( GL_LIGHTING_BIT ); -// glDisable(GL_LIGHTING); -// glMatrixMode(GL_PROJECTION); -// glPushMatrix(); -// { -// glLoadIdentity(); -// gluOrtho2D(0, windowWidth, 0,windowHeight); -// -// glMatrixMode(GL_MODELVIEW); -// -// glPushMatrix(); -// { -// glLoadIdentity(); -// -// -// -// -// glRasterPos2i(x, windowHeight+m_logfont.lfHeight-y); -// -// glPushAttrib(GL_LIST_BIT); -// { -// glListBase(m_fontListBase); -// glCallLists(len, GL_UNSIGNED_BYTE, (const GLvoid*)text); -// } glPopAttrib(); -// -// -// }glPopMatrix(); -// -// glMatrixMode(GL_PROJECTION); -// -// }glPopMatrix(); -// -// glMatrixMode(GL_MODELVIEW); -// -// -// glPopAttrib(); -// //glEnable(GL_DEPTH_TEST); -// -// }glPopMatrix(); -// -// -// -// } -//} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akSyncObject.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akSyncObject.h" deleted file mode 100644 index db91012..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akSyncObject.h" +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "akLinker.h" - -namespace akSTL -{ - class akSTL_DLLSPEC CakSyncObject - { - public: - CakSyncObject(void); - virtual ~CakSyncObject(void); - - public: - //읽기 지정을 하였을때... 이미 어디서 쓰고 있다면.. 기다렸다가 다음을 수행한다. - //bWait = false 일경우.. 어딘가에서 쓰고 있다면 false를 반환하고 끝내버린다. - bool SetRead(bool bWait = true); - //쓰기 지정을 하였을때... 이미 어디서 읽고 있다면.. 기다렸다가 다음을 수행한다. - bool SetWrite(bool bWait = true); - int SetReadRelease(); //현재 남아있는 읽기 카운트 반환 - void SetWriteRelease(); - - int GetReadCount(){return m_nReadCount;}; //읽기 호출한 횟수 반환 - bool GetWriteState(){return m_bWrite;}; //0이 될때까지 그리는 루틴은 무한 루프가 돈다. - - - protected: - - private: - bool m_bWrite; - int m_nReadCount; - - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akText.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akText.h" deleted file mode 100644 index f22348f..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akText.h" +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "akLinker.h" - -class akSTL_DLLSPEC CakText -{ -public: - CakText(void); - virtual ~CakText(void); - - ////////////////////////////////////////////////////////////////////////// - //시간 반환 함수 - char* getTime(); - char* getTime(char* pSeparator); - char* getTime(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //날자 반환 함수 - char* getDate(); - char* getDate(char* pSeparator); - char* getDate(char* pSeparator1, char* pSeparator2, char* pSeparator3); - - ////////////////////////////////////////////////////////////////////////// - //시스템 정보 반환 - char* getModuleFileName(); //실행되는 파일 이름 반환 - char* getCurrentDirectory(); //현재 작업 폴더 반환 - - - ////////////////////////////////////////////////////////////////////////// - //버퍼 관리 함수 - //내부적으로 많은 양의 크기를 요구하는 문자열의 경우 - //자동으로 크기를 재 할당하므로 별도의 버퍼크기를 조절 하지 않아도 괜찮아요~ -public: - char* getBuffer(int index){return m_pBuffer[index];}; - int getBufferSize(){return m_nBuffersize;}; - int getBufferNum(){return m_nBufferNum;}; - void setBufferSize(int nNum, int nSize); - -private: - char** m_pBuffer; //m_nBufferNum*m_nBuffersize - int m_nBufferNum; //기본 버퍼갯수8개 - int m_nBuffersize; //기본크기 64 - int m_nBufferCurIndex; -}; - - diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTextExt.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTextExt.h" deleted file mode 100644 index b834058..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTextExt.h" +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "akText.h" - -//응용1 -#define AKTEXT CakTextExt::getInstance() -class akSTL_DLLSPEC CakTextExt : public CakText -{ -public: - CakTextExt(void){}; - virtual ~CakTextExt(void){}; - - static CakText* getInstance(){return &m_akText;}; -private: - static CakText m_akText; -}; diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTimeManager.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTimeManager.h" deleted file mode 100644 index 376df37..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTimeManager.h" +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include "akLinker.h" -#include <Windows.h> - - -namespace akSTL -{ - class akSTL_DLLSPEC CakTimeManager - { - public: - enum PlayMode - { - Play, - Stop, - Pause, - Playing, - PlayEnd, - SettingTime - }; - public: - CakTimeManager(void); - virtual ~CakTimeManager(void); - - //시작 중지(구버전) //배속 적용 안받음 - inline void SetBegin(); - inline void SetEnd(); - inline double GetRunTimeSec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetRunTimeMsec(); //시작시간 저장하고 종료시간까지의 타임(초단위) - inline double GetFrameRate(); - - //플레이바 기능(신버전) - void SetInit();//초기 설정으로 되돌림 - virtual inline void SetPlay(); - virtual inline void SetStop(); - virtual inline void SetTime(int msec); - virtual inline void SetPause(); - - - virtual inline double GetTime(int type=0); //0=Sec, 1=MSec - virtual inline void GetTime(int* h, int* m, int* s, int* ms); - virtual inline PlayMode GetPlayMode(); - virtual inline void SetSpeedRate(double speedrate); //배속 설정(0보다 큰 실수 입력가능) - virtual inline double GetSpeedRate(); //배속 설정값 읽기 - - protected: - LARGE_INTEGER m_Frequency; - LARGE_INTEGER m_BeginTime; - LARGE_INTEGER m_Endtime; - - double m_PauseTime; - double m_LastTime; - PlayMode m_PlayState; - double m_SpeedRate; //배속 - - //콜백 데이터 관리 - public: - typedef void (*MsgCallbackFunc) (int msg, void*); - void setMsgCallbackFunc(MsgCallbackFunc userFunc, void* data = NULL) - { - m_msgCallbackFunc = userFunc; - m_MsgCallbackFuncData = data; - }; - protected: - void* m_MsgCallbackFuncData; - MsgCallbackFunc m_msgCallbackFunc; - int m_nSyncObject; - }; - - class akSTL_DLLSPEC CakTimeManagerAdv : public CakTimeManager - { - public: - CakTimeManagerAdv(void); - virtual ~CakTimeManagerAdv(void); - - public: - virtual inline void SetPlay(); - virtual inline void SetTime(int msec); - virtual inline void SetStop(); - protected: - void setEnd();//플레이 시간이 최대 시간을 넘었을 경우 호출 - public: - double m_timeMax; - - public: - static void threadPlayer(void* arg); - int m_flagThreadPlayer; - - private: - bool m_bPlaying; - - }; -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTraceExt.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTraceExt.h" deleted file mode 100644 index c06ba33..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTraceExt.h" +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#define _AKTRACE - -#if defined _AKTRACE -#define AKTRACEEXT(fmt,...) CakTraceExt::setTraceWithDateTime(fmt,##__VA_ARGS__) -#else -#define AKTRACEEXT(fmt,...) -#endif - -#if defined _AKTRACE -#define AKTRACE(fmt,...) CakTraceExt::getInstance()->setTrace(fmt,##__VA_ARGS__) -#else -#define AKTRACE(fmt,...) -#endif - - -#include "akTrace.h" -#include "akTextExt.h" -#include <Windows.h> -class akSTL_DLLSPEC CakTraceExt -{ -protected: - CakTraceExt(void); - virtual ~CakTraceExt(void); - -public: - ////////////////////////////////////////////////////////////////////////// - static CakTrace *getInstance() {return &m_Instance;}; - - static void setTraceWithDateTime(char* format, ...) - { - char text[512]={}; - va_list ap; - va_start(ap, format); - vsprintf(text, format, ap); - va_end(ap); - - m_Instance.setTrace("%s%s : %s", AKTEXT->getDate(), AKTEXT->getTime(), text); - }; - - - -protected: - static CakTrace m_Instance; - -}; diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTrajectoryModel.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTrajectoryModel.h" deleted file mode 100644 index c9e74bd..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akTrajectoryModel.h" +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - - -#include "akLinker.h" -#include "akSTL.h" -#include "akDE.h" -#include <vector> -namespace akSTL -{ - struct _Waypoint - { - double x; - double y; - double z; - double speed; - }; - - class akSTL_DLLSPEC CakTrajcetoryModel - { - public: - CakTrajcetoryModel(void); - ~CakTrajcetoryModel(void); - - public: - virtual int calculate(float dTime); //더이상 계산할 경로점이 없을 경우 2를 반환 - void setCurrentByWaypoint(int nWaypointIndex); //현재값을 경로점 기준으로 셋팅 - - - - public: - //현재 값 - khVector3d m_position; //위치 - khVector3d m_rotate; //자세 - double m_velocity; //속도 - double m_acc; //가속도 - khVector3d m_rotateAcc; //각속도 - - //부여 받은 명령 설정 - khVector3d m_TaskPosition; - double m_TaskVelocity; - double m_TaskAcc; - - //객체 정보 관리 - double mass; //무게 - double maxSpeed; //최대 속도 - double minSpeed; //최저 속도 - double maxAcceleration; //가속도 - double maxDeceleration; //감속도 - - khVector3d m_rotateVelRate; - - //경로점 관리 - public: - int m_nWaypointType; //0 마지막 경로점이면 끝낸다, 1경로점 순회, 2경로점 왕복 - int m_nWaypointSet; //현재 설정된 경로점 - std::vector<_Waypoint> m_vecWaypoint; - - - protected: - void getAngle3d(double x1, double y1, double z1, double x2, double y2, double z2, double* heading, double* pitch); - double getHeading(double x , double y); - protected: - CakDE m_movementmodel; - }; - -} \ No newline at end of file diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWGS84.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWGS84.h" deleted file mode 100644 index 7f8cb20..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWGS84.h" +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "akSTLLinker.h" - -class AKSTL_DLLSPEC CakWGS84 -{ -public: - CakWGS84(void); - ~CakWGS84(void); - - //- 중부원점: N38, E127 - static void getPosition(double lat1 , double lon1 , double x , double y , double &lat2 , double &lon2); - static void getRange(double lat1 , double lon1 , double lat2 , double lon2 , double &x , double &y); - - static void _TM2Bessel(double tm_x, double tm_y, double lonOrg, double latOrg, double *lon, double *lat); - static void _Bessel2TM(double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - static void Bessel2TM (double alt, double lon, double lat, double lonOrg, double latOrg, double *tm_x, double *tm_y); - - //태현추가 - static double getBearing(double lon, double lat, double lonOrg, double latOrg); - static void getRangePosition(double bearing, double range, double lonOrg, double latOrg, double *lon, double *lat); -}; diff --git "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWaypoint.h" "b/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWaypoint.h" deleted file mode 100644 index 465d882..0000000 --- "a/ReviewHistory/include/akSTL/\354\203\210 \355\217\264\353\215\224/akWaypoint.h" +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - - -#include "akSTLLinker.h" -#include "akSTLVector.h" - -namespace akSTL -{ - class AKSTL_DLLSPEC CakWaypoint - { - public: - CakWaypoint(void); - ~CakWaypoint(void); - - public: - void clear(); - void pointAdd(khVector3d point); - void pointInsert(unsigned int index, khVector3d point);//범위를 넘어가면 젤 뒤에 추가 - void pointDelete(unsigned int index); - - int size(){return m_nPointsNum;}; - - khVector3d& operator [](unsigned int nindex){return m_pPoints[nindex];}; - CakWaypoint& operator= (CakWaypoint& waypoint); - - private: - void secureMemory(); - - private: - int m_nMakePoints; //확보 메모리 사이즈 - int m_nPointsNum; //현재 입력된 Point 갯수 - khVector3d* m_pPoints; //데이터 변수 - - - }; -} \ No newline at end of file diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp index 98841f2..7a3c5e6 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.cpp @@ -124,11 +124,6 @@ return SetCommand(grcReadBin); } -BOOL CDitGlassRawClient::WriteReviewRawBinFile() -{ - return SetCommand(grcReviewWriteBIn); -} - BOOL CDitGlassRawClient::SetCommand( emGlassRawCommand nCmd ) { if(m_pGlassRawInfo == NULL) return FALSE; @@ -137,14 +132,14 @@ int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; - if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] + if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//둘이 같다는것은 서큘러 버퍼가 한바퀴 돌았다는것!! [김태현 2018/11/12] { - m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] + m_pGlassRawInfo->m_nCommandIdxRead++;//가장 오래된 명령 하나를 삭제한다. [김태현 2018/11/12] } m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; - m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1수행전, 0실패, 1성공 [김태현 2018/11/13] m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; @@ -215,7 +210,7 @@ void CDitGlassRawClient::RemoveReviewDefects() { int nDefectNum = m_pGlassData->m_nDefectNum; - int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int nRightDefectNum = 0;//기준점 오른쪽에 위치한 결함 갯수 int nDefectDeleteNum = 0; for(int i=nDefectNum-1; i>=0; i--) { diff --git a/ReviewSystem/ReviewSystem/DitGlassRawClient.h b/ReviewSystem/ReviewSystem/DitGlassRawClient.h index a3ce795..ab06511 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawClient.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawClient.h @@ -25,7 +25,7 @@ BOOL SetReviewComtomize(); - void RemoveReviewDefects();//AOI占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싹곤옙, 占쏙옙占썰에占쏙옙 占쏙옙占쏙옙占쏙옙 User 혹占쏙옙 Reflow 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占싼댐옙. + void RemoveReviewDefects();//AOI에서 생성한 디펙 정보를 제외하고, 리뷰에서 생성한 User 혹은 Reflow 결함을 제외한다. _grmDitMemInfo* GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;}; _grmGlassData* GetGlassData(){return m_pGlassData;}; @@ -34,16 +34,14 @@ _grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];}; _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex];}; - //占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占� [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과 파일 강제 쓰기 명령 [김태현 2018/11/12] BOOL WriteAOIRawFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占쏙옙占승뤄옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //결과파일 강제 바이너리 형태로 쓰기 [김태현 2018/11/12] BOOL WriteAOIRawBinFile(); - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싱너몌옙 占싻깍옙 + //결과파일 강제 바이너리 읽기 BOOL ReadAOIRawBinFile(); - - BOOL WriteReviewRawBinFile(); protected: BOOL ConnectGlassRawInfo(); diff --git a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h index e84fb29..600196e 100644 --- a/ReviewSystem/ReviewSystem/DitGlassRawStruct.h +++ b/ReviewSystem/ReviewSystem/DitGlassRawStruct.h @@ -47,7 +47,7 @@ memset(this, 0, sizeof(_grmGlassData)); } - //Glass 占쏙옙占쏙옙 + //Glass 정보 char m_strFileName[64]; char m_strPath[256]; @@ -56,12 +56,12 @@ int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; int m_nConerCutDirection; - int m_nScanCoordinateY; //占쏙옙占썩가 0占싱몌옙 占싹뱄옙, 1占싱몌옙 Scan占쏙옙占쏙옙占쏙옙 y占쏙옙(占쏙옙 scan占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙, offline 占쏙옙占쏙옙 占쏙옙占쏙옙) + int m_nScanCoordinateY; //여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은) int m_nGlassSizeWidth; int m_nGlassSizeHeight; - //占쏙옙占쏙옙占쏙옙占쏙옙 + //설비정보 char m_strLine[32]; char m_strEquipType[32]; char m_strEquipID[32]; @@ -74,7 +74,7 @@ CTime m_tmReviewLoading; CTime m_tmReviewEnd; - //占썩본 占쏙옙占쏙옙占쏙옙占쏙옙 + //기본 물류정보 char m_strGlassID[32]; //Glass ID char m_strPPID[32]; char m_strEPPID[32]; @@ -91,7 +91,7 @@ char m_strVCRGlassID[32]; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -126,14 +126,14 @@ int m_nDefectNumStackSP; - //카占쌨띰옙/占쏙옙캔 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //카메라/스캔 정보 [김태현 2018/12/5] short m_nCameraNum; short m_nScanNum; unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM]; - //占쏙옙占쏙옙占� 占쏙옙占쏙옙 um[占쏙옙占쏙옙占쏙옙 2018/12/10] + //얼라인 정보 um[김태현 2018/12/10] double m_nAlignCcdTheta; double m_nAlignCcdShitftX; double m_nAlignCcdShitftY; @@ -143,11 +143,8 @@ double m_nAlignBasicTheta; double m_nAlignBasicShitftX; double m_nAlignBasicShitftY; - char m_strAlignFirst[64]; - char m_strAlignSecond[64]; -// char m_strAlignPath[256]; - //CSOT占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + //CSOT용 물류 정보 [김태현 2018/12/5] char m_strCassetteSequenceNo[16]; char m_strOwnerCode[16]; //2. OWNER_CODE char m_strOwnerType[16]; //3. OWNER_TYPE @@ -162,7 +159,7 @@ char m_strGroupID[16]; //14.GROUP_ID char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG - // CPRJ占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // CPRJ용 물류 정보 char m_strProdType[3]; char m_strBatchID[13]; char m_strPairHPanelID[13]; @@ -188,17 +185,17 @@ BYTE m_nGlassDataBitSignal[4]; bool m_bJob_end; - //201217 CJH - 占쏙옙占쏙옙 Defect Review 占쏙옙占쏙옙 + //201217 CJH - 찍은 Defect Review 개수 int m_nReviewNum; - //201221 CJH - 占식쏙옙占쏙옙 Stack 占쏙옙占� + //201221 CJH - 파싱한 Stack 결과 int m_nStackNum; BOOL m_bStackRead; - //210203 CJH - CutOff 占쏙옙占� 占쏙옙占쏙옙 占쏙옙 + //210203 CJH - CutOff 대상 결함 수 int m_nCutOffDefectNum; - //210323 CJH - Server/Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 + //210323 CJH - Server/Frame Shrink 정보 추가 char m_strShrinked[6]; - //210326 CJH - RAW 占쌉뤄옙 Defect 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙肉⑼옙占� + //210326 CJH - RAW 입력 Defect 수량 상한 사용여부 BOOL m_bRawCutoff; }; @@ -222,7 +219,7 @@ } int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; int m_nCellID; //1. PANEL_ID - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? + short m_nModelIdx; // 몇 번째 모델인가? char m_strCellName[32]; int m_rectCellLeft; @@ -235,7 +232,7 @@ int m_nJudgeGlade; - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //결함 갯수 관리 변수 int m_nDefectNumSizeSmall; int m_nDefectNumSizeMid; int m_nDefectNumSizeLarge; @@ -259,43 +256,12 @@ char m_strProImage[32]; char m_strAvgGray_0[12]; char m_strPortion_0[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_0[12]; - char m_strAvgAmp_0[12]; - char m_strFFTVar_0[12]; - char m_strFFTVah_0[12]; - char m_strFFTVaq_0[12]; - char m_strFFTPK_0[12]; - char m_strAvgGray_1[12]; char m_strPortion_1[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_1[12]; - char m_strAvgAmp_1[12]; - char m_strFFTVar_1[12]; - char m_strFFTVah_1[12]; - char m_strFFTVaq_1[12]; - char m_strFFTPK_1[12]; - char m_strAvgGray_2[12]; char m_strPortion_2[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_2[12]; - char m_strAvgAmp_2[12]; - char m_strFFTVar_2[12]; - char m_strFFTVah_2[12]; - char m_strFFTVaq_2[12]; - char m_strFFTPK_2[12]; - char m_strAvgGray_3[12]; char m_strPortion_3[12]; - //kyh Mura Data 占쌩곤옙 0622 - char m_strCorner_Gray_3[12]; - char m_strAvgAmp_3[12]; - char m_strFFTVar_3[12]; - char m_strFFTVah_3[12]; - char m_strFFTVaq_3[12]; - char m_strFFTPK_3[12]; int m_nDefectNumJudgeOKWhite; int m_nDefectNumJudgeOKBlack; @@ -308,17 +274,17 @@ int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG - // Filtering占쏙옙 Stack占쏙옙 占쏙옙 + // Filtering된 Stack별 수 int m_nDefectTDCount; int m_nDefectSDCount; int m_nDefectPDCount; int m_nDefectSPCount; - // Gate/Data 占쏙옙 占쏙옙占쏙옙 + // Gate/Data 총 갯수 int m_nGateNum; int m_nDataNum; - // 210129 CJH - Cell Origin 占쏙옙占쏙옙 + // 210129 CJH - Cell Origin 방향 int m_nCellXDir; int m_nCellYDir; }; @@ -331,27 +297,26 @@ } ////////////////////////////////////////////////////////////////////////// - //占쏙옙占썩서 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //여기서 부터 리뷰 영역 [김태현 2019/1/19] ditRaw::ReviewPlanType m_nPlanType ; int m_nResultCode; //0:None, 1:Success - int m_nShotIndex; //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/12/5] + int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] int m_nModuleIndex; int m_nMagnificIndex; float m_fManification; float m_fManificResoultion; char m_strRevImageName[256]; - char m_strRevImagePath[256]; ////////////////////////////////////////////////////////////////////////// - // Measure 占쏙옙占쏙옙 + // Measure 영역 int m_nMeasure_Index; int m_nMeasure_ResultCode; //0:None, 1:Success float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY ////////////////////////////////////////////////////////////////////////// - // WSI占쏙옙占쏙옙 + // WSI영역 int m_nWsi_ResultCode; //0:None, 1:Success - int m_nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + int m_nWsi_Type; // 함몰 / 돌기 float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width char m_strWsi_2DImageFilename[256]; char m_strWsi_3DImageFilename[256]; @@ -359,14 +324,14 @@ int m_nWsi_pReflowResultData[8]; double m_dWsi_DamDistance; - double m_dWsiMmMotorX; // WSI 占쏙옙占쏙옙 占쏙옙표 20180223 HJH + double m_dWsiMmMotorX; // WSI 모터 좌표 20180223 HJH double m_dWsiMmMotorY; - float m_fWsiManification; // WSI 占쏙옙占쏙옙 + float m_fWsiManification; // WSI 배율 ////////////////////////////////////////////////////////////////////////// - // Reflow 占쏙옙占쏙옙 + // Reflow 영역 int m_nReflow_Index; - int m_nReflow_ResultCode; //0:None, // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side + int m_nReflow_ResultCode; //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side float m_fReflow_LinePosData[8]; int m_nReflow_Side; int m_nReflow_InspectionMode; @@ -382,108 +347,107 @@ short m_nDefectID; short m_nCameraID; short m_nScanIdx; - //short m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 - int m_nDefectIdx; // 카占쌨라에쇽옙占쏙옙 占쏙옙占쏙옙 占싸듸옙占쏙옙 201207 CJH - 占쌘몌옙 占쏙옙 占쏙옙침. int占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //short m_nDefectIdx; // 카메라에서의 결함 인덱스 + int m_nDefectIdx; // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경 - int m_nPixelConv; // pixel 占쏙옙占쏙옙 占쏙옙표 - int m_nPixelScan; // pixel 占쏙옙占쏙옙 占쏙옙표 + int m_nPixelConv; // pixel 단위 좌표 + int m_nPixelScan; // pixel 단위 좌표 - short m_nPixelSize; // 占쏙옙占쏙옙크占쏙옙 ---------------------------------PS - short/*SERVER_DefectType*/ m_DefectType; // 占쏙옙占쏙옙 타占쏙옙 ---------------------------------DT - short/*SERVER_DefectSubType*/ m_DefectSubType; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - short/*SERVER_DefectBDType*/ m_DefectBDType; // 占쏙옙占쏙옙 타占쏙옙 - Bright, Dark, Both + short m_nPixelSize; // 결함크기 ---------------------------------PS + short/*SERVER_DefectType*/ m_DefectType; // 결함 타입 ---------------------------------DT + short/*SERVER_DefectSubType*/ m_DefectSubType; // 결함의 판정상태. + short/*SERVER_DefectBDType*/ m_DefectBDType; // 결함 타입 - Bright, Dark, Both - short m_sPixelWidth; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占십븝옙 - short m_sPixelHeight; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - short m_nLevelSrcMin; // 占쏙옙占쏙옙 占쏙옙占� Min -----------------------------SN - short m_nLevelSrcMax; // 占쏙옙占쏙옙 占쏙옙占� Max -----------------------------SX - short m_nLevelSrcAvg; // 占쏙옙占쏙옙 占쏙옙占� Avg -----------------------------SA - short m_nLevelRefMin; // 占쏟교댐옙占� 占쏙옙占� Min -------------------------RN - short m_nLevelRefMax; // 占쏟교댐옙占� 占쏙옙占� Max -------------------------RX - short m_nLevelRefAvg; // 占쏟교댐옙占� 占쏙옙占� Avg -------------------------RA - short m_nLevelDiffMin; // 占쏙옙占쏙옙 Min ---------------------------------DN - short m_nLevelDiffMax; // 占쏙옙占쏙옙 Max ---------------------------------DX - short m_nLevelDiffAvg; // 占쏙옙占쏙옙 Avg ---------------------------------DA + short m_sPixelWidth; // 픽셀단위 결함 너비 + short m_sPixelHeight; // 픽셀단위 결함 높이 + short m_nLevelSrcMin; // 결함 밝기 Min -----------------------------SN + short m_nLevelSrcMax; // 결함 밝기 Max -----------------------------SX + short m_nLevelSrcAvg; // 결함 밝기 Avg -----------------------------SA + short m_nLevelRefMin; // 비교대상 밝기 Min -------------------------RN + short m_nLevelRefMax; // 비교대상 밝기 Max -------------------------RX + short m_nLevelRefAvg; // 비교대상 밝기 Avg -------------------------RA + short m_nLevelDiffMin; // 비교차 Min ---------------------------------DN + short m_nLevelDiffMax; // 비교차 Max ---------------------------------DX + short m_nLevelDiffAvg; // 비교차 Avg ---------------------------------DA - int m_nDefectRScale; // 占싫쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 -------------------------RS - short m_sThreshold; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold - short m_sThresholdAvg; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 Threshold AVG - short m_sDefectPeak; // 占쏙옙占쏙옙占쏙옙 Peak. - short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 占쏙옙청占쏙옙占쏙옙 + int m_nDefectRScale; // 픽셀단위 결함 높이 -------------------------RS + short m_sThreshold; // 결함을 검출할 때의 Threshold + short m_sThresholdAvg; // 결함을 검출할 때의 Threshold AVG + short m_sDefectPeak; // 결함의 Peak. + short m_sDefectLevel; // (DiffAvg - Th) BOE 8G 요청사항 - int m_nPixelGlassStart; // Glass 占쏙옙占쏙옙 占싫쇽옙 + int m_nPixelGlassStart; // Glass 시작 픽셀 short m_sDefectLoc; - short m_sZoneClassPixelCount[16]; - short m_sZonePixelCount[16]; // Zone占쏙옙 占쏙옙占쏙옙 Pixel 占쏙옙 - short m_sZoneValueMin[16]; // Zone占쏙옙 占쏙옙占쏙옙 Min - short m_sZoneValueMax[16]; // Zone占쏙옙 占쏙옙占쏙옙 Max - short m_sZoneValueAvg[16]; // Zone占쏙옙 占쏙옙占쏙옙 Avg + short m_sZonePixelCount[16]; // Zone별 결함 Pixel 수 + short m_sZoneValueMin[16]; // Zone별 결함 Min + short m_sZoneValueMax[16]; // Zone별 결함 Max + short m_sZoneValueAvg[16]; // Zone별 결함 Avg short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF - //210127 CJH - Zone占쏙옙 Source Gray 占쌉뤄옙 - short m_sZoneValueSrcMin[16]; // Zone占쏙옙 Source Min - short m_sZoneValueSrcMax[16]; // Zone占쏙옙 Source Max - short m_sZoneValueSrcAvg[16]; // Zone占쏙옙 Source Avg + //210127 CJH - Zone별 Source Gray 입력 + short m_sZoneValueSrcMin[16]; // Zone별 Source Min + short m_sZoneValueSrcMax[16]; // Zone별 Source Max + short m_sZoneValueSrcAvg[16]; // Zone별 Source Avg - int m_nUMOriginX; // um占쏙옙占쏙옙 x占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMOriginY; // um占쏙옙占쏙옙 y占쏙옙표 (占쏙옙占쏙옙占쏙옙占쏙옙) - int m_nUMCenterAlignX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterAlignY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterX; // um占쏙옙占쏙옙 X占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMCenterY; // um占쏙옙占쏙옙 Y占쏙옙표 (Glass Center 占쏙옙占쏙옙, 占쏙옙占쏙옙觀占쏙옙占� 占쏙옙) - int m_nUMSizeX; // um占쏙옙占쏙옙 X 크占쏙옙 -----------------------------UX - int m_nUMSizeY; // um占쏙옙占쏙옙 Y 크占쏙옙 -----------------------------UY - int m_nUMSize; // um占쏙옙占쏙옙 크占쏙옙. - CRect m_RectUM; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹각占쏙옙. + int m_nUMOriginX; // um단위 x좌표 (원점기준) + int m_nUMOriginY; // um단위 y조표 (원점기준) + int m_nUMCenterAlignX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 후) + int m_nUMCenterAlignY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 후) + int m_nUMCenterX; // um단위 X좌표 (Glass Center 기준, 얼라인보정 전) + int m_nUMCenterY; // um단위 Y좌표 (Glass Center 기준, 얼라인보정 전) + int m_nUMSizeX; // um단위 X 크기 -----------------------------UX + int m_nUMSizeY; // um단위 Y 크기 -----------------------------UY + int m_nUMSize; // um단위 크기. + CRect m_RectUM; // 디펙 센터 기준 사각형. - short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 占쏙옙占쏙옙 크占쏙옙 占쏙옙占쏙옙enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; - short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak占쏙옙 占쏙옙占쏙옙. - short/*Judgement*/ m_DefectJudgement; // 占쏙옙占쏙옙 占쏙옙占쏙옙. - BOOL m_bDefectCutoff; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙(TRUE= Cutoff, FALSE) - short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16占쏙옙占� 占쏙옙占쏙옙 - int m_nPadRegionIdx; // PAD 占쏙옙占쏙옙 占싸듸옙占쏙옙 + short/*SERVER_DefectSizeType*/ m_DefectSizeType; // 결함 크기 종류enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra }; + short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak의 종류. + short/*Judgement*/ m_DefectJudgement; // 결함 판정. + BOOL m_bDefectCutoff; // 컷 오프 디펙(TRUE= Cutoff, FALSE) + short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16등분 구분 + int m_nPadRegionIdx; // PAD 영역 인덱스 - int m_nUMCellX; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 x 占쏙옙표 - int m_nUMCellY; // 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 y 占쏙옙표 - short m_nModelIdx; // 占쏙옙 占쏙옙째 占쏙옙占싸곤옙? - short m_nCellIdx; // 占쏙옙占승� 占쏙옙占싸곤옙? - short m_nCellGate; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellData; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellGateAlign; // 占쏙옙占쏙옙 Gate占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) - short m_nCellDataAlign; // 占쏙옙占쏙옙 Data占쏙옙占쏙옙(占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙) + int m_nUMCellX; // 셀 원점 기준 x 좌표 + int m_nUMCellY; // 셀 원점 기준 y 좌표 + short m_nModelIdx; // 몇 번째 모델인가? + short m_nCellIdx; // 몇번째 셀인가? + short m_nCellGate; // 셀별 Gate라인(얼라인 보정 전) + short m_nCellData; // 셀별 Data라인(얼라인 보정 전) + short m_nCellGateAlign; // 셀별 Gate라인(얼라인 보정 후) + short m_nCellDataAlign; // 셀별 Data라인(얼라인 보정 후) - int m_nUMShotX; // 占쏙옙 占쏙옙占쏙옙 X占쏙옙표 - int m_nUMShotY; // 占쏙옙 占쏙옙占쏙옙 Y占쏙옙표 - short m_nMaskDefectIdx; // 占쏙옙 Glass占쏙옙占쏙옙 占쌩견듸옙 占쏙옙占쏙옙크占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙. - short m_nShotIdx; // 占쎈광占쏙옙 占쏙옙호 - short m_nMatchShotCount; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙占쏙옙占쏙옙 占쏙옙. - short m_nMatchMaxSize; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙크 占쏙옙 占쏙옙占쏙옙 큰 占쏙옙占쏙옙占쏙옙 크占쏙옙. + int m_nUMShotX; // 샷 기준 X좌표 + int m_nUMShotY; // 샷 기준 Y좌표 + short m_nMaskDefectIdx; // 한 Glass에서 발견된 마스크결함 묶음의 인덱스. + short m_nShotIdx; // 노광샷 번호 + short m_nMatchShotCount; // 동일한 마스크 결함의 수. + short m_nMatchMaxSize; // 동일한 마스크 중 가장 큰 결함의 크기. - short m_nRepeatCount; // 占쏙옙占쌈곤옙占쌉발곤옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙표 占쌥븝옙占쏙옙 + short m_nRepeatCount; // 연속결함발견위한 동일좌표 반복수 short m_nMaskRepeatCount; int m_StackInfo; // Stack Flag - BOOL m_bRealStack; // Stack 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 TD(TRUE) 占쏙옙占쏙옙, 占쏙옙占싶몌옙占쏙옙 占쏙옙占쏙옙 TD(FALSE)占쏙옙占쏙옙占쏙옙 占쏙옙 占쌍댐옙. - short m_nStackStepCount; // Stack 占쏙옙 - short m_nStackColorIdx; // Color占쏙옙 占쏙옙占쏙옙占싹댐옙 占싸듸옙占쏙옙. + BOOL m_bRealStack; // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다. + short m_nStackStepCount; // Stack 수 + short m_nStackColorIdx; // Color를 선택하는 인덱스. //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. - char m_strStackFirst[60]; // Stack Step. //201221 CJH - 占쌍댐옙 占쏙옙占쏙옙占쏙옙 60bytes - char m_strUnitID[16]; // 占쏙옙占쌍억옙占싱듸옙 + char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes + char m_strUnitID[16]; // 유닛아이디 - int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI占쏙옙 TFE占쏙옙 占쌩곤옙 占싻뤄옙 占싯곤옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占�. - int m_nAtomWidth; // TFE 占쏙옙 占십븝옙 - int m_nAtomHeight; // TFE 占쏙옙 占쏙옙占쏙옙 - short/*ReKind*/ m_DefectKind; // 占쏙옙占쏙옙 占쏙옙占쏙옙 + int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류 알고리즘 적용 결과. + int m_nAtomWidth; // TFE 핵 너비 + int m_nAtomHeight; // TFE 핵 높이 + short/*ReKind*/ m_DefectKind; // 결함 종류 char m_strDefectCode[32]; // Defect Code BOOL m_bMergeState; // Merge Status char m_strAoiImageName[256]; // Defect Image Name(CCD Image) - int m_nDefectMerge; // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int m_nDefectMerge; // 현재 디펙의 머지 여부 int m_nPixelSizeOrigin; int m_nScratchRatio; - int m_nDensity; // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싻듸옙 [2017.8.2 bhs] + int m_nDensity; // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs] char m_strDefectName[16]; char m_strDefectType[16]; @@ -491,27 +455,19 @@ double m_dScanResolution; double m_dConvResolution; - int m_nAngle; // 占쏙옙占쏙옙 - int m_nMajor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Long) - int m_nMinor; // 占쏙옙占쏙옙 占쏙옙占쏙옙(Short) - int m_nCompact; // Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占싹댐옙 占쏙옙占쏙옙 占쏙옙占싱울옙 Blob 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 - int m_nThickness; // Blob 占쏙옙占싱울옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 (Area / Major) + int m_nAngle; // 각도 + int m_nMajor; // 장축 길이(Long) + int m_nMinor; // 단축 길이(Short) + int m_nCompact; // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율 + int m_nThickness; // Blob 넓이와 장축의 비율 (Area / Major) - short m_nHliLevelIdx; // 占쏙옙 占쏙옙째 占쏙옙占쏙옙(채占쏙옙)占싸곤옙? - int m_nHliLayers; // 占쌔댐옙占쏙옙篤占� 占쏙옙占쌉듸옙 占쏙옙占싱억옙 bit처占쏙옙 + short m_nHliLevelIdx; // 몇 번째 레벨(채널)인가? + int m_nHliLayers; // 해당결함에 포함된 레이어 bit처리 - BOOL m_bShrinked; //210323 CJH - Frame Shrink 占쏙옙占쏙옙 占쌩곤옙 - - char m_strAoiImagePath[255]; - char m_strReviewImagePath[255]; - - int m_nAlignRectLeft; - int m_nAlignRectTop; - int m_nAlignRectBottom; - int m_nAlignRectRight; + BOOL m_bShrinked; //210323 CJH - Frame Shrink 정보 추가 - //占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/1/19] + //리뷰 디펙 정보 [김태현 2019/1/19] _grmDefectReviewData m_ReviewDefect; }; @@ -535,8 +491,6 @@ grcWriteBin = 201, grcReadBin = 202, - grcReviewWriteBIn = 301, - grcGlassRawCommand }; @@ -556,7 +510,7 @@ struct _grmDitMemInfo { - //占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //공유 메모리 생성할 공간 결정 [김태현 2018/11/12] size_t m_nGlassRawDataSize; int m_nGlassMaxDataNum; int m_nBlockMaxDataNum; @@ -564,7 +518,7 @@ int m_nDefectMaxDataNum; int m_nStackMaxDataNum; - //Char 占쏙옙占쏙옙 占쌘료가 占쌍댐옙 占쏙옙占쏙옙 占쏙옙치 [占쏙옙占쏙옙占쏙옙 2018/11/12] + //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12] int m_nGlassDataPoint; int m_nBlockDataPoint; int m_nCellDataPoint; @@ -580,8 +534,8 @@ struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand { size_t m_nGlassLoadingCount; - emAOIProcStep m_ClientProcStep; //AOI, Review占쏙옙 占쏙옙占쏙옙 占쏙옙占� - emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)占쏙옙 처占쏙옙 占싹뤄옙 占쏙옙 占쏙옙占� + emAOIProcStep m_ClientProcStep; //AOI, Review가 보낸 명령 + emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 처리 완료 한 명령 }; class CgrmGlassRawData @@ -668,7 +622,7 @@ { if(pInfo == NULL || pData == NULL) return FALSE; - if(1) //new type //占쌨몌옙 占쏙옙 占쏙옙占쏙옙 크占썩에 占쏙옙占쏙옙占쏙옙占� + if(1) //new type //메모리 총 공간 크기에 상관없이 { //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE; diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor.cpp index ba9571d..20fe4ad 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor.cpp +++ b/ReviewSystem/ReviewSystem/ReviewProcessor.cpp @@ -233,11 +233,6 @@ m_strSaveImageUploadPath = strImagePath; } -void CReviewProcessor::SetReviewImagePath(const CString& strImagePath) -{ - m_strSaveImageReviewPath = strImagePath; -} - void CReviewProcessor::GetSaveImageBasePath( CString& strPath ) { strPath = m_strSaveImageBasePath; @@ -246,11 +241,6 @@ CString CReviewProcessor::GetUploadImagePath() { return m_strSaveImageUploadPath; -} - -CString CReviewProcessor::GetReviewUploadImagePath() -{ - return m_strSaveImageReviewPath; } void CReviewProcessor::SetRTMSUploadImagePath(const CString& strImagePath) diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor.h b/ReviewSystem/ReviewSystem/ReviewProcessor.h index dbfb2ff..89d785e 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor.h +++ b/ReviewSystem/ReviewSystem/ReviewProcessor.h @@ -174,8 +174,6 @@ void SetUploadImagePath(const CString& strImagePath); void SetRTMSUploadImagePath(const CString& strImagePath); - void SetReviewImagePath(const CString& strReviewImagePath); - //Plan吏꾪뻾媛� Count �몴湲� void SetPlanReviewCount(int ncount) { nPlanReviewCount = ncount; @@ -198,8 +196,6 @@ void GetSaveImageBasePath(CString& strPath); CString GetUploadImagePath(); CString GetRTMSUploadImagePath(); - - CString GetReviewUploadImagePath(); // Cell function @@ -269,7 +265,6 @@ // 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 移댁슫�듃(由щ럭 �룷�씤�듃 �닚�꽌) diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp index af864fc..52ad15b 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp @@ -88,7 +88,7 @@ int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex(); - // 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙 클占쏙옙.. + // 인덱스가 현재 마지막 인덱스 보다 클시.. if (nCurResultIdx > nEndResultIdx) { LeaveCriticalSection(&m_csUserCriticalSection); @@ -97,7 +97,7 @@ } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 + // 현재 결과데이터 저장 wsiResult.nWsi_ResultIndex = measureResut.nResultIndex; wsiResult.nResultCode = measureResut.nResultCode; @@ -138,8 +138,8 @@ // g_pLog->DisplayMessage(_T("[ReviewProcessor]JugementR [%d] JugementG [%d] JugementB [%d]"), wsiResult.nJugementR, wsiResult.nJugementG, wsiResult.nJugementB); // g_pLog->DisplayMessage(_T("[ReviewProcessor]RZoneHeight [%.03lf] GZoneHeight [%.03lf] BZoneHeight [%.03lf]"), wsiResult.dRZoneHeight, wsiResult.dGZoneHeight, wsiResult.dBZoneHeight); -// wsiResult.占쌩곤옙 占싹쇽옙占쏙옙= measureResut.nMultiShot; -// wsiResult.占쌩곤옙 占싹쇽옙占쏙옙= measureResut.nCurrentShotNumber; +// wsiResult.추가 하세요= measureResut.nMultiShot; +// wsiResult.추가 하세요= measureResut.nCurrentShotNumber; break; case 3: //BANK wsiResult.dRZoneHeight = measureResut.dRZoneHeight; @@ -147,14 +147,14 @@ wsiResult.dBZoneHeight = measureResut.dBZoneHeight; wsiResult.dDefectHeight = measureResut.dDefectHeight; wsiResult.nWsi_DefectType = measureResut.nDefectType; -// wsiResult.占쌩곤옙 占싹쇽옙占쏙옙= measureResut.nMultiShot; -// wsiResult.占쌩곤옙 占싹쇽옙占쏙옙= measureResut.nCurrentShotNumber; +// wsiResult.추가 하세요= measureResut.nMultiShot; +// wsiResult.추가 하세요= measureResut.nCurrentShotNumber; break; case 4: //CS wsiResult.dCSHeight = measureResut.dCSHeight; wsiResult.dDefectHeight = measureResut.dDefectHeight; wsiResult.nWsi_DefectType = measureResut.nDefectType; -// wsiResult.占쌩곤옙 占싹쇽옙占쏙옙= measureResut.nMultiShot; +// wsiResult.추가 하세요= measureResut.nMultiShot; break; } @@ -163,7 +163,7 @@ memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData)); - // 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌩곤옙 + // 결과 데이터 추가 SReviewResult *pProcessResult = NULL; if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime)) { @@ -173,10 +173,10 @@ pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙, 占쏙옙占쏙옙 占쏙옙占싸쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 저장 성공시, 리뷰 프로세서에 포인터 전달 if (pProcessResult) { - // 처占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 처리 쓰레드 수행 if (AddReviewProcessData(pProcessResult)==1) { g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); @@ -192,7 +192,7 @@ LeaveCriticalSection(&m_csUserCriticalSection); - // 占쏙옙占� 占쏙옙占쏙옙. + // 결과 갱신. m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult); return; @@ -238,7 +238,7 @@ int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex(); - // 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙 클占쏙옙.. + // 인덱스가 현재 마지막 인덱스 보다 클시.. if (nCurResultIdx > nEndResultIdx) { LeaveCriticalSection(&m_csUserCriticalSection); @@ -246,14 +246,14 @@ g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 + // 현재 결과데이터 저장 wsiUserResult.nWsi_ResultCode = measureResut.nResultCode; wsiUserResult.nWsi_Type = measureResut.nResultType; wsiUserResult.nWsi_SlopeWarn = measureResut.nXSlopeWarn; memcpy(wsiUserResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiUserResult.pWsi_ResultData)); - // 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌩곤옙 + // 결과 데이터 추가 SReviewResult *pProcessResult = NULL; if (pGlassResult->SetUserWsiResultData(nModuleIndex, nCurResultIdx, wsiUserResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime)) { @@ -263,10 +263,10 @@ pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙, 占쏙옙占쏙옙 占쏙옙占싸쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 저장 성공시, 리뷰 프로세서에 포인터 전달 if (pProcessResult) { - // 처占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 처리 쓰레드 수행 if (AddReviewProcessData(pProcessResult)==1) { g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); @@ -282,7 +282,7 @@ LeaveCriticalSection(&m_csUserCriticalSection); - // 占쏙옙占� 占쏙옙占쏙옙. + // 결과 갱신. m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult); return; @@ -337,7 +337,7 @@ int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex(); - // 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙 클占쏙옙.. + // 인덱스가 현재 마지막 인덱스 보다 클시.. if (nCurResultIdx > nEndResultIdx) { LeaveCriticalSection(&m_csUserCriticalSection); @@ -345,7 +345,7 @@ g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiMultiShotResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 + // 현재 결과데이터 저장 wsiResult.nWsi_ResultCode = measureResut.nResultCode; wsiResult.nWsi_Type = measureResut.nResultType; wsiResult.nWsi_SlopeWarn = measureResut.nXSlopeWarn; @@ -353,7 +353,7 @@ memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData)); - // 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌩곤옙 + // 결과 데이터 추가 SReviewResult *pProcessResult = NULL; if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime)) { @@ -363,10 +363,10 @@ pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙, 占쏙옙占쏙옙 占쏙옙占싸쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 저장 성공시, 리뷰 프로세서에 포인터 전달 if (pProcessResult) { - // 처占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 처리 쓰레드 수행 if (AddReviewProcessData(pProcessResult) == 1) { g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); @@ -382,7 +382,7 @@ LeaveCriticalSection(&m_csUserCriticalSection); - // 占쏙옙占� 占쏙옙占쏙옙. + // 결과 갱신. m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult); return; @@ -457,7 +457,7 @@ int nStartResultIdx = pReviewResult->GetStartSReviewResultIndex(); int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex(); - // 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙 클占쏙옙.. + // 인덱스가 현재 마지막 인덱스 보다 클시.. if (nCurResultIdx > nEndResultIdx) { LeaveCriticalSection(&m_csUserCriticalSection); @@ -465,7 +465,7 @@ g_pLog->DisplayMessage(_T("[ReviewProcessor]SetReviewResultData module[%d] point[%d] result[%d]"), nModuleIndex, nResultIndex, nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙譴占쏙옙占� 占쏙옙占쏙옙 + // 현재 결과이미지 저장 SReviewResult *pProcessResult = NULL; switch(GetReviewProcessStatus()) { @@ -509,10 +509,10 @@ break; } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙, 占쏙옙占쏙옙 占쏙옙占싸쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 저장 성공시, 리뷰 프로세서에 포인터 전달 if (pProcessResult) { - // 처占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 처리 쓰레드 수행 if (AddReviewProcessData(pProcessResult)==1) { g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); @@ -527,8 +527,8 @@ } LeaveCriticalSection(&m_csUserCriticalSection); - //占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙트 占쏙옙占쏙옙占쏙옙 占쏙옙占쌔뱄옙占쏙옙占쏙옙 占싣뤄옙 占쏙옙占쏙옙占쏙옙 占쏙옙타占쏙옙 占쌕쏙옙 占쏙옙占쏙옙占쏙옙표 占싫쏙옙占쏙옙 - // 占쏙옙호처占쏙옙 占십울옙占쏙옙 占싱곤옙 占쏙옙占쏙옙 + //만약 어느 한쪽이포인트 진행을 다해버리면 아래 구문을 안타서 다시 모터좌표 안쏴줌 + // 신호처리 필요함 이거 ㄱㄱ if (nCurResultIdx + 1== pReviewResult->GetSReviewResultCount()) { if (nModuleIndex == 0) @@ -542,7 +542,7 @@ if (bLeftGantryReviewDone&&bRightGantryReviewDone) { - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); switch (GetReviewProcessStatus()) @@ -567,13 +567,13 @@ } else if(m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo()->GetRcpSchedulingInfo()->GetSingleGantryPath()>0) { - //20210302 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸곤옙占쏙옙 占쏙옙트占쏙옙占쏙옙 占싹뤄옙占� 占쏙옙占승울옙占쏙옙 - //占쏙옙占쏙옙占쏙옙 占쌔야듸옙占쏙옙占쏙옙 Review 占쏙옙占쏙옙 Count 체크 占싹댐옙 占쏙옙占쏙옙占쏙옙占� 占싼곤옙트占쏙옙 占쏙옙占쏙옙 200占쏙옙占쏙옙占쏙옙 占쏙옙占쌩댐옙 占쏙옙占쏙옙 占쌩삼옙 - //占쌓뤄옙占쏙옙 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙처占쏙옙 占싹울옙 占쏙옙占쏙옙占싹듸옙占쏙옙 占쌕뀐옙森占� CHM + //20210302 싱글 겐트리 사용시 모터 로직상 두개의 겐트리가 완료된 상태에서 + //시작을 해야됨으로 Review 에서 Count 체크 하는 기능으로 한겐트리 사용시 200개에서 멈추는 현상 발생 + //그래서 싱글 겐트리 사용시 예외처리 하여 동작하도록 바꿔야됨 CHM g_pLog->DisplayMessage(_T("[ReviewProcessor]Single GantryPath Use"), nModuleIndex); if (bLeftGantryReviewDone || bRightGantryReviewDone) { - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); switch (GetReviewProcessStatus()) @@ -601,7 +601,7 @@ } - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙... + // 마지막 포인트까지 왔고, 리뷰할 결과가 남아 있으면... if(nCurResultIdx==nEndResultIdx && nCurResultIdx+1 < pReviewResult->GetSReviewResultCount()) { @@ -624,8 +624,8 @@ pReviewResult->SetStartSReviewResultIndex(nStartResultIdx); pReviewResult->SetEndSReviewResultIndex(nEndResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + // 나머지 포인트 리뷰 수행하자. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. if (bLeftGantryReviewDone&&bRightGantryReviewDone) { @@ -685,7 +685,7 @@ } } - // 占쏙옙占� 占쏙옙占쏙옙. + // 결과 갱신. m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, m_nReviewPlanIndex); return; @@ -729,7 +729,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -737,7 +737,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckReviewComplete()) { // check motor ready! @@ -763,7 +763,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -771,7 +771,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckUserComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("User Last Point Complete! ")); @@ -796,7 +796,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PLC ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PLC ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -804,7 +804,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckReflowComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("Reflow Last Point Complete! ")); @@ -829,7 +829,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -837,7 +837,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckWsiComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Last Point Complete! ")); @@ -863,7 +863,7 @@ g_pLog->DisplayMessage(_T("PostProcessMeasureResult[%d]"),nThreadIdx); if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -871,7 +871,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckMeasureComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("Measure Last Point Complete! ")); @@ -900,7 +900,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -908,7 +908,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckWsiReflowComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Reflow Last Point Complete! ")); @@ -932,7 +932,7 @@ { if (m_pRP2P==NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult==NULL || pSequenceProcessor==NULL) @@ -940,7 +940,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckWsiUserComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Last Point Complete! ")); @@ -965,7 +965,7 @@ { if (m_pRP2P == NULL) return 0; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 확占쏙옙 占쏙옙 PCControl ReviewEnd 占쏙옙占쏙옙 + // 마지막 포인트인지 확인 후 PCControl ReviewEnd 전송 CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult(); CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor(); if (pGlassResult == NULL || pSequenceProcessor == NULL) @@ -973,7 +973,7 @@ return 1; } - // 占쏙옙占쏙옙확占쏙옙 + // 조건확인 if (pGlassResult->CheckWsiMultiShotComplete()) { m_pRP2P->IRP2P_DisplayMessage(_T("WsiMultiShot Last Point Complete! ")); @@ -1138,23 +1138,23 @@ return ReviewResult_Process_Fail; } - // Snap 占시곤옙 占쏙옙占쏙옙. + // Snap 시간 저장. CTime snapTime = CTime::GetCurrentTime(); pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond()); // snap_time - // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占� + // 리뷰 업로드 이미지 파일 이름 만들기 CString strImageFileName = _T(""); if (MakeReviewImageFileName(pReviewResult)==FALSE) { } - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙 + //결과파일 공유 메모리 리뷰 이미지 이름 및 좌표 채워주기 if(!UpdateMemoryReviewPlan(pReviewResult)) m_pRP2P->IRP2P_DisplayMessage(_T("[ReviewPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2); - // 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 + // 로컬 이미지 저장 파일 이름 pReviewResult->strImgFileName = m_strSaveImageBasePath + _T("\\") +pReviewResult->strImgFileName; pReviewResult->nOpticType = 1; @@ -1178,7 +1178,7 @@ // UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); //if (nSize > 0) // m_pRP2P->IRP2P_DisplayMessage(_T("Backup Review Image Save Success! Size: %d byte [%s]"), nSize, pReviewResult->strUploadImgFileName); - // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 20190917 chm + // 업로드 이미지 경로 수정 20190917 chm strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName); nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); m_pRP2P->IRP2P_DisplayMessage(_T("Backup Review Image Save Success! Size: %d byte [%s]"), nSize, strPath); @@ -1193,13 +1193,13 @@ { m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Fail [%s] index[%d]"), strRTMSPath, pReviewResult->nDefectIdx); } - else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx); //taek 210128 占쌈듸옙 占쏙옙占쏙옙占쏙옙 占쌈시뤄옙 占싸깍옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx); //taek 210128 속도 문제로 임시로 로그 남기지 않음 } if (nSize > 0) { int aoiindex = CDitGlassRawClient::GetInstance()->GetDefectData(pReviewResult->nDefectidx2)->m_nDefectIdx; - m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s] index[%d] AOI NO[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx, aoiindex); //taek 210128 占쌈듸옙 占쏙옙占쏙옙占쏙옙 占쌈시뤄옙 占싸깍옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s] index[%d] AOI NO[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx, aoiindex); //taek 210128 속도 문제로 임시로 로그 남기지 않음 //m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s]"), nSize, pReviewResult->strUploadImgFileName); } else @@ -1235,7 +1235,7 @@ const CRsRcpReviewInfo* psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo(); if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL")); - if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占� + if(psRcpReviewInfo->m_bDefocusUse) //190819chm 디포커스 알람 사용 { if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C) { @@ -1337,12 +1337,12 @@ return ReviewResult_Process_Fail; } - // Snap 占시곤옙 占쏙옙占쏙옙. + // Snap 시간 저장. CTime snapTime = CTime::GetCurrentTime(); pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond()); // snap_time - // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占� + // 리뷰 업로드 이미지 파일 이름 만들기 CString strImageFileName = _T(""); if (MakeUserImageFileName(pReviewResult)==FALSE) { @@ -1355,7 +1355,7 @@ m_pRP2P->IRP2P_DisplayMessage(_T("[UserPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2); - //// 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 + //// 로컬 이미지 저장 파일 이름 //strImageFileName.Format(_T("ModuleIdx[%d]_PointIdx[%d]_Zoom[%d]"), pReviewResult->nModuleIdx, pReviewResult->nResultIdx, pReviewResult->nZoomIdx); //pReviewResult->strImgFileName = strImageFileName; @@ -1374,10 +1374,10 @@ UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte"), nSize); - //uploadImage.SaveImage(strPath, 40); // 화占쏙옙 60% 150k + //uploadImage.SaveImage(strPath, 40); // 화질 60% 150k if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart) { - // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 20190917 chm + // 업로드 이미지 경로 수정 20190917 chm //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName); strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName); nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); @@ -1399,7 +1399,7 @@ const CRsRcpReviewInfo* psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo(); if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL")); - if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占� + if(psRcpReviewInfo->m_bDefocusUse) //190819chm 디포커스 알람 사용 { if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C) { @@ -1457,7 +1457,7 @@ int nTestMode = FALSE; - //占시뱄옙 占쏙옙占쏙옙占쏙옙占쏙옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 20190827 chm + //시뮬 돌릴려는 이미지 파일 선택 20190827 chm if(nTestMode){ Sleep(500); CString strPathName; @@ -1479,12 +1479,12 @@ return ReviewResult_Process_Fail; } - // Snap 占시곤옙 占쏙옙占쏙옙. + // Snap 시간 저장. CTime snapTime = CTime::GetCurrentTime(); pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond()); // snap_time - // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占� + // 리뷰 업로드 이미지 파일 이름 만들기 CString strImageFileName = _T(""); if (MakeReflowImageFileName(pReviewResult)==FALSE) { @@ -1500,8 +1500,8 @@ } - reflowParam reParam; //Reflow 占쏙옙占쏙옙 占쏙옙占쏙옙 - reflowResult reResult;//Reflow 占쏙옙占� 占쏙옙占쏙옙 + reflowParam reParam; //Reflow 연산 정보 + reflowResult reResult;//Reflow 결과 정보 ////////////////////////////////////////////////////////////////////////////////////////////// BOOL btFlag =0; @@ -1513,10 +1513,10 @@ CCHImageData tempImage; tempImageOrigin.CopyImageFrom(pImageData); - if(pReviewResult->nReflow_Side==7) // 占쏙옙占쏙옙 占쏙옙占쏙옙 + if(pReviewResult->nReflow_Side==7) // 바텀 연산 { btFlag=1; - CCHImageProcess::ImageRotate(pImageData,&tempImage,135);//占쏙옙占쏙옙 占싱뱄옙占쏙옙占쏙옙 Right 회占쏙옙 占쏙옙占쏙옙 Right 占쏙옙占쏙옙 占쏙옙占쏙옙 + CCHImageProcess::ImageRotate(pImageData,&tempImage,135);//바텀 이미지를 Right 회전 시켜 Right 연산 실행 pImageData = &tempImage; //reParam.nImageWidth = 2048; //reParam.nImageHeight = 2432; @@ -1626,9 +1626,9 @@ CCHImageData tmepData2; if(btFlag==1){ - CCHImageProcess::ImageRotate(pImageData,&tmepData2,135);//Right 占쏙옙占쏙옙占쏙옙 占쌕쏙옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙占쏙옙 + CCHImageProcess::ImageRotate(pImageData,&tmepData2,135);//Right 연산후 다시 이미지 돌리기 pImageData= &tmepData2; - //pImageData->SaveImage(_T("D:\\Testafter.bmp"));//Test 占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 + //pImageData->SaveImage(_T("D:\\Testafter.bmp"));//Test 를 위한 bmp 저장 } @@ -1653,17 +1653,17 @@ UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte"), nSize); - //uploadImage.SaveImage(strPath, 40); // 화占쏙옙 60% 150k + //uploadImage.SaveImage(strPath, 40); // 화질 60% 150k if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart) { - // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 20190917 chm + // 업로드 이미지 경로 수정 20190917 chm //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName); strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName); nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); m_pRP2P->IRP2P_DisplayMessage(_T("Upload Reflow Image Save Success! Size: %d byte"), nSize); - //占시뮬듸옙占쏙옙占쏙옙 占싱뱄옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 20190927chm + //시뮬돌리고 이미지 자동으로 열어줌 20190927chm if(nTestMode) { CString csParam; @@ -1683,7 +1683,7 @@ m_pRP2P->IRP2P_DisplayMessage(_T("Upload Reflow Image Save Fail![%s]"), pReviewResult->strUploadImgFileName); } - //占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙占쏙옙트 + //공유메모리 업데이트 if(!UpdateMemoryReflowPlan(pReviewResult)) m_pRP2P->IRP2P_DisplayMessage(_T("[ReflowPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2); @@ -1896,7 +1896,7 @@ -//占쏙옙占싹몌옙 181227 cmark +//파일명 181227 cmark BOOL CReviewProcessor_CPJT::MakeReviewImageFileName(SReviewResult* pReviewResult) { if (m_pRP2P==NULL || pReviewResult==NULL) return FALSE; @@ -1909,7 +1909,7 @@ if(GetReviewProcessStatus() == ReviewProcessStatus_ReviewStart) { - // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占� '*' 占쏙옙占� 占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙) + // [2017:6:5]-[WEZASW] : Review Image 파일명에 '*' 사용 금지.(예외처리) if (pReviewResult->strDefectCode.Compare(_T("***")) == 0) strDefectCodeTemp = _T("DC"); else @@ -2000,24 +2000,23 @@ snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond()); // snap_time - // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占� 占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占�) + // [2017:4:10]-[WEZASW] : 고객사 요청에 의한 bmp 파일 추가 저장. (임시사용) pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp"); strFileName += _T(".jpg"); pReviewResult->strUploadImgFileName = strFileName; pReviewResult->strImgFileName = strFileName; - pReviewResult->strImgFilePath = GetReviewUploadImagePath(); return TRUE; } int CReviewProcessor_CPJT::ProcessWSIReflow(int nThreadIdx, SReviewResult* pReviewResult) { - // [2016:11:15]-[WEZASW] : 占쏙옙占쏙옙 占십울옙 + // [2016:11:15]-[WEZASW] : 점검 필요 if(!UpdateMemoryWsiReflowPlan(pReviewResult)) m_pRP2P->IRP2P_DisplayMessage(_T("[WsiReflowPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2); - // wsi占쏙옙 return 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 [6/20/2017 bhs] + // wsi용 return 값으로 수정 [6/20/2017 bhs] return WsiResultSuccess; } @@ -2061,7 +2060,7 @@ if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart) { - // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占� '*' 占쏙옙占� 占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙) + // [2017:6:5]-[WEZASW] : Review Image 파일명에 '*' 사용 금지.(예외처리) if (pReviewResult->strDefectCode.Compare(_T("***")) == 0) strDefectCodeTemp = _T("DC"); else @@ -2155,13 +2154,12 @@ // strFileName += pReviewResult->strSnapTime; // } - // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占� 占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占�) + // [2017:4:10]-[WEZASW] : 고객사 요청에 의한 bmp 파일 추가 저장. (임시사용) pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp"); strFileName += _T(".jpg"); pReviewResult->strUploadImgFileName = strFileName; pReviewResult->strImgFileName = strFileName; - pReviewResult->strImgFilePath = GetReviewUploadImagePath(); return TRUE; } @@ -2232,13 +2230,13 @@ void CReviewProcessor_CPJT::LoadAoiImage(const CString& strGlassID, int nOpticType, int nPosX, int nPosY, CCHImageData* pAoiDark, CCHImageData *pAoiBright) { - // 3. 占싯삼옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 찾占쏙옙 + // 3. 검사 결함 이미지 찾기 CString strAoiDarkPath = _T(""); CString strAoiBrightPath = _T(""); FindAoiDefectImagePath(strGlassID, nOpticType, nPosX, nPosY, strAoiDarkPath, strAoiBrightPath); - // Dark, Bright 占쏙옙占� 찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs] + // Dark, Bright 모두 찾기 위해 주석처리 [2017.7.1 bhs] // Dark image //if(nOpticType & DEFECT_OPTIC_DARK) { @@ -2283,7 +2281,7 @@ CFileFind finder; CString strSearchPath = _T(""); - // Dark, Bright 占쏙옙占� 찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs] + // Dark, Bright 모두 찾기 위해 주석처리 [2017.7.1 bhs] //if (nOpticType & DEFECT_OPTIC_DARK) { // Dark field @@ -2357,7 +2355,7 @@ processTimer.End(); } - // 4-3. 占쏙옙占쏙옙占쏙옙占� 占쏙옙占� + // 4-3. 리뷰평균 밝기 double dAverageGray = 0.0; if (CCHImageProcess::ImageAverage(&bandImage, dAverageGray)==1) { @@ -2394,14 +2392,14 @@ CCHImageData pReviewCam; CCHImageData tempImage1; - // 占쏙옙占쏙옙占쏙옙 占싱뱄옙占쏙옙 회占쏙옙 + // 설정값 이미지 회전 if (m_nImageRotate > 0) { tempImage1.CopyImageFrom(pReviewCamSource); CCHImageProcess::ImageRotate(pReviewCamSource, &tempImage1, (90.0*m_nImageRotate)); } - // 占쏙옙占쏙옙占쏙옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 + // 설정값 이미지 반전 if (m_nimageFlip > 0) { if(m_nImageRotate > 0) @@ -2438,7 +2436,7 @@ // set total size * scale int nTotalWidth = int(m_nReviewResizeWidth * m_dReviewImageScale + 0.5); - // 20170817 smok Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싣뤄옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙 + // 20170817 smok Dark, Bright 이미지가 리뷰 이미지 아래에 붙도록 수정 int nTotalHeight = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5 + max(pAoiDark2.GetHeight(), pAoiBright2.GetHeight())); int nTotalHeight2 = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5); @@ -2464,14 +2462,14 @@ double dRulerGab = 20.0 / m_dReviewImageScale; double dScaleResolution = pReviewResult->dMeasureResolution / m_dReviewImageScale; - //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127 占쏙옙占� X + //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127 사용 X // draw text string DrawDefectInfo(&memDC, findResult, pReviewResult); //DrawAoiImage(&memDC, &pAoiDark2, &pAoiBright2, &pAoiDark2, &pAoiBright2, nAoiWidth, nAoiHeight); - // draw line 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 + // draw line 히팅 검증용 //DrawCenterLine(&memDC, nTotalWidth, nTotalHeight); // DrawCenterRect(&memDC, nTotalWidth, nTotalHeight, 100, 100, pReviewResult->dMeasureResolution); @@ -2499,7 +2497,7 @@ nWidthDark = nHeightDark = nWidthBright = nHeightBright = 0; - // 20170817 smok Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싣뤄옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙 + // 20170817 smok Dark, Bright 이미지가 리뷰 이미지 아래에 붙도록 수정 // dark CCHImageData subImage; if(pAoiDark!=NULL && pAoiDark->GetImageExist()) @@ -2580,11 +2578,11 @@ int nTotalWidth = int(m_nReviewResizeWidth * m_dReviewImageScale + 0.5); int nTotalHeight = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5); - // Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙, Dark 占쏙옙, Bright 占싣뤄옙 - 占쏙옙占쏙옙占� 占쏙옙청[2017.6.30 bhs] + // Dark, Bright 이미지가 나란히 붙도록 수정, Dark 위, Bright 아래 - 고객사 요청[2017.6.30 bhs] //int nX = nTotalWidth - nWidth; //int nY = nTotalHeight - (nHeight * 2); - // 20170817 smok Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싣뤄옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙 + // 20170817 smok Dark, Bright 이미지가 리뷰 이미지 아래에 붙도록 수정 int nX = 0; int nY = nTotalHeight; pAoiDark1->ShowImage(pDC->m_hDC, nX, nY, pAoiDark1->GetWidth(), pAoiDark1->GetHeight(), 0, 0); @@ -2592,7 +2590,7 @@ //pAoiDark1->ShowImage(pDC->m_hDC, nTotalWidth - nWidth, nTotalHei4ght-nHeight, pAoiDark1->GetWidth(), pAoiDark1->GetHeight(), 0, 0); //pAoiBright1->ShowImage(pDC->m_hDC, nTotalWidth - nWidth, nTotalHeight-nHeight, pAoiBright1->GetWidth(), pAoiBright1->GetHeight(), 0, 0); - // 占싯삼옙 占싱뱄옙占쏙옙 占쌩앙울옙 화占쏙옙표 표占쏙옙 - 占쏙옙占쏙옙占� 占쏙옙청 [2017.6.30 bhs] + // 검사 이미지 중앙에 화살표 표시 - 고객사 요청 [2017.6.30 bhs] CFont Font; VERIFY(Font.CreateFont( 50, // nHeight @@ -2613,7 +2611,7 @@ CFont *pOldFont = pDC->SelectObject(&Font); pDC->SetTextColor(RGB(255,0,0)); - CString strArrow = _T("占쏙옙"); + CString strArrow = _T("↗"); CSize size = pDC->GetTextExtent(strArrow); int nCenterX = nX + (nWidth / 2) - size.cx; int nCenterY = nY + (nHeight / 2)/* + (size.cy / 2)*/; @@ -2816,7 +2814,7 @@ else { wchar_t pstrPrefix[128] ={}; - //Zone 占싼뱄옙 210127 + //Zone 넘버 210127 int nValue = 0; for (int i = 15; i >= 0; i--) { @@ -2827,8 +2825,8 @@ } //taek 210127 - //占쏙옙占쏙옙占쏙옙占� 占쏙옙표占쏙옙 y 占쏙옙 *-1占쏙옙 占쏙옙占쏙옙 - //占쏙옙占쏙옙 ID, 占싯삼옙 카占쌨띰옙 占쏙옙占쏙옙, 占싯삼옙 Camera 占쏙옙占쏙옙 : (? ) 캠 ?, Cell ID, Review Cam 占쏙옙占쏙옙 : Gantry 占쏙옙占쏙옙, 占쏙옙占쏙옙 Size, 占쏙옙占쏙옙 Zone 占쏙옙占쏙옙, Stak Flag, CODE 占쏙옙占쏙옙, 占쏙옙표 占쏙옙占쏙옙 + //결과파일 좌표값 y 는 *-1을 하자 + //설비 ID, 검사 카메라 정보, 검사 Camera 정보 : (? ) 캠 ?, Cell ID, Review Cam 정보 : Gantry 정보, 검출 Size, 검출 Zone 정보, Stak Flag, CODE 정보, 좌표 정보 // PPID // strValue.Format(_T("Tool[%s].Recipe[%s].ScanNo[%d/%d].Time[%4d/%2d/%2d_%d:%d:%d].MaxGray[%d].RefGray[%d].REVCnt[%d]"),pReviewResult->strEquipID,pGlassResult->m_strPPID,pReviewResult->nAOIScanIdx,0,snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), @@ -3043,7 +3041,7 @@ if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart) { - // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占� '*' 占쏙옙占� 占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙) + // [2017:6:5]-[WEZASW] : Review Image 파일명에 '*' 사용 금지.(예외처리) if (pReviewResult->strDefectCode.Compare(_T("***")) == 0) strDefectCodeTemp = _T("DC"); else @@ -3120,7 +3118,7 @@ // strFileName += pReviewResult->strSnapTime; // } - // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占� 占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占�) + // [2017:4:10]-[WEZASW] : 고객사 요청에 의한 bmp 파일 추가 저장. (임시사용) pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp"); strFileName += _T(".jpg"); @@ -3166,7 +3164,7 @@ int nStartResultIdx = pReviewResult->GetStartSReviewResultIndex(); int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex(); - // 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙 클占쏙옙.. + // 인덱스가 현재 마지막 인덱스 보다 클시.. if (nCurResultIdx > nEndResultIdx) { LeaveCriticalSection(&m_csUserCriticalSection); @@ -3174,7 +3172,7 @@ g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 + // 현재 결과데이터 저장 wsiResult.nWsi_ResultCode = measureResut.nResultCode; wsiResult.dWsi_DamDistance = measureResut.dDamDistance; @@ -3184,7 +3182,7 @@ } //memcpy(wsiResult.nWsi_pReflowResultData, measureResut.pReflowResultData, sizeof(wsiResult.nWsi_pReflowResultData)); - // 占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쌩곤옙 + // 결과 데이터 추가 SReviewResult *pProcessResult = NULL; if (pGlassResult->SetWsiReflowResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime)) { @@ -3193,10 +3191,10 @@ pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx); } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙, 占쏙옙占쏙옙 占쏙옙占싸쇽옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 저장 성공시, 리뷰 프로세서에 포인터 전달 if (pProcessResult) { - // 처占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 처리 쓰레드 수행 if (AddReviewProcessData(pProcessResult)==1) { g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Wsi Reflow Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); @@ -3212,7 +3210,7 @@ LeaveCriticalSection(&m_csUserCriticalSection); - // 占쏙옙占� 占쏙옙占쏙옙. + // 결과 갱신. m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, 5); return; @@ -3221,7 +3219,7 @@ return; } -//0129cmark 占쏙옙占쏙옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙표占쏙옙 占쏙옙占쏙옙 占쏙옙표占쏙옙 占쏙옙占쏙옙 +//0129cmark 원점 위치별 센터 좌표를 원점 좌표로 변형 double CReviewProcessor_CPJT::GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection){ double nResultPosX=0.0; @@ -3230,60 +3228,60 @@ // CornerCutDirection { CLeftTop=0, CRightTop, CLeftBottom, CRightBottom }; // OriginDirection { OLeftTop=0, ORightTop, OLeftBottom, ORightBottom }; - if(nOriginDirection==RPOLeftTop){//占쏙옙占쏙옙占쏙옙占승삼옙 + if(nOriginDirection==RPOLeftTop){//오리진좌상 - if(nCornercut == RPCLeftTop)//占승삼옙 + if(nCornercut == RPCLeftTop)//좌상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; } - else if(nCornercut == RPCRightTop)//占쏙옙占� + else if(nCornercut == RPCRightTop)//우상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCLeftBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCLeftBottom)//좌하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; } - else if(nCornercut == RPCRightBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCRightBottom)//우하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2 + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2 + dPosY; } } - else if(nOriginDirection==RPORightTop){//占쏙옙占쏙옙占쏙옙占쏙옙占� + else if(nOriginDirection==RPORightTop){//오리진우상 - if(nCornercut == RPCLeftTop)//占승삼옙 + if(nCornercut == RPCLeftTop)//좌상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCRightTop)//占쏙옙占� + else if(nCornercut == RPCRightTop)//우상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; } - else if(nCornercut == RPCLeftBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCLeftBottom)//좌하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCRightBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCRightBottom)//우하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; } } - else if(nOriginDirection==RPOLeftBottom){//占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 + else if(nOriginDirection==RPOLeftBottom){//오리진좌하 - if(nCornercut == RPCLeftTop)//占승삼옙 + if(nCornercut == RPCLeftTop)//좌상 { //210402 /* nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; @@ -3292,13 +3290,13 @@ nResultPosX = double(GLASS_SIZE_WIDTH) / 2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY; } - else if(nCornercut == RPCRightTop)//占쏙옙占� + else if(nCornercut == RPCRightTop)//우상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCLeftBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCLeftBottom)//좌하 { //210402 /*nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; @@ -3306,33 +3304,33 @@ nResultPosX = double(GLASS_SIZE_WIDTH) / 2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY; } - else if(nCornercut == RPCRightBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCRightBottom)//우하 { nResultPosX = double(GLASS_SIZE_WIDTH) / 2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY; } } else if (nOriginDirection==RPORightBottom) - {//占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙 + {//오리진우하 - if(nCornercut == RPCLeftTop)//占승삼옙 + if(nCornercut == RPCLeftTop)//좌상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCRightTop)//占쏙옙占� + else if(nCornercut == RPCRightTop)//우상 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; } - else if(nCornercut == RPCLeftBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCLeftBottom)//좌하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY; } - else if(nCornercut == RPCRightBottom)//占쏙옙占쏙옙 + else if(nCornercut == RPCRightBottom)//우하 { nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX; nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY; @@ -3357,7 +3355,7 @@ CString strFileName = _T(""); CString strDefectCodeTemp = _T(""); - // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占� '*' 占쏙옙占� 占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙) + // [2017:6:5]-[WEZASW] : Review Image 파일명에 '*' 사용 금지.(예외처리) if (pReviewResult->strDefectCode.Compare(_T("***")) == 0) strDefectCodeTemp = _T("DC"); else @@ -3421,31 +3419,24 @@ { if(pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙 + //결과파일 공유 메모리 리뷰 이미지 이름 및 좌표 채워주기 CDitGlassRawClient *pDitGlassRawCleint = CDitGlassRawClient::GetInstance(); if(pDitGlassRawCleint->isConnect() == TRUE) { _grmDefectData* pSharedDefect = pDitGlassRawCleint->GetDefectData(pReviewResult->nDefectidx2); _grmDefectReviewData * pSharedDefectReview = &pSharedDefect->m_ReviewDefect; - _grmGlassData* pSharedGlassData = pDitGlassRawCleint->GetGlassData(); //size_t CharactersConverted; //wcstombs_s(&CharactersConverted, pSharedDefectReview->m_strRevImageName, pReviewResult->strImgFileName, _TRUNCATE); strcpy(pSharedDefectReview->m_strRevImageName,pReviewResult->strImgFileName.MakeLower()); - //taek 210624 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙 占쏙옙占쌔댐옙. - strcpy(pSharedDefectReview->m_strRevImagePath,pReviewResult->strImgFilePath.MakeLower()); - - strcpy(pSharedGlassData->m_strAlignFirst, m_strReviewFirst.MakeLower()); - strcpy(pSharedGlassData->m_strAlignSecond, m_strReviewSecned.MakeLower()); - - pSharedDefectReview->m_nPlanType = ditRaw::RPT_Review; //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占�) + pSharedDefectReview->m_nPlanType = ditRaw::RPT_Review; //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(외부 로컬 리뷰 명령) pSharedDefectReview->m_nResultCode = 1; //0:None, 1:Success pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; - //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS 占쏙옙占쌔울옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싣니몌옙 占쏙옙占쏙옙占쏙옙 占싹댐옙 占심뤄옙 taek 210128 + //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS 기준에 따라 통합 관리면 요거 아니면 나눠서 하는 걸로 taek 210128 pSharedDefectReview->m_nModuleIndex = pReviewResult->nModuleIdx; pSharedDefectReview->m_nMagnificIndex = 20; pSharedDefectReview->m_fManification =pReviewResult->dMagnification; @@ -3459,11 +3450,11 @@ BOOL CReviewProcessor_CPJT::UpdateMemoryUserPlan( SReviewResult* pReviewResult ) { - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙 + //결과파일 공유 메모리 리뷰 이미지 이름 및 좌표 채워주기 CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance(); if(pDitRawClient->isConnect() == TRUE) { - int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow 占쏙옙 占싯삼옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占실기에 占쏙옙占쏙옙 카占쏙옙트占쏙옙占쏙옙 占쏙옙占신놂옙 큰占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌍댐옙 + int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow 는 검사 디펙 이후 생성되기에 디펙 카운트보다 같거나 큰값을 가지고 있다 if(pReviewResult->nDefectIdx <nDefectCount) { return FALSE; @@ -3476,16 +3467,14 @@ strcpy(pSharedDefectReview->m_strRevImageName,pReviewResult->strImgFileName); - pSharedDefectReview->m_nPlanType = ditRaw::RPT_User; //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占�) + pSharedDefectReview->m_nPlanType = ditRaw::RPT_User; //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(외부 로컬 리뷰 명령) pSharedDefectReview->m_nResultCode = 1; //0:None, 1:Success pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; - pSharedDefect->m_nShotIdx = pReviewResult->nResultIdx; pSharedDefectReview->m_nModuleIndex; - pSharedDefect->m_nModelIdx = pReviewResult->nModuleIdx; pSharedDefectReview->m_nMagnificIndex = pReviewResult->dMagnification; pSharedDefectReview->m_fManification = pReviewResult->dMagnification; pSharedDefectReview->m_fManificResoultion = pReviewResult->dMagnification; - m_pRP2P->IRP2P_DisplayMessage(_T("[占쏙옙占쏙옙占쌨몌옙占쏙옙占쏙옙]占싸듸옙占쏙옙[%d]占쏙옙占싹몌옙[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName); + m_pRP2P->IRP2P_DisplayMessage(_T("[공유메모리접근]인덱스[%d]파일명[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName); } @@ -3495,7 +3484,7 @@ BOOL CReviewProcessor_CPJT::UpdateMemoryReflowPlan( SReviewResult* pReviewResult ) { if(pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占� 채占쏙옙 占쌍깍옙 + //결과파일 공유 메모리에 결과 채워 넣기 CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance(); //int nEqpID = m_pSP2P->ISP2P_System_GetSystemInfo()->m_nMachineType; CString strCellID = _T(""); @@ -3517,7 +3506,7 @@ nReflowjuge=1; } - // 占쏙옙占쏙옙占� 占쏙옙청占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙. 0,1 Position占쏙옙 Pass + // 고객사 요청으로 수정함. 0,1 Position은 Pass else if(nReflowjuge == 3 || nReflowjuge == 2) { m_pRP2P->IRP2P_DisplayMessage(_T("[ReflowResult] Reflow Judge Is No OverFlow %d"),nReflowjuge); @@ -3536,7 +3525,7 @@ nReflowjuge=0; } - //0:None, // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side + //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side if(pReviewResult->nReflow_CellIndex > 7) { pReviewResult->nReflow_CellIndex = 0; @@ -3553,7 +3542,7 @@ if(pDitRawClient->isConnect() == TRUE) { - int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow 占쏙옙 占싯삼옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占실기에 占쏙옙占쏙옙 카占쏙옙트占쏙옙占쏙옙 占쏙옙占신놂옙 큰占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌍댐옙 + int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow 는 검사 디펙 이후 생성되기에 디펙 카운트보다 같거나 큰값을 가지고 있다 if(pReviewResult->nDefectidx2 <nDefectCount) { return FALSE; @@ -3568,11 +3557,11 @@ pSharedDefectReview->m_nPlanType = ditRaw::RTP_Reflow; pSharedDefectReview->m_nReflow_ResultCode = pReviewResult->nReflow_Result;// pReviewResult->nReflow_Result; - //0:None, // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side + //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side //pSharedDefectReview->m_fReflow_LinePosData; pSharedDefectReview->m_nReflow_Side = pReviewResult->nReflow_Side; pSharedDefectReview->m_nReflow_InspectionMode = 0; - m_pRP2P->IRP2P_DisplayMessage(_T("[占쏙옙占쏙옙占쌨몌옙占쏙옙占쏙옙]占싸듸옙占쏙옙[%d]占쏙옙占싹몌옙[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName); + m_pRP2P->IRP2P_DisplayMessage(_T("[공유메모리접근]인덱스[%d]파일명[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName); } return TRUE; @@ -3582,7 +3571,7 @@ { if(pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占� 채占쏙옙 占쌍깍옙 + //결과파일 공유 메모리에 결과 채워 넣기 CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance(); if(pDitGlassRawClient->isConnect() == TRUE) @@ -3599,7 +3588,7 @@ pSharedDefectReview->m_nPlanType = ditRaw::RTP_WSI; pSharedDefectReview->m_nWsi_ResultCode=pReviewResult->nWsi_ResultCode; //0:None, 1:Success - pSharedDefectReview->m_nWsi_Type = 2;/* nWSIType; // 占쌉몌옙 / 占쏙옙占쏙옙 //wsi 占쏙옙占쏙옙 */ + pSharedDefectReview->m_nWsi_Type = 2;/* nWSIType; // 함몰 / 돌기 //wsi 진행 */ pSharedDefectReview->m_fWsi_ResultData[0]= pReviewResult->nWsi_DefectType; // 0:normal 1:metal 2:huge 3:diffuse 4:trashy pSharedDefectReview->m_fWsi_ResultData[1]=(float)(nWSIheight/1000.0); pSharedDefectReview->m_fWsi_ResultData[2]=(float)(nWSIWidth/1000.0); // 0:Type, 1:Height, 2:Width @@ -3609,7 +3598,7 @@ pSharedDefectReview->m_fWsi_ResultData[6] = pReviewResult->dBZoneHeight; pSharedDefectReview->m_strWsi_2DImageFilename; pSharedDefectReview->m_strWsi_3DImageFilename; - pSharedDefectReview->m_fWsiManification = 20;//20占쏙옙 占쏙옙占쏙옙 + pSharedDefectReview->m_fWsiManification = 20;//20배 고정 pSharedDefectReview->m_dWsiMmMotorX=pReviewResult->dTargetMotorX; pSharedDefectReview->m_dWsiMmMotorY=pReviewResult->dTargetMotorY; @@ -3624,7 +3613,7 @@ BOOL CReviewProcessor_CPJT::UpdateMemoryWsiReflowPlan( SReviewResult* pReviewResult ) { if(pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占� 채占쏙옙 占쌍깍옙 + //결과파일 공유 메모리에 결과 채워 넣기 CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance(); @@ -3638,13 +3627,13 @@ /* pPacket->GetInt(0) = Index - pPacket->GetInt(1) = Wsi 占쏙옙占쏙옙 占쏙옙占� - pPacket->GetInt(2) = A占쏙옙 占쏙옙占쏙옙 占쏙옙占� (1 占쏙옙占쏙옙 0 占쏙옙占쏙옙) - pPacket->GetInt(3) = B占쏙옙 占쏙옙占쏙옙 占쏙옙占� - pPacket->GetInt(4) = C占쏙옙 占쏙옙占쏙옙 占쏙옙占� - pPacket->GetInt(5) = D占쏙옙 占쏙옙占쏙옙 占쏙옙占� - pPacket->GetInt(6) = Review占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占� PointIndex - pPacket->GetDouble(0) = 占쏙에占쏙옙 Monomo占쏙옙占쏙옙占쏙옙 占신몌옙 + pPacket->GetInt(1) = Wsi 측정 결과 + pPacket->GetInt(2) = A존 판정 결과 (1 성공 0 실패) + pPacket->GetInt(3) = B존 판정 결과 + pPacket->GetInt(4) = C존 판정 결과 + pPacket->GetInt(5) = D존 판정 결과 + pPacket->GetInt(6) = Review에서 보내줬던 PointIndex + pPacket->GetDouble(0) = 댐에서 Monomo까지의 거리 */ // int nReflowjuge=0; @@ -3655,7 +3644,7 @@ nWsiReflowJudge = pReviewResult->nWsi_ResultCode; - //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A 1占쏙옙 占신곤옙횡占� + //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A 1차 신경안씀 nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[1];//B nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[2];//C //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[3];//D @@ -3715,7 +3704,7 @@ { if(pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占� 채占쏙옙 占쌍깍옙 + //결과파일 공유 메모리에 결과 채워 넣기 CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance(); if(pDitGlassRawClient->isConnect() == TRUE) @@ -3732,13 +3721,13 @@ pSharedDefectReview->m_nPlanType = ditRaw::RTP_UserWsi; pSharedDefectReview->m_nWsi_ResultCode=pReviewResult->nWsi_ResultCode; //0:None, 1:Success - pSharedDefectReview->m_nWsi_Type=nWSIType; // 占쌉몌옙 / 占쏙옙占쏙옙 + pSharedDefectReview->m_nWsi_Type=nWSIType; // 함몰 / 돌기 pSharedDefectReview->m_fWsi_ResultData[0]= nWSIType; pSharedDefectReview->m_fWsi_ResultData[1]=(float)(nWSIheight/100.0); pSharedDefectReview->m_fWsi_ResultData[2]=(float)(nWSIWidth/100.0); // 0:Type, 1:Height, 2:Width pSharedDefectReview->m_strWsi_2DImageFilename; pSharedDefectReview->m_strWsi_3DImageFilename; - pSharedDefectReview->m_fWsiManification = 20;//20占쏙옙 占쏙옙占쏙옙 + pSharedDefectReview->m_fWsiManification = 20;//20배 고정 pSharedDefectReview->m_dWsiMmMotorX=pReviewResult->dTargetMotorX; pSharedDefectReview->m_dWsiMmMotorY=pReviewResult->dTargetMotorY; } @@ -3750,7 +3739,7 @@ { if (pReviewResult == NULL) return FALSE; - //占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占� 채占쏙옙 占쌍깍옙 + //결과파일 공유 메모리에 결과 채워 넣기 CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance(); if (pDitGlassRawClient->isConnect() == TRUE) @@ -3767,13 +3756,13 @@ pSharedDefectReview->m_nPlanType = ditRaw::RTP_WSI; pSharedDefectReview->m_nWsi_ResultCode = pReviewResult->nWsi_ResultCode; //0:None, 1:Success - pSharedDefectReview->m_nWsi_Type = nWSIType; // 占쌉몌옙 / 占쏙옙占쏙옙 + pSharedDefectReview->m_nWsi_Type = nWSIType; // 함몰 / 돌기 pSharedDefectReview->m_fWsi_ResultData[0] = nWSIType; pSharedDefectReview->m_fWsi_ResultData[1] = (float)(nWSIheight / 100.0); pSharedDefectReview->m_fWsi_ResultData[2] = (float)(nWSIWidth / 100.0); // 0:Type, 1:Height, 2:Width pSharedDefectReview->m_strWsi_2DImageFilename; pSharedDefectReview->m_strWsi_3DImageFilename; - pSharedDefectReview->m_fWsiManification = 20;//20占쏙옙 占쏙옙占쏙옙 + pSharedDefectReview->m_fWsiManification = 20;//20배 고정 pSharedDefectReview->m_dWsiMmMotorX = pReviewResult->dTargetMotorX; pSharedDefectReview->m_dWsiMmMotorY = pReviewResult->dTargetMotorY; @@ -3804,7 +3793,7 @@ double TempValue = 0; double m_nResultFocusValue = 0; - // 占쏙옙占쏙옙 XY 占쏙옙占쏙옙 X+1, Y+1占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 + // 원점 XY 기준 X+1, Y+1에 대한 차영상 for (int y = 0; y < nHeight - 1; y++) { for (int x = 0; x < nWidth - 1; x++) diff --git a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h index 6f456d3..c54f269 100644 --- a/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h +++ b/ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h @@ -108,9 +108,6 @@ CMotorControlInfo* m_MotorControlInfo; - CString m_strReviewFirst; - CString m_strReviewSecned; - protected: CString ErrorStringCode[ErrorCount]; }; \ No newline at end of file diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index 8751217..613e945 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp @@ -51,7 +51,7 @@ #define AOIRAWBIN_NETWORK_DRIVE_PATH "Y:\\RawBin" enum CPJT_MeasureMode { CPJT_ModeAuto = 0, CPJT_ModeManual }; -// [2017:4:18]-[WEZASW] : WSI Module 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� PlanType 占쏙옙호 占쏙옙占쏙옙. +// [2017:4:18]-[WEZASW] : WSI Module 장착 설비의 경우 PlanType 번호 변경. enum CPJT_PlanType { CPJT_PlanReview = 0, CPJT_PlanUser, CPJT_PlanWSI, CPJT_PlanMeasure, CPJT_PlanReflow, CPJT_PlanWsiReflow, CPJT_PlanWsiUser,CPJT_PlanWsiMultiShot }; enum CPJT_InsepectionType{REVIEW_REFLOW = 0, WSI_REFLOW, REV_WSI,WSIUSER, USER,WSIMULTISHOT}; @@ -169,7 +169,7 @@ CDitGlassRawClient* pDitGlassRaw = CDitGlassRawClient::GetInstance(); if(pDitGlassRaw->ConnectServer() == FALSE) { - g_pLog->DisplayMessage(_T("占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙!(Shared memory Access Fail)")); + g_pLog->DisplayMessage(_T("공유메모리 접근 실패!(Shared memory Access Fail)")); } } @@ -184,16 +184,16 @@ BOOL bReturn = FALSE; - // 占쏙옙占쏙옙 占쏙옙占승곤옙 占쏙옙占쏙옙 占쏙옙占승울옙 占쌕몌옙占쏙옙? + // 현재 상태가 이전 상태와 다른가? //if (nProcessStatus!=m_nProcessStatus || nProcessStatus==0) if (1)//nProcessStatus!=m_nProcessStatus || nProcessStatus==0) { - //if (nProcessStatus==0) // 占십깍옙(0) 占쏙옙占쏙옙占싱몌옙.. + //if (nProcessStatus==0) // 초기(0) 상태이면.. //{ // bReturn = TRUE; //} - // else if (nProcessStatus==(m_nProcessStatus+1)) // 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙(+1)占싱몌옙.. + // else if (nProcessStatus==(m_nProcessStatus+1)) // 이전 상태 다음(+1)이면.. // { // bReturn = TRUE; // } @@ -204,9 +204,9 @@ // bReturn = FALSE; //} - if (bReturn) // 占쏙옙占쏙옙占싱몌옙... + if (bReturn) // 수행이면... { - // Thread 占쏙옙占쏙옙 占쏙옙 Thread 占쏙옙占쏙옙 + // Thread 생성 후 Thread 수행 CSequenceProcessData* pThreadData = new CSequenceProcessData(this); if (pThreadData) { @@ -227,7 +227,7 @@ } } else if(nProcessStatus==2){ - // Thread 占쏙옙占쏙옙 占쏙옙 Thread 占쏙옙占쏙옙 + // Thread 생성 후 Thread 수행 CSequenceProcessData* pThreadData = new CSequenceProcessData(this); if (pThreadData) { @@ -277,7 +277,7 @@ CReviewResult* pWsiResult = pGlassResult->GetWsiResult(nModuleIndex); if (pWsiResult==NULL) goto RESULT_FAIL; - // 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占승댐옙. + // 마지막 인덱스를 가져온다. int nCurResultIdx = pWsiResult->GetLastSReviewResultIndex() + 1; // last index + 1 int nStartResultIdx = pWsiResult->GetStartSReviewResultIndex(); int nEndResultIdx = pWsiResult->GetEndSReviewResultIndex(); @@ -291,13 +291,13 @@ int nMPosY = int(pPosition->dMotorPosY * 1000.0); double dTime = (double) m_ProcessTimer.GetDurationMilliSecond(); - // 占싸듸옙占쏙옙占쏙옙 占쌕몌옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. + // 인덱스가 다르면 비정상임. if (measureResut.nResultIndex != nCurResultIdx) { goto RESULT_FAIL; } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙. + // 현재 데이터 저장. // measureResut if(pWsiResult->GetSReviewResultCount() == 0) return ; @@ -324,7 +324,7 @@ // set last result idx pWsiResult->SetLastSReviewResultIndex(nCurResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙... + // 마지막 포인트까지 왔고, WSI 결과가 남아 있으면... if(nCurResultIdx==nEndResultIdx && nCurResultIdx<=pWsiResult->GetSReviewResultCount()) { nStartResultIdx = nCurResultIdx + 1; @@ -335,8 +335,8 @@ pWsiResult->SetStartSReviewResultIndex(nStartResultIdx); pWsiResult->SetEndSReviewResultIndex(nEndResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + // 나머지 포인트 리뷰 수행하자. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. // Process_RemainWsiPoint(nModuleIndex); } @@ -362,7 +362,7 @@ CReviewResult* pWsiResult = pGlassResult->GetWsiUserResult(nModuleIndex); if (pWsiResult==NULL) goto RESULT_FAIL; - // 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占승댐옙. + // 마지막 인덱스를 가져온다. int nCurResultIdx = pWsiResult->GetLastSReviewResultIndex() + 1; // last index + 1 int nStartResultIdx = pWsiResult->GetStartSReviewResultIndex(); int nEndResultIdx = pWsiResult->GetEndSReviewResultIndex(); @@ -376,13 +376,13 @@ int nMPosY = int(pPosition->dMotorPosY * 1000.0); double dTime = (double) m_ProcessTimer.GetDurationMilliSecond(); - // 占싸듸옙占쏙옙占쏙옙 占쌕몌옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. + // 인덱스가 다르면 비정상임. if (measureResut.nResultIndex != nCurResultIdx) { goto RESULT_FAIL; } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙. + // 현재 데이터 저장. // measureResut if(pWsiResult->GetSReviewResultCount() == 0) return ; @@ -407,7 +407,7 @@ // set last result idx pWsiResult->SetLastSReviewResultIndex(nCurResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙... + // 마지막 포인트까지 왔고, WSI 결과가 남아 있으면... if(nCurResultIdx==nEndResultIdx && nCurResultIdx<=pWsiResult->GetSReviewResultCount()) { nStartResultIdx = nCurResultIdx + 1; @@ -418,8 +418,8 @@ pWsiResult->SetStartSReviewResultIndex(nStartResultIdx); pWsiResult->SetEndSReviewResultIndex(nEndResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + // 나머지 포인트 리뷰 수행하자. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. // Process_RemainWsiPoint(nModuleIndex); } @@ -449,7 +449,7 @@ CAlignResult *pAlignResult = &pGlassResult->m_AlignResult; CAlignRecipe *pAlignRecipe = &pGlassResult->m_AlignRecipe; - // 占쏙옙占쏙옙占� 占쌘듸옙占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占실울옙 占쏙옙占쏙옙占쏙옙占쏙옙. + // 얼라인 자동조명 결과 레시피에 저장하자. CRsRcpAlignInfo *pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo(); if (pRsRcpAlignInfo!=NULL && pRsRcpAlignInfo->m_bAutoProcess) { @@ -463,25 +463,25 @@ pRsRcpAlignInfo->m_dSecondCamExposure = pCurAlignResult->dExposureTime[1]; } - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙타 占쏙옙占쏙옙 + // 레시피 데이타 저장 //m_pDoc->Recipe_WriteRecipeFile(); } BOOL bLastAlignResult = FALSE; CCoordCalibrator *pCoordCalibrator = m_pSP2P->ISP2P_GetCoordCalibrator(); - // 占쏙옙占쏙옙 占쏙옙占쏙옙占� 占쏙옙占�.. + // 최종 얼라인 결과.. if (pCoordCalibrator && pCurAlignResult->nResultCode==Align_Success) { g_pLog->DisplayMessage(_T("[AlignResult] Align Find Success!")); - // 占쏙옙占쏙옙占� 占쏙옙占� 占쌜띰옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 얼라인 결과 글라스 정보에 갱신 *pAlignResult = *pCurAlignResult; pCoordCalibrator->SetFirstMarkPos(pAlignResult->dFindPositionX[0], pAlignResult->dFindPositionY[0], pAlignRecipe->dGlassPositionX[0], pAlignRecipe->dGlassPositionY[0]); pCoordCalibrator->SetSecondMarkPos(pAlignResult->dFindPositionX[1], pAlignResult->dFindPositionY[1], pAlignRecipe->dGlassPositionX[1], pAlignRecipe->dGlassPositionY[1]); - // 占쏙옙占쏙옙 占쏙옙占� + // 각도 계산 if(pCoordCalibrator->CalculateAlignResult() == TRUE) { sAlignResult = pCoordCalibrator->GetAlignResult(); @@ -490,38 +490,38 @@ bLastAlignResult = !pAlignRecipe->bRotateProcess; } - // 占쌜띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // 글라스 각도 보정 유무 CCameraControlAlign *pAlignCameraControl = m_pSP2P->ISP2P_GetAlignCameraControl(); SThetaMotorInfo* pThetaMotorInfo = m_pSP2P->ISP2P_GetThetaMotorInfo(); CMotorControl* pMotorControl = m_pSP2P->ISP2P_GetMotorControl(); if (pAlignRecipe->bRotateProcess && pAlignCameraControl && pMotorControl && pThetaMotorInfo) { - if (fabs(sAlignResult.dDegree) <= pAlignRecipe->dGlassAngleMin) // 占쏙옙占쏙옙 占쌜띰옙 占쏙옙占쏙옙占쏙옙 占쌍소곤옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + if (fabs(sAlignResult.dDegree) <= pAlignRecipe->dGlassAngleMin) // 현재 글라스 각도가 최소각보다 작으면 성공 { bLastAlignResult = TRUE; g_pLog->DisplayMessage(_T("[AlignResult] Success! Last Glass Angle : %.8lf degree, Retry Count : %d ea"), sAlignResult.dDegree, pCurAlignResult->nFindCount); } - else if (fabs(sAlignResult.dDegree) > pAlignRecipe->dGlassAngleMax) // 占쏙옙占쏙옙 占쌜띰옙 占쏙옙占쏙옙占쏙옙 占쌍대각占쏙옙占쏙옙 크占쏙옙 占쏙옙占쏙옙 + else if (fabs(sAlignResult.dDegree) > pAlignRecipe->dGlassAngleMax) // 현재 글라스 각도가 최대각보다 크면 실패 { bLastAlignResult = FALSE; g_pLog->DisplayMessage(_T("[AlignResult] FAIL! Last Glass Angle : %.8lf degree, Retry Count : %d ea"), sAlignResult.dDegree, pCurAlignResult->nFindCount); } - else if (pCurAlignResult->nFindCount < pAlignRecipe->nRetryCount) // 占썹보占쏙옙 횟占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 횟占쏙옙 占쏙옙占쏙옙占싱몌옙 占썹보占쏙옙 占쏙옙占쏙옙 + else if (pCurAlignResult->nFindCount < pAlignRecipe->nRetryCount) // 재보정 횟수가 레시피 횟수 이하이면 재보정 수행 { g_pLog->DisplayMessage(_T("[AlignResult] Current Glass Angle : %.8lf degree, Retry Count : %d ea"), sAlignResult.dDegree, pCurAlignResult->nFindCount); - // 占쏙옙占싶뤄옙 占쏙옙占쏙옙 占쏙옙占쏙옙.. + // 모터로 각도 보정.. double dCalAngle = sAlignResult.dDegree; dCalAngle = pThetaMotorInfo->dPosition - dCalAngle ; g_pLog->DisplayMessage(_T("[AlignResult] Move Rotate Glass Angle : %.8lf degree"), dCalAngle); pMotorControl->AxisThetaManualGoEnd(dCalAngle); ::Sleep(100); - // 占쏙옙占쏙옙占� ReProcess + // 얼라인 ReProcess if (pAlignCameraControl->AlignProcess()) { g_pLog->DisplayMessage(_T("[AlignResult] Align Find Process ReStarted!")); @@ -556,8 +556,8 @@ //m_pView->SetAlignResult(pAlignResult->nResultCode, sAlignResult.dOriginX, sAlignResult.dOriginY, sAlignResult.dDegree); } - // PCControl 占쏙옙占쏙옙占� 占쏙옙호 占쏙옙占쏙옙. - if (bLastAlignResult) // 占쏙옙占쏙옙 占쏙옙占쏙옙寬占쏙옙... + // PCControl 얼라인 신호 전송. + if (bLastAlignResult) // 최종 얼라인결과... { SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Success Data!")); @@ -690,12 +690,12 @@ m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_None, nPlanIndex); - //占쏙옙占쏙옙占� + //데모용 AFM_SetAFMTracking(FALSE); return; } - //190727 chm WSI 占쏙옙占쏙옙占� End 체크 占쏙옙 占쏙옙占쏙옙 + //190727 chm WSI 진행시 End 체크 후 진행 if(nBeforePlanIndex== CPJT_PlanWSI||nBeforePlanIndex== CPJT_PlanWsiReflow||nBeforePlanIndex== CPJT_PlanWsiUser) { if(pPlanInfo->m_nReviewType == CPJT_PlanWSI ||pPlanInfo->m_nReviewType == CPJT_PlanWsiReflow||pPlanInfo->m_nReviewType== CPJT_PlanWsiUser || pPlanInfo->m_nReviewType == CPJT_PlanWsiMultiShot) @@ -724,13 +724,13 @@ } } - //190727 chm WSI type 占쏙옙占쏙옙占쏙옙 Review 占시뤄옙占쏙옙 占쏙옙占쏙옙占� 카占쌨띰옙 占쌜띰옙 占쌜울옙 占쏙옙占쏙옙占쏙옙痢� 占쏙옙占쏙옙... + //190727 chm WSI type 진행후 Review 플랜시 진행시 카메라가 글라스 밖에 있을경우를 위한... if(nBeforePlanIndex== CPJT_PlanWSI ||nBeforePlanIndex== CPJT_PlanWsiReflow||nBeforePlanIndex== CPJT_PlanWsiUser) { if( pPlanInfo->m_nReviewType == CPJT_PlanReview|| pPlanInfo->m_nReviewType == CPJT_PlanUser|| pPlanInfo->m_nReviewType == CPJT_PlanMeasure|| pPlanInfo->m_nReviewType == CPJT_PlanReflow) { - CTotalPitchMeasure* pTotapPithMeasure = m_pSP2P->ISP2P_GetTotalPitchMeasure(); // 占쏙옙占쏙옙占쏙옙占�! 20190730 chm 占쏙옙占쌩울옙 占쌉쇽옙占쏙옙 占쏙옙占쏙옙.... + CTotalPitchMeasure* pTotapPithMeasure = m_pSP2P->ISP2P_GetTotalPitchMeasure(); // 빌려쓰기! 20190730 chm 나중에 함수로 따로.... const CMotorControlInfo* pSystemMotorInfo = m_pSP2P->ISP2P_System_GetMotorInfo(); if(pSystemMotorInfo !=NULL) @@ -774,8 +774,8 @@ if(pPlanInfo == NULL) continue; //210325 - //END 占쏙옙 占쏙옙琯占쏙옙占� 占실억옙占쏙옙占쏙옙占쏙옙占� 占쌔댐옙 占쌉쇽옙占쏙옙 占쏙옙占쏙옙占쏙옙占� 占쏙옙占싣곤옙占쏙옙 占쌍억옙 start 占쌉쇽옙占쏙옙 타占쏙옙占쏙옙 - //占쌓것울옙 占쏙옙占쏙옙 占쏙옙占쏙옙처占쏙옙 + //END 나 언로딩이 되어버렸지만 해당 함수가 쓰레드로 돌아가고 있어 start 함수를 타버림 + //그것에 대한 예외처리 if (GetProcessStatus() == ProcessReviewEnd_CPJT || GetProcessStatus() == ProcessReviewUnloding_CPJT) { g_pLog->DisplayMessage(_T("[ProcessStop] StartProcessing Sequence Stop Status : %d"), GetProcessStatus()); @@ -816,7 +816,7 @@ m_pSP2P->ISP2P_DisplayMessage(_T("[Sequence Processor] WSI Plan End!")); } break; - //占싱삼옙占� + //미사용 case CPJT_PlanMeasure: if (( nTotalCount += pGlassResult->GetTotalSMeasureResultCount()) > 0) { @@ -925,8 +925,8 @@ AllAckSignalOff(); m_pSP2P->ISP2P_GetReviewProcessor()->ResetGantryDone(); - SetCheckWSIEnd(-1); //190726 wsiend체크 占십깍옙화 - SetWsiType(-1); //wsi reflow 타占쏙옙 占쏙옙占쏙옙 占십깍옙화 + SetCheckWSIEnd(-1); //190726 wsiend체크 초기화 + SetWsiType(-1); //wsi reflow 타입 구별 초기화 SetLastPointCheck(FALSE); bFileFind = FALSE; @@ -953,18 +953,18 @@ } m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Glass Result Count : %d ea"), nGlassResultCount); - pGlassResult->ResetDefocusCount();//占싸듸옙 占싸분울옙占쏙옙 defocus count 占십깍옙화 190821 chm + pGlassResult->ResetDefocusCount();//로딩 부분에서 defocus count 초기화 190821 chm CTime time = CTime::GetCurrentTime(); pGlassResult->m_strResultDate.Format(_T("%04d.%02d.%02d"), time.GetYear(), time.GetMonth(), time.GetDay()); - //if(Revolver_SetGoHome(0)) // 占쏙옙占쏙옙占쏙옙 HOME 占쏙옙占쏙옙占쏙옙 + //if(Revolver_SetGoHome(0)) // 리볼버 HOME 시퀀스 //{ // m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Revolver Set GoHome Success!")); //} - //#3357 KYH Align Image 占십깍옙화 ADD START + //#3357 KYH Align Image 초기화 ADD START CCameraControlAlign* pAlignCameraControl = m_pSP2P->ISP2P_GetAlignCameraControl(); if (pAlignCameraControl != NULL) { @@ -972,7 +972,7 @@ g_pLog->DisplayMessage(_T("[Align] Align Image Clear")); } - //#3357 KYH Align Image 占십깍옙화 ADD END + //#3357 KYH Align Image 초기화 ADD END // get transfer data int nResultCode = 0; @@ -999,7 +999,7 @@ if (pDitRawClient->isConnect()==FALSE) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占썹연占쏙옙 占시듸옙 ")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]공유메모리 연결 끊김 재연결 시도 ")); int nReconnect=0; while (1) { @@ -1014,11 +1014,11 @@ Sleep(1000); if (pDitRawClient->isConnect() == FALSE) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙 Count[%d]"), nReconnect); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]공유메모리 연결 실패 Count[%d]"), nReconnect); } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]공유메모리 연결 성공")); break; } nReconnect += 1; @@ -1028,9 +1028,9 @@ } - // #3381 LYW CF AOI Review 占쏙옙占쏙옙占쏙옙 FDC TackTime 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 ADD START + // #3381 LYW CF AOI Review 전설비 FDC TackTime 오보고 현상 개선 ADD START pDitRawClient->GetGlassData()->m_tmReviewLoading = CTime::GetCurrentTime(); - // #3381 LYW CF AOI Review 占쏙옙占쏙옙占쏙옙 FDC TackTime 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 ADD END + // #3381 LYW CF AOI Review 전설비 FDC TackTime 오보고 현상 개선 ADD END CString strGlassIDTemp = NULL; @@ -1047,7 +1047,7 @@ m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!")); strFileName.Format(_T("%s_%s"), strGlassIDTemp, strGlassStepIdTemp); - //占쏙옙占쏙옙占쏙옙트占쏙옙 + //업데이트시 //bFileFind = FindRawBinFile(strFileName); bFileFind = TRUE; @@ -1094,7 +1094,7 @@ } } - //// 190725 占쏙옙占쏙옙占� 占쏙옙청占쏙옙占쏙옙 chm ASCEND 占쏙옙 alarm + //// 190725 고객사 요청사항 chm ASCEND 시 alarm const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); const CRcpSortingInfo *pSortingInfo = pRsRcpReviewInfo->GetRcpReviewSortInfo(); @@ -1111,7 +1111,7 @@ - ////占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占싫깍옙 190618 + ////레시피 세팅으로 옴김 190618 if(GetUseAfmHomePosition()) { g_pLog->DisplayMessage(_T("[AFM] AFM Home Position Start!!!")); @@ -1120,7 +1120,7 @@ } - //占쏙옙占쏙옙占쌨몌옙 커占쏙옙占� 占쏙옙占쏙옙 占쏙옙타트(占쌜띰옙 占싸듸옙) + //공유메모리 커멘드 리뷰 스타트(글라스 로딩) CDitGlassRawClient* pDitSharedGlassRaw = CDitGlassRawClient::GetInstance(); if (pDitSharedGlassRaw->isConnect() == FALSE) { m_pSP2P->ISP2P_DisplayMessage(_T("[DitGlassRawClient] Shared Memory Connect Fail")); @@ -1173,7 +1173,7 @@ CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor(); if(pReviewProcessor == NULL) return ; pReviewProcessor->SetCellData(pGlassResult); - pReviewProcessor->SetReviewCount(0); // 占쏙옙占쏙옙 Sequence No 占십깍옙화. + pReviewProcessor->SetReviewCount(0); // 리뷰 Sequence No 초기화. pReviewProcessor->SetPlanReviewCount(0); pReviewProcessor->SetPlanWSICount(0); // Process Status Update @@ -1214,7 +1214,7 @@ if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT)) m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!")); - //Sleep(400);//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占� 占쌍깍옙 chm190602 + //Sleep(400);//프레임 문제 딜레이 주기 chm190602 // 1. get current glass result CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult(); @@ -1238,7 +1238,7 @@ } else { - // 190710 SJB Align Camera Disconnect Check, Align Step 占쏙옙占쏙옙 占쏙옙占쏙옙 확占쏙옙占싼댐옙. + // 190710 SJB Align Camera Disconnect Check, Align Step 진행 전에 확인한다. if(pAlignCameraControl) { if(pAlignCameraControl->AlignCameraDisconnectCheck() == FALSE) @@ -1255,9 +1255,9 @@ } else { - //占쏙옙占쏙옙占쌩듸옙 + //지워야됨 Sleep(1000); - //TEST 占쏙옙占� + //TEST 모드 { SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!")); @@ -1266,7 +1266,7 @@ } - //占쌍쇽옙 풀占쏙옙 + //주석 풀기 // 4. send align fail signal to plc //SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL); //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!")); @@ -1300,7 +1300,7 @@ if (bFileFind == FALSE) { SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL); - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] 占쏙옙占쏙옙占쏙옙占� 찾占쏙옙 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] 결과파일 찾기 실패")); return; } @@ -1308,7 +1308,7 @@ CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult(); if (pGlassResult==NULL) return; - //占쏙옙占쏙옙占쌨몌옙 커占쏙옙占� 占쏙옙占쏙옙 占쏙옙타트(占쌜띰옙 占싸듸옙) + //공유메모리 커멘드 리뷰 스타트(글라스 로딩) CDitGlassRawClient* pDitSharedGlassRaw = CDitGlassRawClient::GetInstance(); if(pDitSharedGlassRaw->isConnect() == FALSE) m_pSP2P->ISP2P_DisplayMessage(_T("[DitGlassRawClient] Shared Memory Connect Fail")); @@ -1335,7 +1335,7 @@ int nTotalPlanCount = CalculatePlanData(pGlassResult); m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount); - //占쏙옙占쏙옙占쌩듸옙 + //지워야됨 Sleep(1000); // send review ready SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); @@ -1348,7 +1348,7 @@ m_pSP2P->ISP2P_DisplayMessage(_T("[ReadRawFile] AOI Result File Read Fail![%.3f ms]"), processTimer.GetDurationMilliSecond()); - //占쌓쏙옙트 占쏙옙占� + //테스트 모드 //{ // // send review ready // SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS); @@ -1356,7 +1356,7 @@ // m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!")); //} - //占쌍쇽옙 占쏙옙占쏙옙 + //주석 해제 int nCurPlanIndex = 0; CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); if(pRsRcpReviewInfo) @@ -1378,8 +1378,8 @@ } } - //// [2017:5:24]-[WEZASW] : Review Image Upload Dir 占쏙옙占쏙옙.(FTPUploader占쏙옙占쏙옙 占쌘듸옙 占쏙옙占쏙옙 占실댐옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占� 占쏙옙占쏙옙) - //// '占쌥븝옙占싯삼옙'占쏙옙 FTPUploader占쏙옙占쏙옙 占쏙옙占싸듸옙 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 PCControl Glass Unloading 占쏙옙 占쏙옙占� Loading占쏙옙 Review占쏙옙占쏙옙占쏙옙 占쏙옙占싸듸옙 占쏙옙占�(GlassID) 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //// [2017:5:24]-[WEZASW] : Review Image Upload Dir 생성.(FTPUploader에서 자동 삭제 되더라도 실제 리뷰시 생성) + //// '반복검사'시 FTPUploader에서 업로드 후 삭제 시점과 PCControl Glass Unloading 후 즉시 Loading시 Review에서의 업로드 경로(GlassID) 생성 시점 오류 const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo(); CString strPath = _T(""); //if(pNetworkInfo && pNetworkInfo->m_strUploadImagePath.IsEmpty() == FALSE) @@ -1394,7 +1394,7 @@ if (CDitGlassRawClient::GetInstance()->GetGlassData() == NULL) return; - //占쏙옙占싸듸옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌕쏙옙 占쏙옙占싸듸옙 占쏙옙占� Set 20190917chm + //업로드 폴더가 없으면 폴더 생성후 다시 업로드 경로 Set 20190917chm if(Uploadfile.FindFile(strPath)==FALSE) { CTime tmServerLoadingTime = CDitGlassRawClient::GetInstance()->GetGlassData()->m_tmGlassLoading; @@ -1405,7 +1405,7 @@ - //taek 210126 rtms 占쏙옙占쏙옙占� 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + //taek 210126 rtms 보고용 이미지 폴더 생성 CreateDirectory(pReviewProcessor->GetRTMSUploadImagePath(),NULL); } @@ -1451,10 +1451,10 @@ // _grmCellData* pCellData = pDitRawClient->GetCellData(0); // if(pCellData) // { - // // pCellData->m_nTotalPitchData[0] = int(pTotapPithMeasure->GetTotalPitchBD() * 1000); // 占쏙옙占쏙옙, 占쌜억옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - // // pCellData->m_nTotalPitchData[1] = int(pTotapPithMeasure->GetTotalPitchAC() * 1000); // 占쏙옙占쏙옙, 占쌜억옙占쏙옙 占쏙옙占쏙옙 占싣뤄옙占쏙옙 - // // pCellData->m_nTotalPitchData[2] = int(pTotapPithMeasure->GetTotalPitchAB() * 1000); // 占쏙옙占쏙옙, 占쌜억옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 - // // pCellData->m_nTotalPitchData[3] = int(pTotapPithMeasure->GetTotalPitchCD() * 1000); // 占쏙옙占쏙옙, 占쌜억옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 + // // pCellData->m_nTotalPitchData[0] = int(pTotapPithMeasure->GetTotalPitchBD() * 1000); // 장축, 작업자 기준 위쪽 + // // pCellData->m_nTotalPitchData[1] = int(pTotapPithMeasure->GetTotalPitchAC() * 1000); // 장축, 작업자 기준 아래쪽 + // // pCellData->m_nTotalPitchData[2] = int(pTotapPithMeasure->GetTotalPitchAB() * 1000); // 단축, 작업자 기준 왼쪽 + // // pCellData->m_nTotalPitchData[3] = int(pTotapPithMeasure->GetTotalPitchCD() * 1000); // 단축, 작업자 기준 오른쪽 // } // } // } @@ -1462,7 +1462,7 @@ // { // m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor] TotalPitchMeasure Result Fail!")); - // // 190711 SJB, TotalPitchMeasure Fail占시울옙 占쌕뤄옙 Motor占쏙옙 占쏙옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占쏙옙占쌕댐옙 Motion Enable 占쏙옙호占쏙옙 확占쏙옙占쏙옙占쏙옙 + // // 190711 SJB, TotalPitchMeasure Fail시에 바로 Motor로 명령을 날리기 보다는 Motion Enable 신호를 확인하자 // // if(!pTotapPithMeasure->GetMotorEnable()) // { @@ -1494,9 +1494,9 @@ } else { - //占쏙옙占쏙옙占쌩듸옙 + //지워야됨 //Sleep(1000); - //Test占쏙옙占� + //Test모드 //SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS); //SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT); //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!")); @@ -1525,21 +1525,17 @@ } if (GetLastPointCheck() == FALSE) { - Sleep(1000); + Sleep(2500); } ReJudgeProcessing(m_pDitGlassRaw); m_pDitGlassRaw->GetGlassData()->m_tmReviewEnd = CTime::GetCurrentTime(); - if (m_pDitGlassRaw->isConnect() != FALSE) - { - m_pDitGlassRaw->SetReviewEnd(); - m_pDitGlassRaw->WriteReviewRawBinFile(); - } + if (m_pDitGlassRaw->isConnect() != FALSE) m_pDitGlassRaw->SetReviewEnd(); m_pDitGlassRaw->GetGlassData()->m_nReviewNum = m_pSP2P->ISP2P_GetReviewProcessor()->GetPlanReviewCount(); - //SendDVDataToSignalControl();// 占싫억옙占쏙옙 + //SendDVDataToSignalControl();// 안쓰쥬 - //OverTime 占쌩삼옙占쏙옙 占쏙옙占쏘에占쏙옙 END ACK占쏙옙 占쏙옙摸占쏙옙째占� 占싣니띰옙 占쏙옙 Conplete占쏙옙 占쏙옙摸占쏙옙占�. - //占쏙옙 ... 占쏙옙占쏙옙 占쏙옙占쏙옙占싸듸옙占싹댐옙 占쌩곤옙 + //OverTime 발생시 제어에서 END ACK를 기다리는게 아니라 걍 Conplete를 기다린다. + //음 ... 로직 오류인데일단 추가 if (GetLastPointCheck() == FALSE) { @@ -1566,10 +1562,10 @@ m_pSP2P->ISP2P_GetWSIControl(0)->SendWsiAfmSafePosMove(); m_pSP2P->ISP2P_GetWSIControl(1)->SendWsiAfmSafePosMove(); } - // 占쏙옙占쏙옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 Review占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // 결과파일 생성은 Review에서 관여 안함 if(m_pDitGlassRaw->isConnect()==FALSE) WriteRawData(pGlassResult); - //占쏙옙占쏙옙커占쏙옙 占싯띰옙 send 20190819chm + //디포커스 알람 send 20190819chm if(pGlassResult->m_nDeFocusCount >0) { SendSignalToSignalControl(PCControlSendSignalIndex_State,PCControlSend_Defoucs,1000); @@ -1579,8 +1575,8 @@ CString strTime = _T(""); strTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); - CDlgDefocusList::GetInstance()->SetDefocusTotalCount(pGlassResult->m_nDeFocusCount);//占쏙옙탈 카占쏙옙트 Add - CDlgDefocusList::GetInstance()->SetDefocusData(strTime,pGlassResult->m_strGlassID,pGlassResult->m_nDeFocusCount);//ui 占쌩곤옙占쏙옙 占쏙옙占쏙옙 + CDlgDefocusList::GetInstance()->SetDefocusTotalCount(pGlassResult->m_nDeFocusCount);//토탈 카운트 Add + CDlgDefocusList::GetInstance()->SetDefocusData(strTime,pGlassResult->m_strGlassID,pGlassResult->m_nDeFocusCount);//ui 추가후 갱신 } @@ -1594,17 +1590,17 @@ g_pLog->DisplayMessage(_T("History Button Enable")); m_pSP2P->ISP2P_GetDiagnosisHistory2(); - /*int nModuleCount = m_pSP2P->ISP2P_GetModuleStatusCount(); //0503 占쏙옙占쏙옙 End占쏙옙 占쏙옙占쏙옙占� 0占쏙옙占쏙옙 占십깍옙화 + /*int nModuleCount = m_pSP2P->ISP2P_GetModuleStatusCount(); //0503 리뷰 End시 조명값 0으로 초기화 for (int nModuleIdx = 0; nModuleIdx < nModuleCount; nModuleIdx++) { { ReviewLight_SetLightLevel(nModuleIdx, 0); - g_pLog->DisplayMessage(_T("Module[%d] LightLevel 占십깍옙화"), nModuleIdx); + g_pLog->DisplayMessage(_T("Module[%d] LightLevel 초기화"), nModuleIdx); } }*/ - //5. PCControl 占쏙옙호 占쏙옙占쏙옙占쏙옙트 + //5. PCControl 신호 업데이트 if (pGlassResult) { m_pSP2P->ISP2P_UpdateProcessStatus(GetProcessStatus(), pGlassResult); @@ -1646,8 +1642,8 @@ CString strCode = _T(""); - int nDefectCount = pRawData->GetGlassData()->m_nDefectNum; // 占쏙옙占썲갯占쏙옙 - int nJudgeCount = pRcpReviewInfo->GetRcpZoneFilterInfoCount();// 占쏙옙占쏙옙 占쏙옙占쏙옙 + int nDefectCount = pRawData->GetGlassData()->m_nDefectNum; // 디펙갯수 + int nJudgeCount = pRcpReviewInfo->GetRcpZoneFilterInfoCount();// 필터 갯수 int nFilterType = 0; int nJudgeType = 0; int nZoneNumber = 0; @@ -1661,7 +1657,7 @@ int nJudgeCellOKCount = 0; int nPixelSize = 0; int nPixelFilterSize = 0; - //占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 + //높이 데이터 //1 wsi, 3 CS, 4 R, 5 G, 6 B //pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_fWsi_ResultData[1];//Defect //pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_fWsi_ResultData[3];//cs @@ -1675,10 +1671,10 @@ { -#pragma region 占쏙옙占쏙옙占� fail +#pragma region 얼라인 fail if (m_pSP2P->ISP2P_GetCurrentGlassResult()->GetAlignResult()->nResultCode != Align_Success) { - m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] 占쏙옙占쏙옙占� 占쏙옙占쏙옙 WSI 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] 얼라인 실패 WSI 높이 재판정 진행 안함")); break; } #pragma endregion @@ -1716,7 +1712,7 @@ if (nPixelFilterSize <= nPixelSize && nPixelFilterSize != 0) { - m_pSP2P->ISP2P_DisplayMessage(_T("[ReviewEnd] 占쏙옙占쏙옙占쏙옙 占쏙옙占싶몌옙 Pixel Size[%d] nPixelFilterSize [%d]"), nPixelSize,nPixelFilterSize); + m_pSP2P->ISP2P_DisplayMessage(_T("[ReviewEnd] 사이즈 필터링 Pixel Size[%d] nPixelFilterSize [%d]"), nPixelSize,nPixelFilterSize); continue; } #pragma endregion @@ -1726,13 +1722,13 @@ for (int nJudgeindex = 0; nJudgeindex < nJudgeCount; nJudgeindex++) { //nZoneType = GetZoneType(); - dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->GetJudgeHeight(); //占쏙옙占쏙옙 + dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->GetJudgeHeight(); //높이 nFilterType = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->m_nFilterType; //ZONE nJudge = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->m_nFilterJudge; //OK TR //nZoneNumber = pRcpReviewInfo->GetRcpZoneInfo(nFilterType)->m_vecZoneNumber[0]; - if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh占쏙옙占쏙옙 + if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh변경 { BOOL isZoneValue = FALSE; @@ -1745,7 +1741,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 占싸깍옙 占쌩곤옙 + m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 로그 추가 isZoneValue = TRUE; //break; @@ -1754,7 +1750,7 @@ if (isZoneValue == FALSE) { - m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 占싸깍옙 占쌩곤옙 + m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 로그 추가 continue; } @@ -1804,13 +1800,13 @@ } } - else if (fWsiData<=0) // 0占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占싼댐옙. + else if (fWsiData<=0) // 0이하 값은 재판정 진행을 안한다. { - m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] WSI TYPE[%d] WSI 占쏙옙占쏙옙[%0.3lf] <= 0 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙"), nJudgeType, fWsiData); + m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] WSI TYPE[%d] WSI 높이[%0.3lf] <= 0 판정 진행 안함"), nJudgeType, fWsiData); } else { - //20210419 TR 占쏙옙占쏙옙占쏙옙占쏙옙 Judge 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占� OK 占쏙옙占쏙옙 + //20210419 TR 고정으로 Judge 보다 낮을경우 OK ㄱㄱ //if (nJudge == 1)//TR -> OK //{ if (pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_OK || pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_Unknown) @@ -1861,7 +1857,7 @@ } - else //WSI TYPE 占쏙옙 占싣니몌옙 + else //WSI TYPE 이 아니면 { continue; } @@ -1875,13 +1871,13 @@ for (int nJudgeindex = 0; nJudgeindex < nJudgeCount; nJudgeindex++) { //nZoneType = GetZoneType(); - dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->GetJudgeHeight(); //占쏙옙占쏙옙 + dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->GetJudgeHeight(); //높이 nFilterType = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->m_nFilterType; //ZONE nJudge = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->m_nFilterJudge; //OK TR //nZoneNumber = pRcpReviewInfo->GetRcpZoneInfo(nFilterType)->m_vecZoneNumber[0]; - if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh占쏙옙占쏙옙 + if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh변경 { BOOL isZoneValue = FALSE; @@ -1894,7 +1890,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 占싸깍옙 占쌩곤옙 + m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 로그 추가 isZoneValue = TRUE; //break; @@ -1903,7 +1899,7 @@ if (isZoneValue == FALSE) { - m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 占싸깍옙 占쌩곤옙 + m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh 로그 추가 continue; } @@ -1957,7 +1953,7 @@ } else { - //20210419 TR 占쏙옙占쏙옙占쏙옙占쏙옙 Judge 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占� OK 占쏙옙占쏙옙 + //20210419 TR 고정으로 Judge 보다 낮을경우 OK ㄱㄱ //if (nJudge == 1)//TR -> OK //{ if (pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_OK || pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_Unknown) @@ -2009,7 +2005,7 @@ } - else //WSI TYPE 占쏙옙 占싣니몌옙 + else //WSI TYPE 이 아니면 { continue; } @@ -2024,7 +2020,7 @@ strCode =pRcpReviewInfo->GetRcpZoneFilteringInfo_CODE(nJudgeindex)->m_FilterCode; - if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh占쏙옙占쏙옙 + if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh변경 { nJudgeType = ReJugdeWSIType(nFilterType); @@ -2077,7 +2073,7 @@ m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] CODE JUDGE WSI TYPE[%d] Defect CODE [%s] != [%s]"), nJudgeType, strCode, pRawData->GetDefectData(nDefectIdx)->m_strDefectCode); } } - else //WSI TYPE 占쏙옙 占싣니몌옙 + else //WSI TYPE 이 아니면 { continue; } @@ -2088,7 +2084,7 @@ } #pragma region CELLJUDGE - //CELL 占쏙옙占쏙옙占쏙옙//////////////////////////////////////////////////////////////// + //CELL 재판정//////////////////////////////////////////////////////////////// int nCellCount = pRawData->GetGlassData()->m_nCellNum; @@ -2107,7 +2103,7 @@ else if (pRawData->GetCellData(nCellIndex)->m_nJudgement == Judge_OK_CPJT) { nCelllOKJuge = nCelllOKJuge + 1; - } //taek 21.01.25 Juge 占쏙옙占싹댐옙 占쏙옙占쏙옙 占쏙옙占쌈곤옙 占쌕뀐옙占쏙옙... + } //taek 21.01.25 Juge 구하는 곳을 새롭게 바꾸자... else if (pRawData->GetCellData(nCellIndex)->m_nJudgement == Judge_PR_CPJT) { nCelllPRJuge = nCelllPRJuge + 1; @@ -2151,7 +2147,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] 카占쏙옙트 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 [%02d]Cell DefectTRCount[%d] >= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount()); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] 카운트 개수가 음수임 [%02d]Cell DefectTRCount[%d] >= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount()); } break; case JudgeType_T8_PR: @@ -2201,7 +2197,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] 카占쏙옙트 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 [%02d]Cell DefectTRCount[%d] <= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount()); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] 카운트 개수가 음수임 [%02d]Cell DefectTRCount[%d] <= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount()); } break; case JudgeType_T8_PR: @@ -2365,7 +2361,7 @@ } m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] CELL COUNT OK:[%d] TR[%d] PR[%d]"), nCelllOKJuge, nCellTRJudge, nCelllPRJuge); #pragma endregion - //GLASS 占쏙옙占쏙옙占쏙옙//////////////////////////////////////////////////////////////// + //GLASS 재판정//////////////////////////////////////////////////////////////// #pragma region GLASSJUDGE CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); if (pRsRcpReviewInfo == NULL) return FALSE; @@ -2413,7 +2409,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] TR 카占쏙옙트占쏙옙 占쏙옙占쏙옙占쏙옙 [%02d]GLASS Defect TR Count[%d] >= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount()); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] TR 카운트가 음수임 [%02d]GLASS Defect TR Count[%d] >= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount()); } break; case JudgeType_T8_PR: @@ -2463,7 +2459,7 @@ } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd]TR카占쏙옙트占쏙옙 占쏙옙占쏙옙占쏙옙 [%02d]GLASS Defect TR Count[%d] <= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount()); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd]TR카운트가 음수임 [%02d]GLASS Defect TR Count[%d] <= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount()); } break; case JudgeType_T8_PR: @@ -2651,7 +2647,7 @@ CakFileUtil akFileFinder; while (nReTryTime--) { - //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 占싯띰옙 占쌩삼옙 占쏙옙占쏙옙 占싻쇽옙 START + //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 알람 발생 원인 분석 START if (nReTryTime%2 == 0) { strFilePath = AOIRAWBIN_PATH; @@ -2660,9 +2656,9 @@ strWild.Format("%s\\%s_*.bin", strFilePath, strFileName); akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); - //LYW LOG占쌩곤옙 + //LYW LOG추가 g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find Path = %s, RetryCount = %d, ResultCode = [%d]"), strFilePath, 30-nReTryTime, GetLastError()); - //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 占싯띰옙 占쌩삼옙 占쏙옙占쏙옙 占싻쇽옙 END + //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 알람 발생 원인 분석 END VECFINDDATA* pFindData = akFileFinder.getFindData(); int nFileNamePos = strlen(akFileFinder.getProcessPath()); std::map<LONGLONG, CString> mapSpanFileName; @@ -2674,7 +2670,7 @@ parser.process(pFileName, "_."); if (parser.getTokNum() < 4) continue; - if (parser.getTokNum() >= 6) continue; // 0401 占쌩곤옙 + if (parser.getTokNum() >= 6) continue; // 0401 추가 int nDataTime[8] = {}; { @@ -2702,7 +2698,7 @@ { if (mapSpanFileName.begin()->first < nCloseTime) { - //占쏙옙占쏙옙 占쌍깍옙 占쏙옙占쏙옙占쏙옙占� 찾占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/7/17] + //가장 최근 결과파일 찾기 성공 [김태현 2019/7/17] strFindFile = mapSpanFileName.begin()->second; break; } @@ -2762,7 +2758,7 @@ int nPCControlReadDataCount = pSignalInfo->GetReadDataAddressCount(); - // [2017:1:9]-[WEZASW] : PCControl GlassData 占쌓몌옙 占쏙옙占쏙옙占쏙옙. + // [2017:1:9]-[WEZASW] : PCControl GlassData 항목 재정의. if(pSignalInfo->GetUseContinuousReadAddress()) { CString strReadAddress = _T(""); @@ -3141,11 +3137,11 @@ void CSequenceProcessor_CPJT::UpdateGlassResultFromTransferData(CGlassResult *pGlassResult, STransferData* pTransferData) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data 占싻깍옙!")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data 읽기!")); if (pGlassResult==NULL || pTransferData==NULL) return; - // [2017:1:9]-[WEZASW] : PCControl GlassData 占쌓몌옙 占쏙옙占쏙옙占쏙옙 + // [2017:1:9]-[WEZASW] : PCControl GlassData 항목 재정의 // transfer data is not exist if (pTransferData->strLotID.GetLength()<1) { @@ -3214,10 +3210,10 @@ pGlassResult->m_strPairFlag = pTransferData->strPairFlag; pGlassResult->m_strOptionValue = pTransferData->strOptionValue; pGlassResult->m_strReserved = pTransferData->strReserved; - pGlassResult->strGlassScanSchedule = pTransferData->strGlassScanSchedule;//占쏙옙占쏙옙 占쏙옙占쏙옙 cmark + pGlassResult->strGlassScanSchedule = pTransferData->strGlassScanSchedule;//분판 정보 cmark pGlassResult->m_strRTMSStepID = pTransferData->strStepID; //taek 210126 - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data 占쏙옙!")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data 끝!")); } void CSequenceProcessor_CPJT::UpdateHistoryResultFromTransferData(CGlassResult *pHistoryResult, CGlassResult* pGlassResult) @@ -3275,7 +3271,7 @@ pHistoryResult->m_strPairFlag = pGlassResult->m_strPairFlag; pHistoryResult->m_strOptionValue = pGlassResult->m_strOptionValue; pHistoryResult->m_strReserved = pGlassResult->m_strReserved; - pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;//占쏙옙占쏙옙 占쏙옙占쏙옙 cmark + pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;//분판 정보 cmark pHistoryResult->m_strStepID = pGlassResult->m_strRTMSStepID; //taek 210126 pHistoryResult->m_strEquipID = pGlassResult->m_strEquipID; pHistoryResult->m_strProcessID = pGlassResult->m_strProcessID; @@ -3287,7 +3283,7 @@ void CSequenceProcessor_CPJT::CreateResultDirectory(const CString& strGlassID, const CString& strDate) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占썰리 占쏙옙占쏙옙占� 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 디렉토리 만들기 시작")); if (m_pSP2P==NULL) return; const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo(); @@ -3333,7 +3329,7 @@ strPath.Format(_T("%s\\%s"),pNetworkInfo->m_strAlignImagePath, strGlassID); CreateDirectory(strPath, NULL); } - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占썰리 占쏙옙占쏙옙占� 占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 디렉토리 만들기 끝")); } @@ -3341,7 +3337,7 @@ void CSequenceProcessor_CPJT::SetSaveImageBasePathToReviewProcessor(const CString& strGlassID, const CString& strResultDate) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙占� 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 이미지 패스 만들기 시작")); const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo(); if(pNetworkInfo == NULL) return; @@ -3349,7 +3345,6 @@ if(pReviewProcessor == NULL) return; CString strPath = _T(""); - CString strImagePath = _T(""); if(pNetworkInfo->m_strLocalImagePath.IsEmpty() == FALSE && strGlassID.IsEmpty() == FALSE) { CTime snapTime = CTime::GetCurrentTime(); @@ -3386,11 +3381,11 @@ Sleep(1000); if (CDitGlassRawClient::GetInstance()->isConnect() == FALSE) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙 Count[%d]"), nReconnect); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]공유메모리 연결 실패 Count[%d]"), nReconnect); } else { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]공유메모리 연결 성공")); break; } nReconnect += 1; @@ -3405,29 +3400,25 @@ { strPath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), pNetworkInfo->m_strUploadImagePath, strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); - strImagePath.Format(_T("%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); CreateDirectory(strPath, NULL); pReviewProcessor->SetUploadImagePath(strPath); - pReviewProcessor->SetReviewImagePath(strImagePath); } else { tmServerLoadingTime = CTime::GetCurrentTime(); - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] 占쏙옙占쏙옙占쌨몌옙 占쏙옙占쏙옙占싱삼옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] 공유메모리 접근이상")); strPath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), pNetworkInfo->m_strUploadImagePath, strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); - strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); CreateDirectory(strPath, NULL); pReviewProcessor->SetUploadImagePath(strPath); - pReviewProcessor->SetReviewImagePath(strImagePath); } } - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙占� 占쏙옙")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 이미지 패스 만들기 끝")); } void CSequenceProcessor_CPJT::SetSaveImageBasePathToAlignCameraControl(const CString& strGlassID) { - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占쏙옙占� 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙 ")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 얼라인 이미지 패스 시작 ")); const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo(); if(pNetworkInfo == NULL) return; @@ -3440,7 +3431,7 @@ strPath.Format(_T("%s\\%s"), pNetworkInfo->m_strAlignImagePath, strGlassID); pAlignCameraControl->SetSaveImageBasePath(strPath); } - m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占쏙옙占� 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙 ")); + m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 얼라인 이미지 패스 끝 ")); } BOOL CSequenceProcessor_CPJT::ReadRecipeDataFromRecipeFile(const CString& strPPID_RC, CString& strRecipeName)// const CString& strPPID, CString& strRecipeName @@ -3507,14 +3498,14 @@ { if(pGlassResult == NULL) return FALSE; - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 레시피 설정 const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); if (pRsRcpReviewInfo==NULL) return FALSE; // system info const CSystemInfo* pSystemInfo = m_pSP2P->ISP2P_System_GetSystemInfo(); - // 占쌜띰옙 占쏙옙占쏙옙 + // 글라스 정보 STransferData* pTransferData = m_pSP2P->ISP2P_GetCurrentTransferData(); if (pTransferData==NULL) return FALSE; int nGlassTypeInfoIndex = 0; @@ -3530,20 +3521,20 @@ if (pGlassTypeInfo == NULL) return FALSE; m_pSP2P->ISP2P_DisplayMessage(_T("GlassTypeName : %s,GlassTypeIdx : %s"),pGlassTypeInfo->m_strGlassTypeName,pTransferData->strGlassScanSchedule); - // 占쏙옙占쏙옙 占쏙옙占쏙옙 + // 모터 정보 const CMotorControlInfo *pMotorInfo = m_pSP2P->ISP2P_System_GetMotorInfo(); - // 占쏙옙표 占쏙옙환占쏙옙 + // 좌표 변환기 CCoordCalibrator* pCoordCalibrator = m_pSP2P->ISP2P_GetCoordCalibrator(); - // 占쏙옙표占쏙옙 占쏙옙占쏙옙 + // 좌표계 설정 if (pSystemInfo && pGlassTypeInfo && pMotorInfo && pCoordCalibrator) { // Get Direction int nDirectionX = GetDirectionX(pGlassTypeInfo->m_nOriginDirection, pMotorInfo->GetOriginDirection()); int nDirectionY = GetDirectionY(pGlassTypeInfo->m_nOriginDirection, pMotorInfo->GetOriginDirection()); - // 占쏙옙표占쏙옙 占쏙옙占쏙옙 + // 좌표계 설정 pCoordCalibrator->SetTransDirection(nDirectionX, nDirectionY); pCoordCalibrator->SetOriginMotorPosition(pGlassTypeInfo->m_dOriginMotorX, pGlassTypeInfo->m_dOriginMotorY); if (fabs(pGlassTypeInfo->m_dAlignAngle) > 0.0000001) @@ -3552,7 +3543,7 @@ pGlassTypeInfo->m_dFirstAlignGlassX, pGlassTypeInfo->m_dFirstAlignGlassY, pGlassTypeInfo->m_dAlignAngle); } - // 占쌜띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + // 글라스 정보 설정 pGlassResult->SetGlassSize(pGlassTypeInfo->m_nGlassSizeX * 1000, pGlassTypeInfo->m_nGlassSizeY * 1000); pGlassResult->SetGlassOriginDirection(pGlassTypeInfo->m_nOriginDirection); pGlassResult->SetCornerCutDirection(pGlassTypeInfo->m_nCornerCutDirection); @@ -3561,34 +3552,34 @@ pGlassResult->SetCollisionDistanceX(int(pSystemInfo->m_dCollisionDistance*1000.)); } - // Align 占쏙옙占쏙옙 + // Align 정보 const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo(); - // Align 占쏙옙占쏙옙 占쏙옙占쏙옙 + // Align 정보 설정 if (pGlassTypeInfo && pRsRcpAlignInfo) { - // Align 占쏙옙크 占쏙옙占쏙옙 占쏙옙占쏙옙 (占싫쇽옙, 占쏙옙占쏙옙, 占쌜띰옙 占쏙옙치) + // Align 마크 정보 설정 (픽셀, 모터, 글라스 위치) pGlassResult->m_AlignRecipe.m_nUseAlignPosMove = pGlassTypeInfo->m_nUseAlignPosMove; - // 占싫쇽옙 占쏙옙치 + // 픽셀 위치 pGlassResult->m_AlignRecipe.dOriginPixelX[0] = pGlassTypeInfo->m_nFirstAlignFindPixelX; pGlassResult->m_AlignRecipe.dOriginPixelY[0] = pGlassTypeInfo->m_nFirstAlignFindPixelY; pGlassResult->m_AlignRecipe.dOriginPixelX[1] = pGlassTypeInfo->m_nSecondAlignFindPixelX; pGlassResult->m_AlignRecipe.dOriginPixelY[1] = pGlassTypeInfo->m_nSecondAlignFindPixelY; - // 占쏙옙占쏙옙 占쏙옙치 + // 모터 위치 pGlassResult->m_AlignRecipe.dOriginPositionX[0] = pGlassTypeInfo->m_dFirstAlignMotorX; pGlassResult->m_AlignRecipe.dOriginPositionY[0] = pGlassTypeInfo->m_dFirstAlignMotorY; pGlassResult->m_AlignRecipe.dOriginPositionX[1] = pGlassTypeInfo->m_dSecondAlignMotorX; pGlassResult->m_AlignRecipe.dOriginPositionY[1] = pGlassTypeInfo->m_dSecondAlignMotorY; - // 占쌜띰옙 占쏙옙치 + // 글라스 위치 pGlassResult->m_AlignRecipe.dGlassPositionX[0] = pGlassTypeInfo->m_dFirstAlignGlassX; pGlassResult->m_AlignRecipe.dGlassPositionY[0] = pGlassTypeInfo->m_dFirstAlignGlassY; pGlassResult->m_AlignRecipe.dGlassPositionX[1] = pGlassTypeInfo->m_dSecondAlignGlassX; pGlassResult->m_AlignRecipe.dGlassPositionY[1] = pGlassTypeInfo->m_dSecondAlignGlassY; - // Align Recipe 占쏙옙占쏙옙 占쏙옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 찾占쏙옙 占식띰옙占쏙옙占� + // Align Recipe 정보 설정 자동광량 찾기 파라미터 // Align Skip Mode pGlassResult->m_AlignRecipe.bAlignSkipMode = pRsRcpAlignInfo->m_bAlignSkipMode; pGlassResult->m_AlignRecipe.bUseTotalPitchMeasure = pRsRcpAlignInfo->m_bTotalPitchMeasure; @@ -3608,29 +3599,29 @@ pGlassResult->m_AlignRecipe.nMergeRange = pRsRcpAlignInfo->m_nMergeRange; pGlassResult->m_AlignRecipe.dEdgeRate = pRsRcpAlignInfo->m_dEdgeRate; - // 占쏙옙占쏙옙챨占� + // 노출시간 pGlassResult->m_AlignRecipe.bManualProcess = pRsRcpAlignInfo->m_bManualProcess; pGlassResult->m_AlignRecipe.dFirstCamExposure = pRsRcpAlignInfo->m_dFirstCamExposure; pGlassResult->m_AlignRecipe.dSecondCamExposure = pRsRcpAlignInfo->m_dSecondCamExposure; - // 占쌘듸옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 자동광량 조건 pGlassResult->m_AlignRecipe.bAutoProcess = pRsRcpAlignInfo->m_bAutoProcess; pGlassResult->m_AlignRecipe.dTargetMin = pRsRcpAlignInfo->m_dTargetMin; pGlassResult->m_AlignRecipe.dTargetMax = pRsRcpAlignInfo->m_dTargetMax; pGlassResult->m_AlignRecipe.dExposureMin = pRsRcpAlignInfo->m_dExposureMin; pGlassResult->m_AlignRecipe.dExposureMax = pRsRcpAlignInfo->m_dExposureMax; - // Align Recipe 占쏙옙占쏙옙 占쏙옙占쏙옙 rotate info + // Align Recipe 정보 설정 rotate info pGlassResult->m_AlignRecipe.bRotateProcess = pRsRcpAlignInfo->m_bRotateProcess; pGlassResult->m_AlignRecipe.nRetryCount = pRsRcpAlignInfo->m_nRetryCount; pGlassResult->m_AlignRecipe.dGlassAngleMin = pRsRcpAlignInfo->m_dGlassAngleMin; pGlassResult->m_AlignRecipe.dGlassAngleMax = pRsRcpAlignInfo->m_dGlassAngleMax; - // Align 카占쌨띰옙 占쏙옙占쏙옙 占쏙옙 占쌔삼옙 占쏙옙占쏙옙 + // Align 카메라 방향 및 해상도 설정 int nAlignCameraInfoCount = 2; for(int nAlignCameraIdx = 0; nAlignCameraIdx < nAlignCameraInfoCount; nAlignCameraIdx++) { - // Align 占쏙옙占쏙옙 占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. + // Align 조명 값 가져오기. int nLightValue = 0; @@ -3638,10 +3629,10 @@ { nLightValue = (nAlignCameraIdx==0) ? (int)pRsRcpAlignInfo->m_dFirstCamExposure: (int)pRsRcpAlignInfo->m_dSecondCamExposure; - // 占쏙옙占쏙옙占� 카占쌨띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 + // 얼라인 카메라 정보 가져오기 const CAlignCameraInfo *pCameraInfo = m_pSP2P->ISP2P_System_GetAlignCameraInfo(nAlignCameraIdx); - //占쏙옙占쏙옙占� 占쏙옙占쏙옙. + //조명값 변경. CLightControl *pLightControl = NULL; const CLightControlInfo *AlignLightinfo = pCameraInfo->GetLightContorlInfo(); @@ -3650,8 +3641,8 @@ { if (AlignLightinfo->GetMaster()==1&& nAlignCameraIdx==1) { - //占쏙옙占쏙옙占� 占쏙옙틀占싼뤄옙占쏙옙 占싹놂옙占쏙옙 占쏙옙占쏙옙퓸占� 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占싸뤄옙 확占쏙옙 - //占쏙옙占쏙옙占쏙옙 占싱곤옙 占승댐옙占쏙옙 占쏜르겟댐옙 占싣뱄옙占쏙옙 占싫알뤄옙占쏙옙 + //얼라인 컨틀롤러가 하나만 연결되어 있을때 마스터 여부로 확인 + //솔직히 이거 맞는지 모르겟다 아무도 안알랴쥼 pLightControl = m_pSP2P->ISP2P_GetAlignLightControl(0); } @@ -3686,7 +3677,7 @@ } - // 占쏙옙占쏙옙占� 카占쌨띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 + // 얼라인 카메라 정보 가져오기 const CAlignCameraInfo *pCameraInfo = m_pSP2P->ISP2P_System_GetAlignCameraInfo(nAlignCameraIdx); if (pCameraInfo) { @@ -3714,7 +3705,7 @@ } } - // 占쏙옙占쏙옙占� 占쏙옙占시몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 + // 얼라인 템플릿 정보 가져오기 if((int)pGlassTypeInfo->m_vecTemplateImagePath.size() == nAlignCameraInfoCount) { pGlassResult->m_AlignRecipe.strTemplateName[nAlignCameraIdx] = pGlassTypeInfo->m_vecTemplateImagePath[nAlignCameraIdx]; @@ -3743,14 +3734,14 @@ if (pRcpReviewAFMInfo) { int nRealAFMIndex = pRcpReviewAFMInfo->m_nRecipeIndex; - if(nRealAFMIndex == -1)// 占쏙옙占쏙옙占실울옙 占쏙옙占시듸옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 MagnificInfo Index占쏙옙 占싯아울옙 + if(nRealAFMIndex == -1)// 레시피에 선택된 배율의 실제 MagnificInfo Index를 알아옴 { - //-1占쏙옙 占쏙옙占� 占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙. + //-1의 경우 배율 인덱스 가져다 씀. nRealAFMIndex = GetRealMagnification(nModuleIdx, pRcpReviewAFMInfo->m_nZoomIndex); } AFM_SetAFMRecipeName(nModuleIdx, strRecipeName, nRealAFMIndex); - if(pRcpReviewAFMInfo->m_bAFMHomeOffMode==TRUE) //190618AFM홈 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 X + if(pRcpReviewAFMInfo->m_bAFMHomeOffMode==TRUE) //190618AFM홈 시퀀스 진행 X { SetUseAfmHomePosition(FALSE); } @@ -3762,7 +3753,7 @@ } } - // 占쏙옙占쏙옙 찾占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + // 결함 찾기 레시피 설정 CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor(); const CRsRcpDefectFindInfo* pRsRcpDefectFindInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpDefectFindInfo(); if(pReviewProcessor && pRsRcpDefectFindInfo) @@ -3813,7 +3804,7 @@ CString strRawTDPath=_T(""), strRawCDPath=_T(""), strRawSDPath=_T(""); - // 占쏙옙占쏙옙占쏙옙占� 占싱몌옙 찾占쏙옙 + // 결과파일 이름 찾기 FindAOIRawFilePath(pGlassResult, &strRawTDPath, &strRawCDPath, &strRawSDPath); bRet = m_pSP2P->ISP2P_ReadAOIRawFileToGlassResult(strRawTDPath); @@ -3867,7 +3858,7 @@ if(finder.IsDots()) continue; if(finder.IsDirectory()) continue; - // [2017:5:16]-[WEZASW] : AOI Server占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙치占쏙옙 占쏙옙占쌉몌옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占싹몌옙 占쏙옙占쏙옙 + // [2017:5:16]-[WEZASW] : AOI Server의 결함 파일 위치에 결함맵 이미지 파일 존재로 결합 파일만 추출 sRawFile.strFileName = finder.GetFileName(); strExtTemp = sRawFile.strFileName; int nIdx = strExtTemp.Remove('.'); @@ -4045,7 +4036,7 @@ CModuleStatus* pModuleStatus = Module_GetModuleStatus(nModuleIdx); if (pModuleStatus == NULL) continue; - //占썸돌占신몌옙 占쌍깍옙 + //충돌거리 넣기 { double dCollisionPosX = pReviewResult->GetCollisionPositionX() / 1000.0; @@ -4086,13 +4077,13 @@ } - //占승울옙 占쏙옙트占쏙옙 占쏙옙占쏙옙占싱듸옙 + //좌우 겐트리 동시이동 pMotorControl->GantrySetTwoGantrySyncModeSend(0); // set result index int nStartIdx = pReviewResult->GetStartSReviewResultIndex(); int nEndIdx = pReviewResult->GetEndSReviewResultIndex(); - nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1; // End Index 占쌕시쇽옙占쏙옙 + nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1; // End Index 다시설정 double xpostemp, ypostemp; // get review pos @@ -4102,7 +4093,7 @@ SReviewResult* pReview = pReviewResult->GetSReviewResult(nResultIdx); if (pReview==NULL) continue; - //200占쏙옙 占쏙옙藥뱄옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占� 占쌩븝옙체크 + //200개 어드레스를 보낸후 완료시점에서 중복체크 if (pReview->bCheckSendToMotor == FALSE) { pReview->bCheckSendToMotor = TRUE; @@ -4149,7 +4140,7 @@ } } - //占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙 占쌍댐옙占쏙옙 占쏙옙占쏙옙占쏙옙 체크 + //보낼 포인트가 있는지 없는지 체크 if (vectorPosX.empty() ==TRUE) { g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point "), vectorPosX.size()); @@ -4181,13 +4172,13 @@ int nTickCount = GetTickCount(); while (1) { - //5占쏙옙 占쏙옙占쏙옙타占쏙옙 + //5초 오버타임 if ((GetTickCount() - nTickCount) > 5000) { bOverTime = TRUE; break; } - //占쏙옙占쏙옙 占쏙옙占� End 체크 + //모터 모션 End 체크 if (pMotorControl->IsGantryMotionEnd(pModuleStatus->GetGantryIndex()) == TRUE) { if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE)) @@ -4206,15 +4197,15 @@ } - //5占쏙옙占식울옙占쏙옙 占싫울옙占쏙옙占싸댐옙? 占쌓뤄옙 3占쏙옙 占쏙옙천占� 占쏙옙占쏙옙 - //占쏙옙占폜nd 占쏙옙 占쌩몌옙 占쏙옙占시쇽옙占쏙옙 占쏙옙占쏙옙占쏙옙 + //5초후에도 안움직인다? 그럼 3번 재시도 ㄱㄱ + //모션End 가 잘못 나올수도 있으니 if (bOverTime == TRUE) { for (int i = 0; i < 3; i++) { Sleep(1000); - //占쏙옙占싶곤옙 占쏙옙占쏙옙占싹쇽옙 占쏙옙占승삼옙占쏙옙占싹띰옙 Send 占쏙옙호占쏙옙 Fail 占쌩삼옙 占쏙옙占쏙옙 Retry 3占쏙옙 占쏙옙占쏙옙 + //모터가 움직일수 없는상태일때 Send 신호시 Fail 발생 가능 Retry 3번 ㄱㄱ if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE)) { nTotalCount += (int)vectorPosX.size(); @@ -4288,7 +4279,7 @@ if(pGlassResult && pReviewProcessor) { // UserStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); //pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); //pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_UserStart, nPlanIndex); @@ -4351,7 +4342,7 @@ CModuleStatus* pModuleStatus = Module_GetModuleStatus(nModuleIdx); if (pModuleStatus == NULL) continue; - //占썸돌占신몌옙 占쌍깍옙 + //충돌거리 넣기 { double dCollisionPosX = pReviewResult->GetCollisionPositionX() / 1000.0; @@ -4394,9 +4385,9 @@ // set result index int nStartIdx = pReviewResult->GetStartSReviewResultIndex(); int nEndIdx = pReviewResult->GetEndSReviewResultIndex(); - nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount() - 1)) + 1; // End Index 占쌕시쇽옙占쏙옙 + nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount() - 1)) + 1; // End Index 다시설정 - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; double xpostemp, ypostemp; @@ -4407,7 +4398,7 @@ SReviewResult* pReview = pReviewResult->GetSReviewResult(nResultIdx); if (pReview == NULL) continue; - //200占쏙옙 占쏙옙藥뱄옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占� 占쌩븝옙체크 + //200개 어드레스를 보낸후 완료시점에서 중복체크 if (pReview->bCheckSendToMotor == FALSE) { pReview->bCheckSendToMotor = TRUE; @@ -4455,7 +4446,7 @@ } } - //占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙 占쌍댐옙占쏙옙 占쏙옙占쏙옙占쏙옙 체크 + //보낼 포인트가 있는지 없는지 체크 if (vectorPosX.empty() == TRUE) { g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point "), vectorPosX.size()); @@ -4520,7 +4511,7 @@ if(pGlassResult && pReviewProcessor) { // WsiStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIStart, nPlanIndex); @@ -4533,7 +4524,7 @@ MakeWSIUpLoadDirectory(pReviewProcessor->GetUploadImagePath()); //20190219 chm - pReviewProcessor->SetReviewCount(0); // 占쏙옙占쏙옙 Sequence No 占십깍옙화. + pReviewProcessor->SetReviewCount(0); // 리뷰 Sequence No 초기화. return TRUE; } @@ -4546,7 +4537,7 @@ strPath = strPath + _T("\\WSI"); if(CreateDirectory(strPath,NULL)==FALSE) { - //LYW LOG占쌩곤옙 + //LYW LOG추가 g_pLog->DisplayMessage(_T("[MakeWSIUpLoadDirectory]Directory Create Fail %s, ERROR CODE = %d "),strPath, GetLastError()); } @@ -4587,7 +4578,7 @@ VectorDouble vectorCollisionPosX; vectorCollisionPosX.clear(); - //WSI 占승울옙 占쏙옙트占쏙옙 占쏙옙占쏙옙占싱듸옙 + //WSI 좌우 겐트리 동시이동 pMotorControl->GantrySetTwoGantrySyncModeSend(1); @@ -4601,7 +4592,7 @@ CModuleStatus* pModuleStatus = Module_GetModuleStatus(nModuleIdx); if (pModuleStatus == NULL) continue; - //占썸돌占신몌옙 占쌍깍옙 + //충돌거리 넣기 { double dCollisionPosX = pWsiResult->GetCollisionPositionX() / 1000.0; double dCollisionPosY = 0.0; @@ -4643,7 +4634,7 @@ int nEndIdx = pWsiResult->GetEndSReviewResultIndex(); nEndIdx = min(nEndIdx, (pWsiResult->GetSReviewResultCount() - 1)) + 1; // set End Index - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -4655,7 +4646,7 @@ SReviewResult* pWsi = pWsiResult->GetSReviewResult(nResultIdx); if (pWsi == NULL) continue; - //200占쏙옙 占쏙옙藥뱄옙占쏙옙占� 占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占� 占쌩븝옙체크 + //200개 어드레스를 보낸후 완료시점에서 중복체크 if (pWsi->bCheckWSISendToMotor == FALSE) { pWsi->bCheckWSISendToMotor = TRUE; @@ -4702,14 +4693,14 @@ } } - //占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙 占쌍댐옙占쏙옙 占쏙옙占쏙옙占쏙옙 체크 + //보낼 포인트가 있는지 없는지 체크 if (vectorPosX.empty() == TRUE) { - //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 占싯띰옙 占쌩삼옙 占쏙옙占쏙옙 占싻쇽옙 占쏙옙 占쏙옙치 START + //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 알람 발생 원인 분석 및 조치 START g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point,TwoGantrySyncMode OFF!"), vectorPosX.size()); g_pLog->DisplayMessage(_T("[GantryAutoGo] (%d)Gantry Path Send Fail"), pModuleStatus->GetGantryIndex()); //taek 210128 pMotorControl->GantrySetTwoGantrySyncModeSend(0); - //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 占싯띰옙 占쌩삼옙 占쏙옙占쏙옙 占싻쇽옙 占쏙옙 占쏙옙치 END + //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 알람 발생 원인 분석 및 조치 END } else { @@ -4733,13 +4724,13 @@ int nTickCount = GetTickCount(); while (1) { - //5占쏙옙 占쏙옙占쏙옙타占쏙옙 + //5초 오버타임 if ((GetTickCount() - nTickCount) > 5000) { bOverTime = TRUE; break; } - //占쏙옙占쏙옙 占쏙옙占� End 체크 + //모터 모션 End 체크 if (pMotorControl->IsGantryMotionEnd(pModuleStatus->GetGantryIndex()) == TRUE) { if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE)) @@ -4758,15 +4749,15 @@ } - //5占쏙옙占식울옙占쏙옙 占싫울옙占쏙옙占싸댐옙? 占쌓뤄옙 3占쏙옙 占쏙옙천占� 占쏙옙占쏙옙 - //占쏙옙占폜nd 占쏙옙 占쌩몌옙 占쏙옙占시쇽옙占쏙옙 占쏙옙占쏙옙占쏙옙 + //5초후에도 안움직인다? 그럼 3번 재시도 ㄱㄱ + //모션End 가 잘못 나올수도 있으니 if (bOverTime == TRUE) { for (int i = 0; i < 3; i++) { Sleep(1000); - //占쏙옙占싶곤옙 占쏙옙占쏙옙占싹쇽옙 占쏙옙占승삼옙占쏙옙占싹띰옙 Send 占쏙옙호占쏙옙 Fail 占쌩삼옙 占쏙옙占쏙옙 Retry 3占쏙옙 占쏙옙占쏙옙 + //모터가 움직일수 없는상태일때 Send 신호시 Fail 발생 가능 Retry 3번 ㄱㄱ if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE)) { nTotalCount += (int)vectorPosX.size(); @@ -4901,9 +4892,9 @@ // get result index int nStartIdx = pReviewResult->GetStartSReviewResultIndex(); int nEndIdx = pReviewResult->GetEndSReviewResultIndex(); - nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1; // End Index 占쌕시쇽옙占쏙옙 + nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1; // End Index 다시설정 - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -5005,7 +4996,7 @@ if(pGlassResult && pReviewProcessor) { // MeasureStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_MeasureStart, nPlanIndex); @@ -5080,7 +5071,7 @@ const SCoordInfo* pCoordInfo = Module_GetCoordInfo(nModuleIdx); if(pCoordInfo == NULL) continue; - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -5186,7 +5177,7 @@ int nTotalCount = 0; double dDefectPosX, dDefectPosY; - // Module占쏙옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 ModuleStatus sorting + // Module의 위치에 따른 ModuleStatus sorting std::vector<CModuleStatus*> SortedModuleStatus; for(int nModuleIdx = 0; nModuleIdx < m_pSP2P->ISP2P_GetModuleStatusCount(); nModuleIdx++) { @@ -5240,7 +5231,7 @@ const SCoordInfo* pCoordInfo = Module_GetCoordInfo(pReviewResult->GetModuleIndex()); if(pCoordInfo == NULL) continue; - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -5261,7 +5252,7 @@ if(nHeaderIdx == 0) { - // 占싱듸옙占쏙옙 占쏙옙占쏙옙占쏙옙표 占쌩곤옙 + // 이동할 모터좌표 추가 if((int)vectorPos.size() < MAX_MOTOR_ADDRESS_SIZE) { pSReviewResult->dTargetMotorX = dDefectPosX; @@ -6530,7 +6521,7 @@ // add user schedule result - //占쏙옙占쏙옙占쌨모리울옙 채占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙표占쏙옙 占쏙옙占쏙옙체占쏙옙 채占쏙옙占쌍댐옙 占쏙옙占� + //공유메모리에 채워줄 리뷰할 갯수와 디펙 좌표를 구조체에 채워주는 장소 { @@ -7245,7 +7236,7 @@ break; } break; - // 占싱삼옙占� + // 미사용 case CPJT_PlanMeasure: { const CRcpMeasureInfo *pRcpMeasureInfo = pRsRcpMeasureInfo->GetRcpMeasureInfo(0); @@ -7378,7 +7369,7 @@ } //CIM DV Data -BOOL CSequenceProcessor_CPJT::SendDVDataToSignalControl() // 占쏙옙占쏙옙 +BOOL CSequenceProcessor_CPJT::SendDVDataToSignalControl() // 수정 { CGlassResult *pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult(); if (pGlassResult==NULL) return FALSE; @@ -7403,7 +7394,7 @@ } -int CSequenceProcessor_CPJT::MakeDVData(CGlassResult *pGlassResult, char* pDVData, int nIndex) // 占쏙옙占쏙옙 +int CSequenceProcessor_CPJT::MakeDVData(CGlassResult *pGlassResult, char* pDVData, int nIndex) // 수정 { g_pLog->DisplayMessage(_T("[SequenceProcessor] SendDVDataToSignalControl->MakeDVData IN.")); @@ -7412,16 +7403,16 @@ const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); if (pRsRcpReviewInfo == NULL) return FALSE; - // Review 占쏙옙占쏙옙 占쏙옙占쏙옙 + // Review 조명 정보 const CRcpLightInfo *pReviewLightInfo = pRsRcpReviewInfo->GetRcpLightInfo(nIndex); - // Review AFM 占쏙옙占쏙옙 + // Review AFM 정보 const CRcpAFMRecipeInfo *pReviewAFMInfo = pRsRcpReviewInfo->GetRcpAFMRecipeInfo(nIndex); // Review Align Info const CAlignResult* pAlignResult = pGlassResult->GetAlignResult(); // Review Defect Info const CReviewResult* pReviewResult = pGlassResult->GetReviewResult(nIndex); - // Review 占쏙옙占쏙옙 占쏙옙占쏙옙 + // Review 배율 정보 const CModuleStatus* pModuleStatus = Module_GetModuleStatus(nIndex); const SMagnificInfo* pSMagnificInfo = pModuleStatus->GetMagnificInfo(pReviewAFMInfo->GetZoomIndex()); CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl(); @@ -7443,12 +7434,12 @@ // Write DVData Packet //_DVDataPack_B7_8ver DVDataPack; //**Review - //INLINE : 10占쏙옙 - //TFE-OFF : 20占쏙옙 - //Hcut : 50占쏙옙 - //LAMI : 5占쏙옙 + //INLINE : 10개 + //TFE-OFF : 20개 + //Hcut : 50개 + //LAMI : 5개 //**WSI - //10占쏙옙 占쏙옙占쏙옙 + //10개 고정 /////////////////////////////////////////////////////////////////////////// @@ -7495,8 +7486,8 @@ //nAlignResult = 1; - //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//占쏙옙占쏙옙 - //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//占쏙옙占쏙옙 + //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//기준 + //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//보조 //nAlignResult00 = pAlignResult->dFindScore[0]; //nAlignResult01 = pAlignResult->dFindScore[1]; @@ -7514,7 +7505,7 @@ nAlignResult01 = 0; } - //占식울옙? + //파워? nReviewAliveCamera00 = ReviewCamera_GetReviewCameraControl(0)->GetConnected() * 1000; nReviewAliveCamera01 = ReviewCamera_GetReviewCameraControl(1)->GetConnected() * 1000; @@ -7532,7 +7523,7 @@ wsprintf(DriveText, TEXT("%C:"), Drive); UINT type = GetDriveType(DriveText); if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) { - // 占싹듸옙酉� + // 하드용량 ULARGE_INTEGER i64FreeBytesToCaller = { 0 }, i64TotalBytes = { 0 }, i64FreeBytes = { 0 }; BOOL bRsult = GetDiskFreeSpaceEx(DriveText, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); if (bRsult) { @@ -7746,7 +7737,7 @@ pSignalControl->WritePacketData(_T("15100"), sizeof(DVDataPack_CPJT), (short*)&DVData);*/ } -//#3358 KYH FDC 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 ADD START +//#3358 KYH FDC 데이터 전송 시점 개선 ADD START void CSequenceProcessor_CPJT::MakeDVData2() { @@ -7759,9 +7750,9 @@ } else { - // Review 占쏙옙占쏙옙 占쏙옙占쏙옙 + // Review 조명 정보 pReviewLightInfo = pRsRcpReviewInfo->GetRcpLightInfo(0); - // Review AFM 占쏙옙占쏙옙 + // Review AFM 정보 pReviewAFMInfo = pRsRcpReviewInfo->GetRcpAFMRecipeInfo(0); } @@ -7785,7 +7776,7 @@ - // Review 占쏙옙占쏙옙 占쏙옙占쏙옙 + // Review 배율 정보 const CModuleStatus* pModuleStatus = Module_GetModuleStatus(0); const SMagnificInfo* pSMagnificInfo = NULL; if (pModuleStatus == NULL) @@ -7887,8 +7878,8 @@ //nAlignResult = 1; - //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//占쏙옙占쏙옙 - //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//占쏙옙占쏙옙 + //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//기준 + //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//보조 //nAlignResult00 = pAlignResult->dFindScore[0]; //nAlignResult01 = pAlignResult->dFindScore[1]; @@ -7928,7 +7919,7 @@ nAlignResult01 = 1000; } - //占식울옙? + //파워? if (ReviewCamera_GetReviewCameraControl(0) != NULL) { nReviewAliveCamera00 = ReviewCamera_GetReviewCameraControl(0)->GetConnected() * 1000; @@ -7961,7 +7952,7 @@ wsprintf(DriveText, TEXT("%C:"), Drive); UINT type = GetDriveType(DriveText); if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) { - // 占싹듸옙酉� + // 하드용량 ULARGE_INTEGER i64FreeBytesToCaller = { 0 }, i64TotalBytes = { 0 }, i64FreeBytes = { 0 }; BOOL bRsult = GetDiskFreeSpaceEx(DriveText, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); if (bRsult) { @@ -8008,7 +7999,7 @@ return; } -//#3358 KYH FDC 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 ADD END +//#3358 KYH FDC 데이터 전송 시점 개선 ADD END DWORD CSequenceProcessor_CPJT::GetDiskUsage() { @@ -8046,7 +8037,7 @@ BOOL bResult = FALSE; - // PCControl D2300 (占싯삼옙 占쏙옙占쏙옙) + // PCControl D2300 (검사 영역) switch(nSignalIndex) { case PCControlRecv_TimeChange: @@ -8112,7 +8103,7 @@ g_pLog->DisplayMessage(_T("[SequenceProcessor] Success! SetLocalTime(), Current: %04d-%02d-%02d %02d-%02d-%02d, Changed: %04d-%02d-%02d %02d-%02d-%02d"), CurrentTime.wYear, CurrentTime.wMonth, CurrentTime.wDay, CurrentTime.wHour, CurrentTime.wMinute, CurrentTime.wSecond, ChangedTime.wYear, ChangedTime.wMonth, ChangedTime.wDay, ChangedTime.wHour, ChangedTime.wMinute, ChangedTime.wSecond); - // AFM & WSI TIME 占쏙옙占쏙옙화 + // AFM & WSI TIME 동기화 SendSystemTime(ChangedTime); } else { g_pLog->DisplayMessage(_T("[SequenceProcessor] Fail! SetLocalTime()")); @@ -8139,7 +8130,7 @@ return TRUE; } -// Local System 占쏙옙占쏙옙 占시곤옙占쏙옙 占쏙옙占쏙옙 占쏙옙청 占쏙옙트占싼뤄옙占쏙옙 占시곤옙占쏙옙 처占쏙옙 占쏙옙占쏙옙 +// Local System 변경 시간과 변경 요청 컨트롤러의 시간차 처리 생각 BOOL CSequenceProcessor_CPJT::SendSystemTime(SYSTEMTIME sysTime) { SYSTEMTIME CurrentTime; @@ -8286,7 +8277,7 @@ case PCControlSend_Defoucs: m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Defoucs! => %d"),0); break; - case PCControlSend_Diagnosis: // 0412 占쌘곤옙占쏙옙占쏙옙 占쏙옙호 占쌩곤옙 + case PCControlSend_Diagnosis: // 0412 자가진단 신호 추가 m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Diagnosis! => %d"), 0); break; } @@ -8397,7 +8388,7 @@ case PCControlSend_Defoucs: m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Defoucs! => %d"),0); break; - case PCControlSend_Diagnosis: // 0412 占쌘곤옙占쏙옙占쏙옙 占쏙옙호 占쌩곤옙 + case PCControlSend_Diagnosis: // 0412 자가진단 신호 추가 m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Diagnosis! => %d"), 0); break; } @@ -8511,7 +8502,7 @@ if (bResult==FALSE) m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Manual Mode Error!")); // lmk simul manual camera,motor stop - //ReviewCamera_CameraControl(CameraControlStop); // 占쏙옙占쏙옙 占쏙옙占쌩몌옙 카占쌨띰옙 占쌘듸옙 占쏙옙탑 + //ReviewCamera_CameraControl(CameraControlStop); // 모터 멈추면 카메라 자동 스탑 CMotorControl* pMotorControl = m_pSP2P->ISP2P_GetMotorControl(); if(pMotorControl) pMotorControl->CommonSetAutoStop(); @@ -8682,10 +8673,10 @@ if (SetLocalTime(&sTime)) { - m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] 占시곤옙占쏙옙占쏙옙화占쏙옙占쏙옙 %s"), strtime); + m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] 시간동기화성공 %s"), strtime); } else - m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] 占시곤옙占쏙옙占쏙옙화占쏙옙占쏙옙 %s"), strtime); + m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] 시간동기화실패 %s"), strtime); //memcpy(&time, strTime, 2); @@ -8906,7 +8897,7 @@ CReviewResult* pWsiMultiShotResult = pGlassResult->GetWsiMultiShotResult(nModuleIndex); if (pWsiMultiShotResult == NULL) goto RESULT_FAIL; - // 占쏙옙占쏙옙占쏙옙 占싸듸옙占쏙옙占쏙옙 占쏙옙占쏙옙占승댐옙. + // 마지막 인덱스를 가져온다. int nCurResultIdx = pWsiMultiShotResult->GetLastSReviewResultIndex() + 1; // last index + 1 int nStartResultIdx = pWsiMultiShotResult->GetStartSReviewResultIndex(); int nEndResultIdx = pWsiMultiShotResult->GetEndSReviewResultIndex(); @@ -8920,13 +8911,13 @@ int nMPosY = int(pPosition->dMotorPosY * 1000.0); double dTime = (double)m_ProcessTimer.GetDurationMilliSecond(); - // 占싸듸옙占쏙옙占쏙옙 占쌕몌옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. + // 인덱스가 다르면 비정상임. if (measureResut.nResultIndex != nCurResultIdx) { goto RESULT_FAIL; } - // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙. + // 현재 데이터 저장. // measureResut if (pWsiMultiShotResult->GetSReviewResultCount() == 0) return; @@ -8951,7 +8942,7 @@ // set last result idx pWsiMultiShotResult->SetLastSReviewResultIndex(nCurResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙... + // 마지막 포인트까지 왔고, WSI 결과가 남아 있으면... if (nCurResultIdx == nEndResultIdx && nCurResultIdx <= pWsiMultiShotResult->GetSReviewResultCount()) { nStartResultIdx = nCurResultIdx + 1; @@ -8962,8 +8953,8 @@ pWsiMultiShotResult->SetStartSReviewResultIndex(nStartResultIdx); pWsiMultiShotResult->SetEndSReviewResultIndex(nEndResultIdx); - // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙. - ::Sleep(3000); // 占쏙옙占쏙옙甄占� 占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙. + // 나머지 포인트 리뷰 수행하자. + ::Sleep(3000); // 딜레이는 필수임. 없으면 동작 안함. // Process_RemainWsiPoint(nModuleIndex); } @@ -9029,7 +9020,7 @@ if(pGlassResult && pReviewProcessor) { // WsiStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIReflowStart, nPlanIndex); @@ -9065,7 +9056,7 @@ if(pGlassResult && pReviewProcessor) { // WsiStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIStart, nPlanIndex); @@ -9092,7 +9083,7 @@ WSIAllReadySignal(1); // send wsi start - // 占쏙옙占쏙옙 占쏙옙占쏙옙 + // 수정 사항 if (!WSIMultiShotAllStartSignal()) { g_pLog->DisplayMessage(_T("[WSI] WSI MultiShot Start Fail!!")); @@ -9103,7 +9094,7 @@ if (pGlassResult && pReviewProcessor) { // WsiStart - pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 占쏙옙占쏙옙 + pReviewProcessor->SetJobID(pGlassResult->m_strJobID); // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID 변경 pReviewProcessor->SetOperID(pGlassResult->m_strOperID); m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIMultiShotStart, nPlanIndex); @@ -9166,7 +9157,7 @@ int nEndIdx = pWsiResult->GetEndSReviewResultIndex(); nEndIdx = min(nEndIdx, (pWsiResult->GetSReviewResultCount()-1)) + 1; // set End Index - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -9296,7 +9287,7 @@ CModuleStatus* pModuleStatus = Module_GetModuleStatus(nModuleIdx); if (pModuleStatus == NULL) continue; - //占썸돌占신몌옙 占쌍깍옙 + //충돌거리 넣기 { double dCollisionPosX = pWsiUserResult->GetCollisionPositionX() / 1000.0; double dCollisionPosY = 0.0; @@ -9339,7 +9330,7 @@ int nEndIdx = pWsiUserResult->GetEndSReviewResultIndex(); nEndIdx = min(nEndIdx, (pWsiUserResult->GetSReviewResultCount()-1)) + 1; // set End Index - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -9443,16 +9434,16 @@ } - //占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 + //기존꺼 삭제 pWsiMultiShotResult->GetVectorSReviewResult()->clear(); int nResultCount = 0; if (m_vecSReviewResult.size()>0) { - //占쏙옙占쏙옙占쌕몌옙 占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙占쏙옙占쏙옙킷占� 占쏙옙 占쏙옙占쏙옙殮占� 占쏙옙占쏙옙 + //스케줄링 순서 대로 집어넣은거라 걍 집어넣기 ㄱㄱ for(int i=0; i< m_vecSReviewResult.size(); i++) { - //占쏙옙占쏙옙占쏙옙 占쏙옙占시울옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쌉뤄옙占쌔야듸옙 占쌓것몌옙큼 占쏙옙占쏙옙占쏙옙! - //占쏙옙占쏙옙占쏙옙 WSI FOV 4占쏙옙占쏙옙 占쏙옙占쌔울옙占쏙옙 占쏙옙占쏙옙 + //원래는 세팅에 분할 갯수 입력해야됨 그것만큼 돌리기! + //지금은 WSI FOV 4분할 기준에서 ㄱㄱ double dOringinX = m_vecSReviewResult[i].nUMOriginX; double dOringinY = m_vecSReviewResult[i].nUMOriginY; @@ -9722,7 +9713,7 @@ if (pModuleStatus == NULL) continue; - //占썸돌占신몌옙 占쌍깍옙 + //충돌거리 넣기 { double dCollisionPosX = pWsiMultiShotResult->GetCollisionPositionX() / 1000.0; @@ -9750,7 +9741,7 @@ int nEndIdx = pWsiMultiShotResult->GetEndSReviewResultIndex(); nEndIdx = min(nEndIdx, (pWsiMultiShotResult->GetSReviewResultCount() - 1)) + 1; // set End Index - // [2017:3:8]-[WEZASW] : CameraOffset 占쏙옙占쏙옙 占쏙옙占쏙옙 (-1~1 => -5~5) + // [2017:3:8]-[WEZASW] : CameraOffset 범위 변경 (-1~1 => -5~5) double m_dMinOffset = -5.0; double m_dMaxOffset = 5.0; @@ -10191,7 +10182,7 @@ CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo(); if(pRsRcpReviewInfo == NULL) return FALSE; - if(pRsRcpReviewInfo->GetRcpUserDefectInfoCount() < 1) return TRUE; // 占쏙옙占쏙옙占쏙옙占쏙옙 카占쏙옙트占쏙옙 占쏙옙占쌕몌옙 占싼어가占쏙옙 + if(pRsRcpReviewInfo->GetRcpUserDefectInfoCount() < 1) return TRUE; // 고정리뷰 카운트가 없다면 넘어가자 double dCenterPosX, dCenterPosY; @@ -10250,18 +10241,18 @@ _grmGlassData* pSharedGlassData = pDitSharedGlassRaw->GetGlassData(); if(pSharedGlassData == NULL) return FALSE; - //pSharedGlassData->m_nUserReviewNum = 0; //占쏙옙占쏙옙 占쌨몌옙 User plan + //pSharedGlassData->m_nUserReviewNum = 0; //공유 메모리 User plan _grmDefectData* pSharedDefect; - int nPointCount = pRecipeinfo->GetRcpUserDefectInfoCount(); // User 占쏙옙표 占쏙옙 카占쏙옙트 + int nPointCount = pRecipeinfo->GetRcpUserDefectInfoCount(); // User 좌표 총 카운트 - int nSharedDefectNum = pSharedGlassData->m_nDefectNum; // 占쏙옙占쏙옙 占싼곤옙占쏙옙 User Idx 占쏙옙 첫占쏙옙째 Index 占쏙옙 占싫댐옙 - int nStartIdx=nSharedDefectNum;// USER 占쏙옙占쏙옙 占쏙옙占쏙옙 IDX 占싸울옙占싹깍옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 + int nSharedDefectNum = pSharedGlassData->m_nDefectNum; // 디펙 총개수 User Idx 의 첫번째 Index 가 된다 + int nStartIdx=nSharedDefectNum;// USER 디펙 종류 IDX 부여하기 위한 시작점 - CRcpPlanInfo* pRcpPlanInfo; // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 - CRcpUserDefectInfo *pDefectInfo;// 占쏙옙占쏙옙占쏙옙 defect 占쏙옙占쏙옙 + CRcpPlanInfo* pRcpPlanInfo; // 레시피 정보 + CRcpUserDefectInfo *pDefectInfo;// 레시피 defect 정보 - int nInsepectionType;// User 타占쏙옙 Reviewreflow = 0 wsiReflow =1; REV&WSI =2; WSIUSEr =3; USER =4; + int nInsepectionType;// User 타입 Reviewreflow = 0 wsiReflow =1; REV&WSI =2; WSIUSEr =3; USER =4; int nCount = 0; @@ -10325,7 +10316,7 @@ BOOL CSequenceProcessor_CPJT::CompareRevType(int nInsType,int nRevType) { - //Plan 타占쌉곤옙 InspectionMode 占쏙옙 + //Plan 타입과 InspectionMode 비교 if(nRevType == CPJT_PlanUser) { if(nInsType == USER) return TRUE; @@ -10383,7 +10374,7 @@ CString strMessage, strResultFilePath, strUploadResultFilePath, strLocalRawPath; CString strUploadRawPath, strUploadImagePath, strAOIRawFileName, strAOIRawFilePath; - //3-1. 占쏙옙占쏙옙 占쏙옙占� 占쏙옙占쏙옙 占쏙옙占쏙옙 + //3-1. 리뷰 결과 파일 쓰기 m_pSP2P->ISP2P_SetReviewResultData(pGlassResult); strLocalRawPath = pNetworkInfo->m_strLocalRawPath; @@ -10410,7 +10401,7 @@ if(strUploadRawPath.IsEmpty() == FALSE && strAOIRawFilePath.IsEmpty() == FALSE) { - // [2017:5:16]-[WEZASW] : 占쏙옙占쏙옙 PASS占쏙옙占쏙옙 占쏙옙占쏙옙 占쏘영占쏙옙 占쏙옙황占쏙옙 占쏙옙占쏙옙 AOI Server占쏙옙 RAW 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占싸듸옙 占쏙옙占쏙옙. + // [2017:5:16]-[WEZASW] : 리뷰 PASS시의 설비 운영의 상황에 따라 AOI Server가 RAW 파일 직접 업로드 진행. strUploadResultFilePath.Format(_T("%s\\%s"), strUploadRawPath, strAOIRawFileName); if(CopyFile(strResultFilePath, strUploadResultFilePath, FALSE)) @@ -10431,9 +10422,9 @@ } // delete file of Glass direction - DeleteFile(pNetworkInfo->m_strAOIRawPath + _T("\\") + pGlassResult->m_strJobID + _T("TD"));//pGlassResult->m_strGlassID -> m_StrJobID 占쏙옙占쏙옙 + DeleteFile(pNetworkInfo->m_strAOIRawPath + _T("\\") + pGlassResult->m_strJobID + _T("TD"));//pGlassResult->m_strGlassID -> m_StrJobID 변경 - // [2017:4:11]-[WEZASW] :CIM(DV Data) 占쏙옙占쏙옙 占쌓몌옙 占쌩곤옙. + // [2017:4:11]-[WEZASW] :CIM(DV Data) 보고 항목 추가. if (SendDVDataToSignalControl()==FALSE) { m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] DV Data Send FAIL!")); @@ -10453,8 +10444,8 @@ BOOL CSequenceProcessor_CPJT::MoveReviewStartMotorPosition(CGlassResult* pGlassResult,int nReviewType) { - //혹占시놂옙 占쏙옙占싹깍옙占� 占쏙옙占쌤듸옙 - //占쏙옙占쏙옙 占시뤄옙占쏙옙 첫占쏙옙째 占쏙옙치占쏙옙 占싱듸옙 + //혹시나 쓰일까봐 남겨듐 + //다음 플랜의 첫번째 위치로 이동 double dDefectPosX,dDefectPosY = 0; @@ -10518,7 +10509,7 @@ void CSequenceProcessor_CPJT::SendWsiErrorAlarm_CPJT(int Index) //190801 chm { - //wsi 占쏙옙占쏙옙 占싯띰옙 + //wsi 에러 알람 if(Index==1) { g_pLog->DisplayMessage(_T("[SequenceProcessor_CPJT] WSI Alive Error!!!")); @@ -10532,7 +10523,7 @@ void CSequenceProcessor_CPJT::SendWsiAlive_CPJT()//190801 chm { - //WSI Alive 占쏙옙호 占쏙옙占쏙옙 + //WSI Alive 신호 받음 SetWSIAliveCheck(TRUE); } @@ -10558,7 +10549,7 @@ if(bWsiAliveCheck ==FALSE){ m_pCSPC->SendWsiErrorAlarm_CPJT(1); } - bWsiAliveCheck=FALSE; //30占십울옙 占싼뱄옙占쏙옙 0占쏙옙占쏙옙 占십깍옙화 + bWsiAliveCheck=FALSE; //30초에 한번씩 0으로 초기화 } } diff --git a/ReviewSystem/include/CHReviewResult/ReviewResult.h b/ReviewSystem/include/CHReviewResult/ReviewResult.h index 08ced33..c2f1a2a 100644 --- a/ReviewSystem/include/CHReviewResult/ReviewResult.h +++ b/ReviewSystem/include/CHReviewResult/ReviewResult.h @@ -29,14 +29,14 @@ // Wsi_X_Right_4_A_Ratio, // Wsi_Result_Info_Count }; - // [2016:11:20]-[WEZASW] : WSI 占쏙옙占� Data 占쌓몌옙 占쏙옙占쏙옙 + // [2016:11:20]-[WEZASW] : WSI 결과 Data 항목 변경 enum WSIResultInfo { Wsi_X_Height=0, Wsi_X_Width, Wsi_X_Area, Wsi_X_A_Ratio, Wsi_Result_Info_Count }; - // [2016:11:20]-[WEZASW] : WSI 占쏙옙占� Data 占쌓몌옙 占쏙옙占쏙옙 + // [2016:11:20]-[WEZASW] : WSI 결과 Data 항목 변경 enum WSIReflowResultInfomation { WsiReflowInfo_AZoneJudge=0, WsiReflowInfo_BZoneJudge, WsiReflowInfo_CZoneJudge, @@ -80,8 +80,8 @@ int nExposureTime; // exposure time BOOL bDigitalZoom; // digital zoom ? double dRulerInterval; // ruler Interval - double dTargetMotorX; // 占쏙옙占쏙옙 占쏙옙표 - double dTargetMotorY; // 占쏙옙占쏙옙 占쏙옙표 + double dTargetMotorX; // 모터 좌표 + double dTargetMotorY; // 모터 좌표 int nUMGrabPosX; // Snap Pos int nUMGrabPosY; // Snap Pos int nReviewSnapSerialNo; // serial no @@ -91,7 +91,6 @@ VectorImageData vectorImageData; // camera image CString strImgFileName; - CString strImgFilePath; int nMagnificationOffsetX; int nMagnificationOffsetY; @@ -104,16 +103,16 @@ int nReview_Square; int nReview_Stat; - // wsi data : 占쏙옙占� 占쏙옙占쏙옙 占쌓몌옙 占쌩곤옙 - int nWsi_ResultCode; // 占쏙옙占쏙옙 占쏙옙占쏙옙 - int nWsi_Type; // 占쌉몌옙 / 占쏙옙占쏙옙 + // wsi data : 결과 파일 항목 추가 + int nWsi_ResultCode; // 성공 여부 + int nWsi_Type; // 함몰 / 돌기 int nWsi_SlopeWarn; double pWsi_ResultData[Wsi_Result_Info_Count]; // um int nWsiReflowPositionIndex; // WsiReflowPositionIndex int nWsi_pReflowResultData[WsiReflowInfo_Result_Info_Count]; double dWsi_DamDistance; bool bBigSizeDefect; - int nMultiShotNum; //占신댐옙占쏙옙占� 占쌉울옙 占쏙옙占쏙옙 + int nMultiShotNum; //거대결함 촬영 순서 int nGlassType; //TFE=0,MN=1,QD=2,BANK=3 CS =4 CSG = 5 @@ -152,14 +151,14 @@ VectorResultFormula vecMeasure_ResultData; // reflow data - int nReflow_Result; // 占쏙옙占쏙옙占쏙옙 Line占쏙옙 占쏙옙占쏙옙. 3 占싱몌옙 : DAM2 Reflow 占쏙옙占쏙옙, 4~5 : DAM1 Reflow 占쏙옙占쏙옙, 6 : no Reflow 占쏙옙占쏙옙 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side - int pReflow_LinePosData[REFLOW_LINE_DATA]; // Line 占쏙옙표 占쏙옙占� 占썼열. DAM#2 占쌕깍옙 2 Lines, DAM#2, DAM#1 占쏙옙占쏙옙占쏙옙 占쏙옙표占쏙옙 占쏙옙占쏙옙占�(占쏙옙, Pattern占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙 占쌕깍옙占십븝옙占쏙옙 占쏙옙占쏙옙) + int nReflow_Result; // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side + int pReflow_LinePosData[REFLOW_LINE_DATA]; // Line 좌표 출력 배열. DAM#2 바깥 2 Lines, DAM#2, DAM#1 순으로 좌표가 저장됨(즉, Pattern을 기준으로 바깥쪽부터 저장) int nReflow_Side; int nInspectionMode; int nReflow_CellIndex; - BOOL bCheckWSISendToMotor; //占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙표 占쏙옙占쏙옙占쏙옙占쏙옙 확占쏙옙 - BOOL bCheckSendToMotor; //WSI 占쏙옙占쏙옙占� 占쏙옙占쏙옙占쏙옙占쏙옙 占쏙옙표 占쏙옙占쏙옙占쏙옙占쏙옙 확占쏙옙 + BOOL bCheckWSISendToMotor; //모터한테 좌표 보낸건지 확인 + BOOL bCheckSendToMotor; //WSI 진행시 모터한테 좌표 보낸건지 확인 }; typedef std::vector<SReviewResult> VectorSReviewResult; -- Gitblit v1.9.3