#include "stdafx.h" #include "LaiPuLaser.h" #include "DlgMarkArea.h" #include "afxdialogex.h" #include "GlobalFunction.h" #include "MsgBox.h" #include "LogMgr.h" #include "ObjComponentMgr.h" #include "AuthorityMgr.h" #include "FileMgr.h" #include "EnumDirection.h" #include "MarkAreaMgr.h" #include "Mirror.h" IMPLEMENT_DYNAMIC(CDlgMarkArea, CDialogEx) BEGIN_MESSAGE_MAP(CDlgMarkArea, CDialogEx) ON_BN_CLICKED(IDC_NEW, &CDlgMarkArea::OnBnClickedNew) ON_BN_CLICKED(IDC_DELETE, &CDlgMarkArea::OnBnClickedDelete) ON_BN_CLICKED(IDC_COMMIT, &CDlgMarkArea::OnBnClickedCommit) ON_BN_CLICKED(IDC_UP_BTN, &CDlgMarkArea::OnBnClickedUpBtn) ON_BN_CLICKED(IDC_DOWN_BTN, &CDlgMarkArea::OnBnClickedDownBtn) ON_BN_CLICKED(IDC_LEFT_BTN, &CDlgMarkArea::OnBnClickedLeftBtn) ON_BN_CLICKED(IDC_RIGHT_BTN, &CDlgMarkArea::OnBnClickedRightBtn) ON_NOTIFY(NM_CLICK, IDC_BASE_OBJ_LIST, &CDlgMarkArea::OnNMClickValStrList) ON_BN_CLICKED(IDC_MOVE_UP, &CDlgMarkArea::OnBnClickedMoveUp) ON_BN_CLICKED(IDC_MOVE_DOWN, &CDlgMarkArea::OnBnClickedMoveDown) ON_BN_CLICKED(IDC_ZOOM_OUT, &CDlgMarkArea::OnBnClickedZoomOut) ON_BN_CLICKED(IDC_ZOOM_IN, &CDlgMarkArea::OnBnClickedZoomIn) ON_BN_CLICKED(IDC_SHOW_AREA, &CDlgMarkArea::OnBnClickedShowArea) ON_BN_CLICKED(IDC_DEL_ALL, &CDlgMarkArea::OnBnClickedDelAll) ON_BN_CLICKED(IDCANCEL, &CDlgMarkArea::OnBnClickedCancel) ON_BN_CLICKED(IDOK, &CDlgMarkArea::OnBnClickedOk) ON_BN_CLICKED(IDC_READ_FILE, &CDlgMarkArea::OnBnClickedReadFile) ON_BN_CLICKED(IDC_SAVE_FILE, &CDlgMarkArea::OnBnClickedSaveFile) ON_BN_CLICKED(IDC_BY_OBJ, &CDlgMarkArea::OnBnClickedByObj) ON_BN_CLICKED(IDC_ARRAY_CREAT, &CDlgMarkArea::OnBnClickedArrayCreat) ON_BN_CLICKED(IDC_SET_SIZE, &CDlgMarkArea::OnBnClickedSetSize) ON_BN_CLICKED(IDC_CREAT_CROSS, &CDlgMarkArea::OnBnClickedCreatCross) END_MESSAGE_MAP() CDlgMarkArea::CDlgMarkArea(CMarkAreaMgr &Mgr,CWnd* pParent /*=NULL*/) : CDialogEx(CDlgMarkArea::IDD, pParent),m_Mgr(Mgr) { m_CntX = 4; m_CntY = 3; } CDlgMarkArea::~CDlgMarkArea() { m_Mgr.SetbDrawIdx(false); GetCurViewPtr()->RefreshView(); } void CDlgMarkArea::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LEFT_BTN, m_XLeftBtn); DDX_Control(pDX, IDC_RIGHT_BTN, m_XRightBtn); DDX_Control(pDX, IDC_UP_BTN, m_XTopBtn); DDX_Control(pDX, IDC_DOWN_BTN, m_XDownBtn); DDX_Text(pDX, IDC_MOVE_DIS, m_MoveDis); DDX_Control(pDX, IDC_BASE_OBJ_LIST, m_List); DDX_Text(pDX, IDC_CENTER_X, m_CurObj.m_BasePt.x); DDX_Text(pDX, IDC_CENTER_Y, m_CurObj.m_BasePt.y); DDX_Text(pDX, IDC_OFFSET_X, m_CurObj.m_Offset.x); DDX_Text(pDX, IDC_OFFSET_Y, m_CurObj.m_Offset.y); DDX_Text(pDX, IDC_OFFSET_X2, m_CurObj.m_Offset2.x); DDX_Text(pDX, IDC_OFFSET_Y2, m_CurObj.m_Offset2.y); DDX_Text(pDX, IDC_AREA_W, m_CurObj.m_Size.w); DDX_Text(pDX, IDC_AREA_H, m_CurObj.m_Size.h); DDX_Control(pDX, IDC_SHOW_AREA, m_ShowArea); DDX_Text(pDX, IDC_CNT_X, m_CntX); DDX_Text(pDX, IDC_CNT_Y, m_CntY); DDX_Control(pDX, IDC_ALL_AREA_MOVE_CHECK, m_AllAreaMove); } BOOL CDlgMarkArea::OnInitDialog() { CDialogEx::OnInitDialog(); m_MoveDis = 10;//移动的距离(mm) m_XLeftBtn.LoadBitmaps(IDB_LEFT_BTN,IDB_LEFT_DOWN_BTN,IDB_LEFT_BTN,IDB_LEFT_BTN); m_XRightBtn.LoadBitmaps(IDB_RIGHT_BTN,IDB_RIGHT_BTN_DOWN,IDB_RIGHT_BTN,IDB_RIGHT_BTN); m_XTopBtn.LoadBitmaps(IDB_TOP_BTN,IDB_TOP_DOWN_BTN,IDB_TOP_BTN,IDB_TOP_BTN); m_XDownBtn.LoadBitmaps(IDB_DOWN_BTN,IDB_DOWN_DOWN_BTN,IDB_DOWN_BTN,IDB_DOWN_BTN); //初始化列表 IniList(); m_OldMgr = m_Mgr;//备份对象 UpdateAreaList(); //是否显示 m_ShowArea.SetCheck(m_Mgr.GetbDraw()); m_Mgr.SetbDrawIdx(true); UpdateData(FALSE); return TRUE; } #if 1 //初始化列表 void CDlgMarkArea::IniList() { //设置风格 m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //设置列 int idx = 0; int w = 80; m_List.InsertColumn(idx,"序号",LVCFMT_CENTER,40,-1); idx++; m_List.InsertColumn(idx,"轨道1偏移X",LVCFMT_CENTER,w,-1); idx++; m_List.InsertColumn(idx,"轨道1偏移Y",LVCFMT_CENTER,w,-1); idx++; m_List.InsertColumn(idx,"轨道2偏移X",LVCFMT_CENTER,w,-1); idx++; m_List.InsertColumn(idx,"轨道2偏移Y",LVCFMT_CENTER,w,-1); idx++; } //刷新补偿区域列表 void CDlgMarkArea::UpdateAreaList() { m_List.DeleteAllItems(); m_Mgr.InsertList(m_List); //设置列表的选中项 m_List.SetItemState(m_CurSelListIdx,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED); m_List.SetFocus(); GetCurViewPtr()->MoveViewCenter(); GetCurViewPtr()->RefreshView(); UpdateData(FALSE); } //获取list 当前选择的行号 int CDlgMarkArea::GetCurListIdx(CListCtrl &list) { POSITION pos = m_List.GetFirstSelectedItemPosition(); if (pos == NULL) { return -1; } else { while (pos) { int nItem = m_List.GetNextSelectedItem(pos); return nItem; } } return -1; } //单击列表 void CDlgMarkArea::OnNMClickValStrList(NMHDR *pNMHDR, LRESULT *pResult) { *pResult = 0; AreaListEvent(); } //list 事件 void CDlgMarkArea::AreaListEvent() { UpdateData(TRUE); m_CurSelListIdx=GetCurListIdx(m_List); m_Mgr.OpArea(m_CurSelListIdx,m_CurObj,true); m_Mgr.SetCurSelIdx(m_CurSelListIdx); UpdateData(FALSE); DbSize size = m_CurObj.GetSize(); CString LogStr; LogStr.Format(_T("[Area size W] = [%f] ,[Area size H] = [%f]"),size.w,size.h); gLogMgr->WriteDebugLog(LogStr); Dbxy pt = m_CurObj.GetRealBasePt(); LogStr.Format(_T("[RealBasePt X] = [%f] ,[RealBasePt Y] = [%f]"),pt.x,pt.y); gLogMgr->WriteDebugLog(LogStr); //显示area 区域范围的obj gObjComponentMgr->ResetAllMarkedState(); gObjComponentMgr->SetMarkedStateRect(m_CurObj.GetRect(),false); GetCurViewPtr()->RefreshView(); } #endif #if 1 void CDlgMarkArea::OnBnClickedNew() { m_Mgr.Add(); UpdateAreaList(); } //单个删除 void CDlgMarkArea::OnBnClickedDelete() { if(m_CurSelListIdx>=0) { m_Mgr.DelSel(m_CurSelListIdx); UpdateAreaList(); } } //全部删除 void CDlgMarkArea::OnBnClickedDelAll() { CMsgBox MsgBox; if(MsgBox.ConfirmOkCancel(_T("全部删除?"))) { m_Mgr.DelAll(); UpdateAreaList(); } } //应用 void CDlgMarkArea::OnBnClickedCommit() { UpdateData(TRUE); DbSize MirrorSize = gMirror->GetRange(); if(m_CurObj.m_Size.w>MirrorSize.w || m_CurObj.m_Size.h>MirrorSize.h) { CMsgBox MsgBox; CString s; s.Format(_T("加工区域超出振镜范围[%0.0f][%0.0f]"),MirrorSize.w,MirrorSize.h); MsgBox.Show(s); } m_Mgr.OpArea(m_CurSelListIdx,m_CurObj,false); UpdateAreaList(); } void CDlgMarkArea::OnBnClickedMoveUp() { m_Mgr.Order(m_CurSelListIdx,true); m_Mgr.SetCurSelIdx(m_CurSelListIdx); UpdateAreaList(); } void CDlgMarkArea::OnBnClickedMoveDown() { m_Mgr.Order(m_CurSelListIdx,false); m_Mgr.SetCurSelIdx(m_CurSelListIdx); UpdateAreaList(); } void CDlgMarkArea::OnBnClickedUpBtn() { UpdateData(TRUE); if(m_AllAreaMove.GetCheck()) m_Mgr.MoveAllArea(m_MoveDis,_DIR_U); else m_CurObj.m_BasePt.y += m_MoveDis; UpdateData(FALSE); OnBnClickedCommit(); } void CDlgMarkArea::OnBnClickedDownBtn() { UpdateData(TRUE); if(m_AllAreaMove.GetCheck()) m_Mgr.MoveAllArea(m_MoveDis*(-1),_DIR_D); else m_CurObj.m_BasePt.y -= m_MoveDis; UpdateData(FALSE); OnBnClickedCommit(); } void CDlgMarkArea::OnBnClickedLeftBtn() { UpdateData(TRUE); if(m_AllAreaMove.GetCheck()) m_Mgr.MoveAllArea(m_MoveDis*(-1),_DIR_L); else m_CurObj.m_BasePt.x -= m_MoveDis; UpdateData(FALSE); OnBnClickedCommit(); } void CDlgMarkArea::OnBnClickedRightBtn() { UpdateData(TRUE); if(m_AllAreaMove.GetCheck()) m_Mgr.MoveAllArea(m_MoveDis,_DIR_R); else m_CurObj.m_BasePt.x += m_MoveDis; UpdateData(FALSE); OnBnClickedCommit(); } #endif #if 1 void CDlgMarkArea::OnBnClickedZoomOut() { GetCurViewPtr()->OnZoomOut(); } void CDlgMarkArea::OnBnClickedZoomIn() { GetCurViewPtr()->OnZoomIn(); } void CDlgMarkArea::OnBnClickedShowArea() { UpdateData(TRUE); m_Mgr.SetbDraw(m_ShowArea.GetCheck()); GetCurViewPtr()->RefreshView(); } #endif #if 1 void CDlgMarkArea::OnBnClickedCancel() { m_Mgr = m_OldMgr;//恢复对象 m_Mgr.SetCurSelIdx(-1); CDialogEx::OnCancel(); } void CDlgMarkArea::OnBnClickedOk() { m_Mgr.SaveOrLoad(true);//写入文件 m_Mgr.SetCurSelIdx(-1); CDialogEx::OnOK(); } //从外部文件恢复 void CDlgMarkArea::OnBnClickedReadFile() { TCHAR szFilters[]=("PAR 文件(*.par)|*.par"); CFileDialog dlg(TRUE,("par"),("ParFile"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters); if(dlg.DoModal()==IDOK) { CFile file; if(file.Open(dlg.GetPathName(),CFile::modeRead)) { CArchive ar(&file,CArchive::load); m_Mgr.SaveOrLoadExt(ar); file.Close(); UpdateAreaList(); } else { gLogMgr->WriteDebugLog(_T("文件读取失败"), _LOG_ERROR); } } } //保存到外部文件 void CDlgMarkArea::OnBnClickedSaveFile() { TCHAR szFilters[]=("PAR 文件(*.par)|*.par"); CFileDialog dlg(FALSE,("par"),("ParFile"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters); if(dlg.DoModal()==IDOK) { CFile file(dlg.GetPathName(),CFile::modeReadWrite|CFile::modeCreate); CArchive ar(&file,CArchive::store); m_Mgr.SaveOrLoadExt(ar); } } #endif void CDlgMarkArea::OnBnClickedByObj() { CMsgBox MsgBox; if(MsgBox.ConfirmOkCancel(_T("Creat By Obj?"))) { m_Mgr.DelAll(); gObjComponentMgr->CreatAreaByObj(m_Mgr); UpdateAreaList(); } } //从右上角开始阵列area void CDlgMarkArea::OnBnClickedArrayCreat() { CMsgBox MsgBox; if(MsgBox.ConfirmOkCancel(_T("自动创建阵列区域?"))) { UpdateData(TRUE); m_Mgr.ArrayCreat(m_CntX,m_CntY); UpdateAreaList(); } } void CDlgMarkArea::OnBnClickedSetSize() { CMsgBox MsgBox; if(MsgBox.ConfirmOkCancel(_T("更新尺寸?"))) { gMarkAreaMgr->SetAllMarkSize(); UpdateAreaList(); } } void CDlgMarkArea::OnBnClickedCreatCross() { CMsgBox MsgBox; if(MsgBox.ConfirmOkCancel(_T("在每个区域中心创建一个十字?"))) { gMarkAreaMgr->CreatCenterCrossObj(); GetCurViewPtr()->RefreshView(); } }