// DlgSelfDiagnosis_Squareness.cpp: 구현 파일 // #include "stdafx.h" #include "ReviewSystem.h" #include "DlgSelfDiagnosis_Squareness.h" #include "DlgSelfDiagnosis.h" #include "afxdialogex.h" // CDlgSelfDiagnosis_Squareness 대화 상자 IMPLEMENT_DYNAMIC(CDlgSelfDiagnosis_Squareness, CDialogEx) CDlgSelfDiagnosis_Squareness::CDlgSelfDiagnosis_Squareness(CDiagnosisManager* pDiagnosisManager, CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DLG_SELF_DIAGNOSIS_SQUARENESS, pParent) , m_nSelModuleIndex(0) , m_dEditLeftTheta(0) , m_dEditMotorX_1(0) , m_dEditMotorY_1(0) , m_dEditPixelX_1(0) , m_dEditPixelY_1(0) , m_dEditMotorX_2(0) , m_dEditMotorY_2(0) , m_dEditPixelX_2(0) , m_dEditPixelY_2(0) , m_dEditMotorX_3(0) , m_dEditMotorY_3(0) , m_dEditPixelX_3(0) , m_dEditPixelY_3(0) , m_dEditRightTheta(0) , m_dEditMotorX_4(0) , m_dEditMotorY_4(0) , m_dEditPixelX_4(0) , m_dEditPixelY_4(0) , m_dEditMotorX_5(0) , m_dEditMotorY_5(0) , m_dEditPixelX_5(0) , m_dEditPixelY_5(0) , m_dEditMotorX_6(0) , m_dEditMotorY_6(0) , m_dEditPixelX_6(0) , m_dEditPixelY_6(0) , m_editFirstSettingStandard(0) , m_editFirstSettingStandard2(0) { m_pDiagnosisManager = pDiagnosisManager; } CDlgSelfDiagnosis_Squareness::~CDlgSelfDiagnosis_Squareness() { } void CDlgSelfDiagnosis_Squareness::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_GRID_GANTRY_DATA_HISTORY, m_ctrlGridGantryDataHistory); DDX_Control(pDX, IDC_LIST, m_ctrlListFileHistory); DDX_Text(pDX, IDC_EDIT_GANTRY_THETA, m_dEditLeftTheta); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X, m_dEditMotorX_1); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y, m_dEditMotorY_1); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X, m_dEditPixelX_1); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y, m_dEditPixelY_1); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X2, m_dEditMotorX_2); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y2, m_dEditMotorY_2); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X2, m_dEditPixelX_2); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y2, m_dEditPixelY_2); DDX_Control(pDX, IDC_COMBO_MODULE_INDEX, m_ctrlComboModuleIndex); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X3, m_dEditMotorX_3); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y3, m_dEditMotorY_3); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X3, m_dEditPixelX_3); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y3, m_dEditPixelY_3); DDX_Text(pDX, IDC_EDIT_GANTRY_THETA2, m_dEditRightTheta); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X4, m_dEditMotorX_4); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y4, m_dEditMotorY_4); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X4, m_dEditPixelX_4); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y4, m_dEditPixelY_4); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X5, m_dEditMotorX_5); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y5, m_dEditMotorY_5); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X5, m_dEditPixelX_5); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y5, m_dEditPixelY_5); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X6, m_dEditMotorX_6); DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y6, m_dEditMotorY_6); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X6, m_dEditPixelX_6); DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y6, m_dEditPixelY_6); DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING, m_editFirstSettingStandard); DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING2, m_editFirstSettingStandard2); //DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation); //DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation); DDX_Control(pDX, IDC_BUTTON_SIMULATION2, m_BtSumulation); } BEGIN_MESSAGE_MAP(CDlgSelfDiagnosis_Squareness, CDialogEx) ON_LBN_SELCHANGE(IDC_LIST, &CDlgSelfDiagnosis_Squareness::OnLbnSelchangeList) ON_CBN_SELCHANGE(IDC_COMBO_MODULE_INDEX, &CDlgSelfDiagnosis_Squareness::OnCbnSelchangeComboModuleIndex) ON_BN_CLICKED(IDC_BUTTON_SIMULATION, &CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation) ON_MESSAGE(UM_UPDATE_DIALOG, &CDlgSelfDiagnosis_Squareness::OnUpdateDialog) ON_BN_CLICKED(IDC_BUTTON_SIMULATION2, &CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation2) END_MESSAGE_MAP() // CDlgSelfDiagnosis_Squareness 메시지 처리기 BOOL CDlgSelfDiagnosis_Squareness::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: 여기에 추가 초기화 작업을 추가합니다. for (int nIdx = 0; nIdx < MODULE_COUNT; nIdx++) { CString strData = _T(""); strData.Format(_T("%02d"), nIdx); m_ctrlComboModuleIndex.AddString(strData); } m_ctrlComboModuleIndex.SetCurSel(0); UpdateDialogControls(); InitListControl(); //taek 210105 UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다. } void CDlgSelfDiagnosis_Squareness::InitGridControl() { } void CDlgSelfDiagnosis_Squareness::FillGridControl() { } void CDlgSelfDiagnosis_Squareness::InitListControl() { CString strExt = _T("\\*txt"); //taek 210105 CString strFilePath = REVIEW_AUTO_DIAGNOSIS_RESULT_SQUARENESS_PATH + strExt; //검색 클래스 CFileFind finder; //CFileFind는 파일, 디렉터리가 존재하면 TRUE 를 반환함 BOOL bWorking = finder.FindFile(strFilePath); // CString fileName; CString DirName; m_ctrlListFileHistory.ResetContent(); while (bWorking) { //다음 파일 / 폴더 가 존재하면다면 TRUE 반환 bWorking = finder.FindNextFile(); //파일 일때 if (finder.IsArchived()) { //파일의 경로 CString _fileName = finder.GetFilePath(); // 현재폴더 상위폴더 썸네일파일은 제외 if (_fileName == _T(".") || _fileName == _T("..") || _fileName == _T("Thumbs.db")) continue; //읽어온 파일 경로를 리스트박스에 넣음 m_ctrlListFileHistory.AddString(_fileName); } //// 디렉터리 일때 //if (finder.IsDirectory()) //{ // // 필요하면 여기서 처리 // DirName = finder.GetFileName(); //} } } void CDlgSelfDiagnosis_Squareness::UpdateDialogControls(BOOL bLoadResult/* = FALSE*/) { if (m_pDiagnosisManager == NULL/* || m_pDiagnosisManager->ExistStandardData() == FALSE*/) return; const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo(); if (pSettingInfo == NULL) return; m_editFirstSettingStandard = pSettingInfo->GetSquarenessStandard(); m_editFirstSettingStandard2 = pSettingInfo->GetSquarenessStandard2(); if (bLoadResult) // update load file data { const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0); if (pResult == NULL) return; // result : theta, pixel position m_dEditLeftTheta = pResult->GetGantryDegree(); for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_1 = pPosData->dPixelX; m_dEditPixelY_1 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_2 = pPosData->dPixelX; m_dEditPixelY_2 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_3 = pPosData->dPixelX; m_dEditPixelY_3 = pPosData->dPixelY; } } pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1); if (pResult == NULL) return; // result : theta, pixel position m_dEditRightTheta = pResult->GetGantryDegree(); for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_4 = pPosData->dPixelX; m_dEditPixelY_4 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_5 = pPosData->dPixelX; m_dEditPixelY_5 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_6 = pPosData->dPixelX; m_dEditPixelY_6 = pPosData->dPixelY; } } } else if (bLoadResult == FALSE && m_pDiagnosisManager->ExistStandardData() == FALSE)// update setting data { const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0); if (pResult == NULL) return; // result : theta, pixel position m_dEditLeftTheta = pResult->GetGantryDegree(); for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_1 = pPosData->dPixelX; m_dEditPixelY_1 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_2 = pPosData->dPixelX; m_dEditPixelY_2 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_3 = pPosData->dPixelX; m_dEditPixelY_3 = pPosData->dPixelY; } } pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1); if (pResult == NULL) return; // result : theta, pixel position m_dEditLeftTheta = pResult->GetGantryDegree(); for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_4 = pPosData->dPixelX; m_dEditPixelY_4 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_5 = pPosData->dPixelX; m_dEditPixelY_5 = pPosData->dPixelY; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_6 = pPosData->dPixelX; m_dEditPixelY_6 = pPosData->dPixelY; } } } else { // result : theta, pixel position const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0); if (pResult == NULL) return; BOOL bProcess = FALSE; for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_1 = pPosData->dPixelX; m_dEditPixelY_1 = pPosData->dPixelY; bProcess = pPosData->bProcsss; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_2 = pPosData->dPixelX; m_dEditPixelY_2 = pPosData->dPixelY; bProcess &= pPosData->bProcsss; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_3 = pPosData->dPixelX; m_dEditPixelY_3 = pPosData->dPixelY; bProcess &= pPosData->bProcsss; } } m_dEditLeftTheta = bProcess ? pResult->GetGantryDegree() : 0.; pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1); if (pResult == NULL) return; bProcess = FALSE; for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3); if (pPosData == NULL) continue; if (pPosData->nPosMode == PanelPosition_Base) { m_dEditPixelX_4 = pPosData->dPixelX; m_dEditPixelY_4 = pPosData->dPixelY; bProcess = pPosData->bProcsss; } else if (pPosData->nPosMode == PanelPosition_Sub) { m_dEditPixelX_5 = pPosData->dPixelX; m_dEditPixelY_5 = pPosData->dPixelY; bProcess &= pPosData->bProcsss; } else if (pPosData->nPosMode == PanelPosition_Addition) { m_dEditPixelX_6 = pPosData->dPixelX; m_dEditPixelY_6 = pPosData->dPixelY; bProcess &= pPosData->bProcsss; } } m_dEditRightTheta = bProcess ? pResult->GetGantryDegree() : 0.; } const CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(0); // info : motor position for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pStandardResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; if (pPosData->nIndex == PanelPosition_Base) { m_dEditMotorX_1 = pPosData->dPosX; m_dEditMotorY_1 = pPosData->dPosY; } else if (pPosData->nIndex == PanelPosition_Sub) { m_dEditMotorX_2 = pPosData->dPosX; m_dEditMotorY_2 = pPosData->dPosY; } else if (pPosData->nIndex == PanelPosition_Addition) { m_dEditMotorX_3 = pPosData->dPosX; m_dEditMotorY_3 = pPosData->dPosY; } } pStandardResult = pSettingInfo->GetSettingResult_Squareness(1); for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++) { const SPositionData* pPosData = pStandardResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; if (pPosData->nIndex == PanelPosition_Base) { m_dEditMotorX_4 = pPosData->dPosX; m_dEditMotorY_4 = pPosData->dPosY; } else if (pPosData->nIndex == PanelPosition_Sub) { m_dEditMotorX_5 = pPosData->dPosX; m_dEditMotorY_5 = pPosData->dPosY; } else if (pPosData->nIndex == PanelPosition_Addition) { m_dEditMotorX_6 = pPosData->dPosX; m_dEditMotorY_6 = pPosData->dPosY; } } this->PostMessage(UM_UPDATE_DIALOG); } void CDlgSelfDiagnosis_Squareness::GetDialogControls() { if (m_pDiagnosisManager == NULL) return; UpdateData(TRUE); CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo(); if (pSettingInfo == NULL) return; if (m_pDiagnosisManager->ExistStandardData() == FALSE) // set standard data { CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(m_nSelModuleIndex); if (pStandardResult == NULL) { pSettingInfo->SetSettingResultCount_Squareness(MODULE_COUNT); pStandardResult = pSettingInfo->GetSettingResult_Squareness(m_nSelModuleIndex); } pStandardResult->SetModuleIndex(m_nSelModuleIndex); for (int nPIdx = 0; nPIdx < pStandardResult->GetPanelCount_Squareness(); nPIdx++) { SPositionData* pPosData = pStandardResult->GetPositionData_Squareness(nPIdx); if (pPosData == NULL) continue; pPosData->nIndex = nPIdx; if (nPIdx == 0) { pPosData->dPosX = m_dEditMotorX_1; pPosData->dPosY = m_dEditMotorY_1; } else if (nPIdx == 1) { pPosData->dPosX = m_dEditMotorX_2; pPosData->dPosY = m_dEditMotorY_2; } } } else // set setting data { } } void CDlgSelfDiagnosis_Squareness::ChangeResultData() { // CDiagnosisResult * pProcessResult = m_pDiagnosisManager->GetDiagnosisResultCount_Squareness(); // if (pProcessResult == NULL) return FALSE; // // SPositionData* pPositionData = pProcessResult->GetPositionData_Squareness(0); // if (pPositionData == NULL) return FALSE; // // SetGridResultData(pPositionData); // // CDlgSelfDiagnosis_Squareness* pDlg = (CDlgSelfDiagnosis_Squareness*)AfxGetApp()->m_pMainWnd; // pDlg->PostMessage(CUSTOM_UPDATEDATA, 0, 0); // return TRUE; //taek 210105 } void CDlgSelfDiagnosis_Squareness::DisableBtSIMULATION(BOOL bUse) { if (bUse) { m_BtSumulation.EnableWindow(FALSE); } else { m_BtSumulation.EnableWindow(TRUE); } } void CDlgSelfDiagnosis_Squareness::OnLbnSelchangeList() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if (m_pDiagnosisManager == NULL) return; UpdateData(TRUE); CString strFilePath = _T(""); int nCurrentSel = m_ctrlListFileHistory.GetCurSel(); m_ctrlListFileHistory.GetText(nCurrentSel, strFilePath); m_pDiagnosisManager->LoadDiagnosisFile(strFilePath); UpdateDialogControls(TRUE); } void CDlgSelfDiagnosis_Squareness::OnCbnSelchangeComboModuleIndex() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. UpdateData(TRUE); m_nSelModuleIndex = m_ctrlComboModuleIndex.GetCurSel(); UpdateDialogControls(); } LRESULT CDlgSelfDiagnosis_Squareness::OnUpdateDialog(WPARAM wParam, LPARAM lParam) { UpdateData(FALSE); return 1; } void CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if (m_pDiagnosisManager == NULL) return; GetDialogControls(); m_pDiagnosisManager->RecvSignalToSignalControl(DiagnosisSignal_Manual, DiagnosisMode_Squareness, TRUE); } void CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation2() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if (m_pDiagnosisManager == NULL) return; //#3514_LYW_CF AOI Review 자가진단 기능 개선_START if (m_pDiagnosisManager->CheckManualMode() == FALSE) { CString strMessage; strMessage.Format(_T("Change Manual Mode!!")); if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR)) { g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode")); return; } } //#3514_LYW_CF AOI Review 자가진단 기능 개선_END GetDialogControls(); m_pDiagnosisManager->RecvSignalToSignalControl(DiagnosisSignal_Manual, DiagnosisMode_Squareness, TRUE); }