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.
292 lines
7.9 KiB
C++
292 lines
7.9 KiB
C++
#include "StdAfx.h"
|
|
#include "WorkFileMgr.h"
|
|
#include "GlobalDefine.h"
|
|
#include "TemplateMgr.h"
|
|
#include "WorkFileLable.h"
|
|
#include "LogMgr.h"
|
|
#include "ModuleDeviceMgr.h"
|
|
#include "ModuleDrawMgr.h"
|
|
#include "ObjComponentMgr.h"
|
|
#include "MsgBox.h"
|
|
#include "ProductMgr.h"
|
|
#include "GlobalFunction.h"
|
|
#include "LaserDeviceMgr.h"
|
|
#include "MarkAreaMgr.h"
|
|
#include "FileMgr.h"
|
|
#include "OptoWaveLaserMgr.h"
|
|
#include "Laser.h"
|
|
#include "PlatformXY.h"
|
|
#include "CommonFlowMgr.h"
|
|
#include "GlobalDrawMgr.h"
|
|
#include "ProgramCutMgr.h"
|
|
|
|
|
|
|
|
CString CWorkFileMgr::m_CurOpenFile;
|
|
CWorkFileMgr::CWorkFileMgr(void)
|
|
{
|
|
}
|
|
CWorkFileMgr::~CWorkFileMgr(void)
|
|
{
|
|
}
|
|
#if 1
|
|
//是否打开文件
|
|
bool CWorkFileMgr::IsOpenFile()
|
|
{
|
|
if(m_CurOpenFile == "")
|
|
{
|
|
CMsgBox MsgBox;
|
|
MsgBox.Show("未打开文件!");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
#include "DxfReadMgr.h"
|
|
void CWorkFileMgr::OnOpenFile()
|
|
{
|
|
|
|
TCHAR szFilters[]=("MAK 文件(*.mak)|*.mak");
|
|
CFileDialog dlg(TRUE,("mak"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters);
|
|
CString FilePath = gServer->m_RcvFileName;
|
|
if (FilePath.IsEmpty())
|
|
{
|
|
/* CFileMgr fg;
|
|
CString exeDir = fg.GetWorkPath();
|
|
CString makDir = exeDir + "\\MAK";
|
|
dlg.m_ofn.lpstrInitialDir = makDir; //指定文件夹*/
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
FilePath = dlg.GetPathName();
|
|
}
|
|
else
|
|
{
|
|
throw (CString)"opencancle";
|
|
}
|
|
}
|
|
ReadWorkFile(FilePath);
|
|
//记录当前打开的文件名------------------------------------------
|
|
SaveFileName(FilePath);
|
|
//记录当前打开文件的名字
|
|
CFileMgr FileMgr;
|
|
gProgramCutMgr->SetCurOpenFileName(FileMgr.GetFileNameFromPath(FilePath,true));
|
|
}
|
|
|
|
//记录打开文件的名字,并显示到标题
|
|
void CWorkFileMgr::SaveFileName(CString FileName)
|
|
{
|
|
m_CurOpenFile = FileName;
|
|
GetCurDocPtr()->SetTitle(m_CurOpenFile);
|
|
}
|
|
//保存当前打开的文档
|
|
void CWorkFileMgr::OnSaveFile()
|
|
{
|
|
if(m_CurOpenFile == "")//新的文件
|
|
{
|
|
//另存为
|
|
OnSaveFileAs();
|
|
}
|
|
else//保存当前打开的文件
|
|
{
|
|
SaveFile(m_CurOpenFile);
|
|
CMsgBox MsgBox;
|
|
MsgBox.Show(m_CurOpenFile+" 保存成功!");
|
|
}
|
|
}
|
|
//另存为
|
|
void CWorkFileMgr::OnSaveFileAs()
|
|
{
|
|
TCHAR szFilters[]=("MAK 文件(*.mak)|*.mak");
|
|
CFileDialog dlg(FALSE,("mak"),("MarkFile"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters);
|
|
if(dlg.DoModal()==IDOK)
|
|
{
|
|
SaveFile(dlg.GetPathName());
|
|
}
|
|
}
|
|
void CWorkFileMgr::SaveFile(CString FileName)
|
|
{
|
|
SaveWorkFile(FileName);
|
|
SaveFileName(FileName);
|
|
}
|
|
#endif
|
|
#if 1
|
|
|
|
void CWorkFileMgr::SaveWorkFile(CString FilePath)
|
|
{
|
|
vector<CLab> LabVec;//存储所有标签的容器
|
|
//在这里指定需要存储的模块
|
|
//搜集所有标签
|
|
gTemplateMgr->SaveWorkFile(LabVec);
|
|
//gCommonFlowMgr->SaveWorkFile(LabVec);
|
|
SaveWorkFileExt(FilePath,LabVec);
|
|
}
|
|
//保存切割
|
|
void CWorkFileMgr::SaveCutParFile(CString FilePath)
|
|
{
|
|
vector<CLab> LabVec;//存储所有标签的容器
|
|
//在这里指定需要存储的模块
|
|
//搜集所有标签
|
|
gCommonFlowMgr->SaveWorkFile(LabVec);
|
|
SaveWorkFileExt(FilePath,LabVec);
|
|
}
|
|
//所有标签写入文件
|
|
void CWorkFileMgr::SaveWorkFileExt(CString FilePath,vector<CLab> &LabVec)
|
|
{
|
|
CFile file(FilePath,CFile::modeReadWrite|CFile::modeCreate);
|
|
CArchive ar(&file,CArchive::store);
|
|
|
|
size_t LabCnt = LabVec.size();
|
|
ar<<LabCnt;//标签的个数
|
|
vector<CLab>::iterator iter = LabVec.begin();
|
|
vector<CLab>::iterator iter_end = LabVec.end();
|
|
for(;iter!=iter_end;iter++)
|
|
{
|
|
(*iter).Serialize(ar);
|
|
}
|
|
}
|
|
#endif
|
|
#if 1
|
|
//打开obj 文件
|
|
void CWorkFileMgr::OpenObjFile()
|
|
{
|
|
TCHAR szFilters[]=("OBJ 文件(*.obj)|*.obj");
|
|
CFileDialog dlg(TRUE,("obj"),("ObjFile"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters);
|
|
if(dlg.DoModal()==IDOK)
|
|
{
|
|
gDraw->SetbDelOldObj(false);//不要删除原来的obj
|
|
ReadObjTemplateFile(dlg.GetPathName());
|
|
GetCurViewPtr()->RefreshView();
|
|
gDraw->SetbDelOldObj(true);
|
|
}
|
|
}
|
|
//保存obj 文件
|
|
void CWorkFileMgr::SaveObjFile()
|
|
{
|
|
TCHAR szFilters[]=("OBJ 文件(*.obj)|*.obj");
|
|
CFileDialog dlg(FALSE,("obj"),("ObjFile"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilters);
|
|
if(dlg.DoModal()==IDOK)
|
|
{
|
|
SaveObjTemplateFile(dlg.GetPathName());
|
|
}
|
|
}
|
|
//通过文件名打开obj 文件(相对路径)
|
|
void CWorkFileMgr::ReadObjFileByName(CString FileName)
|
|
{
|
|
CFileMgr FileMgr;
|
|
CString FilePath;//完整路径
|
|
FileMgr.GetFullFilePath(FilePath,FileName);
|
|
ReadObjTemplateFile(FilePath);
|
|
}
|
|
//通过文件名打开obj 文件(绝对路径)
|
|
void CWorkFileMgr::ReadObjTemplateFile(CString FilePath)
|
|
{
|
|
ReadWorkFile(FilePath);
|
|
}
|
|
//只保存obj 模板数据
|
|
void CWorkFileMgr::SaveObjTemplateFile(CString FilePath)
|
|
{
|
|
vector<CLab> LabVec;//存储所有标签的容器
|
|
//搜集所有标签
|
|
gTemplateMgr->SaveWorkFile(LabVec);
|
|
//所有标签写入文件
|
|
SaveWorkFileExt(FilePath,LabVec);
|
|
}
|
|
|
|
#endif
|
|
#if 1
|
|
void CWorkFileMgr::ReadWorkFile(CString FilePath)
|
|
{
|
|
//读取所有内容----------------------------------------------------------
|
|
vector<CLab> LabVec;
|
|
ReadWorkFileExt(FilePath,LabVec);
|
|
if(LabVec.empty())
|
|
return;
|
|
//分离每个模块------------------------------------------------------------
|
|
CLabVecRang LabVecRang(LabVec,0,LabVec.size()-1);
|
|
vector<CLabVecRang> LabVecRangVec;
|
|
|
|
SeparateStrVec(LabVecRang,LabVecRangVec,LAB_MODULE_START,LAB_MODULE_END);
|
|
|
|
//依次处理每个模块---------------------------------------------------
|
|
vector<CLabVecRang>::iterator iter = LabVecRangVec.begin();
|
|
vector<CLabVecRang>::iterator iter_end = LabVecRangVec.end();
|
|
for(;iter!=iter_end;iter++)
|
|
{
|
|
if(gModuleDrawMgr.ReadWorkFile(*iter))
|
|
continue;//避免重复读取
|
|
gModuleDeviceMgr.ReadWorkFile(*iter);
|
|
}
|
|
}
|
|
void CWorkFileMgr::ReadWorkFileExt(CString FilePath,vector<CLab> &LabVec)
|
|
{
|
|
CFile file;
|
|
if(file.Open(FilePath,CFile::modeRead))
|
|
{
|
|
CArchive ar(&file,CArchive::load);
|
|
size_t LabCnt;
|
|
ar>>LabCnt;//先读取标签的个数
|
|
for(size_t i=0;i<LabCnt;i++)
|
|
{
|
|
CLab Lab;
|
|
Lab.Serialize(ar);
|
|
LabVec.push_back(Lab);
|
|
}
|
|
file.Close();
|
|
}
|
|
else
|
|
{
|
|
gLogMgr->WriteDebugLog("文件读取失败", _LOG_ERROR);
|
|
}
|
|
}
|
|
//从LabVecRang 中根据StrLabStart 和StrLabEnd 标签提取连续的str 保存到LabVecRangVec
|
|
void CWorkFileMgr::SeparateStrVec(CLabVecRang &LabVecRang,vector<CLabVecRang> &LabVecRangVec,LAB_TYPE StrLabStart,LAB_TYPE StrLabEnd)
|
|
{
|
|
size_t StartCnt = 0;//避免嵌套的情况
|
|
size_t StartIdx = 0;
|
|
size_t EndIdx = 0;
|
|
|
|
size_t Start = LabVecRang.GetStart();
|
|
size_t End = LabVecRang.GetEnd()+1;
|
|
for(size_t i=Start;i<End;i++)
|
|
{
|
|
if(LabVecRang.GetLabType(i)==StrLabStart)
|
|
{
|
|
if(StartCnt==0)//只有第一个才记录
|
|
{
|
|
StartIdx = i+1;//记录分离开始位置
|
|
}
|
|
StartCnt++;
|
|
}
|
|
if(LabVecRang.GetLabType(i)==StrLabEnd)
|
|
{
|
|
if(StartCnt==1)
|
|
{
|
|
EndIdx = i-1;//目的是去掉判断的两个标签
|
|
//if(EndIdx>StartIdx)//不要搜集空的范围
|
|
{
|
|
CLabVecRang Rang(LabVecRang.GetVec(),StartIdx,EndIdx);
|
|
LabVecRangVec.push_back(Rang);
|
|
}
|
|
}
|
|
StartCnt--;
|
|
}
|
|
}
|
|
}
|
|
//在StrVec 查找和标签LabStr 匹配的字符串,并且提取标签的值,没有值返回""
|
|
CLab CWorkFileMgr::FindLab(CLabVecRang &LabVecRang,LAB_TYPE LabStr)
|
|
{
|
|
CLab ret;
|
|
size_t Start = LabVecRang.GetStart();
|
|
size_t End = LabVecRang.GetEnd()+1;
|
|
for(size_t i=Start;i<End;i++)
|
|
{
|
|
if(LabVecRang.GetLabType(i)==LabStr)
|
|
{
|
|
ret = LabVecRang.GetLab(i);
|
|
break;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
#endif
|