#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 &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 &) 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 §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