#ifndef __DBCROSSSTAIR_H #define __DBCROSSSTAIR_H #include "DbPolyPathEnt.h" #include "dbStair.h" // 楼梯的标志 class TDbSymbArrow; class TDbHandRail; class TDbSlab; #define OFFSET_LEFT 0 //左边上楼 #define OFFSET_RIGHT 1 //右边上楼 #define SFEX_INRAIL 0x10000 //设置内侧扶手,TArch8 // 剪刀楼梯 class TARCH_EXP TDbCrossStair: public TDbPolyPathEnt { //为支持栏杆的绊定 DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbCrossStair); private: const static Adesk::UInt8 g_nVersion; protected: double m_nStepHeight; //踏步高 double m_nStepWidth; //踏步宽 double m_nStairWidth; //梯段段宽 double m_nSlabSize; //休息平台左上尺寸 double m_nSlabSizeUR; //休息平台右上尺寸 double m_nSlabSizeLR; //休息平台右下尺寸 XPoint m_ptLocation; //左上角位置 double m_nRotation; //旋转角度 Adesk::UInt8 m_nStepNum; //楼梯步数 double m_nSpaceWidth; //楼梯间尺寸 double m_nRailHeight; //扶手高度 double m_nRailWidth; //扶手宽度 double m_nRailDistToSide; //扶手距离边 double m_nRailDist; //扶手伸出距离 Adesk::UInt8 m_nStairFlag; //楼层标记: 0--首层, 1--中间层, 2--顶层 Adesk::UInt8 m_nStartSide; //起步的一侧 Adesk::UInt8 m_nSideFlag; //首层有地下室或顶层有出屋面时的梯段标志: 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: TDbCrossStair(); ~TDbCrossStair(); 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, TDbSlab &slab,TDbSlab &slab2, TDbHandRail &rail, TDbHandRail &rail2, TDbHandRail *pRailLeft=NULL,TDbHandRail* pRailRight=NULL) const; // 绘制栏杆 void DrawRail(XPoly2D polyPath,double nStepWidth,XExplodeDraw &dc) const; // 梯段扶手线 void GetRailPoly(XLine line,double direct,double height,XPoly2D &poly,BOOL bTop=FALSE)const; // 计算剖切高度和剖切点 BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d,XPoint &ptLeft2d2,XPoint &ptRight2d2)const; // 由平面二维点推算剖切步数 int HitSectPosByPoint2d(XPoint ptHit2d) const; //add by xlc on 090123 获得梯段的扶手线 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 GetStepNum() const; Adesk::UInt8 GetStairFlag() const; double GetSlabSize() const; double GetSlabSizeUR() const; double GetSlabSizeLR() const; double GetRailHeight() const; double GetRailWidth() const; double GetRailDistToSide() 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 GetSideFlag() const; int GetSectStepNum()const; XPoint GetUpRight2d() const; XPoint GetUpLeft2d() const; double GetStairHeight() const { return (GetStepHeight()*GetStepNum()); } double GetTextHeight()const; void SetTextHeight(double h); void SetSectRotation(double r); void SetSectStepNum(int n); void SetRailDist(double w); void SetSlabSize(double s); void SetSlabSizeUR(double s); void SetSlabSizeLR(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 SetSideFlag(Adesk::UInt8 flag); void SetStepNum(Adesk::UInt8 n); void SetStepHeight(double h); void SetStairFlag(Adesk::UInt8 flag); void SetArrow(BOOL bTrue); BOOL IsArrow() const; //是否显示箭头 BOOL IsAutoOutRail() const; void SetInRail(BOOL bTrue); BOOL IsInRail()const; 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,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; } 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); }; //TARCH_IMPEXP int EditCrossStair0(AcDbObjectId id); #endif