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

242 lines
8.4 KiB
C++

#ifndef __PIPETOOLS_H
#define __PIPETOOLS_H
#include "DbPsConfig.h"
/*============================================================================*
* Copyright(c), 1994-2007, Beijing Tangent Engineering Software Co.Ltd.
* 文 件 名: PipeTools.h
* 归属项目: 给排水,暖通
=============================================================================*/
#define PS_SNAP (20.0*_distSnap)
#define MIRROR_XAXIS 0x01 // x轴镜像
#define MIRROR_YAXIS 0x02 // y轴镜像
// 当前数据库中的全局变量
#define g_bPipeWeight IsPsLineWeight() // 是否管线加粗
#define g_bRadiatorWeight IsPsRadiatorWeight() // 是否散热器加粗
#define g_bFloorPipeWeight IsPsFloorPipeWeight() // 是否地热盘管加粗 mcl add 2010.11.23
#define g_bBreakPipe IsPsBreakPipe() // 是否加粗
#define g_bSPipeFDir IsPsShowPipeFlowDir() // 显示管线流向
#define g_nPipeOsnap GetPSPipeOsnap() // 管段捕捉
#define g_dPipeTextDis GetPsPipeTextDis() // 管线文字边距
#define g_dBreakWidth GetPsBreakWidth() // 单线管线遮挡打断宽度
#define g_bEqByScale IsPsEqByScale() // 上华设备及阀门绘图比例是否随出图比例
#define g_nElbowType GetElbowType() // 双线弯头样式
extern AcGeVector3d GetUcsZvt(); // mcl add 2010.11.18. 获取UcsZ坐标
// sg add
#define g_nSplitNum 40 // 圆离散成多边型的边数,要求为4的整数倍
// cet 2017.9.27 del 废弃代码
// PS_IMPEXP BOOL IsPsSystemShow(TPipeSys::SysType sysType, AcDbDatabase *pDb);//查询管线系统的显示属性
// PS_IMPEXP void PsShowSystem(TPipeSys::SysType sysType,BOOL bFlag, AcDbDatabase *pDb);//设置管线系统的显示属性
// 实体是否可见(决定因素:实体本身是否可见,所在图层是否锁定或关闭)
PS_IMPEXP bool IsVisibleEntity(const AcDbEntity *pEnt);
PS_IMPEXP bool IsVisibleEntity(const AcDbObjectId &idEnt);
// cet 2017.12.27 add 判断点相同时的误差值
PS_IMPEXP double EqualPointTol();
#define CMD_UNKNOWN 0
#define CMD_UPDATE 1
#define CMD_ATTACHCHANGE 2
extern int g_nCmdReactor;//命令状态
extern TARCH_IMPEXP int g_nProductId;
PS_IMPEXP BOOL GetInsertExtend(const AcDbObjectId &id,double &dWid,double &dHei);
PS_IMPEXP BOOL GetInsertExtend(const AcDbObjectId &id,double &x,double &y,double &z);
PS_IMPEXP BOOL GetBlkNameById(AcDbObjectId id,CString &sBlkName,CString &sDesName);
PS_IMPEXP BOOL GetPipeMaterial(XStringList &lstMaterial); // 获取水管材料
PS_IMPEXP double GetPipeOutDByDn(int nMaterial, double dDn); // 得到外径
// double GetPipeDjByDn(const TCHAR* szMat, int iDnIn);
// CString GetPipeMaterialByIdx(int idx);
// sg add
PS_IMPEXP BOOL GetDuctMaterial(XStringList &lstMaterial); // 获取风管材料
/*============================================================================*
* 类 名: XExtent
* 功能描述: 外包矩形
==============================================================================*/
class PS_IMPEXP XExtent
{
public:
double dLen,dWid;//长(x)、宽(y)
public:
XExtent(Entity &);
XExtent(const AcDbEntity *);
XExtent(const AcDbObjectId &);
XExtent():dLen(0),dWid(0) {}
XExtent(double l,double w) {
dLen = l; dWid = w;
}
XExtent(const XExtent &ex) {
dLen = ex.dLen; dWid = ex.dWid;
}
BOOL operator == (const XExtent& ex) const {
return (fabs(dLen-ex.dLen)<_distSnap && fabs(dWid-ex.dWid)<_distSnap);
}
BOOL operator != (const XExtent& ex) const { return !((*this)==ex); }
void operator += (const XExtent& ex) { dLen+=ex.dLen; dWid+=ex.dWid;}
void operator -= (const XExtent& ex) { dLen-=ex.dLen; dWid-=ex.dWid;}
void operator *= (double dScale) { dLen *= dScale; dWid *= dScale;}
void operator /= (double dScale) { dLen /= dScale; dWid /= dScale;}
operator XPoint () const { return XPoint(dLen,dWid,0);}
#ifdef ACRXAPP
operator const AcGeVector2d& () const { return *(const AcGeVector2d *)this; }
operator AcGeVector2d& () const { return *(AcGeVector2d *)this; }
operator AcGeVector2d () const { return AcGeVector2d(dLen,dWid); }
#endif
friend PS_IMPEXP XExtent operator + (const XExtent &, const XExtent &);
friend PS_IMPEXP XExtent operator - (const XExtent &, const XExtent &);
};
inline XExtent operator + (const XExtent& ex1,const XExtent& ex2) {
return XExtent(ex1.dLen+ex2.dLen, ex1.dWid+ex2.dWid);
}
inline XExtent operator - (const XExtent& ex1,const XExtent& ex2) {
return XExtent(ex1.dLen-ex2.dLen, ex1.dWid-ex2.dWid);
}
// 比较两个id是否相等
//inline int CompareObjectId_New(const AcDbObjectId *id1,const void *id2)
//{
// if(*id1 == *(const AcDbObjectId *)id2)
// return 0;
// return 1;
//}
// 比较两个id是否相等
//inline int CompareObjectId_New(const AcDbSoftPointerId *id1, const void *id2)
//{
// if(*id1 == *(const AcDbSoftPointerId *)id2)
// return 0;
// return 1;
//}
inline BOOL GreatEqual2d(const XPoint &pt1,const XPoint &pt2,double nSnap=_distSnap)
{
return (GreatEqual(pt1.x, pt2.x, nSnap) && GreatEqual(pt1.y, pt2.y, nSnap));
}
inline BOOL LessEqual2d(const XPoint &pt1,const XPoint &pt2,double nSnap=_distSnap)
{
return (LessEqual(pt1.x, pt2.x, nSnap) && LessEqual(pt1.y, pt2.y, nSnap));
}
inline BOOL GreatEqual3d(const XPoint &pt1,const XPoint &pt2,double nSnap=_distSnap)
{
return (GreatEqual(pt1.x, pt2.x, nSnap) &&
GreatEqual(pt1.y, pt2.y, nSnap) && GreatEqual(pt1.z, pt2.z, nSnap));
}
inline BOOL LessEqual3d(const XPoint &pt1,const XPoint &pt2,double nSnap=_distSnap)
{
return (LessEqual(pt1.x, pt2.x, nSnap) &&
LessEqual(pt1.y, pt2.y, nSnap) && LessEqual(pt1.z, pt2.z, nSnap));
}
inline BOOL ExtendInBox2d(const XPoint &ptMin,const XPoint &ptMax,const XRectAngle &box)
{
return (ptMin.x>box.lowLeft.x && ptMin.y>box.lowLeft.y &&
ptMax.x<box.upRight.x && ptMax.y<box.upRight.y);
}
inline BOOL ExtendInBox02d(const XPoint &ptMin,const XPoint &ptMax,const XRectAngle &box)
{
return !(box.upRight.x<ptMin.x || box.upRight.y<ptMin.y ||
box.lowLeft.x>ptMax.x || box.lowLeft.y>ptMax.y);
}
inline BOOL PointInBox02d(const XPoint &pt,const XRectAngle &box)
{
return(pt.x>=box.lowLeft.x && pt.x<=box.upRight.x &&
pt.y>=box.lowLeft.y && pt.y<=box.upRight.y);
}
inline void ScaleTransform(const AcGeMatrix3d& xform,double &dVar)
{
double dScale=xform.scale();
if(fabs(dScale-1)>1.0E-3 && fabs(dScale)>1.0E-3) dVar *= dScale;
}
inline void AngleTransform(const AcGeMatrix3d& xform,double &dAngle)
{
XVector3D vt(cos(dAngle),sin(dAngle),0);
((AcGeVector3d &)vt).transformBy(xform);
dAngle=ads_angle(XPoint(),vt);
//dAngle=CT_std_angle(dAngle);
}
inline Acad::ErrorStatus ReadAcDbSoftPointerIds(
AcDbDwgFiler* pFiler,DList<AcDbSoftPointerId> &lstId)
{
Adesk::UInt8 nCount=0;
pFiler->readItem(&nCount);
for(Adesk::UInt8 i=0; i<nCount; i++) {
AcDbSoftPointerId id;
pFiler->readItem(&id);
lstId.Append(new AcDbSoftPointerId(id));
}
return pFiler->filerStatus();
}
inline Acad::ErrorStatus
ReadPoints(AcDbDwgFiler* pFiler,DList<XPoint> &lstPoint)
{
Adesk::UInt8 nCount=0;
pFiler->readItem(&nCount);
for(Adesk::UInt8 i=0; i<nCount; i++) {
AcGePoint3d pt;
pFiler->readItem(&pt);
lstPoint.Append(new XPoint(pt));
}
return pFiler->filerStatus();
}
inline Acad::ErrorStatus WriteAcDbSoftPointerIds(
AcDbDwgFiler* pFiler,const DList<AcDbSoftPointerId> &lstId)
{
Adesk::UInt8 nCount=(Adesk::UInt8)lstId.Length();
pFiler->writeItem(nCount);
for(Adesk::UInt8 i=0; i<nCount; i++)
pFiler->writeItem(lstId[i]);
return pFiler->filerStatus();
}
inline Acad::ErrorStatus
WritePoints(AcDbDwgFiler* pFiler,const DList<XPoint> &lstPoint)
{
Adesk::UInt8 nCount=(Adesk::UInt8)lstPoint.Length();
pFiler->writeItem(nCount);
for(Adesk::UInt8 i=0; i<nCount; i++)
pFiler->writeItem((const AcGePoint3d &)lstPoint[i]);
return pFiler->filerStatus();
}
inline BOOL IsTransformCmd()
{
if(!GetCurDocData())
return FALSE;
XString &sCmd=GetCurDocData()->m_sCurCommand;
return(_tcsicmp(sCmd,_T("MOVE"))==0 || _tcsicmp(sCmd,_T("COPY"))==0 ||
_tcsicmp(sCmd,_T("ROTATE"))==0 || _tcsicmp(sCmd,_T("MIRROR"))==0 );
}
inline BOOL IsKeyDown(int nVirtKey) // VK_CONTROL、...
{
SHORT sState=GetKeyState(nVirtKey);
return (sState&256)!=0;
}
inline CString DoubleToString(double dValue, int nPreci, bool bTrim = false)
{
CString csRet;
CString csFormat;
csFormat.Format(_T("%%.%df"), nPreci);
csRet.Format(csFormat, dValue);
// 带小数点,删除末尾的0以及小数点(如2.10=》2.1或2.00=》2) cet 2018.1.12 add
if (bTrim && csRet.Find(_T('.')) > -1)
{
csRet.TrimRight(_T("0"));
csRet.TrimRight(_T("."));
}
return csRet;
}
#endif