You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

398 lines
10 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;//<2F>ƶ<EFBFBD><C6B6>ľ<EFBFBD><C4BE><EFBFBD>(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);
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
IniList();
m_OldMgr = m_Mgr;//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>
UpdateAreaList();
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
m_ShowArea.SetCheck(m_Mgr.GetbDraw());
m_Mgr.SetbDrawIdx(true);
UpdateData(FALSE);
return TRUE;
}
#if 1
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD>
void CDlgMarkArea::IniList()
{
//<2F><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD>
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int idx = 0;
int w = 80;
m_List.InsertColumn(idx,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",LVCFMT_CENTER,40,-1);
idx++;
m_List.InsertColumn(idx,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X",LVCFMT_CENTER,w,-1);
idx++;
m_List.InsertColumn(idx,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y",LVCFMT_CENTER,w,-1);
idx++;
m_List.InsertColumn(idx,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X",LVCFMT_CENTER,w,-1);
idx++;
m_List.InsertColumn(idx,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y",LVCFMT_CENTER,w,-1);
idx++;
}
//ˢ<>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
void CDlgMarkArea::UpdateAreaList()
{
m_List.DeleteAllItems();
m_Mgr.InsertList(m_List);
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>
m_List.SetItemState(m_CurSelListIdx,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
m_List.SetFocus();
GetCurViewPtr()->MoveViewCenter();
GetCurViewPtr()->RefreshView();
UpdateData(FALSE);
}
//<2F><>ȡlist <20><>ǰѡ<C7B0><D1A1><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
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;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
void CDlgMarkArea::OnNMClickValStrList(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
AreaListEvent();
}
//list <20>¼<EFBFBD>
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);
//<2F><>ʾarea <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>obj
gObjComponentMgr->ResetAllMarkedState();
gObjComponentMgr->SetMarkedStateRect(m_CurObj.GetRect(),false);
GetCurViewPtr()->RefreshView();
}
#endif
#if 1
void CDlgMarkArea::OnBnClickedNew()
{
m_Mgr.Add();
UpdateAreaList();
}
//<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>
void CDlgMarkArea::OnBnClickedDelete()
{
if(m_CurSelListIdx>=0)
{
m_Mgr.DelSel(m_CurSelListIdx);
UpdateAreaList();
}
}
//ȫ<><C8AB>ɾ<EFBFBD><C9BE>
void CDlgMarkArea::OnBnClickedDelAll()
{
CMsgBox MsgBox;
if(MsgBox.ConfirmOkCancel(_T("ȫ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>?")))
{
m_Mgr.DelAll();
UpdateAreaList();
}
}
//Ӧ<><D3A6>
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("<EFBFBD>ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>򳬳<EFBFBD><EFBFBD>񾵷<EFBFBD>Χ[%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;//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
m_Mgr.SetCurSelIdx(-1);
CDialogEx::OnCancel();
}
void CDlgMarkArea::OnBnClickedOk()
{
m_Mgr.SaveOrLoad(true);//д<><D0B4><EFBFBD>ļ<EFBFBD>
m_Mgr.SetCurSelIdx(-1);
CDialogEx::OnOK();
}
//<2F><><EFBFBD>ⲿ<EFBFBD>ļ<EFBFBD><C4BC>ָ<EFBFBD>
void CDlgMarkArea::OnBnClickedReadFile()
{
TCHAR szFilters[]=("PAR <20>ļ<EFBFBD>(*.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("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>"), _LOG_ERROR);
}
}
}
//<2F><><EFBFBD><EFBFBD>ⲿ<EFBFBD>ļ<EFBFBD>
void CDlgMarkArea::OnBnClickedSaveFile()
{
TCHAR szFilters[]=("PAR <20>ļ<EFBFBD>(*.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();
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ͻǿ<CFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>area
void CDlgMarkArea::OnBnClickedArrayCreat()
{
CMsgBox MsgBox;
if(MsgBox.ConfirmOkCancel(_T("<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?")))
{
UpdateData(TRUE);
m_Mgr.ArrayCreat(m_CntX,m_CntY);
UpdateAreaList();
}
}
void CDlgMarkArea::OnBnClickedSetSize()
{
CMsgBox MsgBox;
if(MsgBox.ConfirmOkCancel(_T("<EFBFBD><EFBFBD><EFBFBD>³ߴ<EFBFBD>?")))
{
gMarkAreaMgr->SetAllMarkSize();
UpdateAreaList();
}
}
void CDlgMarkArea::OnBnClickedCreatCross()
{
CMsgBox MsgBox;
if(MsgBox.ConfirmOkCancel(_T("<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʮ<EFBFBD><EFBFBD>?")))
{
gMarkAreaMgr->CreatCenterCrossObj();
GetCurViewPtr()->RefreshView();
}
}