Files
envi-code/SourceCode/Code2026/tg_shs/inc/pipewire/DbDoubleLinePipeReducer.h
T

341 lines
7.9 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#if !defined(AFX_DBDOUBLELINEPIPEREDUCER_H__9B474D6E_3235_445C_B357_D4A49B6BFB1B__INCLUDED_)
#define AFX_DBDOUBLELINEPIPEREDUCER_H__9B474D6E_3235_445C_B357_D4A49B6BFB1B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*============================================================================*
* Copyright(c), 1994-2007, Beijing Tangent Engineering Software Co.Ltd.
* 作 者: 陈恩涛
* 创建时间: 2010-2-26
* 描 述: 双线水管大小接头
* 归属项目: 给排水
* 历史记录:
=============================================================================*/
#include "DbEquipment.h"
#include "TGripData.h"
#define GRIP_MAXNUM_DBPIPE_REDUCER 10 // cet 2012.11.6 add. 大小接头点最大数目
class PS_EXP TDbDoubleLinePipeReducer : public TDbEquipment
{
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbDoubleLinePipeReducer);
private:
static const Adesk::UInt8 g_nVersion;
private:
double m_dLength; //异径管管中心的水平距离
double m_dSPipeDiameter; //起点处水管直径
double m_dEPipeDiameter; //终点处水管直径
double m_dSPipeFlangeDist; //起点处管径圆心到法兰外侧的距离
double m_dEPipeFlangeDist; //终点处管径圆心到法兰外侧的距离
double m_dEFlangeDiameter; //终点处法兰的直径
double m_dSFlangeDiameter; //起点处法兰的直径
double m_dEFlangeThick; //终点处的法兰厚度
double m_dSFlangeThick; //起点处的法兰厚度
AcGePoint3d m_ptStart; //起点位置
Adesk::Int16 m_nType; //管件类型: 异径管(俗称:同心大小头)偏心异径管(俗称:偏心大小头)
Adesk::Int16 m_nLinkType; //双线水管的链接方式:焊接 :法兰链接
double m_dAngle;
Adesk::Int16 m_nSpare; //空余变量
double m_dSpare; //空余变量
XString m_strSpare; //空余变量
static TWT_GRIPAPPDATA s_gripAppData[GRIP_MAXNUM_DBPIPE_REDUCER]; // cet 2012.11.6 add 保存夹点数据
public:
double GetLenght()
{
return m_dLength;
}
void SetLenght(double dLen)
{
assertWriteEnabled();
m_dLength = dLen;
ModifyInterfacePt();
}
double GetSPipeDiameter()
{
return m_dSPipeDiameter;
}
void SetSPipeDiameter(double dDiameter)
{
assertWriteEnabled();
m_dSPipeDiameter = dDiameter;
ModifyInterfacePt();
}
double GetEPipeDiameter()
{
return m_dEPipeDiameter;
}
void SetEPipeDiameter(double dDiameter)
{
assertWriteEnabled();
m_dEPipeDiameter = dDiameter;
ModifyInterfacePt();
}
double GetSPipeFlangeDist()
{
return m_dSPipeFlangeDist;
}
void SetSPipeFlangeDist(double dDist)
{
assertWriteEnabled();
m_dSPipeFlangeDist = dDist;
ModifyInterfacePt();
}
double GetEPipeFlangeDist()
{
return m_dEPipeFlangeDist;
}
void SetEPipeFlangeDist(double dDist)
{
assertWriteEnabled();
m_dEPipeFlangeDist = dDist;
ModifyInterfacePt();
}
double GetSFlangeDiameter()
{
return m_dSFlangeDiameter;
}
void SetSFlangeDiameter(double dDiameter)
{
assertWriteEnabled();
m_dSFlangeDiameter = dDiameter;
ModifyInterfacePt();
}
double GetEFlangeDiameter()
{
return m_dEFlangeDiameter;
}
void SetEFlangeDiameter(double dDiameter)
{
assertWriteEnabled();
m_dEFlangeDiameter = dDiameter;
ModifyInterfacePt();
}
double GetSFlangeThick()
{
return m_dSFlangeThick;
}
void SetSFlangeThick(double dThick)
{
assertWriteEnabled();
m_dSFlangeThick = dThick;
ModifyInterfacePt();
}
double GetEFlangeThick()
{
return m_dEFlangeThick;
}
void SetEFlangeThick(double dThick)
{
assertWriteEnabled();
m_dEFlangeThick = dThick;
ModifyInterfacePt();
}
AcGePoint3d GetStartPosition()
{
return m_ptStart;
}
void SetStartPosition(const AcGePoint3d &ptStart)
{
assertWriteEnabled();
m_ptStart = ptStart;
ModifyInterfacePt();
}
int GetType()
{
return m_nType;
}
void SetType(int nType)
{
assertWriteEnabled();
m_nType = nType;
ModifyInterfacePt();
}
int GetLinkType()
{
return m_nLinkType;
}
void SetLinkType(int nType)
{
assertWriteEnabled();
m_nLinkType = nType;
ModifyInterfacePt();
}
double GetAngle()
{
return m_dAngle;
}
void SetAngle(double dAngle)
{
assertWriteEnabled();
m_dAngle = dAngle;
ModifyInterfacePt();
}
int GetNSpare()
{
return m_nSpare;
}
void SetNSpare(int nSpare)
{
assertWriteEnabled();
m_nSpare = nSpare;
}
double GetDSpare()
{
return m_nSpare;
}
void SetDSpare(double dSpare)
{
assertWriteEnabled();
m_dSpare = dSpare;
}
XString GetStrSpare()
{
return m_nSpare;
}
void SetStrSpare(const XString& strSpare)
{
assertWriteEnabled();
m_strSpare = strSpare;
}
void AddPipeReducerInterface();
// 当参数变化时,修改接口位置
void ModifyInterfacePt();
public:
TDbDoubleLinePipeReducer();
virtual ~TDbDoubleLinePipeReducer();
// 根据夹点索引获得,该索引类型和夹点提示 cet 2012.11.6 add
void ExplainGripIndex(int nIndex, bool &bCmd, CString &sTip) const;
// 获得起点、中点、终点 cet 2012.11.7 add
void GetPoints(AcGePoint3d &ptS, AcGePoint3d &ptMid, AcGePoint3d &ptE) const;
public: // Override TDbEntity
virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const;
virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag);
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
virtual void UpdateLinkage(const XPoint &ptAt, TPipeSys::SysType st,
const DList<AcDbObjectId> &idPipes);
virtual BOOL CanLinkSide(const AcDbObjectId &idPipe, int nPos) const;
virtual int GetFirstVersion()const{return 8;}
public: // Override AcDbEntity
Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& ptPick,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const;
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 subGetGeomExtents(AcDbExtents& extents) const;
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
virtual Acad::ErrorStatus subDeepClone(AcDbObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const;
public:
// cet 2012.11.6 add 支持夹点启动绘制命令
#if ADS > 15
virtual Acad::ErrorStatus subGetGripPoints(AcDbGripDataPtrArray& grips,
const double curViewUnitSize,
const int gripSize,
const AcGeVector3d& curViewDir,
const int bitflags) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbVoidPtrArray& appData,
const AcGeVector3d& offset,
const int bitflags);
#endif
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const;
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset);
void UpdateInterface();
public:
enum LINKTYPE
{
eCenter = 0,//同心
eUp, //偏心顶平
eDown, //偏心底平
eJointing, //焊接
eFlangeLink,//法兰链接
eStart,
eEnd,
eMove,
};
private:
Acad::ErrorStatus MoveGSPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset);
// 绘制焊接连接
Acad::ErrorStatus DrawJointing3d(XExplodeDraw &dc) const;
Acad::ErrorStatus DrawPolyMesh(const XPoint &ptS, const XPoint &ptE, double nRadius, XExplodeDraw &dc) const;
// 绘制终点法兰
void DrawEFlange(XExplodeDraw &dc, const AcGePoint3d &ptStart) const;
// 绘制起点法兰
void DrawSFlange(XExplodeDraw &dc, const AcGePoint3d &ptStart) const;
};
#endif // !defined(AFX_DBDOUBLELINEPIPEREDUCER_H__9B474D6E_3235_445C_B357_D4A49B6BFB1B__INCLUDED_)