Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipewire/DbPsConfig.cpp
T
2026-09-28 15:28:50 +08:00

395 lines
9.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include "DbPsConfig.h"
ACRX_DXF_DEFINE_MEMBERS(ATSPsConfig, AcDbObject,AcDb::kDHL_CURRENT,
AcDb::kMReleaseCurrent,1, ATS_PSCONFIG,"ATS_PSCONFIG图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com");
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);
// 备用数据
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);
// cet 2015.8.06 add 自定义管线系统
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);
// 备用数据
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);
// cet 2015.8.06 add 自定义管线系统
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);
// cet 2015.7.24 modify 需要返回eok,否则该函数被调用时会崩溃
// 基类返回状态值为“未实现该函数”,重载后不可返回该值
// if(es!=Acad::eOk)
// return es;
//
// //待写...
//
// return es;
return Acad::eOk;
}
BOOL TDbPsConfig::IsSystemShow(TPipeSys::SysType sysType) const
{
int nSysType = (int)sysType;
Adesk::UInt32 nShowFlag = nSysType<32 ? m_nSysShowFlag1 : m_nSysShowFlag2;//Adesk::UInt32 &nShowFlag sr 2009-11-2取消&,VC9上编译不通过
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;
}
// 管线加粗
void TDbPsConfig::SetLineWeight(BOOL bFlag)
{
assertWriteEnabled();
if(bFlag)
m_nLineWeight |= WEIGHT_PIPE;
else
m_nLineWeight &= ~WEIGHT_PIPE;
}
// 散热器加粗
void TDbPsConfig::SetRadiatorWeight(BOOL bFlag)
{
assertWriteEnabled();
if(bFlag)
m_nLineWeight |= WEIGHT_RADIATOR;
else
m_nLineWeight &= ~WEIGHT_RADIATOR;
}
// 盘管加粗
void TDbPsConfig::SetFloorWeight(BOOL bWeight)
{
assertWriteEnabled();
// cet 2016.8.16 modify 此变量多处使用,按位设置标识
// 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());
}
}
// 初始化全局变量
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();
} else {//当前数据库未初始化全局变量
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();
}
// 保存DWG全局变量的指针
TDbPsConfig * GetDwgPsGlobal(AcDb::OpenMode opMode, AcDbDatabase *pDb/*=NULL*/)
{
TDbPsConfig *pConfig=NULL;
if (pDb==NULL) //当前数据库
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);
// cet 2015.8.03 add 某用户反馈的问题,有张dwg图无法打开对象进行操作,故删除该对象以给予重新创建改对象并赋值的机会
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;
}