#ifndef __DBPSCONFIG_H #define __DBPSCONFIG_H /*============================================================================* * Copyright(c), 1994-2007, Beijing Tangent Engineering Software Co.Ltd. * 作 者: 杨小勇 * 创建时间: 2003年秋季 * 描 述: 存储在dwg的全局设置 * 归属项目: 给排水 暖通 * 历史记录: 2008-6-26 补头文件注释 =============================================================================*/ #include "AttachmentPrototype.h" #define SHOW_PIPEDIR 0x01 // 管线流向 #define WEIGHT_PIPE 0x01 // 管线加粗 #define WEIGHT_RADIATOR 0x02 // 散热器加粗 #define WEIGHT_CANAL 0x04 // 方沟加粗 #define CLOSE_CANAL_POINTEND 0x08 // 方沟端点封闭 // 管线系统(给排水和暖通),目前仅存储全局变量 class PS_EXP TDbPsConfig : public AcDbObject { public: ACRX_DECLARE_MEMBERS(TDbPsConfig); #if (ADS>14) private: void *operator new[](size_t nSize) { return 0;} void operator delete[](void *p) {}; void *operator new[](size_t nSize, const char *file, int line) { return 0;} #endif static const Adesk::UInt8 g_nVersion; //当前版本 public: TDbPsConfig() : m_dPipeTextDis(0.5),m_nLineWeight(0),m_bBreakPipe(1), m_nPipeOsnap(1),m_nShowFlag(0),m_dBreakWidth(2),m_nSysShowFlag1(0), m_nSysShowFlag2(0), m_dSpare1(0),m_dSpare2(0),m_nSpare1(1),m_nSpare2(0), m_nSpare3(0),m_nSpare4(2),m_nSpare5(3),m_nSpare6(0) {} ~TDbPsConfig() {} protected: double m_dPipeTextDis; // 管线文字边距 double m_dBreakWidth; // 单线管线遮挡打断宽度 Adesk::UInt8 m_nLineWeight; // 是否加粗:管线、散热器、 Adesk::UInt8 m_bBreakPipe; // 管件附件是否打断管件 Adesk::UInt8 m_nPipeOsnap; // 管线捕捉方式:0-显示的曲线;1-管线基线 Adesk::UInt16 m_nShowFlag; // 显示标志,eg:流向、... Adesk::UInt32 m_nSysShowFlag1;// 管线系统显示标志1 Adesk::UInt32 m_nSysShowFlag2;// 管线系统显示标志2 // 以下为备用数据 double m_dSpare1; double m_dSpare2; Adesk::UInt8 m_nSpare1;//设备按比例 Adesk::UInt8 m_nSpare2;//弯头样式 // 盘管加粗 mcl use 2010.11.23,盘管跟管线分开 // 使用此值第一位设置方沟中线的显示 cet 2012.10.11 add // 使用第二位表示管线的线型比例是否随当前比例变化 Adesk::Int16 m_nSpare3; Adesk::UInt16 m_nSpare4;//管长小数位数 2007-9-13 Adesk::UInt16 m_nSpare5;//埋深小数位数 2007-9-13 Adesk::UInt32 m_nSpare6; std::map m_mapSystem; // cet 2015.8.06 add 自定义管线系统开关状态 public: BOOL IsSystemShow(TPipeSys::SysType sysType) const; void ShowSystem(TPipeSys::SysType sysType,BOOL bFlag); double GetPipeTextDis() const { return m_dPipeTextDis; } double GetBreakWidth() const { return m_dBreakWidth; } Adesk::UInt8 IsBreakPipe() const { return m_bBreakPipe; } Adesk::UInt8 GetPipeOsnap() const { return m_nPipeOsnap; } BOOL IsEqByScale() const{ return TRUE; //m_nSpare1 } int GetElbowType() const{ return m_nSpare2; } int GetPipeLenPrecision() const{ if(m_nSpare4 == 0)//考虑旧版默认值都是0,软件对于0位小数指定为99 return 2; else if(m_nSpare4 == 99) return 0; return m_nSpare4; } int GetWellDeepPrecision() const{ if(m_nSpare5 == 0) return 3; else if(m_nSpare5 == 99) return 0; return m_nSpare5; } void SetPipeTextDis(double dDis) { assertWriteEnabled(); m_dPipeTextDis=dDis; } void SetBreakWidth(double dWidth) { assertWriteEnabled(); m_dBreakWidth=dWidth; } void SetBreakPipe(BOOL bBreak) { assertWriteEnabled(); m_bBreakPipe = bBreak; } void SetPipeOsnap(int nOsnap) { assertWriteEnabled(); m_nPipeOsnap=(Adesk::UInt8)nOsnap; } void ShowPipeFlowDir(BOOL bFlag=TRUE); BOOL IsShowPipeFlowDir() const { return (m_nShowFlag&SHOW_PIPEDIR)!=0; } BOOL IsLineWeight() const { //管线加粗 return (m_nLineWeight&WEIGHT_PIPE)!=0; } BOOL IsFloorWeight() const { //盘管加粗 // cet 2016.8.16 modify 此变量多处使用,按位设置标识 // return m_nSpare3; return ((m_nSpare3 & 0x0004) > 0) ? TRUE : FALSE; } BOOL IsRadiatorWeight() const { // 散热器加粗 return (m_nLineWeight&WEIGHT_RADIATOR)!=0; } void SetLineWeight(BOOL bFlag); // 管线加粗 void SetRadiatorWeight(BOOL bFlag); // 散热器加粗 void SetFloorWeight(BOOL bWeight); //盘管加粗 void SetEqByScale(BOOL bFlag){ assertWriteEnabled(); m_nSpare1 = bFlag; } void SetElbowType(int iType){ assertWriteEnabled(); m_nSpare2 = iType; } void SetPipeLenPrecision(int iPrecision){ assertWriteEnabled(); m_nSpare4 = iPrecision; } void SetWellDeepPrecision(int iPrecision){ assertWriteEnabled(); m_nSpare5 = iPrecision; } // 查询方沟中线是否显示 cet 2012.10.11 add BOOL IsShowPipeCanalMidLine() const; // 设置方沟中线是否显示 cet 2012.10.11 add void ShowPipeCanalMinLine(BOOL bShow); // 方沟是否加粗 cet 2016.8.29 add bool IsShowPipeCanalLineWeight() const; void ShowPipeCanalLineWeight(bool bShow); // 方沟端点是否闭合 cet 2018.1.16 add bool IsClosePipeCancalPointEnd() const; void ClosePipeCanalPointEnd(bool bClose); // 管线线型比例是否随管线比例变化 2012.12.18 add BOOL IsRelatePipeLineTypeToCurPScale() const; // 管线线型比例是否随管线比例变化 2012.12.18 add void RelatePipeLineTypeToCurPScale(bool bReated); // 管线系统是否显示 cet 2015.8.06 add void ShowCustomPipeSystem(const CString &sSysName, bool bShow); bool IsShowCustomPipeSystem(const CString &sSysName); // 清除自定义管线系统 void CleanAllCustomPipeSystem(); public:// Overriden function from AcDbObject virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; virtual Acad::ErrorStatus subWblockClone(AcRxObject* pOwner, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary) const; }; // 保存DWG全局变量的指针 PS_IMPEXP TDbPsConfig * GetDwgPsGlobal(AcDb::OpenMode opMode, AcDbDatabase *pDb=NULL); class PS_EXP TPSConfig { public: TDbPsConfig *m_pConfig; public: TPSConfig(AcDb::OpenMode opMode=AcDb::kForRead,AcDbDatabase *pDb=NULL):m_pConfig(NULL) { m_pConfig=GetDwgPsGlobal(opMode,pDb); } ~TPSConfig() { Close(); } void Close() { if(m_pConfig) m_pConfig->close(); m_pConfig = NULL; } operator AcDbObject & () { assert(m_pConfig); return *m_pConfig; } bool operator !() const { return m_pConfig==NULL; } }; //2007-1-12 sr add inline PS_IMPEXP int GetElbowType(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 0 : config.m_pConfig->GetElbowType(); } inline PS_IMPEXP int GetPipeLenPrecision(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 2 : config.m_pConfig->GetPipeLenPrecision(); } inline PS_IMPEXP int GetWellDeepPrecision(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 3 : config.m_pConfig->GetWellDeepPrecision(); } inline PS_IMPEXP double GetPsPipeTextDis(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 0.5 : config.m_pConfig->GetPipeTextDis(); } inline PS_IMPEXP double GetPsBreakWidth(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 2 : config.m_pConfig->GetBreakWidth(); } inline PS_IMPEXP BOOL IsPsLineWeight(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsLineWeight(); } inline PS_IMPEXP BOOL IsPsEqByScale(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsEqByScale(); } inline PS_IMPEXP BOOL IsPsRadiatorWeight(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsRadiatorWeight(); } inline PS_IMPEXP BOOL IsPsFloorPipeWeight(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsFloorWeight(); } inline PS_IMPEXP BOOL IsPsBreakPipe(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? TRUE : config.m_pConfig->IsBreakPipe(); } inline PS_IMPEXP int GetPSPipeOsnap(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? 1 : config.m_pConfig->GetPipeOsnap(); } inline PS_IMPEXP BOOL IsPsShowPipeFlowDir(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsShowPipeFlowDir(); } /* cet 2017.9.27 del 废弃代码 //查询管线系统的显示属性 inline PS_IMPEXP BOOL IsPsSystemShow(TPipeSys::SysType sysType, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? TRUE : config.m_pConfig->IsSystemShow(sysType); } //设置管线系统的显示属性 inline PS_IMPEXP void PsShowSystem(TPipeSys::SysType sysType,BOOL bFlag, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForWrite, pDb == NULL ? curDoc()->database() : pDb); if(!!config) config.m_pConfig->ShowSystem(sysType,bFlag); } */ // 查询方沟中线是否显示 cet 2012.10.11 add inline PS_IMPEXP BOOL IsShowPipeCanalMidLine(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? TRUE : config.m_pConfig->IsShowPipeCanalMidLine(); } // 设置方沟中线是否显示 cet 2012.10.11 add inline PS_IMPEXP void ShowPipeCanalMinLine(BOOL bShow, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForWrite, pDb == NULL ? curDoc()->database() : pDb); if(!!config) config.m_pConfig->ShowPipeCanalMinLine(bShow); } // 管线线型比例是否随管线比例变化 2012.12.18 add inline PS_IMPEXP BOOL IsRelatePipeLineTypeToCurPScale(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? TRUE : config.m_pConfig->IsRelatePipeLineTypeToCurPScale(); } // 方沟是否加粗 cet 2016.8.29 add inline PS_IMPEXP BOOL IsShowPipeCanalLineWeight(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsShowPipeCanalLineWeight(); } // 方沟是否加粗 cet 2016.8.29 add inline PS_IMPEXP void ShowPipeCanalLineWeight(BOOL bShow, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForWrite, pDb == NULL ? curDoc()->database() : pDb); if(!!config) config.m_pConfig->ShowPipeCanalLineWeight(bShow); } // 方沟端点是否闭合 cet 2018.1.16 add inline PS_IMPEXP bool IsClosePipeCancalPointEnd(AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForRead, pDb == NULL ? curDoc()->database() : pDb); return !config ? FALSE : config.m_pConfig->IsClosePipeCancalPointEnd(); } // 方沟端点是否闭合 cet 2018.1.16 add inline PS_IMPEXP void ClosePipeCanalPointEnd(bool bClose, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForWrite, pDb == NULL ? curDoc()->database() : pDb); if(!!config) config.m_pConfig->ClosePipeCanalPointEnd(bClose); } // 管线线型比例是否随管线比例变化 2012.12.18 add inline PS_IMPEXP void RelatePipeLineTypeToCurPScale(bool bReated, AcDbDatabase *pDb = NULL) { TPSConfig config(AcDb::kForWrite, pDb == NULL ? curDoc()->database() : pDb); if(!!config) config.m_pConfig->RelatePipeLineTypeToCurPScale(bReated); } #endif