#include "stdafx.h" #include "sys/stat.h" #include "CablelineTools.h" #include "KTSetting.h" #include "KTModelLayoutXData.h" #include "CoreTools.h" #include "uiiado.h" CString CablelineTools::getCurrentLayerSys() { CString sysName(_T("")); AecDbObjXDataMap xDataMap; if (KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) xDataMap.GetAt(_T("PIPE_LAY_SYS"), sysName); return sysName; } AcDbObjectId CablelineTools::AecInitLayerEx(LPCTSTR pszLayer, int nColorIndex, LPCTSTR pszLineType, AcDbDatabase* pDb = NULL) { CString sLayerInit = pszLayer; CString sLineTypeinit = pszLineType; int nLineWidth = AcDb::kLnWt000; if (pDb == NULL) pDb = acdbCurDwg(); //映射到系统图层 BOOL bFindSysRec = FALSE; CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); CUIISQLiteServer *pDbSrv = new CUIISQLiteServer; pDbSrv->InitADOServer(dbPath); if (pDbSrv) { CString sSQL, sTablename, sCurrSys; sCurrSys = getCurrentLayerSys(); sSQL = _T("select tablename from wpipecfg where currstd=1"); if (pDbSrv->GetSelData(sSQL, sTablename)) { //LAYKEY LAYNAME PIPESYS SYSTEM COLOR LINETYPE LINEWIDTH //11 废水管线中心线 管线中心线 废水 4 Continuous:________ 0 sSQL.Format(_T("select layname,pipesys,color,linetype,linewidth from [%s] where system='%s'"), sTablename, sCurrSys); CUIIValueTable table; pDbSrv->GetSelData(sSQL, table); DELETE_PTR(pDbSrv); CStringArray arVals; CString sLayName, sPipeSys, sColor, sLineType, sLineWidth, sTemp; for (int i = 0; i < table.GetTableLogicSize(); i++) { arVals.RemoveAll(); table.GetValueRecord(i, arVals); sLayName = arVals.GetAt(0); sPipeSys = arVals.GetAt(1); sColor = arVals.GetAt(2); sLineType = arVals.GetAt(3); //管线中心线 if (_tcscmp(pszLayer, LAY_CABTRY_CEN) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); bFindSysRec = TRUE; break; } //管线边线 if (_tcscmp(pszLayer, LAY_CABTRY_OUT) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } //管线中心线 单线 if (_tcscmp(pszLayer, LAY_CABTRY_SIG) == 0) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } //FITN_CENTER_SYS if (_tcscmp(pszLayer, LAY_CFITN_CENTER) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CFITN_OUTSIDE) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CFITN_SINGLE) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CEQU) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } } } } AcDbObjectId id; AcDbLayerTable* pLayTbl = NULL; if (Acad::eOk == pDb->getLayerTable(pLayTbl, AcDb::kForWrite)) { if (Acad::eOk == pLayTbl->getAt(sLayerInit, id)) { //如果找到 pLayTbl->close(); return id; } AcCmColor color; color.setColorIndex(nColorIndex); AcDbLayerTableRecord* pRec = new AcDbLayerTableRecord; pRec->setColor(color); pRec->setLineWeight((AcDb::LineWeight)nLineWidth); //首先判断是否有此线型 bool bFind = false; AcDbObjectId idLt; AcDbLinetypeTable* pLTbl = NULL; if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { if (Acad::eOk == pLTbl->getAt(sLineTypeinit, idLt)) { bFind = true; } pLTbl->close(); } if (!bFind) { //加载线型 //D:\Program Files\AutoCAD 2008\acad.exe TCHAR szFileName[MAX_PATH]; ::GetModuleFileName(acedGetAcadWinApp()->m_hInstance, szFileName, MAX_PATH); // CString sLtFile = szFileName; sLtFile.MakeLower(); sLtFile.Replace(_T("acad.exe"), _T("support\\acad.lin")); CFileFind find; if (find.FindFile(sLtFile)) { acdbLoadLineTypeFile(sLineTypeinit, sLtFile, pDb); if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { pLTbl->getAt(sLineTypeinit, idLt); pLTbl->close(); } } else { if (CoreTools::FindFile(_T("acad.lin"), sLtFile)) { sLtFile = szFileName; acdbLoadLineTypeFile(sLineTypeinit, sLtFile, pDb); if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { pLTbl->getAt(sLineTypeinit, idLt); pLTbl->close(); } } } } pRec->setName(sLayerInit); pRec->setLinetypeObjectId(idLt); pLayTbl->add(id, pRec); pRec->close(); pLayTbl->close(); } return id; } AcDbObjectId CablelineTools::AecInitLayerEx(LPCTSTR pszLayer,LPCTSTR pszSys,int nColorIndex,LPCTSTR pszLineType,AcDbDatabase* pDb) { CString sLayerInit = pszLayer; CString sLineTypeinit = pszLineType; int nLineWidth = AcDb::kLnWt000; if (pDb == NULL) pDb = acdbCurDwg(); //映射到系统图层 BOOL bFindSysRec = FALSE; CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); CUIISQLiteServer *pDbSrv = new CUIISQLiteServer; pDbSrv->InitADOServer(dbPath); if (pDbSrv) { CString sSQL, sTablename, sCurrSys; sCurrSys = pszSys; sSQL = _T("select tablename from wpipecfg where currstd=1"); if (pDbSrv->GetSelData(sSQL, sTablename)) { //LAYKEY LAYNAME PIPESYS SYSTEM COLOR LINETYPE LINEWIDTH //11 废水管线中心线 管线中心线 废水 4 Continuous:________ 0 sSQL.Format(_T("select layname,pipesys,color,linetype,linewidth from [%s] where system='%s'"), sTablename, sCurrSys); CUIIValueTable table; pDbSrv->GetSelData(sSQL, table); DELETE_PTR(pDbSrv); CStringArray arVals; CString sLayName, sPipeSys, sColor, sLineType, sLineWidth, sTemp; for (int i = 0; i < table.GetTableLogicSize(); i++) { arVals.RemoveAll(); table.GetValueRecord(i, arVals); sLayName = arVals.GetAt(0); sPipeSys = arVals.GetAt(1); sColor = arVals.GetAt(2); sLineType = arVals.GetAt(3); //管线中心线 if (_tcscmp(pszLayer, LAY_CABTRY_CEN) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); bFindSysRec = TRUE; break; } //管线边线 if (_tcscmp(pszLayer, LAY_CABTRY_OUT) == 0) { //sLayerInit = sLayName; sLayerInit.Format(_T("%s-%s"),pszSys,pszLayer); sLineTypeinit = sLineType; nColorIndex = KTSetting::GetLayerColor(pszLayer); nLineWidth = _ttoi(sLineWidth); break; } //管线中心线 单线 if (_tcscmp(pszLayer, LAY_CABTRY_SIG) == 0 ) { //sLayerInit = sLayName; sLayerInit.Format(_T("%s-%s"),pszSys,pszLayer); sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } //FITN_CENTER_SYS if (_tcscmp(pszLayer, LAY_CFITN_CENTER) == 0 ) { sLayerInit = sLayName; sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CFITN_OUTSIDE) == 0 ) { //sLayerInit = sLayName; sLayerInit.Format(_T("%s-%s"),pszSys,pszLayer); sLineTypeinit = sLineType; nColorIndex = KTSetting::GetLayerColor(pszLayer); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CFITN_SINGLE) == 0 ) { //sLayerInit = sLayName; sLayerInit.Format(_T("%s-%s"),pszSys,pszLayer); sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } if (_tcscmp(pszLayer, LAY_CEQU) == 0) { //sLayerInit = sLayName; sLayerInit.Format(_T("%s-%s"),pszSys,pszLayer); sLineTypeinit = sLineType; nColorIndex = _ttoi(sColor); nLineWidth = _ttoi(sLineWidth); break; } } } } if (!bFindSysRec) { CString sTemp; sTemp.Format(_T("%s-%s"),pszSys,sLayerInit); sLayerInit = sTemp; } AcDbObjectId id; AcDbLayerTable* pLayTbl = NULL; if (Acad::eOk == pDb->getLayerTable(pLayTbl, AcDb::kForWrite)) { if (Acad::eOk == pLayTbl->getAt(sLayerInit, id)) { //如果找到 pLayTbl->close(); return id; } AcCmColor color; color.setColorIndex(nColorIndex); AcDbLayerTableRecord* pRec = new AcDbLayerTableRecord; pRec->setColor(color); pRec->setLineWeight((AcDb::LineWeight)nLineWidth); //首先判断是否有此线型 bool bFind = false; AcDbObjectId idLt; AcDbLinetypeTable* pLTbl = NULL; if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { if (Acad::eOk == pLTbl->getAt(sLineTypeinit, idLt)) { bFind = true; } pLTbl->close(); } if (!bFind) { //加载线型 //D:\Program Files\AutoCAD 2008\acad.exe TCHAR szFileName[MAX_PATH]; ::GetModuleFileName(acedGetAcadWinApp()->m_hInstance, szFileName, MAX_PATH); // CString sLtFile = szFileName; sLtFile.MakeLower(); sLtFile.Replace(_T("acad.exe"), _T("support\\acad.lin")); CFileFind find; if (find.FindFile(sLtFile)) { acdbLoadLineTypeFile(sLineTypeinit, sLtFile, pDb); if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { pLTbl->getAt(sLineTypeinit, idLt); pLTbl->close(); } } else { if (CoreTools::FindFile(_T("acad.lin"), sLtFile)) { sLtFile = szFileName; acdbLoadLineTypeFile(sLineTypeinit, sLtFile, pDb); if (Acad::eOk == pDb->getLinetypeTable(pLTbl, AcDb::kForRead)) { pLTbl->getAt(sLineTypeinit, idLt); pLTbl->close(); } } } } pRec->setName(sLayerInit); pRec->setLinetypeObjectId(idLt); pLayTbl->add(id, pRec); pRec->close(); pLayTbl->close(); } return id; } bool CablelineTools::getSqliteDB(LPCTSTR dbName, CUIISQLiteServer & db) { CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\"); dbPath += dbName; if (!db.InitADOServer(dbPath)) return false; return true; }