375 lines
9.3 KiB
C++
375 lines
9.3 KiB
C++
#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;
|
|
} |