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.

75 lines
2.4 KiB
C++

#include "StdAfx.h"
#include "CreaterCutFlow.h"
#include "GlobalFunction.h"
#include "MarkAreaMgr.h"
#include "WorkCmdMovePlatformXY.h"
#include "WorkCmdPciPortSwitch.h"
#include "Laser.h"
#include "PciPortMgr.h"
#define MARK_ALL "ALL"
#define MARK_SEL "SEL"
CCreaterCutFlow::CCreaterCutFlow(const CString &str)
:CCreaterWorkCmd(str)
{
}
CCreaterCutFlow::~CCreaterCutFlow(void)
{
}
//根据工作区域的数据来创建切割流程
void CCreaterCutFlow::Creat()
{
//参数1 表示是否全部加工
CString MarkType = GetPar(1);
//搜集工作数据-------------------------------------------------
if(MarkType == MARK_SEL)
CollectWorkData(true);
else
CollectWorkData(false);
//使用数据来创建工作流程
vector<CMarkArea> &AreaVec = gMarkAreaMgr->GetAreaVec();
vector<CMarkArea>::iterator iter = AreaVec.begin();
vector<CMarkArea>::iterator iter_end = AreaVec.end();
for(;iter!=iter_end;iter++)
{
vector<vector<Dbxy>> &Vec = (*iter).GetDataVec();
CreatExt(Vec);
}
}
void CCreaterCutFlow::CreatExt(vector<vector<Dbxy>> &Vec)
{
vector<vector<Dbxy>>::iterator iter = Vec.begin();
vector<vector<Dbxy>>::iterator iter_end = Vec.end();
for(int i=0;iter!=iter_end;i++,iter++)
{
vector<Dbxy>::iterator iter1 = (*iter).begin();
vector<Dbxy>::iterator iter1_end = (*iter).end();
for(;iter1!=iter1_end;iter1++)
{
//移动平台---------------------------------------------
{
CWorkCmdMovePlatformXY *pCmd = new CWorkCmdMovePlatformXY();
pCmd->MoveToTargetPt((*iter1),gLaser->GetCoord());
if(iter1 != (*iter).begin())//移动到第一个点是空移
{
pCmd->InWorkState();//其他点是工作点
}
AddCmd(pCmd);
}
//开激光-------------------------------------------------
if(iter1==(*iter).begin())
{
CWorkCmd *pCmd = new CWorkCmdPciPortSwitch(PCI_PORT_LASER,true);
AddCmd(pCmd);
}
}
//关激光-------------------------------------------------
{
CWorkCmd *pCmd = new CWorkCmdPciPortSwitch(PCI_PORT_LASER,false);
pCmd->CanNotCancel();//不能取消
AddCmd(pCmd);
}
}
}