#ifndef __DBPARALLELSTAIR_H #define __DBPARALLELSTAIR_H #include "DbPolyPathEnt.h" #include "dbStair.h" // 楼梯的标志 class TDbSymbArrow; class TDbHandRail; class TDbSlab; #define OFFSET_MID 0 //中跑上楼 #define OFFSET_SIDE 1 //边跑上楼 // 双分平行楼梯 class TARCH_EXP TDbParallelStair: public TDbPolyPathEnt { //为支持栏杆的绊定 DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbParallelStair); private: const static Adesk::UInt8 g_nVersion; protected: double m_nStepHeight; //踏步高 double m_nStepWidth; //踏步宽 double m_nStairWidth; //边梯段宽 double m_nMStairWidth; //中梯段宽 double m_nSlabSize; //休息平台尺寸 double m_nSlabSizeSide; //休息平台边段尺寸 double m_nSlabSizeMid; //休息平台中段尺寸 XPoint m_ptLocation; //左下角位置 double m_nRotation; //旋转角度 Adesk::UInt8 m_nStepNum1, m_nStepNum2; //边跑和中跑步数 double m_nSpaceWidth; //楼梯间尺寸 double m_nRailHeight; //扶手高度 double m_nRailWidth; //扶手宽度 double m_nRailDistToSide; //扶手距离边 double m_nRailDistMid; //层间转角处扶手伸出距离 double m_nRailDist; //层与层连接处扶手伸出距离 Adesk::UInt8 m_nStairFlag; //楼层标记: 0--首层, 1--中间层, 2--顶层 Adesk::UInt8 m_nStartSide; //起步的一侧 Adesk::UInt8 m_nAlignment; //踏步取齐: 0--齐休息平台, 1--齐中间, 2--齐楼板,3--自由 Adesk::Int16 m_nSectStepNum;//剖断步数 double m_dSectRotation; //剖断线旋转角度 double m_dTextHeight; //字高 Adesk::UInt32 m_nFlagEx; double m_nBeamHeight; //边梁高,坡道专用 double m_nBeamThick; //边梁厚度 double m_nSlabThick; //板厚或梁厚 AcDbHardPointerId m_idLayerHand3d, m_idLayerStep3d, m_idLayerBeam3d, m_idLayerRail3d; AcDbHardPointerId m_idLayerText,m_idLayerArrow,m_idTextStyle; Adesk::UInt8 m_nViewCtrl; //视图控制:0-自动(由楼层决定);1-禁止3D;2-禁止2D public: TDbParallelStair(); ~TDbParallelStair(); int GetSectStairPos()const; virtual BOOL IsValid() const; virtual bool IsModelEntity() const{return true;} virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const;//ok virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); // Overriden function from AcDbEntity virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) 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 subTransformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); // drived from TDbEntity virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const; virtual const TCHAR *GetDefaultLayer() const; virtual void GetTips(DList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; virtual int GetFirstVersion()const{return 8;} // sg add 100722,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); Acad::ErrorStatus ExplodeTo(TDbLineStair &stair1, TDbLineStair &stair2,TDbLineStair &stair3, TDbSlab &slab, TDbHandRail &rail, TDbHandRail &rail2, TDbHandRail *pRailTop=NULL, TDbHandRail *pRailTop2=NULL,TDbHandRail *pRailLeft=NULL,TDbHandRail* pRailRight=NULL) const; // 绘制栏杆 void DrawRail(XPoly2D polyPath,double nStepWidth,XExplodeDraw &dc) const; // 梯段扶手线 void GetRailPoly(TDbLineStair &stair1,XLine line,double lengthS,double lengthE,XPoly2D &poly)const; // 计算剖切高度和剖切点 BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const; // 中梯起步时的内侧扶手 void GetRailFromMid(TDbLineStair &stair1,TDbLineStair &stair2,TDbLineStair &stair3, XPoly2D &polyRail,XPoly2D &polyRail2,XPoint &ptStart,XPoint &ptStart2)const; // 边梯起步时的内侧扶手 void GetRailFromSide(TDbLineStair &stair1,TDbLineStair &stair2,TDbLineStair &stair3, XPoly2D &polyRail,XPoly2D &polyRail2,XPoint &ptStart,XPoint &ptStart2)const; // 由平面二维点推算剖切步数 int HitSectPosByPoint2d(XPoint ptHit2d) const; //add by xlc on 090122 获得梯段的扶手线 void GetRailPolyFromStair(TDbLineStair &stair,double dOffset,double dDistS,double dDistE,BOOL bLeft,XPoly2D &poly)const; // Attribute Access method double GetSectRotation()const; double GetStepHeight() const; Adesk::UInt8 GetStepNum1() const; Adesk::UInt8 GetStepNum2() const; Adesk::UInt8 GetStairFlag() const; double GetSlabSize() const; double GetSlabSizeMid() const; void SetSlabSizeSide(double s); double GetSlabSizeSide() const; double GetRailHeight() const; double GetRailWidth() const; double GetRailDistToSide() const; double GetRailDistMid() const; double GetRailDist() const; double GetSpaceWidth() const; double GetStepWidth() const; double GetStairWidth() const; double GetMStairWidth() const; double GetElevation() const; XPoint GetLocation() const; double GetRotation() const; int GetStartSide() const; int GetAlignment() const; int GetSectStepNum()const; XPoint GetUpRight2d() const; XPoint GetUpLeft2d() const; double GetStairHeight() const { return (GetStepHeight()*(GetStepNum1()+GetStepNum2())); } double GetTextHeight()const; void SetTextHeight(double h); void SetSectRotation(double r); void SetSectStepNum(int n); void SetRailDistMid(double w); void SetRailDist(double w); void SetSlabSize(double s); void SetSlabSizeMid(double s); void SetRailHeight(double l); void SetRailWidth(double w); void SetRailDistToSide(double w); void SetSpaceWidth(double w); void SetStepWidth(double w); void SetStairWidth(double w); void SetMStairWidth(double w); void SetElevation(double elev); void SetLocation(const XPoint &pt); void SetRotation(double rot); void SetStartSide(int nSide); void SetAlignment(int nSide); void SetStepNum1(Adesk::UInt8 n); void SetStepNum2(Adesk::UInt8 n); void SetStepHeight(double h); void SetStairFlag(Adesk::UInt8 flag); void SetArrow(BOOL bTrue); BOOL IsArrow() const; //是否显示箭头 BOOL IsAutoOutRail() const; BOOL IsShowSlab()const{return ((m_nFlagEx&SFEX_SHOWSLAB)!=0);} void SetShowSlab(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx|=SFEX_SHOWSLAB; else m_nFlagEx&=~SFEX_SHOWSLAB; } BOOL IsOutRail()const; BOOL IsAscent() const; BOOL IsOnGround() const; BOOL IsArcPlatform() const; BOOL IsAutoRail() const; BOOL HasSlant() const; BOOL HasSideBeam(int nSide) const; double GetBeamHeight() const; double GetBeamThick() const; double GetSlabThick() const; AcDbObjectId GetLayerBeam3d() const; AcDbObjectId GetLayerStep3d() const; AcDbObjectId GetLayerHand3d() const; AcDbObjectId GetLayerRail3d() const; AcDbObjectId GetLayerText() const; AcDbObjectId GetTextStyle() const; AcDbObjectId GetLayerArrow() const; // 上楼箭头 void GetDefaultArrow(TDbLineStair &stair1,TDbLineStair &stair2,TDbLineStair &stair3, TDbSymbArrow*pArrowUp1,TDbSymbArrow*pArrowUp2, TDbSymbArrow*pArrowDown1,TDbSymbArrow*pArrowDown2)const; //add by xlc on 090426 箭头文字,动态数据 CString GetTextUp() const; void SetTextUp(const TCHAR *sVal); CString GetTextDown() const; void SetTextDown(const TCHAR *sVal); Adesk::UInt8 GetViewCtrl() const { return m_nViewCtrl; } void SetViewCtrl(Adesk::UInt8 nCtrl) { assertWriteEnabled(); m_nViewCtrl=nCtrl; } BOOL IsInSideBeam()const{return ((m_nFlagEx&SFEX_INSIDEBEAM)!=0);} BOOL IsOutSideBeam()const{return ((m_nFlagEx&SFEX_OUTSIDEBEAM)!=0);} void SetInSideBeam(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_INSIDEBEAM; else m_nFlagEx &= ~SFEX_INSIDEBEAM; } void SetOutSideBeam(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_OUTSIDEBEAM; else m_nFlagEx &= ~SFEX_OUTSIDEBEAM; } void SetAutoOutRail(BOOL bTrue); void SetOutRail(BOOL bTrue); void SetAutoRail(BOOL bTrue); void SetAscent(BOOL bTrue); void SetOnGround(BOOL bTrue); void SetArcPlatform(BOOL bTrue); void SetSlant(BOOL bTrue); void SetSideBeam(int nSide, BOOL bTrue); void SetBeamHeight(double val); void SetSlabThick(double val); void SetBeamThick(double val); void SetLayerBeam3d(AcDbObjectId idLayer); void SetLayerStep3d(AcDbObjectId idLayer); void SetLayerHand3d(AcDbObjectId idLayer); void SetLayerRail3d(AcDbObjectId idLayer); void SetLayerText(AcDbObjectId idLayer); void SetTextStyle(AcDbObjectId idStyle); void SetLayerArrow(AcDbObjectId idLayer); // cet 2013.9.5 add CString GetXml(const AcGeMatrix3d& mat) const; // From TDbPolyPathEnt virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const; private: virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&); }; TARCH_IMPEXP int EditParallelStair0(AcDbObjectId id); #endif