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.
TwoLaserHead-PushJig/LaiPuLaser/ObjBase.cpp

388 lines
9.6 KiB
C++

#include "StdAfx.h"
#include "ObjBase.h"
#include "LogMgr.h"
#include "GlobalFunction.h"
#include "GlobalDrawMgr.h"
#include "MarkParMgr.h"
#include "WorkFileLable.h"
#include "WorkFileMgr.h"
#include "CommonFlowMgr.h"
CObjBase::CObjBase(void)
{
SetSelected(false);//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1>
SetLock(false);//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
m_bDraw = true;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
m_bOffsetAreaRect = false;//<2F>Ƿ<EFBFBD>Ϊƫ<CEAA>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OnCreat();
}
CObjBase::~CObjBase(void)
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void CObjBase::OnCreat()
{
m_PenNum = gMarkParMgr->GetCurPenNum();
}
#if 1
void CObjBase::WriteWorkFileBase(vector<CLab> &LabVec)
{
LabVec.push_back(CLab(LAB_OBJ_TYPE,(int)GetType()));//obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LabVec.push_back(CLab(LAB_PEN_NUM,m_PenNum));//obj <20><><EFBFBD><EFBFBD><EFBFBD>ıʺ<C4B1>
LabVec.push_back(CLab(LAB_OBJ_IS_OFFSET_RECT,m_bOffsetAreaRect));//<2F>Ƿ<EFBFBD>Ϊƫ<CEAA>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void CObjBase::ReadWorkFileBase(CLabVecRang &LabVecRang)
{
CWorkFileMgr WorkFileMgr;
//<2F><>ȡ<EFBFBD>ʺ<EFBFBD>------------------------------------------------
{
CLab Lab = WorkFileMgr.FindLab(LabVecRang,LAB_PEN_NUM);
if(Lab.m_ValType != _TYPE_NULL)
{
m_PenNum = Lab.m_Int;
}
}
{
CLab Lab = WorkFileMgr.FindLab(LabVecRang,LAB_OBJ_IS_OFFSET_RECT);
if(Lab.m_ValType != _TYPE_NULL)
{
m_bOffsetAreaRect = Lab.m_Bool;
}
}
}
void CObjBase::WriteWorkFile(vector<CLab> &LabVec)
{
//д<><EFBFBD><EBB9AB><EFBFBD><EFBFBD>Ϣ
WriteWorkFileBase(LabVec);
WriteWorkFileExt(LabVec);
}
void CObjBase::ReadWorkFile(CLabVecRang &LabVecRang)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
ReadWorkFileBase(LabVecRang);
ReadWorkFileExt(LabVecRang);
}
void CObjBase::WriteWorkFileExt(vector<CLab> &LabVec)
{
m_PtContainer.WriteWorkFile(LabVec);
}
void CObjBase::ReadWorkFileExt(CLabVecRang &LabVecRang)
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>--------------------------------------------
m_PtContainer.ReadWorkFile(LabVecRang);
}
#endif
#if 1
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECBAAF>
CObjBase::CObjBase(CObjBase &rhs)
{
m_bSelected = rhs.m_bSelected;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1>
m_PtContainer.Load(rhs.m_PtContainer);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
m_NodePtContainer.Load(rhs.m_NodePtContainer);
m_PenNum = rhs.m_PenNum;
m_bLocked = rhs.m_bLocked;
m_bDraw = rhs.m_bDraw;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
m_bOffsetAreaRect = rhs.m_bOffsetAreaRect;//<2F>Ƿ<EFBFBD>Ϊƫ<CEAA>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD>rhs <20><><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>
void CObjBase::CopyPt(CObjBase &rhs)
{
m_PtContainer.Load(rhs.m_PtContainer);
}
#endif
#if 1
void CObjBase::Draw(CDC* pDC,CPen &Pen)
{
if(!m_bDraw)
return;
//ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_PtContainer.Draw(pDC,Pen);
//<2F>ڵ<EFBFBD>
if(IsSelected())
{
m_PtContainer.DrawNode(pDC);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DrawFill(pDC,Pen);
}
void CObjBase::Draw(CDC* pDC)
{
if(!m_bDraw)
return;
CPen Pen;
Pen.CreatePen(PS_INSIDEFRAME,0.5,gMarkParMgr->GetPenColor(m_PenNum));
Draw(pDC,Pen);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>߶<EFBFBD>
void CObjBase::DrawLastLine(CDC* pDC,CPen &Pen)
{
if(!m_bDraw)
return;
m_PtContainer.DrawLastLine(pDC,Pen);
}
#endif
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>
void CObjBase::AddDataPoint(CDataPoint pt)
{
m_PtContainer.AddDataPoint(pt);
}
//<2F><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ĵ<EFBFBD>
void CObjBase::AddNodePt(CDataPoint pt)
{
m_NodePtContainer.AddDataPoint(pt);
}
bool CObjBase::Empty()
{
return (m_PtContainer.GetPtCnt()<2) ;
}
void CObjBase::DelAllPt()//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>
{
m_PtContainer.DelAllPt();
m_NodePtContainer.DelAllPt();
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
int CObjBase::GetPtCnt()
{
return m_PtContainer.GetPtCnt();
}
void CObjBase::DelLastDataPoint()//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>
{
m_PtContainer.DelLastDataPoint();
}
int CObjBase::GetNodePtIdx(Dbxy pt)
{
return m_PtContainer.GetNodePtIdx(pt);
}
void CObjBase::DelNodePtByIdx(int idx)
{
m_PtContainer.DelNodePtByIdx(idx);
}
void CObjBase::SetNodePtByIdx(int idx,Dbxy pt)
{
m_PtContainer.SetNodePtByIdx(idx,pt);
}
void CObjBase::InsertNode(int idx,Dbxy pt)
{
m_PtContainer.InsertNode(idx,pt);
}
void CObjBase::SetLastPoint(CDataPoint &pt)
{
m_PtContainer.SetLastPoint(pt);
}
bool CObjBase::IsSelected()
{
return m_bSelected;
}
void CObjBase::SetSelected(bool bSelected)
{
if(m_bLocked)//<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ܱ<EFBFBD>ѡ<EFBFBD><D1A1>
return;
m_bSelected = bSelected;
}
DbRect CObjBase::GetRect()
{
return m_PtContainer.GetRect();
}
Dbxy CObjBase::GetFirstPt()
{
return m_PtContainer.GetFirstPt();
}
Dbxy CObjBase::GetLastPt()
{
return m_PtContainer.GetLastPt();
}
//<2F>Ƿ<EFBFBD><C7B7>нڵ<D0BD><DAB5><EFBFBD>rect <20><>
bool CObjBase::HasNodeInRect(DbRect rect)
{
return m_PtContainer.HasNodeInRect(rect);
}
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>line <20>
bool CObjBase::IntersectWithLine(DbLine &line)
{
return m_PtContainer.IntersectWithLine(line);
}
#if 1
void CObjBase::Operate(SObjOperatePar &par)
{
m_GeometryPorp.Operate(par);//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_PtContainer.Operate(par);//<2F><><EFBFBD>ݵ<EFBFBD>
m_NodePtContainer.Operate(par);//<2F>ڵ<EFBFBD>
OperateFill(par);//<2F><><EFBFBD><EFBFBD>
}
#endif
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
//<2F><>ȡobj <20><>rect <20><EFBFBD><E0BDBB><EFBFBD>߶<EFBFBD>(bGetCatchNode <20><>ʾ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>IJ<EFBFBD>׽<EFBFBD><D7BD>)
void CObjBase::GetLineInRect(DbRect &rect,vector<DbLine> &DataPtLineVec,bool bGetCatchNode)
{
m_PtContainer.GetLineInRect(rect,DataPtLineVec);
if(bGetCatchNode)
{
m_NodePtContainer.GetNodePtLineInRect(rect,DataPtLineVec);
}
}
#endif
#if 1
//<2F>Ѽ<EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>vec <20><>
void CObjBase::GetPtData(vector<vector<Dbxy>> &vec)
{
m_PtContainer.GetPtData(vec);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if 0
vector<CSequentialPoint>::iterator iter = m_FillDataVec.begin();
vector<CSequentialPoint>::iterator iter_end = m_FillDataVec.end();
for(;iter!=iter_end;iter++)
{
(*iter).GetPtData(vec);
}
#endif
}
#endif
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CObjBase::CreatFillData(SFillPar FillPar)
{
m_FillDataVec.clear();
if(!FillPar.bFill)
return;
//<2F>Ѽ<EFBFBD>obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>vec <20><>
vector<vector<Dbxy>> vec;
GetPtData(vec);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CObjFill Fill(m_FillDataVec);
Fill.SetPar(FillPar);
Fill.CreatFill(vec,GetRect());
}
void CObjBase::DrawFill(CDC* pDC,CPen &Pen)
{
vector<CSequentialPoint>::iterator iter = m_FillDataVec.begin();
vector<CSequentialPoint>::iterator iter_end = m_FillDataVec.end();
for(;iter!=iter_end;iter++)
{
(*iter).Draw(pDC,Pen);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CObjBase::OperateFill(SObjOperatePar &par)
{
vector<CSequentialPoint>::iterator iter = m_FillDataVec.begin();
vector<CSequentialPoint>::iterator iter_end = m_FillDataVec.end();
for(;iter!=iter_end;iter++)
{
(*iter).Operate(par);
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CObjBase::GetFillData(vector<vector<Dbxy>> &vec)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<CSequentialPoint>::iterator iter = m_FillDataVec.begin();
vector<CSequentialPoint>::iterator iter_end = m_FillDataVec.end();
for(;iter!=iter_end;iter++)
{
(*iter).GetPtData(vec);
}
}
#endif
#if 1
//<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CObjBase::CreatConcentricData(vector<double> &GapVec)
{
vector<vector<CDataPoint>> vec;
double FirstGap = gCommonFlowMgr->GetFirstGap();
double bChangeSize = !IsDbEqualZero(FirstGap);
if(bChangeSize)//<2F><><EFBFBD><EFBFBD>
{
vector<CDataPoint> DataPointVec = GetConcentricData(FirstGap);
m_PtContainer.DelAllPt();
AddDataPointVec(DataPointVec);
}
if(GapVec.empty())
return;
double Gap = GapVec[0];
double CurGap = Gap;
vector<double>::iterator iter = GapVec.begin();
vector<double>::iterator iter_end = GapVec.end();
for(;iter!=iter_end;iter++)
{
vector<CDataPoint> DataPointVec = GetConcentricData(CurGap);
vec.push_back(DataPointVec);
CurGap += Gap;
}
{
vector<vector<CDataPoint>>::iterator iter = vec.begin();
vector<vector<CDataPoint>>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
AddDataPointVec(*iter);
}
}
}
void CObjBase::AddDataPointVec(vector<CDataPoint> &Vec)
{
vector<CDataPoint> &DataPointVec = GetPtContainer();
vector<CDataPoint>::iterator iter = Vec.begin();
vector<CDataPoint>::iterator iter_end = Vec.end();
for(;iter!=iter_end;iter++)
{
DataPointVec.push_back(*iter);
}
}
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʼӹ<CABC><D3B9>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>obj<62>ijߴ<C4B3>DN cut 2016-09-18
Dbxy CObjBase::GetSizeAdjust2()
{
double Rang = 40;
Dbxy SizeAdjust2(0.013,-0.012);
Dbxy CenterPt = GetRect().GetCenterPt();
SizeAdjust2.x = SizeAdjust2.x *(CenterPt.x/Rang);
SizeAdjust2.y = SizeAdjust2.y *(CenterPt.x/Rang);
return SizeAdjust2;
}
//obj <20><><EFBFBD><EFBFBD>
vector<CDataPoint> CObjBase::GetConcentricData(double Gap)
{
DbRect rect = GetRect();
Dbxy SizeAdjust = gCommonFlowMgr->GetAdjustSize();
#if 0//dn cut 2016-09-18
Dbxy SizeAdjust2 = GetSizeAdjust2();
SizeAdjust.x += SizeAdjust2.x;
SizeAdjust.y += SizeAdjust2.y;
#endif
SObjOperatePar parX;
parX.OpType = _OP_STRETCH;
parX.BasePt = rect.GetCenterPt();
parX.OldSize = rect.GetSize().w;
parX.Diff = SizeAdjust.x;
parX.xy = _X;
SObjOperatePar parY;
parY.OpType = _OP_STRETCH;
parY.BasePt = rect.GetCenterPt();
parY.OldSize = rect.GetSize().h;
parY.Diff = SizeAdjust.y;
parY.xy = _Y;
vector<CDataPoint> DataPointVec = GetPtContainer();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vector<CDataPoint>::iterator iter = DataPointVec.begin();
vector<CDataPoint>::iterator iter_end = DataPointVec.end();
for(;iter!=iter_end;iter++)
{
(*iter).Operate(parX);
(*iter).Operate(parY);
}
return DataPointVec;
}
#endif