#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 LabVec;//存储所有标签的容器 //在这里指定需要存储的模块 //搜集所有标签 gTemplateMgr->SaveWorkFile(LabVec); //gCommonFlowMgr->SaveWorkFile(LabVec); SaveWorkFileExt(FilePath,LabVec); } //保存切割 void CWorkFileMgr::SaveCutParFile(CString FilePath) { vector LabVec;//存储所有标签的容器 //在这里指定需要存储的模块 //搜集所有标签 gCommonFlowMgr->SaveWorkFile(LabVec); SaveWorkFileExt(FilePath,LabVec); } //所有标签写入文件 void CWorkFileMgr::SaveWorkFileExt(CString FilePath,vector &LabVec) { CFile file(FilePath,CFile::modeReadWrite|CFile::modeCreate); CArchive ar(&file,CArchive::store); size_t LabCnt = LabVec.size(); ar<::iterator iter = LabVec.begin(); vector::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 LabVec;//存储所有标签的容器 //搜集所有标签 gTemplateMgr->SaveWorkFile(LabVec); //所有标签写入文件 SaveWorkFileExt(FilePath,LabVec); } #endif #if 1 void CWorkFileMgr::ReadWorkFile(CString FilePath) { //读取所有内容---------------------------------------------------------- vector LabVec; ReadWorkFileExt(FilePath,LabVec); if(LabVec.empty()) return; //分离每个模块------------------------------------------------------------ CLabVecRang LabVecRang(LabVec,0,LabVec.size()-1); vector LabVecRangVec; SeparateStrVec(LabVecRang,LabVecRangVec,LAB_MODULE_START,LAB_MODULE_END); //依次处理每个模块--------------------------------------------------- vector::iterator iter = LabVecRangVec.begin(); vector::iterator iter_end = LabVecRangVec.end(); for(;iter!=iter_end;iter++) { if(gModuleDrawMgr.ReadWorkFile(*iter)) continue;//避免重复读取 gModuleDeviceMgr.ReadWorkFile(*iter); } } void CWorkFileMgr::ReadWorkFileExt(CString FilePath,vector &LabVec) { CFile file; if(file.Open(FilePath,CFile::modeRead)) { CArchive ar(&file,CArchive::load); size_t LabCnt; ar>>LabCnt;//先读取标签的个数 for(size_t i=0;iWriteDebugLog("文件读取失败", _LOG_ERROR); } } //从LabVecRang 中根据StrLabStart 和StrLabEnd 标签提取连续的str 保存到LabVecRangVec void CWorkFileMgr::SeparateStrVec(CLabVecRang &LabVecRang,vector &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;iStartIdx)//不要搜集空的范围 { 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