#ifndef __DBSCISSORSSTAIR_H #define __DBSCISSORSSTAIR_H #include "DbPolyPathEnt.h" #include "dbStair.h" // 楼梯的标志 class TDbSymbArrow; class TDbHandRail; class TDbSlab; #define OFFSET_LEFT 0 //左边上楼 #define OFFSET_RIGHT 1 //右边上楼 // 交叉楼梯 class TARCH_EXP TDbScissorsStair: public TDbPolyPathEnt { //为支持栏杆的绊定 DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbScissorsStair); private: const static Adesk::UInt8 g_nVersion; protected: double m_nStepHeight; //踏步高 double m_nStepWidth; //踏步宽 double m_nStairWidth; //边梯段宽 double m_nSlabSize; //休息平台尺寸 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--齐楼板 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: TDbScissorsStair(); ~TDbScissorsStair(); 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 101115,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); // cet 2013.9.5 add CString GetXml(const AcGeMatrix3d& mat) const; Acad::ErrorStatus ExplodeTo(TDbLineStair &stair1, TDbLineStair &stair2,TDbLineStair &stair3,TDbLineStair &stair4, 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,TDbLineStair &stair2,XPoly2D &poly)const; // 计算剖切高度和剖切点 BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft1,XPoint &ptRight1,XPoint &ptLeft2,XPoint &ptRight2)const; // 右梯起步时的内侧扶手 void GetRailFromRight(TDbLineStair &stair1,TDbLineStair &stair2,XPoly2D &polyRail,XPoint &ptStart)const; // 左梯起步时的内侧扶手 void GetRailFromLeft(TDbLineStair &stair1,TDbLineStair &stair2, XPoly2D &polyRail,XPoint &ptStart)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; //add by xlc on 090426 箭头文字,动态数据 CString GetTextUp() const; void SetTextUp(const TCHAR *sVal); CString GetTextDown() const; void SetTextDown(const TCHAR *sVal); // 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 GetRailHeight() const; double GetRailWidth() const; double GetRailDistToSide() const; double GetRailDistMid() const; double GetRailDist() const; double GetSpaceWidth() const; double GetStepWidth() const; double GetStairWidth() const; double GetElevation() const; XPoint GetLocation() const; double GetRotation() const; int GetStartSide() const; int GetAlignment() const; int GetSectStepNum()const; XPoint GetMidRight2d() const; XPoint GetMidLeft2d() 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 SetRailHeight(double l); void SetRailWidth(double w); void SetRailDistToSide(double w); void SetSpaceWidth(double w); void SetStepWidth(double w); void SetStairWidth(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 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; } 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,TDbLineStair &stair4, TDbSymbArrow*pArrowUp1,TDbSymbArrow*pArrowUp2, TDbSymbArrow*pArrowDown1,TDbSymbArrow*pArrowDown2)const; Adesk::UInt8 GetViewCtrl() const { return m_nViewCtrl; } void SetViewCtrl(Adesk::UInt8 nCtrl) { assertWriteEnabled(); m_nViewCtrl=nCtrl; } 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); // From TDbPolyPathEnt virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const; private: virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&); }; #endif