241 lines
7.9 KiB
C++
241 lines
7.9 KiB
C++
#ifndef __DBEQUIPMENT_H
|
|
#define __DBEQUIPMENT_H
|
|
/*============================================================================*
|
|
* Copyright(c), 1994-2007, Beijing Tangent Engineering Software Co.Ltd.
|
|
* 作 者: 沈睿
|
|
* 创建时间: 大约在冬季
|
|
* 描 述: 给排水设备
|
|
* 归属项目: 给排水
|
|
* 历史记录: 2008-6-26 补头文件注释
|
|
=============================================================================*/
|
|
|
|
#include "PipeTools.h"
|
|
#include "PipePrototype.h"
|
|
|
|
enum EquipType
|
|
{
|
|
eCommon = -1, // 普通设备
|
|
eHydrant = 0, // 消火栓
|
|
eSprinkler = 1, // 喷头
|
|
eWell = 2, // 井
|
|
ePump = 3, // 水泵
|
|
eGully = 4, // 雨水口
|
|
eSizeJoint = 5, // 大小接头
|
|
};
|
|
|
|
// 设备
|
|
class PS_EXP TDbEquipment : public TDbPipeNode {
|
|
DECLARE_TENTBASE();
|
|
ACRX_DECLARE_MEMBERS(TDbEquipment);
|
|
private:
|
|
static const Adesk::UInt8 g_nVersion;
|
|
public:
|
|
TDbEquipment();
|
|
protected:
|
|
AcDbHardPointerId m_idBlock2d;// 二维图块
|
|
AcDbHardPointerId m_idBlock3d;// 三维图块
|
|
Adesk::UInt8 m_nMirror; // 图块镜像
|
|
XVector3D m_vtDirection; // 设备方向
|
|
XPoint m_ptLocation; // 设备基点
|
|
XPoint m_ptInsert; // 图块的基点
|
|
XString m_sSysBlock; // 系统图块, 如果是检查井,这里存放井编号
|
|
double m_dScale; // 图块显示比例
|
|
double m_dPipeLength; // 设备上未生成立管的长度,仅存储该值, 如果是检查井,这里存放井底标高
|
|
double m_dDang; // 当量值, 如果是检查井,这里存放井地面标高
|
|
BOOL m_bHidePipe; // 是否遮挡管线
|
|
double m_dCircleRadius;// 如果是圆设备,记录圆半径,遮挡管线用
|
|
double m_dYScale;
|
|
double m_dZScale;
|
|
double m_dSpare; // 保留
|
|
BOOL m_bAutoScale; // 8.0数据,例如消火栓不需要随图纸比例放大缩小
|
|
|
|
public:
|
|
void SetDang(double dDang) {
|
|
assertWriteEnabled();
|
|
m_dDang=dDang;
|
|
}
|
|
double GetDang() const {
|
|
return m_dDang;
|
|
}
|
|
void SetInsert(XPoint pt) {
|
|
assertWriteEnabled();
|
|
m_ptInsert=pt;
|
|
}
|
|
const XPoint & GetInsert() const {
|
|
return m_ptInsert;
|
|
}
|
|
void SetHidePipe(BOOL bFlag=TRUE) {
|
|
assertWriteEnabled();
|
|
m_bHidePipe=bFlag;
|
|
}
|
|
void SetAutoScale(BOOL bFlag=TRUE) {
|
|
assertWriteEnabled();
|
|
m_bAutoScale=bFlag;
|
|
}
|
|
void SetScale(double dScale=1.0) {
|
|
assertWriteEnabled();
|
|
m_dScale=dScale;
|
|
}
|
|
double GetScale() const {
|
|
return m_dScale;
|
|
}
|
|
void SetLocation(const XPoint &pt) {
|
|
assertWriteEnabled();
|
|
if(!m_ptLocation && !m_ptInsert)
|
|
m_ptInsert=pt;
|
|
m_ptLocation=pt;
|
|
}
|
|
AcDbObjectId GetBlock2d() const {
|
|
return m_idBlock2d;
|
|
}
|
|
void SetBlock2d(const AcDbObjectId &id) {
|
|
assertWriteEnabled();
|
|
m_idBlock2d=id;
|
|
}
|
|
AcDbObjectId GetBlock3d() const {
|
|
return m_idBlock3d;
|
|
}
|
|
void SetBlock3d(const AcDbObjectId &id) {
|
|
assertWriteEnabled();
|
|
m_idBlock3d=id;
|
|
}
|
|
const TCHAR* GetSysBlock() const {
|
|
return (const TCHAR*)m_sSysBlock;
|
|
}
|
|
void SetSysBlock(const TCHAR *szLab) {
|
|
assertWriteEnabled();
|
|
m_sSysBlock=szLab;
|
|
}
|
|
XVector3D GetDirection() const {
|
|
return m_vtDirection;
|
|
}
|
|
double GetAngle() const {
|
|
return ads_angle(XPoint(),m_vtDirection);
|
|
}
|
|
void SetDirection(const XVector3D &vt) {
|
|
assertWriteEnabled();
|
|
m_vtDirection=vt;
|
|
}
|
|
void SetAngle(double dAngle) {
|
|
SetDirection(XVector3D(cos(dAngle),sin(dAngle),0));
|
|
}
|
|
double GetPipeLength() const {
|
|
return m_dPipeLength;
|
|
}
|
|
void SetPipeLength(double dLen) {
|
|
assertWriteEnabled();
|
|
m_dPipeLength = dLen;
|
|
}
|
|
void SetYScale(double dYScale) {
|
|
assertWriteEnabled();
|
|
m_dYScale = dYScale;
|
|
}
|
|
void SetZScale(double dZScale) {
|
|
assertWriteEnabled();
|
|
m_dZScale = dZScale;
|
|
}
|
|
void SetSpare(double dSpare) {
|
|
assertWriteEnabled();
|
|
m_dSpare = dSpare;
|
|
}
|
|
double GetSpare() const { return m_dSpare; }
|
|
double GetYScale() const { return m_dYScale; }
|
|
double GetZScale() const { return m_dZScale; }
|
|
|
|
// 设备(图块)X、Y轴的镜像,X轴方向为m_vtDirection方向
|
|
void MirrorByX(BOOL bFlag=TRUE);
|
|
void MirrorByY(BOOL bFlag=TRUE);
|
|
BOOL IsMirrorByX() const {
|
|
return (m_nMirror&MIRROR_XAXIS)!=0;
|
|
}
|
|
BOOL IsMirrorByY() const {
|
|
return (m_nMirror&MIRROR_YAXIS)!=0;
|
|
}
|
|
BOOL IsAutoScale() const { return m_bAutoScale;}
|
|
// cet 2011.01.28 add
|
|
BOOL IsSprinkler() const;
|
|
// cet 2011.01.28 add
|
|
BOOL IsHydrant() const;
|
|
// cet 2014.12.2 add 设备类型(包含设备派生的子类)
|
|
// 避免以父类的方式打开时无法区分类型 -1 普通设备
|
|
// 0 消火栓 1 喷头 2 井 3 水泵 4 雨水口
|
|
// 5 大小接头
|
|
void SetEquipmentType(int nType);
|
|
void SetEquipmentType(EquipType nType);
|
|
int GetEquipmentType() const;
|
|
|
|
public:
|
|
// 图块插入比例
|
|
AcGeScale3d GetInsertScale() const;
|
|
|
|
public: // Override TDbPipeNode
|
|
virtual XPoint GetLocation() const { return m_ptLocation;}
|
|
// 判断节点是否遮挡管线
|
|
virtual BOOL IsHidePipe() const { return m_bHidePipe;}
|
|
// 节点的宽度
|
|
virtual double GetWidth(const TDbPipePrototype* pPipe=NULL) const;
|
|
// 对st类型的接口进行重新连接
|
|
virtual void UpdateLinkage(const XPoint &ptAt, TPipeSys::SysType st,
|
|
const DList<AcDbObjectId> &idPipes);
|
|
// 判断节点是否可以连接管段. nPos: 0--start; 1--end
|
|
virtual BOOL CanLinkSide(const AcDbObjectId &idPipe, int nPos) const;
|
|
virtual BOOL IsDrawBlock() const { return TRUE; }
|
|
|
|
public: // Override TDbEntity
|
|
virtual void CopyPropertiesFrom(AcDbEntity *pSrc, unsigned gMatchFlag);
|
|
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
|
|
virtual Acad::ErrorStatus GetGripText(int idx, CString &cs) const;
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
|
|
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
|
|
virtual Acad::ErrorStatus GetExtents(XPoint &ptLow, XPoint &ptUp) const;
|
|
virtual int GetFirstVersion()const{return 6;}
|
|
// 2008-2-27 add
|
|
virtual bool IsMeClip()const
|
|
{
|
|
// if(IsHidePipe()) // 2009.7.21 sr 关闭裁剪,速度很慢
|
|
// return true;
|
|
// else
|
|
return false;
|
|
}//ok, 是否去裁剪
|
|
virtual Acad::ErrorStatus GetClipBoundary(XPoly2D &poly)const;
|
|
|
|
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 subGetGripPoints(AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds) const;
|
|
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) const;
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);
|
|
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);
|
|
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);
|
|
|
|
public:
|
|
|
|
// cet 2011.1.20 add 剖面
|
|
virtual bool GetSection(const AcDbFace &face, const AcGeVector3d& vtPlaneSecDir,
|
|
std::vector<TObjSectionRecord> §ionRecords,
|
|
AcDbVoidPtrArray& arFillPtrs) const;
|
|
virtual CString GetXml(const AcGeMatrix3d& mat) const; // cet 2011.2.11 add
|
|
|
|
private:
|
|
Acad::ErrorStatus MoveGSPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
|
|
Acad::ErrorStatus _ExplodeOrDraw2d(XExplodeDraw &dc,BOOL bZEqual0=TRUE) const;
|
|
BOOL IsUpLinkHydrant() const; // cet 2011.12.29 add
|
|
Acad::ErrorStatus ExplodeOrDrawPipe3d(XExplodeDraw &dc) const; // cet 2011.12.29 add
|
|
};
|
|
|
|
#endif
|