435 lines
10 KiB
C++
435 lines
10 KiB
C++
#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;
|
|
}
|
|
|