#include "StdAfx.h" #include "PltReader.h" #include "ObjComposite.h" #include "Propertie.h" #include "PropertieMgr.h" #include "AuthorityMgr.h" #include "MarkObjPropertieMgr.h" #include "Layer.h" #include "GlobalFunction.h" #include "LogMgr.h" CPltReader* gPltReader = new CPltReader;//plt 读取对象 CPltReader::CPltReader(void) { m_ScaleX = 0.024888; m_ScaleY = 0.024875; } CPltReader::~CPltReader(void) { } #if 1//属性设置函数 CMFCPropertyGridProperty *CPltReader::CreatGridProperty() { CString PropertyName;//属性名称 CString Description;//描述 CString Path = _T("PltSet");;//存储路径 CString Name; //-------------------------------------------------------------------------------// PropertyName = _T("plt 读取"); CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName); //-------------------------------------------------------------------------------// if(gAuthorityMgr->CheckAuthority(_Authority_Factory)) { //添加属性变量映射 Name = _T("m_ScaleX");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_ScaleX); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("plt 读取比例X"); Description = _T("用于将读取的plt 文件缩放到cad 对应大小的比例"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_ScaleX, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } if(gAuthorityMgr->CheckAuthority(_Authority_Factory)) { //添加属性变量映射 Name = _T("m_ScaleY");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_ScaleY); pPropertie->SetType(_PROP_TYPE_DOUBLE); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("plt 读取比例Y"); Description = _T("用于将读取的plt 文件缩放到cad 对应大小的比例"); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_ScaleY, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } //-------------------------------------------------------------------------------// return pGroup; } #endif #if 1 //打开文件 void CPltReader::OpenFile() { CLayer &layer = gLayer; CFileDialog FileOpen(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "plt 文件 (*.plt)|*.plt;"); if(IDOK == FileOpen.DoModal()) { CString FilePath=FileOpen.GetPathName(); //解析plt 文件 if(AnalysePltFlie(FilePath)) { //将vec 的数据生成一个合成对象 TranslatorToComposite(m_PtVec,layer.GetObjContainer()); GetCurViewPtr()->RefreshView(); //更新图形属性 gMarkObjPropertieMgr->UpdateSelMarkObjPropertie(); gLogMgr->WriteDebugLog("func :Open Plt File---->"+FilePath); } gLogMgr->WriteDebugLog("func :AnalysePltFlie---->Error"); } } //将vec 的数据生成一个合成对象 void CPltReader::TranslatorToComposite(vector &vec,CObjContainer &ObjContainer) { if(vec.empty()) { return; } //创建合成对象 CObjComposite *pObj = new CObjComposite; vector::iterator iter = vec.begin(); vector::iterator iter_end = vec.end(); for(;iter!=iter_end;iter++) { Dbxy DbPt((*iter).first.x,(*iter).first.y); CDataPoint pt(DbPt); pObj->AddPt(pt,(*iter).second); } //移动到中间 { DbRect rect = pObj->GetRect(); Dbxy pt = rect.GetCenterPt(); SObjOperatePar par; par.OpType = _OP_MOVE; par.MoveX = -pt.x; par.MoveY = -pt.y; pObj->Operate(par); } //缩放到cad 设置尺寸X { SObjOperatePar par; par.Scale = m_ScaleX; par.OpType = _OP_STRETCH; DbRect rect = pObj->GetRect(); Dbxy pt = rect.GetCenterPt(); par.OldSize = rect.R - rect.L; par.NewSize = par.OldSize*par.Scale; par.Diff = par.NewSize-par.OldSize; par.xy = _X; pObj->Operate(par); } //缩放到cad 设置尺寸Y { SObjOperatePar par; par.Scale = m_ScaleY; par.OpType = _OP_STRETCH; DbRect rect = pObj->GetRect(); Dbxy pt = rect.GetCenterPt(); par.OldSize = rect.T - rect.B; par.NewSize = par.OldSize*par.Scale; par.Diff = par.NewSize-par.OldSize; par.xy = _Y; pObj->Operate(par); } ObjContainer.AddObject(pObj); } #endif #if 1 //解析plt 文件 bool CPltReader::AnalysePltFlie(CString FilePath) { m_PtVec.clear(); CStdioFile file; if(file.Open(FilePath,CFile::modeRead,NULL)==0) { return false; } CString str; bool flg = true; int pos = 0; while(file.ReadString(str))//读取一行 { int len = str.GetLength(); while(pos