#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 &) const; //取动态属性显示数据 virtual void UpdateLinkage(const XPoint &ptAt, TPipeSys::SysType st, const DList &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_)