From 9020bfb6f86ff853d5d5b3cee882132a244232da Mon Sep 17 00:00:00 2001 From: KEJ <kimeungju@diteam.co.kr> Date: 금, 24 11월 2023 15:33:29 +0900 Subject: [PATCH] Merge branch 'feature/#4528_CF_AOI_Review_Motor_Offset_기능_추가' into develop --- ReviewSystem/ReviewSystem/DlgMotorOffSetTool.cpp | 736 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 736 insertions(+), 0 deletions(-) diff --git a/ReviewSystem/ReviewSystem/DlgMotorOffSetTool.cpp b/ReviewSystem/ReviewSystem/DlgMotorOffSetTool.cpp new file mode 100644 index 0000000..d0c343d --- /dev/null +++ b/ReviewSystem/ReviewSystem/DlgMotorOffSetTool.cpp @@ -0,0 +1,736 @@ +癤�// DlgMotorOffSetTool.cpp: 援ы쁽 �뙆�씪 +// + +#include "stdafx.h" +#include "ReviewSystem.h" +#include "DlgMotorOffSetTool.h" +#include <algorithm> +#include "afxdialogex.h" +#include "CHCommonClasses/MacroFile.h" + +BOOL CMotorOffsetData::CalcOffset(_Inout_ double& GlassPosX, _Inout_ double& GlassPosY) +{ + auto Xitem = upper_bound(m_vtXRange.begin(), m_vtXRange.end(), GlassPosX); + auto Yitem = upper_bound(m_vtYRange.begin(), m_vtYRange.end(), GlassPosY); + + double dXpos, dYpos, dRangeX, dRangeY; + int nXIndex = 0; + int nYIndex = 0; + // X �삁�쇅泥섎━ + if (Xitem == m_vtXRange.begin()) { + dRangeX = 0; + nXIndex = 0; + } + else if (Xitem == m_vtXRange.end()) + { + Xitem = m_vtXRange.end() - 1; + dRangeX = *(Xitem - 1); + nXIndex = GetRangeCountX() - 1; + } + else + { + dRangeX = *(Xitem - 1); + nXIndex = (Xitem)-m_vtXRange.begin(); + } + // Y �삁�쇅泥섎━ 異붽� + if (Yitem == m_vtYRange.begin()) { + dRangeY = 0; + nYIndex = 0; + } + else if (Yitem == m_vtYRange.end()) + { + Yitem = m_vtYRange.end() - 1; + dRangeY = *(Yitem - 1); + nYIndex = GetRangeCountY() - 1; + } + else + { + dRangeY = *(Yitem - 1); + nYIndex = (Yitem)-m_vtYRange.begin(); + } + MotorOffSetInfo pOffsetInfo = m_mapOffsetInfo[nXIndex][nYIndex]; + + dXpos = floor((pOffsetInfo.dXoffSetValue * 1000)) / 1000.0; + dYpos = floor((pOffsetInfo.dYoffSetValue * 1000)) / 1000.0; + GlassPosX = GlassPosX + dXpos; + GlassPosY = GlassPosY + dYpos; + +// g_pLog->DisplayMessage(_T("Motor �삤�봽�뀑�쑝濡� �쟻�슜, �뻾蹂� �삤�봽�뀑: X = %.3lf, Y = %.3lf Rate : X = %.3lf, Y = %.3lf "), dXpos, dYpos, pOffsetInfo.dXRate, pOffsetInfo.dYRate); + return TRUE; +} + +//setter +void CMotorOffsetData::SetRangeCountX(_In_ unsigned int nCount) { + m_vtXRange.resize(nCount); + m_vtXRange; +} +void CMotorOffsetData::SetRangeCountY(_In_ unsigned int nCount) { m_vtYRange.resize(nCount); } +BOOL CMotorOffsetData::SetRangeX(_In_ unsigned int nIdx, _In_ double fX) //exception need +{ + if (m_vtXRange.size() <= nIdx) return FALSE; + m_vtXRange[nIdx] = fX; + return TRUE; +} +BOOL CMotorOffsetData::SetRangeY(_In_ unsigned int nIdx, _In_ double fY) +{ + if (m_vtYRange.size() < nIdx) return FALSE; + m_vtYRange[nIdx] = fY; + return TRUE; +} + +BOOL CMotorOffsetData::SetOffsetValue(_In_ unsigned int nXIndex, _In_ unsigned int nYIndex, _In_ MotorOffSetInfo pOffsetInfo) +{ + m_mapOffsetInfo[(nXIndex)][(nYIndex)] = pOffsetInfo; + return TRUE; +} + +//getter +int CMotorOffsetData::GetRangeCountX() { return m_vtXRange.size(); } +int CMotorOffsetData::GetRangeCountY() { return m_vtYRange.size(); } +double CMotorOffsetData::GetRangeX(_In_ unsigned int nIdx) +{ + if (nIdx > m_vtXRange.size()) return 0; + return m_vtXRange[nIdx]; +} //exception need +double CMotorOffsetData::GetRangeY(_In_ unsigned int nIdx) +{ + if (nIdx > m_vtYRange.size()) return 0; + return m_vtYRange[nIdx]; +} +MotorOffSetInfo CMotorOffsetData::GetOffsetValue(_In_ int nXIndex, _In_ int nYIndex) +{ + MotorOffSetInfo pTemp; + if (nXIndex > m_vtXRange.size() || nYIndex > m_vtYRange.size()) return pTemp; + return m_mapOffsetInfo[nXIndex][nYIndex]; +} + +// File Access +BOOL CMotorOffsetData::WriteConfigFile(int nIdx) +{ + BOOL bReturn = FALSE; + CMacroFile macroFile; + macroFile.Clear(); + CString strItem = _T(""); + CString strData; + double dData = 0; + + CString strFilePath; + strFilePath.Format(_T("%s\\%s_%d.cfg"), _REVIEW_SERVER_CONFIG_PATH_, MOTOR_OFFSET_CONFIGFILE_DEFAULT_NAME, nIdx); + + int nXRangeIndex = 0; + int nYRangeIndex = 0; + if (m_vtXRange.empty() && m_vtYRange.empty()) return FALSE; + nXRangeIndex = GetRangeCountX(); + nYRangeIndex = GetRangeCountY(); + + strItem.Format(_T("%d_XRANGE_COUNT"), nIdx); + macroFile.SetItem(strItem, nXRangeIndex); + + for (int nIdex = 0; nIdex < nXRangeIndex; nIdex++) + { + strItem.Format(_T("%d_X_RANGE_%d"), nIdx, nIdex); + dData = GetRangeX(nIdex); + macroFile.SetItem(strItem, dData); + } + + strItem.Format(_T("%d_YRANGE_COUNT"), nIdx); + macroFile.SetItem(strItem, nYRangeIndex); + + + // fot loop + for (int nIdex = 0; nIdex < nYRangeIndex; nIdex++) + { + strItem.Format(_T("%d_Y_RANGE_%d"), nIdx, nIdex); + dData = GetRangeY(nIdex); + macroFile.SetItem(strItem, dData); + } + + + for (int nXposIndex = 0; nXposIndex < nXRangeIndex; nXposIndex++) + { + for (int nYposIndex = 0; nYposIndex < nYRangeIndex; nYposIndex++) + { + MotorOffSetInfo pOffsetInfo; + pOffsetInfo = GetOffsetValue(nXposIndex, nYposIndex); + strItem.Format(_T("[%d][%d][%d]_X"),nIdx, nXposIndex, nYposIndex); + dData = pOffsetInfo.dXoffSetValue; + macroFile.SetItem(strItem, dData); + + strItem.Format(_T("[%d][%d][%d]_Y"),nIdx, nXposIndex, nYposIndex); + dData = pOffsetInfo.dYoffSetValue; + macroFile.SetItem(strItem, dData); + + } + } + bReturn = macroFile.Write(strFilePath); + + return bReturn; +} + +BOOL CMotorOffsetData::ReadConfigFile(int nIdx) +{ + CString strPath = _T(""); + strPath.Format(_T("%s\\%s_%d.cfg"), _REVIEW_SERVER_CONFIG_PATH_, MOTOR_OFFSET_CONFIGFILE_DEFAULT_NAME, nIdx); + if (LoadInfo(strPath, nIdx) == FALSE) + { + + return FALSE; + } + return TRUE; +} +BOOL CMotorOffsetData::LoadInfo(CString strFilePath, int nIdx) +{ + CMacroFile macroFile; + if (!macroFile.Read(strFilePath)) return FALSE; + + CString strItem = _T(""); + int nXRangeIndex = 0; + int nYRangeIndex = 0; + double nXRange = 0; + double nYRange = 0; + MotorOffSetInfo pOffsetInfo; + memset(&pOffsetInfo, 0, sizeof(MotorOffSetInfo)); + double dXoffSetValue = 0; + double dYoffSetValue = 0; + double dXRate = 0; + double dYRate = 0; + CString strTmp; + strTmp.Format(_T("%d_XRANGE_COUNT"), nIdx); + macroFile.GetItem(strTmp, nXRangeIndex, 0); + strTmp.Format(_T("%d_YRANGE_COUNT"), nIdx); + macroFile.GetItem(strTmp, nYRangeIndex, 0); + SetRangeCountX(nXRangeIndex); + SetRangeCountY(nYRangeIndex); + + for (int nIdex = 0; nIdex < nXRangeIndex; nIdex++) + { + strItem.Format(_T("%d_X_RANGE_%d"),nIdx, nIdex); + macroFile.GetItem(strItem, nXRange); + SetRangeX(nIdex, nXRange); + } + for (int nIdex = 0; nIdex < nYRangeIndex; nIdex++) + { + strItem.Format(_T("%d_Y_RANGE_%d"),nIdx, nIdex); + macroFile.GetItem(strItem, nYRange); + SetRangeY(nIdex, nYRange); + } + + for (int nXposIndex = 0; nXposIndex < nXRangeIndex; nXposIndex++) + { + for (int nYposIndex = 0; nYposIndex < nYRangeIndex; nYposIndex++) + { + + strItem.Format(_T("[%d][%d][%d]_X"),nIdx, nXposIndex, nYposIndex); + macroFile.GetItem(strItem, dXoffSetValue); + pOffsetInfo.dXoffSetValue = dXoffSetValue; + + strItem.Format(_T("[%d][%d][%d]_Y"),nIdx, nXposIndex, nYposIndex); + macroFile.GetItem(strItem, dYoffSetValue); + pOffsetInfo.dYoffSetValue = dYoffSetValue; + + SetOffsetValue(nXposIndex, nYposIndex, pOffsetInfo); + } + } + return TRUE; +}; + +// CDlgMotorOffSetTool ���솕 �긽�옄 + +IMPLEMENT_DYNAMIC(CDlgMotorOffSetTool, CDialogEx) + +CDlgMotorOffSetTool::CDlgMotorOffSetTool(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_DLG_MOTOR_OFFSET_TOOL, pParent) + , m_nEditXposCount(0) + , m_nEditYposCount(0) + , m_nCurOffsetModuleIdx(0) +{ + InitializeCriticalSection(&m_csMapSafer); +} + +CDlgMotorOffSetTool::~CDlgMotorOffSetTool() +{ + DeleteCriticalSection(&m_csMapSafer); +} + +void CDlgMotorOffSetTool::DoDataExchange(CDataExchange* pDX) +{ + DDX_Control(pDX, IDC_GRID_MOTOR_OFFSET_INFO, m_ctrlGridMotorOffSetInfo); + DDX_Text(pDX, IDC_EDIT_MOTOR_OFFSET_COUNTX, m_nEditXposCount); + DDX_Text(pDX, IDC_EDIT_MOTOR_OFFSET_COUNTY, m_nEditYposCount); + DDX_Control(pDX, IDC_COMBO_MOTOR_OFFSET_MODULEIDX, m_ctrlCmbModuleIdx); + CDialogEx::DoDataExchange(pDX); +} + + + +BEGIN_MESSAGE_MAP(CDlgMotorOffSetTool, CDialogEx) + ON_BN_CLICKED(IDCANCEL, &CDlgMotorOffSetTool::OnBnClickedCancel) + ON_BN_CLICKED(IDOK, &CDlgMotorOffSetTool::OnBnClickedOK) + ON_EN_KILLFOCUS(IDC_EDIT_MOTOR_OFFSET_COUNTX, &CDlgMotorOffSetTool::OnXCountKillFocus) + ON_EN_KILLFOCUS(IDC_EDIT_MOTOR_OFFSET_COUNTY, &CDlgMotorOffSetTool::OnYCountKillFocus) + ON_CBN_SELCHANGE(IDC_COMBO_MOTOR_OFFSET_MODULEIDX, &CDlgMotorOffSetTool::OnSelchangeComboMotorOffsetModuleidx) +END_MESSAGE_MAP() + + +BOOL CDlgMotorOffSetTool::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + InitProcess(); + return 0; +} + +void CDlgMotorOffSetTool::OnBnClickedOK() +{ + CDialogEx::OnOK(); + UpdateData(TRUE); + + ApplyOffSetInfo(); + UpdateGridcontrol(); + int nIdx = 0; + for (auto it =m_mapMotorOffsetInfo.begin(); it != m_mapMotorOffsetInfo.end(); it++) + { + it->second.WriteConfigFile(nIdx++); + } + + // Critical Section Start + EnterCriticalSection(&m_csMapSafer); + m_mapMotorOffsetInfo_OLD = m_mapMotorOffsetInfo; + LeaveCriticalSection(&m_csMapSafer); +} + +void CDlgMotorOffSetTool::OnBnClickedCancel() +{ + // TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎. + CDialogEx::OnCancel(); + UpdateData(TRUE); + + ApplyOffSetInfo(); + UpdateGridcontrol(); + + CString strMessage; + + // CheckDiff(); + + if (m_mapMotorOffsetInfo_OLD == m_mapMotorOffsetInfo) + { + return; + } + else if (IDYES == AfxMessageBox(_T("蹂�寃쎌젏�씠 諛쒓껄�릺�뿀�뒿�땲�떎 .���옣 �븯�떆寃좎뒿�땲源�?"), MB_YESNO | MB_ICONQUESTION)) + { + int nIdx = 0; + for (auto it = m_mapMotorOffsetInfo.begin(); it != m_mapMotorOffsetInfo.end(); it++) + { + it->second.WriteConfigFile(nIdx++); + } + // Critical Section Start + EnterCriticalSection(&m_csMapSafer); + m_mapMotorOffsetInfo_OLD = m_mapMotorOffsetInfo; + LeaveCriticalSection(&m_csMapSafer); + // Critical Section End + } + else + { + EnterCriticalSection(&m_csMapSafer); + m_mapMotorOffsetInfo = m_mapMotorOffsetInfo_OLD; + LeaveCriticalSection(&m_csMapSafer); + } +} + +void CDlgMotorOffSetTool::OnXCountKillFocus() +{ + UpdateData(TRUE); + + auto pMotorOffsetData = &m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx]; + + + if (m_nEditYposCount <= 0) m_nEditYposCount = 1; + if (m_nEditXposCount <= 0) m_nEditXposCount = 1; + if (m_nEditYposCount > 100) m_nEditYposCount = 100; + if (m_nEditXposCount > 100) m_nEditXposCount = 100; + pMotorOffsetData->SetRangeCountX(m_nEditXposCount); + pMotorOffsetData->SetRangeCountY(m_nEditYposCount); + + m_ctrlGridMotorOffSetInfo.DeleteAllItems(); + + UpdateData(FALSE); + InitOffSetInfoGridControl(); + UpdateGridcontrol(); + Invalidate(TRUE); +} + +void CDlgMotorOffSetTool::OnYCountKillFocus() +{ + UpdateData(TRUE); + + auto pMotorOffsetData = &m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx]; + + + if (m_nEditYposCount <= 0) m_nEditYposCount = 1; + if (m_nEditXposCount <= 0) m_nEditXposCount = 1; + if (m_nEditYposCount > 100) m_nEditYposCount = 100; + if (m_nEditXposCount > 100) m_nEditXposCount = 100; + pMotorOffsetData->SetRangeCountX(m_nEditXposCount); + pMotorOffsetData->SetRangeCountY(m_nEditYposCount); + + m_ctrlGridMotorOffSetInfo.DeleteAllItems(); + + UpdateData(FALSE); + InitOffSetInfoGridControl(); + UpdateGridcontrol(); + Invalidate(TRUE); +} + +void CDlgMotorOffSetTool::InitOffSetInfoGridControl() +{ + int nRowIdx, nColIdx, nRows, nCols, nFixRows, nDataColumnWidth, nMargin; + CString strTemp; + CRect rect; + nRows = 0; + nCols = 0; + nFixRows = 0; + nRowIdx = 0; + nColIdx = 0; + double dGlassXsize = 1500; + auto pCurrentOffsetData = &m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx]; + + bool bDefault = FALSE; + { + nRows = (pCurrentOffsetData->GetRangeCountY()) + GRID_ROW_START_POINT; + + } + + { + nCols = (pCurrentOffsetData->GetRangeCountX() * 2) + GRID_COL_START_POINT; + } + + m_ctrlGridMotorOffSetInfo.GetWindowRect(&rect); + m_ctrlGridMotorOffSetInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0)); + m_ctrlGridMotorOffSetInfo.SetRowCount(nRows); + m_ctrlGridMotorOffSetInfo.SetColumnCount(nCols); + for (int nIndex = 0; nIndex < nRows; nIndex++) { + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nIndex, 0, Color[((nIndex / 2) - 1) % 10]); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nIndex, 1, Color[((nIndex / 2) - 1) % 10]); + + } + for (int nIndex = 0; nIndex < nCols; nIndex++) { + m_ctrlGridMotorOffSetInfo.SetItemBkColour(0, nIndex, Color[((nIndex / 2) - 1) % 10]); + } + + nMargin = 5; + nDataColumnWidth = 40; + + GV_ITEM Item; + + //泥ル쾲吏� + Item.mask = GVIF_TEXT; + Item.row = 0; + Item.col = 0; + //init + for (int nRowIdex = 0; nRowIdex < nRows; nRowIdex++) + { + for (int nColIdex = 0; nColIdex < nCols; nColIdex++) + { + Item.row = nRowIdex; + Item.col = nColIdex; + strTemp.Format(_T("")); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + } + } + nRowIdx = 0; + nColIdx = 0; + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("0 , 0")); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 35); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + + nRowIdx++; + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("[YRange�넃]")); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 35); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + + nRowIdx = 0; + nColIdx = 1; + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("[XRange�넂]")); //Max�� �뿴留욎땄 + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 35); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + + nRowIdx++; + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("*")); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 35); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + for (int nRowIndex = GRID_ROW_START_POINT; nRowIndex < nRows; nRowIndex++) + { + + nRowIdx = nRowIndex; + nColIdx = 1; + + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("Offset")); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 35); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + + + } + for (int nColIndex = GRID_COL_START_POINT; nColIndex < nCols; nColIndex++) + { + + nRowIdx = 1; + nColIdx = nColIndex; + + if (nColIndex % 2 == 0) + { + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("[%d][x]"), nColIdx / 2); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 15); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + } + else + { + Item.row = nRowIdx; + Item.col = nColIdx; + strTemp.Format(_T("[%d][y]"), nColIdx / 2); + Item.strText = strTemp; + m_ctrlGridMotorOffSetInfo.SetItem(&Item); + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRowIdx, nColIdx, NOFIXCELLCOLOR); + m_ctrlGridMotorOffSetInfo.SetColumnWidth(nColIdx, nDataColumnWidth + 15); + m_ctrlGridMotorOffSetInfo.SetItemState(nRowIdx, nColIdx, m_ctrlGridMotorOffSetInfo.GetItemState(nRowIdx, nColIdx) | GVIS_READONLY); + } + } +} + +void CDlgMotorOffSetTool::SetColorType() +{ + for (int i = 0; i < sizeof(Color); i++) + { + if (i == 0) { + Color[0] = FFA7A7; + } + else if (i == 1) { + Color[1] = FFC19E; + } + else if (i == 2) { + Color[2] = FFE08C; + } + else if (i == 3) { + Color[3] = FAED7D; + } + else if (i == 4) { + Color[4] = FFB2F5; + } + else if (i == 5) { + Color[5] = A566FF; + } + else if (i == 6) { + Color[6] = D9418C; + } + else if (i == 7) { + Color[7] = A00D8FF; + } + else if (i == 8) { + Color[8] = A2F9D27; + } + else if (i == 9) { + Color[9] = A4641D9; + } + } +} + +void CDlgMotorOffSetTool::InitProcess() +{ + SetColorType(); + + CString strTmp; + for (int i =0; i<2; i++) + { + strTmp.Format(_T("%d"), i); + m_ctrlCmbModuleIdx.AddString(strTmp); + } + m_ctrlCmbModuleIdx.SetCurSel(m_nCurOffsetModuleIdx); + + BOOL bRet = FALSE; + //怨듦컙 留뚮뱾湲� + for (int i = 0; i < 2; i++) + { + CMotorOffsetData pMotorOffsetData; + bRet = pMotorOffsetData.ReadConfigFile(i); + if (bRet == FALSE) + break; + + m_mapMotorOffsetInfo.insert(std::make_pair(i, pMotorOffsetData)); + + } + if (bRet == FALSE) + return; + + InitOffSetInfoGridControl(); + UpdateGridcontrol(); // map -> Grid + + // CriticalSection Start + EnterCriticalSection(&m_csMapSafer); + m_mapMotorOffsetInfo_OLD = m_mapMotorOffsetInfo; + LeaveCriticalSection(&m_csMapSafer); +} + +void CDlgMotorOffSetTool::UpdateGridcontrol() +{ + //int nModuleidx = 0; + int nRow = GRID_ROW_START_POINT; + int nCol = GRID_COL_START_POINT; + CString strData; + + m_nEditXposCount = m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountX(); + m_nEditYposCount = m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountY(); + CString strTemp = _T(""); + strTemp.Format(_T("%d"), m_nEditXposCount); + SetDlgItemText(IDC_EDIT_MOTOR_OFFSET_COUNTX, strTemp); + strTemp.Format(_T("%d"), m_nEditYposCount); + SetDlgItemText(IDC_EDIT_MOTOR_OFFSET_COUNTY, strTemp); + + for (int nXIndex = 0; nXIndex < m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountX(); nXIndex++) + { + strData.Format(_T("%.03lf"), m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeX(nXIndex)); + m_ctrlGridMotorOffSetInfo.SetItemText(0, nCol, strData); //X Range + m_ctrlGridMotorOffSetInfo.MergeCells(0, nCol, 0, nCol + 1); + nCol += 2; + + } + for (int nYIndex = 0; nYIndex < m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountY(); nYIndex++) + { + + strData.Format(_T("%.03lf"), m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeY(nYIndex)); + m_ctrlGridMotorOffSetInfo.SetItemText(nRow, 0, strData); + nRow ++; + } + + nCol = GRID_COL_START_POINT; + nRow = GRID_ROW_START_POINT; + for (int nYposIndex = 0; nYposIndex < m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountY(); nYposIndex++) + { + for (int nXposIndex = 0; nXposIndex < m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetRangeCountX(); nXposIndex++) + { + MotorOffSetInfo pOffset = m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx].GetOffsetValue(nXposIndex, nYposIndex); + + strData.Format(_T("%.03lf"), pOffset.dXoffSetValue); + m_ctrlGridMotorOffSetInfo.SetItemText(nRow, nCol, strData);//X offset + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRow, nCol, RGB(0xF0, 0xF0, 0xD0)); + + nCol++; + + + strData.Format(_T("%.03lf"), pOffset.dYoffSetValue); + m_ctrlGridMotorOffSetInfo.SetItemText(nRow, nCol, strData); //Y Offset + m_ctrlGridMotorOffSetInfo.SetItemBkColour(nRow, nCol, RGB(0xF0, 0xF0, 0xD0)); + + nCol++; + } + nRow += 1; + nCol = GRID_COL_START_POINT; + } +} + +BOOL CDlgMotorOffSetTool::CalOffsetInfo(int nModuleIdx, double & XPos, double & YPos) +{ + BOOL nRet = m_mapMotorOffsetInfo_OLD[nModuleIdx].CalcOffset(XPos, YPos); + return nRet; +} + +void CDlgMotorOffSetTool::ApplyOffSetInfo() +{ + //int nModuleidx = 0; + double dXoffset = 0; + double dYoffset = 0; + double dXRate = 0; + double dYRate = 0; + int nRow = GRID_ROW_START_POINT; + int nCol = GRID_COL_START_POINT; + CString strData; + CString strAOIName; + double dXRange = 0; + double dYRange = 0; + double nGlassSize = 2500; + + auto pMotorOffSetData = &m_mapMotorOffsetInfo[m_nCurOffsetModuleIdx]; + + MotorOffSetInfo pOffsetInfo; + nCol = GRID_COL_START_POINT; + for (int nXposIndex = 0; nXposIndex < pMotorOffSetData->GetRangeCountX(); nXposIndex++) + { + strData = m_ctrlGridMotorOffSetInfo.GetItemText(0, nCol); //X Range + dXRange = atof((CStringA)strData); + pMotorOffSetData->SetRangeX(nXposIndex, dXRange); + // strData = m_ctrlGridReviewOffSetInfo.GetItemText(nRow, 1); //Y Max + nCol += 2; + } + nRow = GRID_ROW_START_POINT; + for (int nYposIndex = 0; nYposIndex < pMotorOffSetData->GetRangeCountY(); nYposIndex++) + { + strData = m_ctrlGridMotorOffSetInfo.GetItemText(nRow, 0); //YRange + dYRange = atof((CStringA)strData); + pMotorOffSetData->SetRangeY(nYposIndex, dYRange); + nRow ++; + } + nCol = GRID_COL_START_POINT; + nRow = GRID_ROW_START_POINT; + + for (int nYposIndex = 0; nYposIndex < pMotorOffSetData->GetRangeCountY(); nYposIndex++) + { + + for (int nXposIndex = 0; nXposIndex < pMotorOffSetData->GetRangeCountX(); nXposIndex++) + { + + strData = m_ctrlGridMotorOffSetInfo.GetItemText(nRow, nCol); //X offset + pOffsetInfo.dXoffSetValue = atof((CStringA)strData); + nCol++; + strData = m_ctrlGridMotorOffSetInfo.GetItemText(nRow, nCol); //Y Offset + pOffsetInfo.dYoffSetValue = atof((CStringA)strData); + + pMotorOffSetData->SetOffsetValue(nXposIndex, nYposIndex, pOffsetInfo); + nCol++; + } + nRow ++; + nCol = GRID_COL_START_POINT; + } +}; + +void CDlgMotorOffSetTool::OnSelchangeComboMotorOffsetModuleidx() +{ + ApplyOffSetInfo(); + m_nCurOffsetModuleIdx = m_ctrlCmbModuleIdx.GetCurSel(); + + InitOffSetInfoGridControl(); + UpdateGridcontrol(); // map -> Grid + + // CriticalSection Start + EnterCriticalSection(&m_csMapSafer); + m_mapMotorOffsetInfo_OLD = m_mapMotorOffsetInfo; + LeaveCriticalSection(&m_csMapSafer); +} -- Gitblit v1.9.3