Files
envi-code/SourceCode/Code2026/tg_shs/inc/pipewire/DbPsConfig.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

353 lines
12 KiB
C++

#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<CString,bool> 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