Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipewire/DbPsConfig.cpp
T

394 lines
9.2 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#include "stdafx.h"
2026-09-28 15:28:50 +08:00
#include "DbPsConfig.h"
ACRX_DXF_DEFINE_MEMBERS(ATSPsConfig, AcDbObject,AcDb::kDHL_CURRENT,
2026-10-04 00:04:20 +08:00
AcDb::kMReleaseCurrent,1, ATS_PSCONFIG,"ATS_PSCONFIG图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com");
2026-09-28 15:28:50 +08:00
const Adesk::UInt8 TDbPsConfig::g_nVersion = 2;
Acad::ErrorStatus
TDbPsConfig::dwgInFields (AcDbDwgFiler* pFiler)
{
assertWriteEnabled();
Acad::ErrorStatus es=Acad::eOk;
es = AcDbObject::dwgInFields(pFiler);
if(es != Acad::eOk)
return es;
Adesk::UInt8 nVer=0;
pFiler->readItem(&nVer);
if(nVer>g_nVersion) {// Version is too new
return Acad::eMakeMeProxy;
}
pFiler->readItem(&m_dPipeTextDis);
pFiler->readItem(&m_dBreakWidth);
pFiler->readItem(&m_nLineWeight);
pFiler->readItem(&m_bBreakPipe);
pFiler->readItem(&m_nPipeOsnap);
pFiler->readItem(&m_nShowFlag);
pFiler->readItem(&m_nSysShowFlag1);
pFiler->readItem(&m_nSysShowFlag2);
2026-10-04 00:04:20 +08:00
// 备用数据
2026-09-28 15:28:50 +08:00
pFiler->readItem(&m_dSpare1);
pFiler->readItem(&m_dSpare2);
pFiler->readItem(&m_nSpare1);
pFiler->readItem(&m_nSpare2);
pFiler->readItem(&m_nSpare3);
pFiler->readItem(&m_nSpare4);
pFiler->readItem(&m_nSpare5);
2026-10-04 00:04:20 +08:00
// cet 2015.8.06 add 自定义管线系统
2026-09-28 15:28:50 +08:00
if (nVer > 1)
{
Adesk::UInt8 nSize = 0;
pFiler->readUInt8(&nSize);
XString sName;
bool bShow = true;
for (int i = 0; i < nSize; ++i)
{
ReadString(pFiler, sName);
pFiler->readBool(&bShow);
m_mapSystem.insert(std::make_pair(CString(sName), bShow));
}
}
return pFiler->filerStatus();
}
Acad::ErrorStatus
TDbPsConfig::dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
Acad::ErrorStatus es=Acad::eOk;
es = AcDbObject::dwgOutFields(pFiler);
if(es != Acad::eOk)
return es;
if (g_nSaveTArchVer <= 10)
{
pFiler->writeItem((Adesk::UInt8)1);
}
else
{
pFiler->writeItem(g_nVersion);
}
pFiler->writeItem(m_dPipeTextDis);
pFiler->writeItem(m_dBreakWidth);
pFiler->writeItem(m_nLineWeight);
pFiler->writeItem(m_bBreakPipe);
pFiler->writeItem(m_nPipeOsnap);
pFiler->writeItem(m_nShowFlag);
pFiler->writeItem(m_nSysShowFlag1);
pFiler->writeItem(m_nSysShowFlag2);
2026-10-04 00:04:20 +08:00
// 备用数据
2026-09-28 15:28:50 +08:00
pFiler->writeItem(m_dSpare1);
pFiler->writeItem(m_dSpare2);
pFiler->writeItem(m_nSpare1);
pFiler->writeItem(m_nSpare2);
pFiler->writeItem(m_nSpare3);
pFiler->writeItem(m_nSpare4);
pFiler->writeItem(m_nSpare5);
2026-10-04 00:04:20 +08:00
// cet 2015.8.06 add 自定义管线系统
2026-09-28 15:28:50 +08:00
if (g_nSaveTArchVer > 10)
{
Adesk::UInt8 nSize = m_mapSystem.size();
pFiler->writeUInt8(nSize);
std::map<CString,bool>::const_iterator it, itEnd = m_mapSystem.end();
for (it = m_mapSystem.begin(); it != itEnd; ++it)
{
pFiler->writeItem((const TCHAR *)it->first);
pFiler->writeBool(it->second);
}
}
return pFiler->filerStatus();
}
Acad::ErrorStatus
TDbPsConfig::dxfInFields (AcDbDxfFiler* pFiler)
{
assertWriteEnabled();
Acad::ErrorStatus es=Acad::eOk;
es = AcDbObject::dxfInFields(pFiler);
if(es!=Acad::eOk)
return es;
if (!pFiler->atSubclassData(_T("TDbPsConfig"))) {
return Acad::eBadDxfSequence;
}
return pFiler->filerStatus();
}
Acad::ErrorStatus
TDbPsConfig::dxfOutFields(AcDbDxfFiler* pFiler) const
{
assertReadEnabled();
Acad::ErrorStatus es=Acad::eOk;
es = AcDbObject::dxfOutFields(pFiler);
assert(es == Acad::eOk);
es = pFiler->writeItem(AcDb::kDxfSubclass,_T("TDbPsConfig"));
assert(es == Acad::eOk);
return es;
}
Acad::ErrorStatus
TDbPsConfig::subWblockClone(AcRxObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const
{
Acad::ErrorStatus es=Acad::eOk;
es = AcDbObject::wblockClone(pOwner, pClonedObject, idMap, isPrimary);
2026-10-04 00:04:20 +08:00
// cet 2015.7.24 modify 需要返回eok,否则该函数被调用时会崩溃
// 基类返回状态值为“未实现该函数”,重载后不可返回该值
2026-09-28 15:28:50 +08:00
// if(es!=Acad::eOk)
// return es;
//
2026-10-04 00:04:20 +08:00
// //待写...
2026-09-28 15:28:50 +08:00
//
// return es;
return Acad::eOk;
}
BOOL TDbPsConfig::IsSystemShow(TPipeSys::SysType sysType) const
{
int nSysType = (int)sysType;
2026-10-04 00:04:20 +08:00
Adesk::UInt32 nShowFlag = nSysType<32 ? m_nSysShowFlag1 : m_nSysShowFlag2;//Adesk::UInt32 &nShowFlag sr 2009-11-2取消&,VC9上编译不通过
2026-09-28 15:28:50 +08:00
nSysType = nSysType%32;
Adesk::UInt32 nBit = (Adesk::UInt32)pow(2.0,nSysType);
return !(nShowFlag&nBit)!=0;
}
void TDbPsConfig::ShowSystem(TPipeSys::SysType sysType,BOOL bFlag)
{
assertWriteEnabled();
int nSysType = (int)sysType;
Adesk::UInt32 &nShowFlag = nSysType<32 ? m_nSysShowFlag1 : m_nSysShowFlag2;
nSysType = nSysType%32;
Adesk::UInt32 nBit = (Adesk::UInt32)pow(2.0,nSysType);
if(!bFlag)
nShowFlag |= nBit;
else
nShowFlag &= ~nBit;
}
2026-10-04 00:04:20 +08:00
// 管线加粗
2026-09-28 15:28:50 +08:00
void TDbPsConfig::SetLineWeight(BOOL bFlag)
{
assertWriteEnabled();
if(bFlag)
m_nLineWeight |= WEIGHT_PIPE;
else
m_nLineWeight &= ~WEIGHT_PIPE;
}
2026-10-04 00:04:20 +08:00
// 散热器加粗
2026-09-28 15:28:50 +08:00
void TDbPsConfig::SetRadiatorWeight(BOOL bFlag)
{
assertWriteEnabled();
if(bFlag)
m_nLineWeight |= WEIGHT_RADIATOR;
else
m_nLineWeight &= ~WEIGHT_RADIATOR;
}
2026-10-04 00:04:20 +08:00
// 盘管加粗
2026-09-28 15:28:50 +08:00
void TDbPsConfig::SetFloorWeight(BOOL bWeight)
{
assertWriteEnabled();
2026-10-04 00:04:20 +08:00
// cet 2016.8.16 modify 此变量多处使用,按位设置标识
2026-09-28 15:28:50 +08:00
// m_nSpare3 = bWeight;
if (bWeight)
{
m_nSpare3 |= 0x0004;
}
else
{
m_nSpare3 &= ~0x0004;
}
}
void TDbPsConfig::ShowPipeFlowDir(BOOL bFlag)
{
assertWriteEnabled();
if(bFlag)
m_nShowFlag |= SHOW_PIPEDIR;
else
m_nShowFlag &= ~SHOW_PIPEDIR;
}
BOOL TDbPsConfig::IsShowPipeCanalMidLine() const
{
bool bRet =((m_nSpare3 & 0x0001) > 0) ? false : true;
return bRet;
}
void TDbPsConfig::ShowPipeCanalMinLine( BOOL bShow )
{
assertWriteEnabled();
if (!bShow)
{
m_nSpare3 |= 0x0001;
}
else
{
m_nSpare3 &= ~0x0001;
}
}
BOOL TDbPsConfig::IsRelatePipeLineTypeToCurPScale() const
{
bool bRet =((m_nSpare3 & 0x0002) > 0) ? false : true;
return bRet;
}
void TDbPsConfig::RelatePipeLineTypeToCurPScale( bool bReated )
{
assertWriteEnabled();
if (!bReated)
{
m_nSpare3 |= 0x0002;
}
else
{
m_nSpare3 &= ~0x0002;
}
}
void TDbPsConfig::ShowCustomPipeSystem(const CString &sSysName, bool bShow)
{
m_mapSystem[sSysName] = bShow;
}
void TDbPsConfig::CleanAllCustomPipeSystem()
{
m_mapSystem.clear();
}
bool TDbPsConfig::IsShowCustomPipeSystem(const CString &sSysName)
{
if (m_mapSystem.find(sSysName) == m_mapSystem.end())
{
return true;
}
return m_mapSystem[sSysName];
}
bool TDbPsConfig::IsShowPipeCanalLineWeight() const
{
return (m_nLineWeight & WEIGHT_CANAL) != 0;
}
void TDbPsConfig::ShowPipeCanalLineWeight(bool bShow)
{
assertWriteEnabled();
if(bShow)
m_nLineWeight |= WEIGHT_CANAL;
else
m_nLineWeight &= ~WEIGHT_CANAL;
}
bool TDbPsConfig::IsClosePipeCancalPointEnd() const
{
return (m_nLineWeight & CLOSE_CANAL_POINTEND) != 0;
}
void TDbPsConfig::ClosePipeCanalPointEnd(bool bClose)
{
assertWriteEnabled();
if(bClose)
m_nLineWeight |= CLOSE_CANAL_POINTEND;
else
m_nLineWeight &= ~CLOSE_CANAL_POINTEND;
}
void InitDbPsConfig(BOOL bTrue)
{
if(bTrue) {
TDbPsConfig::rxInit();
} else {
deleteAcRxClass(TDbPsConfig::desc());
}
}
2026-10-04 00:04:20 +08:00
// 初始化全局变量
2026-09-28 15:28:50 +08:00
void InitDbPsConfig()
{
Acad::ErrorStatus es=Acad::eOk;
AcDbDatabase *pDb = curDoc()->database();
if(pDb==NULL) return;
//assert(pDb!=NULL);
AcDbDictionary* pRootDict=NULL;
es=pDb->getNamedObjectsDictionary(pRootDict,AcDb::kForRead);
assert(es==Acad::eOk);
AcDbObject* pObj;
es=pRootDict->getAt(g_sDbPsConfig,pObj,AcDb::kForRead);
if (es==Acad::eOk) {
pObj->close();
2026-10-04 00:04:20 +08:00
} else {//当前数据库未初始化全局变量
2026-09-28 15:28:50 +08:00
if (pRootDict->upgradeOpen() == Acad::eOk) {
pRootDict->assertWriteEnabled();
TDbPsConfig *pConfig = new TDbPsConfig;
if (pConfig!=NULL) {
AcDbObjectId idConfig;
es=pRootDict->setAt(g_sDbPsConfig,pConfig,idConfig);
//assert(es==Acad::eOk);
if (es==Acad::eOk) {
pConfig->close();
} else {
delete pConfig;
}
}
pRootDict->downgradeOpen();
}
}
pRootDict->close();
}
2026-10-04 00:04:20 +08:00
// 保存DWG全局变量的指针
2026-09-28 15:28:50 +08:00
TDbPsConfig * GetDwgPsGlobal(AcDb::OpenMode opMode, AcDbDatabase *pDb/*=NULL*/)
{
TDbPsConfig *pConfig=NULL;
2026-10-04 00:04:20 +08:00
if (pDb==NULL) //当前数据库
2026-09-28 15:28:50 +08:00
pDb = curDoc()->database();
if (pDb!=NULL) {
Acad::ErrorStatus es=Acad::eOk;
AcDbDictionary* pRootDict=NULL;
es=pDb->getNamedObjectsDictionary(pRootDict,AcDb::kForRead);
if (es==Acad::eOk) {
AcDbObjectId idExist;
es=pRootDict->getAt(g_sDbPsConfig, idExist);
if (es==Acad::eOk && !!idExist) {
es=acdbOpenObject(pConfig, idExist, opMode);
2026-10-04 00:04:20 +08:00
// cet 2015.8.03 add 某用户反馈的问题,有张dwg图无法打开对象进行操作,故删除该对象以给予重新创建改对象并赋值的机会
2026-09-28 15:28:50 +08:00
if (es == Acad::eNotThatKindOfClass && pRootDict->upgradeOpen() == Acad::eOk)
{
es = pRootDict->remove(g_sDbPsConfig);
pRootDict->downgradeOpen();
}
}
else if(opMode==AcDb::kForWrite) {
if ((es = pRootDict->upgradeOpen()) == Acad::eOk) {
pRootDict->assertWriteEnabled();
pConfig = new TDbPsConfig;
if (pConfig!=NULL) {
AcDbObjectId idConfig;
es=pRootDict->setAt(g_sDbPsConfig,pConfig,idConfig);
ASSERT(es==Acad::eOk);
}
pRootDict->downgradeOpen();
}
}
pRootDict->close();
}
}
return pConfig;
}