#include "stdafx.h" #include "CoreTools.h" #include "sys/stat.h" #include "DuctlineTools.h" #include "KTSetting.h" #include "KTModelLayoutXData.h" #include "PipeSystemSetting.h" #include "KTCADUtilityEx.h" #ifndef PIPE_CENTER_SYS #define PIPE_CENTER_SYS _T("风管中心线") #define PIPE_OUTSIDE_SYS _T("风管边线") #endif #ifndef LAY_HVAC_SIG #define LAY_HVAC_SIG _T("风管中心线") #endif #ifndef FITN_CENTER_SYS #define FITN_CENTER_SYS _T("风管中心线") #define FITN_OUTSIDE_SYS _T("风管边线") #define FITN_SINGLE_SYS _T("风管中心线") #endif CString DuctlineTools::getCurrentPipeSysTblName() { CString sRel(_T("THVacCfg_Std0")); CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return sRel; CString sql(_T("")); sql.Format(_T("SELECT [TABLENAME] FROM THvacCfg WHERE [STDNAME]='THvac'")); db.GetSelData(sql, sRel); return sRel; } AcDbObjectId DuctlineTools::getLtByPipeSys(LPCTSTR sys, bool bCenter) { AcDbObjectId id(AcDbObjectId::kNull); CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return id; CString sTable(DuctlineTools::getCurrentPipeSysTblName()); CString pipesys = bCenter ? _T("中心线") : _T("风管"); CString sql; sql.Format(_T("SELECT [LINETYPE] FROM %s WHERE [SYSTEM]='%s' AND [PIPESYS]='%s'"), sTable, sys, pipesys); CString sLt(_T("Continuous")); db.GetSelData(sql, sLt); int nPos = sLt.Find(_T(':'));//CENTER2:___ _ ___ if (nPos != -1) { CString sLtL = sLt.Mid(0, nPos); sLt = sLtL; } AcDbDatabase *pDb = acdbCurDwg(); if (!pDb) return id; AcDbLinetypeTable *pTable(NULL); pDb->getLinetypeTable(pTable, AcDb::kForRead); ACHAR *psz(NULL); if (pTable) { pTable->getAt(sLt, id); pTable->close(); } if (!id.isValid()) { id = CoreTools::loadLineType(FilePath::GetSysDir(), sLt); } return id; } AcDbObjectId DuctlineTools::getLyByPipeSys(LPCTSTR sys, bool bCenter, bool bUpdate) { AcDbObjectId id; CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return id; CString sTable(DuctlineTools::getCurrentPipeSysTblName()); CString pipesys = bCenter ? _T("中心线") : _T("风管"); CString sql; sql.Format(_T("SELECT [LAYNAME] FROM %s WHERE [SYSTEM]='%s' AND [PIPESYS]='%s'"), sTable, sys, pipesys); CString sLy(_T("0")); db.GetSelData(sql, sLy); AcDbDatabase *pDb = acdbCurDwg(); if (!pDb) return id; AcDbLayerTable *pTable(NULL); pDb->getLayerTable(pTable, AcDb::kForWrite); ACHAR *psz(NULL); if (pTable) { if (!pTable->has(sLy)) { // 没有则新建 AcDbLayerTableRecord *pRec = new AcDbLayerTableRecord(); AcDbObjectId idLt = DuctlineTools::getLtByPipeSys(sys, bCenter); if (idLt.isValid()) pRec->setLinetypeObjectId(idLt); int clr = DuctlineTools::getColorByPipeSys(sys, bCenter); AcCmColor aclr; aclr.setColorIndex(clr); pRec->setColor(aclr); pRec->setName(sLy); pTable->add(id, pRec); pRec->close(); } else pTable->getAt(sLy, id); pTable->close(); } if (!bUpdate) return id; OPENOBJ_BEGIN(id, AcDb::kForWrite, AcDbLayerTableRecord, pRec) if (pRec) { AcDbObjectId idLt = DuctlineTools::getLtByPipeSys(sys, bCenter); int clr = DuctlineTools::getColorByPipeSys(sys, bCenter); AcCmColor aclr; aclr.setColorIndex(clr); pRec->setLinetypeObjectId(idLt); pRec->setColor(aclr); } OPENOBJ_END() return id; } double DuctlineTools::getLwByPipeSys(LPCTSTR sys, bool bCenter) { CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return 0; CString sTable(CoreTools::getCurrentPipeSysTblName()); CString pipesys = bCenter ? _T("中心线") : _T("风管"); CString sql; sql.Format(_T("SELECT [LINEWIDTH] FROM %s WHERE [SYSTEM]='%s' AND [PIPESYS]='%s'"), sTable, sys, pipesys); CString sLw(_T("0")); db.GetSelData(sql, sLw); AecDbObjXDataMap xdata; if (KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xdata)) { CString sScale(_T("1:100")); xdata.GetAt(DOC_SCALE, sScale); int nIndex = sScale.Find(':', 0); double dDocScale = 1.0; if (nIndex != -1) { dDocScale = _ttof(sScale.Mid(nIndex + 1)) / _ttof(sScale.Mid(0, nIndex)); } return _ttof(sLw) * dDocScale; } return _ttof(sLw); } AcDbObjectId DuctlineTools::getLyForPipe(LPCTSTR sys, bool bUpdate) { CString sName = _T("DUCT-"); sName += sys; sName += _T("管"); AcDbObjectId idPipeLayer; AcDbDatabase *pDb = acdbCurDwg(); if (!pDb) return idPipeLayer; AcDbLayerTable *pTable(NULL); if (Acad::eOk == pDb->getLayerTable(pTable, AcDb::kForRead)) { pTable->getAt(sName, idPipeLayer); pTable->close(); } if (idPipeLayer.isValid()) { if (!bUpdate) return idPipeLayer; OPENOBJ_BEGIN(idPipeLayer, AcDb::kForWrite, AcDbLayerTableRecord, pRec) if (pRec) { AcDbObjectId idLt = DuctlineTools::getLtByPipeSys(sys, true); int clr = DuctlineTools::getColorByPipeSys(sys, true); AcCmColor aclr; aclr.setColorIndex(clr); pRec->setLinetypeObjectId(idLt); pRec->setColor(aclr); } OPENOBJ_END() return idPipeLayer; } AcDbObjectId idLy = DuctlineTools::getLyByPipeSys(sys, true, bUpdate); OPENOBJ_BEGIN(idLy, AcDb::kForRead, AcDbLayerTableRecord, pRec) if (pRec) { AcDbLayerTableRecord *pNew = (AcDbLayerTableRecord *)pRec->clone(); pNew->setName(sName); int clr = DuctlineTools::getColorByPipeSys(sys, true); AcCmColor aclr; aclr.setColorIndex(clr); pNew->setColor(aclr); AcDbDatabase *pDb = acdbCurDwg(); if (pDb) { AcDbLayerTable *pT(NULL); if (pDb->getLayerTable(pT, AcDb::kForWrite) == Acad::eOk) { if (pT->add(idPipeLayer, pNew) == Acad::eOk) pNew->close(); pT->close(); } } } OPENOBJ_END() return idPipeLayer; } int DuctlineTools::getColorByPipeSys(LPCTSTR sys, bool bCenter) { CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return 256; CString sTable(DuctlineTools::getCurrentPipeSysTblName()); CString pipesys = bCenter ? _T("中心线") : _T("风管"); CString sql; sql.Format(_T("SELECT [COLOR] FROM %s WHERE [SYSTEM]='%s' AND [PIPESYS]='%s'"), sTable, sys, pipesys); CString sClr(_T("256")); db.GetSelData(sql, sClr); return _ttoi(sClr); } AcDbObjectId DuctlineTools::AecInitLayerEx(LPCTSTR pszLayer,LPCTSTR pszSys,int nColorIndex,LPCTSTR pszLineType,AcDbDatabase* pDb,bool bUpdate ) { //外部调用 //AcDbObjectId idCenLay = DuctlineTools::AecInitLayerEx(LAY_HVAC_CEN, pParam->szSys, 4, _T("center2"), NULL); //AcDbObjectId idOutLay = DuctlineTools::AecInitLayerEx(LAY_HVAC_OUT, pParam->szSys, 7, _T("Continuous"), NULL); //AcDbObjectId idSingle = DuctlineTools::AecInitLayerEx(LAY_HVAC_SIG, pParam->szSys, 7, _T("Continuous"), NULL); AcDbObjectId id; CUIISQLiteServer db; if (!db.InitADOServer(FilePath::GetSysDir() + _T("\\HvacConfig.db"))) return id; CString sTable(DuctlineTools::getCurrentPipeSysTblName()); //CString pipesys = bCenter ? _T("管线中心线") : _T("管线外边线"); CString pipesys; bool bCenter = false; if (_tcscmp(pszLayer, LAY_HVAC_OUT) == 0) pipesys = _T("风管"); if (_tcscmp(pszLayer, LAY_HVAC_CEN) == 0) { pipesys = _T("中心线"); bCenter = true; } if (_tcscmp(pszLayer, LAY_HVAC_SIG) == 0) pipesys = _T("风管单线"); CString sql; sql.Format(_T("SELECT [LAYNAME] FROM %s WHERE [SYSTEM]='%s' AND [PIPESYS]='%s'"), sTable, pszSys, pipesys); CString sLy(_T("0")); db.GetSelData(sql, sLy); if(pDb == NULL) pDb = acdbCurDwg(); if (!pDb) return id; AcDbLayerTable *pTable(NULL); pDb->getLayerTable(pTable, AcDb::kForWrite); ACHAR *psz(NULL); if (pTable) { if (!pTable->has(sLy)) { // 没有则新建 AcDbLayerTableRecord *pRec = new AcDbLayerTableRecord(); AcDbObjectId idLt = DuctlineTools::getLtByPipeSys(pszSys, bCenter); if (idLt.isValid()) pRec->setLinetypeObjectId(idLt); int clr = DuctlineTools::getColorByPipeSys(pszSys, bCenter); AcCmColor aclr; aclr.setColorIndex(clr); pRec->setColor(aclr); pRec->setName(sLy); pTable->add(id, pRec); pRec->close(); } else pTable->getAt(sLy, id); pTable->close(); } if (!bUpdate) return id; OPENOBJ_BEGIN(id, AcDb::kForWrite, AcDbLayerTableRecord, pRec) if (pRec) { AcDbObjectId idLt = DuctlineTools::getLtByPipeSys(pszSys, bCenter); int clr = DuctlineTools::getColorByPipeSys(pszSys, bCenter); AcCmColor aclr; aclr.setColorIndex(clr); pRec->setLinetypeObjectId(idLt); pRec->setColor(aclr); } OPENOBJ_END() return id; } bool DuctlineTools::getSqliteDB(LPCTSTR dbName, CUIISQLiteServer & db) { CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\"); dbPath += dbName; if (!db.InitADOServer(dbPath)) return false; return true; } bool DuctlineTools::setLayerSys(CUIISQLiteServer *pDb, CStringArray &ar) { if (!pDb) return false; CAcModuleResourceOverride myResources; //CWSysLayCfgDlg wsysDlg; CPipeSystemSettingDlg wsysDlg; int nRes = wsysDlg.DoModal(); if (nRes != IDOK) return false; //显示当前图层系统 CString sSQL, sStd = _T("THVacCfg_Std0"); //sSQL = _T("select tablename from thvaccfg where currstd=1"); //pDb->GetSelData(sSQL, sStd); sSQL.Format(_T("select distinct system from %s"), sStd); pDb->GetSelData(sSQL, ar); return true; } bool DuctlineTools::getLayerSys(CUIISQLiteServer *pDb, CStringArray &ar) { //显示当前图层系统 CString sSQL, sStd = _T("THVacCfg_Std0"); //sSQL = _T("select tablename from wpipecfg where currstd=1"); //pDb->GetSelData(sSQL, sStd); sSQL.Format(_T("select distinct system from %s"), sStd); pDb->GetSelData(sSQL, ar); return true; }