|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
#include "MarkAreaMgr.h"
|
|
|
|
|
#include "CStringFuc.h"
|
|
|
|
|
#include "GlobalDrawMgr.h"
|
|
|
|
|
#include "FileMgr.h"
|
|
|
|
|
#include "LogMgr.h"
|
|
|
|
|
#include "ObjComponentMgr.h"
|
|
|
|
|
#include "WorkFileLable.h"
|
|
|
|
|
#include "WorkFileMgr.h"
|
|
|
|
|
#include "GlobalFunction.h"
|
|
|
|
|
#include "Layer.h"
|
|
|
|
|
#include "ObjPline.h"
|
|
|
|
|
#include "MsgBox.h"
|
|
|
|
|
#include "Mirror.h"
|
|
|
|
|
|
|
|
|
|
#define FILE_PATH _T("\\Parameter\\MarkArea\\MarkArea.par")
|
|
|
|
|
#define FIXED_FILE_PATH _T("\\Parameter\\MarkArea\\FixedMarkArea.par")//<2F>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ֻ<>ܶ<EFBFBD>)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CMarkAreaMgr *gMarkAreaMgr = new CMarkAreaMgr;
|
|
|
|
|
CMarkAreaMgr::CMarkAreaMgr(void)
|
|
|
|
|
{
|
|
|
|
|
m_CurSelIdx = -1;//<2F><>ǰѡ<C7B0><D1A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
m_bDraw = true;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_bDrawIdx = false;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʾarea <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
m_bShowReadDate = false;//<2F><>ʾʵ<CABE><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_CenterCrossR = 2;//<2F><><EFBFBD><EFBFBD>ʮ<EFBFBD>ֵİ뾶mm
|
|
|
|
|
}
|
|
|
|
|
CMarkAreaMgr::~CMarkAreaMgr(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::Ini()
|
|
|
|
|
{
|
|
|
|
|
SaveOrLoad(false);//<2F><>ȡ<EFBFBD>ļ<EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CMarkAreaMgr::Draw(CDC* pDC)
|
|
|
|
|
{
|
|
|
|
|
if(!m_bDraw)
|
|
|
|
|
return;
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
if(m_CurSelIdx==i)
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec[i].Draw(pDC,true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec[i].Draw(pDC,false);
|
|
|
|
|
}
|
|
|
|
|
if(m_bDrawIdx)
|
|
|
|
|
{
|
|
|
|
|
//<2F>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CString str;
|
|
|
|
|
str.Format(_T("%d"),i+1);
|
|
|
|
|
gDraw->DrawTxt(pDC,str,m_AreaVec[i].GetBasePt());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>area ,һ<><D2BB>ֻ<EFBFBD><D6BB>ѡһ<D1A1><D2BB>
|
|
|
|
|
void CMarkAreaMgr::SelAreaByPt(Dbxy pt)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
if(m_AreaVec[i].IsPtInArea(pt))
|
|
|
|
|
{
|
|
|
|
|
SetCurSelIdx(i);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ѡ<><D1A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>area
|
|
|
|
|
void CMarkAreaMgr::SelFristArea()
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
if(i==0)
|
|
|
|
|
m_AreaVec[i].SetSelState(true);
|
|
|
|
|
else
|
|
|
|
|
m_AreaVec[i].SetSelState(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#if 1
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ȡ
|
|
|
|
|
void CMarkAreaMgr::SaveOrLoad(bool bSave,bool bFixed)
|
|
|
|
|
{
|
|
|
|
|
CFileMgr FileMgr;
|
|
|
|
|
char filepath[1024];
|
|
|
|
|
if(bFixed)
|
|
|
|
|
FileMgr.GetFullFilePath(filepath,FIXED_FILE_PATH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
else
|
|
|
|
|
FileMgr.GetFullFilePath(filepath,FILE_PATH);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|
|
|
|
|
|
|
|
|
if(bSave)
|
|
|
|
|
{
|
|
|
|
|
CFile file(filepath,CFile::modeReadWrite|CFile::modeCreate);
|
|
|
|
|
CArchive ar(&file,CArchive::store);
|
|
|
|
|
SaveOrLoadExt(ar);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
CFile file;
|
|
|
|
|
if(file.Open(filepath,CFile::modeRead))
|
|
|
|
|
{
|
|
|
|
|
CArchive ar(&file,CArchive::load);
|
|
|
|
|
SaveOrLoadExt(ar);
|
|
|
|
|
|
|
|
|
|
//area<65>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
MoveAllAreaToTargetPt(Dbxy(0,0));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ȡʧ<EFBFBD><EFBFBD>", _LOG_ERROR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::SaveOrLoadExt(CArchive &ar)
|
|
|
|
|
{
|
|
|
|
|
int size = 0;
|
|
|
|
|
if(ar.IsStoring())
|
|
|
|
|
{
|
|
|
|
|
size = m_AreaVec.size();//area <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ar<<size;
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec[i].Serialize(ar);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec.clear();//<2F><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>area
|
|
|
|
|
|
|
|
|
|
ar>>size;
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
CMarkArea Area;
|
|
|
|
|
Area.Serialize(ar);
|
|
|
|
|
m_AreaVec.push_back(Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
void CMarkAreaMgr::WriteWorkFileExt(vector<CLab> &LabVec)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
LabVec.push_back(CLab(LAB_MARK_AREA_START));
|
|
|
|
|
m_AreaVec[i].WriteWorkFile(LabVec);
|
|
|
|
|
LabVec.push_back(CLab(LAB_MARK_AREA_END));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::ReadWorkFile(CLabVecRang &LabVecRang)
|
|
|
|
|
{
|
|
|
|
|
vector<CLabVecRang> LabVecRangVec;
|
|
|
|
|
CWorkFileMgr WorkFileMgr;
|
|
|
|
|
WorkFileMgr.SeparateStrVec(LabVecRang,LabVecRangVec,LAB_MARK_AREA_START,LAB_MARK_AREA_END);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>
|
|
|
|
|
if(!LabVecRangVec.empty())
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec.clear();
|
|
|
|
|
vector<CLabVecRang>::iterator iter = LabVecRangVec.begin();
|
|
|
|
|
vector<CLabVecRang>::iterator iter_end = LabVecRangVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
CMarkArea MarkArea;
|
|
|
|
|
MarkArea.ReadWorkFile(*iter);
|
|
|
|
|
m_AreaVec.push_back(MarkArea);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#if 1//<2F>༭area <20>õĺ<C3B5><C4BA><EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::Add()
|
|
|
|
|
{
|
|
|
|
|
if(m_AreaVec.empty())//<2F>½<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
CMarkArea Area;
|
|
|
|
|
m_AreaVec.push_back(Area);
|
|
|
|
|
}
|
|
|
|
|
else//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if(IdxValid(m_CurSelIdx))
|
|
|
|
|
{
|
|
|
|
|
CMarkArea Area(m_AreaVec[m_CurSelIdx]);
|
|
|
|
|
m_AreaVec.push_back(Area);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::InsertList(CListCtrl &List)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
int idx = 0;
|
|
|
|
|
List.InsertItem(i," ");//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
List.SetItemText(i,idx++,Int2CString(i+1));//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
Dbxy Offset = m_AreaVec[i].GetOffset();//ƫ<><C6AB>
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(Offset.x));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(Offset.y));
|
|
|
|
|
Dbxy Offset2 = m_AreaVec[i].GetOffset2();//ƫ<><C6AB>
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(Offset2.x));
|
|
|
|
|
List.SetItemText(i,idx++,Db2CString(Offset2.y));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>idx <20>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|
|
|
|
bool CMarkAreaMgr::IdxValid(int idx)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
if(idx<0 || idx>= size)
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::DelSel(int &idx)
|
|
|
|
|
{
|
|
|
|
|
if(!IdxValid(idx))
|
|
|
|
|
return;
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
int i=0;
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if(i==idx)
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec.erase(iter);
|
|
|
|
|
idx = -1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::DelAll()
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec.clear();
|
|
|
|
|
m_CurSelIdx = -1;//<2F><>ǰѡ<C7B0><D1A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>idx <20><><EFBFBD><EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::OpArea(int idx,CMarkArea &Area,bool bRead)
|
|
|
|
|
{
|
|
|
|
|
if(!IdxValid(idx))
|
|
|
|
|
return;
|
|
|
|
|
ResetAllAreaSelState();
|
|
|
|
|
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
if(idx == i)
|
|
|
|
|
{
|
|
|
|
|
if(bRead)
|
|
|
|
|
{
|
|
|
|
|
Area = m_AreaVec[i];
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>״̬
|
|
|
|
|
m_AreaVec[i].SetSelState(true);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_AreaVec[i] = Area;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
|
|
|
|
void CMarkAreaMgr::Order(int &idx,bool bMoveUp)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
if(bMoveUp)//ǰ<><C7B0>
|
|
|
|
|
{
|
|
|
|
|
SwapArea(idx,idx-1);
|
|
|
|
|
}
|
|
|
|
|
else//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
SwapArea(idx,idx+1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::SwapArea(int &idx1,int idx2)
|
|
|
|
|
{
|
|
|
|
|
if(!IdxValid(idx1) || !IdxValid(idx2))
|
|
|
|
|
return;
|
|
|
|
|
CMarkArea tmp = m_AreaVec[idx1];
|
|
|
|
|
m_AreaVec[idx1] = m_AreaVec[idx2];
|
|
|
|
|
m_AreaVec[idx2] = tmp;
|
|
|
|
|
//ָ<><EFBFBD><F2BDBBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
idx1 = idx2;
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::MoveAllArea(double Val,DIRECTION dir)
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt = m_AreaVec[i].GetBasePt();
|
|
|
|
|
if(dir==_DIR_L ||dir==_DIR_R)
|
|
|
|
|
pt.x += Val;
|
|
|
|
|
else
|
|
|
|
|
pt.y += Val;
|
|
|
|
|
m_AreaVec[i].SetBasePt(pt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD>Area <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::MoveAllAreaToTargetPt(Dbxy TargetPt)
|
|
|
|
|
{
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>area <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
Dbxy CenterPt = GetAllAreaCenterPt();
|
|
|
|
|
|
|
|
|
|
Dbxy Offset;
|
|
|
|
|
Offset.x = TargetPt.x - CenterPt.x;
|
|
|
|
|
Offset.y = TargetPt.y - CenterPt.y;
|
|
|
|
|
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
for(int i=0;i<size;i++)
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt = m_AreaVec[i].GetBasePt();
|
|
|
|
|
pt.x += Offset.x;
|
|
|
|
|
pt.y += Offset.y;
|
|
|
|
|
m_AreaVec[i].SetBasePt(pt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString s;
|
|
|
|
|
s.Format(_T("MoveAllAreaToTargetPt [Offset_x]= %f,[Offset_y]= %f"),Offset.x,Offset.y);
|
|
|
|
|
gLogMgr->WriteDebugLog(s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
|
|
|
|
|
void CMarkAreaMgr::CollectOrgWorkData(bool bNeedSel, CProduct &Product)
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("func : CMarkAreaMgr---->CollectWorkData");
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>״̬
|
|
|
|
|
gObjComponentMgr->ResetObjCollectState(false);
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for (;iter != iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).CollectOrgWorkData(bNeedSel, Product);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F>ռ<EFBFBD><D5BC>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::CollectWorkData(bool bNeedSel,CProduct &Product)
|
|
|
|
|
{
|
|
|
|
|
//Product.CalAffinePars();
|
|
|
|
|
gLogMgr->WriteDebugLog("func : CMarkAreaMgr---->CollectWorkData");
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>״̬
|
|
|
|
|
gObjComponentMgr->ResetObjCollectState(false);
|
|
|
|
|
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).CollectWorkData(bNeedSel, Product);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7>мӹ<D0BC><D3B9><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
bool CMarkAreaMgr::HasWorkData()
|
|
|
|
|
{
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter).HasWorkData())//ֻҪһ<D2AA><D2BB>area <20><><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gLogMgr->WriteDebugLog("û<EFBFBD>мӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",_LOG_ERROR);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj <20>Ѽ<EFBFBD><D1BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
bool CMarkAreaMgr::CheckAllObjDataConsistency()
|
|
|
|
|
{
|
|
|
|
|
if(m_AreaVec.empty())
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
vector<Dbxy> BaseDataVec;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter).HasWorkData())
|
|
|
|
|
{
|
|
|
|
|
vector<vector<Dbxy>> &DataVec = (*iter).GetDataVec();
|
|
|
|
|
BaseDataVec = DataVec[0];
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int BaseSize = BaseDataVec.size();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<DDB5><C4B5><EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺͻ<DDBA><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱȽ<DDB1>
|
|
|
|
|
if(BaseDataVec.empty())
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
if((*iter).HasWorkData())
|
|
|
|
|
{
|
|
|
|
|
vector<vector<Dbxy>> &DataVec = (*iter).GetDataVec();
|
|
|
|
|
vector<vector<Dbxy>>::iterator iter1 = DataVec.begin();
|
|
|
|
|
vector<vector<Dbxy>>::iterator iter1_end = DataVec.end();
|
|
|
|
|
for(;iter1!=iter1_end;iter1++)
|
|
|
|
|
{
|
|
|
|
|
vector<Dbxy> &ObjDataVec = (*iter1);
|
|
|
|
|
int size = ObjDataVec.size();
|
|
|
|
|
if(BaseSize != size)//<2F><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
Dbxy BaseOffset;//<2F><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>ֵ
|
|
|
|
|
for(int k=0;k<size;k++)
|
|
|
|
|
{
|
|
|
|
|
Dbxy Offset;//ƫ<><C6AB>ֵ
|
|
|
|
|
Offset.x = ObjDataVec[k].x -BaseDataVec[k].x;
|
|
|
|
|
Offset.y = ObjDataVec[k].y -BaseDataVec[k].y;
|
|
|
|
|
if(k==0)
|
|
|
|
|
{
|
|
|
|
|
BaseOffset = Offset;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
double eps = 0.04;//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if(!IsTwoDbEqual(BaseOffset.x,Offset.x,eps) || !IsTwoDbEqual(BaseOffset.y,Offset.y,eps))
|
|
|
|
|
{
|
|
|
|
|
return false;//<2F><>һ<EFBFBD><D2BB><EFBFBD>㲻һ<E3B2BB>¾<EFBFBD><C2BE><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>Ѽ<EFBFBD><D1BC><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
void CMarkAreaMgr::CollectSrcWorkData()
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("func : CMarkAreaMgr---->CollectSrcWorkData");
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).CollectSrcWorkData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
|
|
|
|
|
void CMarkAreaMgr::ClearSrcWorkData()
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("func : CMarkAreaMgr---->ClearSrcWorkData");
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).ClearSrcWorkData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::ArrayCreat(int CntX,int CntY)
|
|
|
|
|
{
|
|
|
|
|
if(CntX<=0 || CntY<=0)
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if(!gObjComponentMgr->HasObj())
|
|
|
|
|
{
|
|
|
|
|
CMsgBox MsgBox;
|
|
|
|
|
MsgBox.Show("û<EFBFBD><EFBFBD>ͼ<EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD>!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DbRect Rect = gObjComponentMgr->GetAllObjRect();
|
|
|
|
|
DbSize Size = Rect.GetSize();
|
|
|
|
|
Size.w += 2;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
Size.h += 2;
|
|
|
|
|
DbSize Offset;
|
|
|
|
|
Offset.w = Size.w/CntX;
|
|
|
|
|
Offset.h = Size.h/CntY;
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD>Χ
|
|
|
|
|
DbSize MirrorSize = gMirror->GetRange();
|
|
|
|
|
if(Offset.w>MirrorSize.w || Offset.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);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelAll();//ɾ<><C9BE><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>area
|
|
|
|
|
|
|
|
|
|
CMarkArea Area(Dbxy(0,0),Offset);
|
|
|
|
|
|
|
|
|
|
Offset.h *=(-1);
|
|
|
|
|
|
|
|
|
|
bool flg = true;
|
|
|
|
|
for(int i=0;i<CntX;i++)
|
|
|
|
|
{
|
|
|
|
|
for(int j=0;j<CntY;j++)
|
|
|
|
|
{
|
|
|
|
|
CMarkArea AreaTmp(Area);
|
|
|
|
|
Dbxy BasePt;
|
|
|
|
|
BasePt.x += Offset.w*i*(-1);
|
|
|
|
|
if(flg)
|
|
|
|
|
{
|
|
|
|
|
BasePt.y += Offset.h*j;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BasePt.y += Offset.h*(CntY-j-1);
|
|
|
|
|
}
|
|
|
|
|
AreaTmp.SetBasePt(BasePt);
|
|
|
|
|
AreaTmp.SetSelState(false);
|
|
|
|
|
m_AreaVec.push_back(AreaTmp);
|
|
|
|
|
}
|
|
|
|
|
flg =!flg;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
MoveAllAreaToTargetPt(Dbxy(0,0));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CMarkAreaMgr::ResetAllAreaSelState()
|
|
|
|
|
{
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).SetSelState(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int CMarkAreaMgr::GetCurSelIdx()
|
|
|
|
|
{
|
|
|
|
|
int size = m_AreaVec.size();
|
|
|
|
|
if(m_CurSelIdx<size)
|
|
|
|
|
return m_CurSelIdx;
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::SetAllMarkSize()
|
|
|
|
|
{
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).UpdateSize();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void CMarkAreaMgr::ReReadFixMarkArea()
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD>¶<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>markaera <20><><EFBFBD><EFBFBD>
|
|
|
|
|
DelAll();
|
|
|
|
|
SaveOrLoad(false,true);//<2F>ӹ̶<D3B9><CCB6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
//ͨ<><CDA8>obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>markarea <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ͷ<EFBFBD>Χ
|
|
|
|
|
void CMarkAreaMgr::AdjustByObj()
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("func : Adjust MarkArea By Obj");
|
|
|
|
|
ReReadFixMarkArea();
|
|
|
|
|
|
|
|
|
|
double MaxSize = 0;
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).AdjustByObj();
|
|
|
|
|
DbSize size = (*iter).GetSize();
|
|
|
|
|
if(size.w>MaxSize)
|
|
|
|
|
MaxSize = size.w;
|
|
|
|
|
if(size.h>MaxSize)
|
|
|
|
|
MaxSize = size.h;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString LogStr;
|
|
|
|
|
LogStr.Format(_T("[MaxAreaSize] = [%.3f]"),MaxSize);
|
|
|
|
|
gLogMgr->WriteDebugLog(LogStr);
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>markarea <20><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
void CMarkAreaMgr::CalRealBasePt(CProduct &Product)
|
|
|
|
|
{
|
|
|
|
|
gLogMgr->WriteDebugLog("func : CMarkAreaMgr---->CalRealBasePt");
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
(*iter).CalRealBasePt(Product);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//ÿ<><C3BF>mark <20><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>һ<EFBFBD><D2BB>ʮ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void CMarkAreaMgr::CreatCenterCrossObj()
|
|
|
|
|
{
|
|
|
|
|
CLayer &layer = GetLayerInstance();
|
|
|
|
|
//<2F><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj
|
|
|
|
|
layer.DelAllObj();
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt = (*iter).GetBasePt();
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶ζ<DFB6><CEB6><EFBFBD>
|
|
|
|
|
CObjPline *pObjPline = new CObjPline;
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt1(pt.x-m_CenterCrossR,pt.y);
|
|
|
|
|
CDataPoint DataPoint(pt1);
|
|
|
|
|
DataPoint.SetIsNode(true);
|
|
|
|
|
pObjPline->AddDataPoint(DataPoint);
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt1(pt.x+m_CenterCrossR,pt.y);
|
|
|
|
|
CDataPoint DataPoint(pt1);
|
|
|
|
|
DataPoint.SetIsNode(true);
|
|
|
|
|
pObjPline->AddDataPoint(DataPoint);
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt1(pt.x,pt.y+m_CenterCrossR);
|
|
|
|
|
CDataPoint DataPoint(pt1);
|
|
|
|
|
DataPoint.SetIsNode(true);
|
|
|
|
|
pObjPline->AddDataPoint(DataPoint);
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt1(pt.x,pt.y-m_CenterCrossR);
|
|
|
|
|
CDataPoint DataPoint(pt1);
|
|
|
|
|
DataPoint.SetIsNode(true);
|
|
|
|
|
pObjPline->AddDataPoint(DataPoint);
|
|
|
|
|
}
|
|
|
|
|
layer.AddObject(pObjPline);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>area <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
|
|
|
|
|
Dbxy CMarkAreaMgr::GetAllAreaCenterPt()
|
|
|
|
|
{
|
|
|
|
|
DbRect rect;
|
|
|
|
|
vector<CMarkArea>::iterator iter = m_AreaVec.begin();
|
|
|
|
|
vector<CMarkArea>::iterator iter_end = m_AreaVec.end();
|
|
|
|
|
for(;iter!=iter_end;iter++)
|
|
|
|
|
{
|
|
|
|
|
Dbxy pt = (*iter).GetBasePt();
|
|
|
|
|
AdjustRectByPoint(rect,pt);
|
|
|
|
|
}
|
|
|
|
|
return rect.GetCenterPt();
|
|
|
|
|
}
|
|
|
|
|
|