SDC C-Project CF Review 프로그램
LYW
2021-07-08 630eb072cca33a7c633f6429a0b5a531d1b83268
Revert "Ongoing60 #3486CF AOI Review Review History 프로그램 테스트 및 적용"

This reverts commit e10b8c2a3f6ee6b639dbb49ff6635d0657531d1e.
208개 파일 삭제됨
19개 파일 변경됨
33986 ■■■■■ 파일 변경됨
.gitignore 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp 120 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp 31 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 274 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp 76 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.cpp 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.h 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct.h 280 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/AlignDlg.cpp 515 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/AlignDlg.h 71 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/AnaResultFile.cpp 140 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/AnaResultFile.h 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CHRectTracker.cpp 316 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CHRectTracker.h 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CHTrackerView.cpp 124 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CHTrackerView.h 35 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CameraImageView.cpp 985 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CameraImageView.h 139 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CustomizeReview.cpp 84 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/CustomizeReview.h 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp 223 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawClient.h 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp 183 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawServer.h 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 745 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawBase.cpp 131 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawBase.h 75 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCEC.cpp 96 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCEC.h 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCPJT.cpp 2279 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCPJT.h 134 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCSOT.cpp 1696 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawCSOT.h 93 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawDemo.cpp 1432 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawDemo.h 72 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawRTMS.cpp 849 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/GlassRawRTMS.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/InterfaceFTP.cpp 389 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/InterfaceFTP.h 100 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/MacroResultFile.cpp 357 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/MacroResultFile.h 231 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/PathSettingDlg.cpp 297 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/PathSettingDlg.h 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.cpp 106 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.h 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.rc 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj 268 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj.filters 195 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 3766 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 275 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/Singleton.h 35 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/StackResultCPJT.cpp 337 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/StackResultCPJT.h 87 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/StackResultCSOT.cpp 226 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/StackResultCSOT.h 76 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/aaa.txt 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akDefectFormation.cpp 98 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akDefectFormation.h 431 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akFormationMap.cpp 1190 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akFormationMap.h 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akGridData.cpp 478 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akGridData.h 97 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp 189 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akIPCNetAOISystem.h 139 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akImageView.cpp 497 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akImageView.h 99 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akLoggerExt.cpp 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akLoggerExt.h 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akWndArrange.cpp 98 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akWndArrange.h 41 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/res/History.ico 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/res/ReveiwHistory.ico 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/res/ReveiwHistory.rc2 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/resource.h 102 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/stdafx.cpp 137 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/stdafx.h 85 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/targetver.h 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/x64/Debug/reveiwhistorydlg.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReviewHistory.sln 37 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akBit.h 57 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akColorStruct.h 128 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akCoordinate.h 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akCoreLinker.h 63 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akDE.h 123 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akDE2.h 123 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akDefine.h 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileDB.h 80 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileDBHash.h 72 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileMgr.h 80 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileMgrAdv.h 74 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileMgrB.h 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akFileUtil.h 79 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akInterpolation.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akLogger.h 69 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akMath.h 37 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akMatrix.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akPathFileUtil.h 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akRandom.h 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akString.h 143 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akStruct.h 134 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akStructColor.h 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akStructPoint.h 51 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akStructRect.h 59 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akStructVector.h 165 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akSyncObject.h 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akText.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akTextExt.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akTimeManager.h 93 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akTrace.h 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akTraceExt.h 38 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akTrajectoryModel.h 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akVector.h 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akWGS84.h 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akCore/akWaypoint.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akColorSettingDlg.h 59 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akColorTable.h 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akColorTableOption.h 70 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDDSettingDlg.h 67 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataBasic1.h 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataBasic2.h 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataBasic3.h 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataImage.h 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataMesh.h 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akDataVector2.h 57 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphBase.h 312 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphBasic3.h 104 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphCodeJ.h 90 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphImage.h 84 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphLinker.h 69 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphMesh.h 106 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphStruct.h 290 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphType2V.h 72 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akGraphUtil.h 61 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akMemDC.h 90 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akPixel.h 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akRangeSettingDlg.h 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akRangeSettingNormalDlg.h 56 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akRangeSettingTimeDlg.h 50 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akRaySettingDlg.h 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akResource.h 89 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akSelectDataDlg.h 59 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akSyncObject.h 31 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/akUnit.h 37 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGraph/khDataBase.h 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/CellRange.h 148 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/GridCell.h 143 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/GridCellBase.h 175 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/GridCellCheck.h 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/GridDropTarget.h 82 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/InPlaceEdit.h 83 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/MemDC.h 106 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCheck.h 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCombo.h 177 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellDateTime.h 92 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellNumeric.h 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/NewCellTypes/GridURLCell.h 55 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/TitleTip.h 87 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/akGridCtrl.h 925 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/akGridCtrlLinker.h 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akGridCtrl/testCtrl.h 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akColor.h 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akPoint.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akPointT.h 37 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akQueue.h 100 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akQueueCircle.h 151 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akRect.h 117 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akRectT.h 196 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akSTLLinker.h 56 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akStruct.h 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akTrace.h 61 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akTrajectory.h 170 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akVector.h 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/akVectorT.h 50 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akColorStruct.h 128 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akCoordinate.h 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akFileMgr.h 80 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akFileMgrAdv.h 74 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akFileMgrB.h 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akFileUtil.h 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akInterpolation.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akMath.h 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akMatrix.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akMemory.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akRandom.h 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akString.h 143 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akSyncObject.h 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akText.h 46 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akTextExt.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akTimeManager.h 93 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akTraceExt.h 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akTrajectoryModel.h 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akWGS84.h 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/backup/akWaypoint.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/inl/akPointT.inl 70 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/inl/akRectT.inl 368 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/inl/akVectorT.inl 109 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akColorStruct.h 128 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akCoordinate.h 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akFileMgr.h 80 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akFileMgrAdv.h 74 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akFileMgrB.h 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akFileUtil.h 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akInterpolation.h 48 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akMath.h 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akMatrix.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akMemory.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akRandom.h 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akString.h 143 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akSyncObject.h 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akText.h 46 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akTextExt.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akTimeManager.h 93 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akTraceExt.h 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akTrajectoryModel.h 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akWGS84.h 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/include/akSTL/새 폴더/akWaypoint.h 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawClient.cpp 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawClient.h 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawStruct.h 280 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor.cpp 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp 345 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 563 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewResult/ReviewResult.h 25 ●●●● 패치 | 보기 | raw | blame | 히스토리
.gitignore
@@ -29,10 +29,6 @@
DitGlassRawMessenger/lib/
DitGlassRawMessenger/Backup/
ReviewHistory/.vs/
ReviewHistory/bin/
ReviewHistory/lib/
*.sdf
*.opensdf
*.suo
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];  // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Î¸ï¿½ï¿½ï¿½ ï¿½ï¿½î°£ï¿½ï¿½.
    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);
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;
}
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;};
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]
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));
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
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--)
    {
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();
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;
ReviewHistory/ReveiwHistory/AlignDlg.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/AlignDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/AnaResultFile.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/AnaResultFile.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CHRectTracker.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CHRectTracker.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CHTrackerView.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CHTrackerView.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CameraImageView.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CameraImageView.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CustomizeReview.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/CustomizeReview.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/DitGlassRawClient.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/DitGlassRawServer.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawBase.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawBase.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCEC.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCEC.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCPJT.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCPJT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCSOT.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawCSOT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawDemo.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawDemo.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawRTMS.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/GlassRawRTMS.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/InterfaceFTP.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/InterfaceFTP.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/MacroResultFile.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/MacroResultFile.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/PathSettingDlg.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/PathSettingDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistory.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistory.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistory.rc
Binary files differ
ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistory.vcxproj.filters
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/Singleton.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/StackResultCPJT.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/StackResultCPJT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/StackResultCSOT.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/StackResultCSOT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/aaa.txt
ReviewHistory/ReveiwHistory/akDefectFormation.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akDefectFormation.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akFormationMap.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akFormationMap.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akGridData.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akGridData.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akIPCNetAOISystem.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akIPCNetAOISystem.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akImageView.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akImageView.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akLoggerExt.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akLoggerExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akWndArrange.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/akWndArrange.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/res/History.ico
Binary files differ
ReviewHistory/ReveiwHistory/res/ReveiwHistory.ico
Binary files differ
ReviewHistory/ReveiwHistory/res/ReveiwHistory.rc2
Binary files differ
ReviewHistory/ReveiwHistory/resource.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/stdafx.cpp
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/stdafx.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/targetver.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/ReveiwHistory/x64/Debug/reveiwhistorydlg.obj.enc
Binary files differ
ReviewHistory/ReviewHistory.sln
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akBit.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akColorStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akCoordinate.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akCoreLinker.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akDE.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akDE2.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akDefine.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileDB.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileDBHash.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileMgr.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileMgrAdv.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileMgrB.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akFileUtil.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akInterpolation.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akLogger.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akMath.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akMatrix.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akPathFileUtil.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akRandom.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akString.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akStructColor.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akStructPoint.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akStructRect.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akStructVector.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akSyncObject.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akText.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akTextExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akTimeManager.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akTrace.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akTraceExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akTrajectoryModel.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akVector.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akWGS84.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akCore/akWaypoint.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akColorSettingDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akColorTable.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akColorTableOption.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDDSettingDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataBasic1.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataBasic2.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataBasic3.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataImage.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataMesh.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akDataVector2.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphBase.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphBasic3.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphCodeJ.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphImage.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphLinker.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphMesh.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphType2V.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akGraphUtil.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akMemDC.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akPixel.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akRangeSettingDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akRangeSettingNormalDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akRangeSettingTimeDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akRaySettingDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akResource.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akSelectDataDlg.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akSyncObject.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/akUnit.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGraph/khDataBase.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/CellRange.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/GridCell.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/GridCellBase.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/GridCellCheck.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/GridDropTarget.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/InPlaceEdit.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/MemDC.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCheck.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellCombo.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellDateTime.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/NewCellTypes/GridCellNumeric.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/NewCellTypes/GridURLCell.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/TitleTip.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/akGridCtrl.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/akGridCtrlLinker.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akGridCtrl/testCtrl.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akColor.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akPoint.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akPointT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akQueue.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akQueueCircle.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akRect.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akRectT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akSTLLinker.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akTrace.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akTrajectory.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akVector.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/akVectorT.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akColorStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akCoordinate.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akFileMgr.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akFileMgrAdv.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akFileMgrB.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akFileUtil.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akInterpolation.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akMath.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akMatrix.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akMemory.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akRandom.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akString.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akSyncObject.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akText.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akTextExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akTimeManager.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akTraceExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akTrajectoryModel.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akWGS84.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/backup/akWaypoint.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/inl/akPointT.inl
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/inl/akRectT.inl
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/inl/akVectorT.inl
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akColorStruct.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akCoordinate.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akFileMgr.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akFileMgrAdv.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akFileMgrB.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akFileUtil.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akInterpolation.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akMath.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akMatrix.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akMemory.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akRandom.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akString.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akSyncObject.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akText.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akTextExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akTimeManager.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akTraceExt.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akTrajectoryModel.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akWGS84.h
ÆÄÀÏÀÌ »èÁ¦µÊ
ReviewHistory/include/akSTL/»õ Æú´õ/akWaypoint.h
ÆÄÀÏÀÌ »èÁ¦µÊ
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--)
    {
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();
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;
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)
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 ì¹´ìš´íЏ(리뷰 í¬ì¸íЏ ìˆœì„œ)
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++)
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.h
@@ -108,9 +108,6 @@
    CMotorControlInfo* m_MotorControlInfo;
    CString m_strReviewFirst;
    CString m_strReviewSecned;
protected:
    CString                ErrorStringCode[ErrorCount];
};
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�� ï¿½ï¿½Ãµï¿½ ï¿½ï¿½ï¿½ï¿½
            //���End ï¿½ï¿½ ï¿½ß¸ï¿½ ï¿½ï¿½ï¿½Ã¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
            //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�� ï¿½ï¿½Ãµï¿½ ï¿½ï¿½ï¿½ï¿½
                //���End ï¿½ï¿½ ï¿½ß¸ï¿½ ï¿½ï¿½ï¿½Ã¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
                //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으로 ì´ˆê¸°í™”
        }
    }
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;