#ifndef __DBSTAIR_H #define __DBSTAIR_H #include "DbPolyPathEnt.h" // 楼梯的标志 class TDbSymbArrow; #define SF_NO2D 0 #define SF_NOSECT 1 #define SF_1SECT 2 //下剖断 #define SF_2SECT 3 //双剖断 #define SF_UP_SECT 4 //上剖断 #define SF_HAS3D 0x01 //有三维 // 过时的标记 #define SF_LBEAM 0x02 //左边梁 #define SF_RBEAM 0x04 //右边梁 #define SF_FIRST 0 #define SF_MIDDLE 1 #define SF_TOP 2 #define SFEX_GROUND 0x01 //落在地面上 #define SFEX_ASCENT 0x02 //坡道 #define SFEX_SLANT 0x04 //防滑条 #define SFEX_ARCPLAT 0x08 //圆弧平台, TRectStair #define SFEX_AUTORAIL 0x10 //设置默认栏杆, TRectStair, TMultiStair #define SFEX_LBEAM 0x20 //左边梁 #define SFEX_RBEAM 0x40 //右边梁 #define SFEX_LRAIL 0x80 //左扶手, TMultiStair #define SFEX_RRAIL 0x100 //右扶手, TMultiStair #define SFEX_SECTPOS 0x200 //剖切位置可调, TMultiStair #define SFEX_ARROW 0x400 //TDbStair,用于对话框和绘制过程显示上楼方向 #define SFEX_LWALL 0x800 //左边靠墙, 梯段和多跑楼梯 #define SFEX_RWALL 0x1000 //右边靠墙,梯段和多跑楼梯 #define SFEX_OUTRAIL 0x2000 //外侧扶手 #define SFEX_UPSTAIR 0x4000 //上接另一个梯段,TArch7 //add by xlc on 080111 #define SFEX_AUTOOUTRAIL 0x8000 //设置外侧栏杆,TArch8 #define SFEX_INSIDEBEAM 0x200000 //设置内边梁,TArch8 #define SFEX_OUTSIDEBEAM 0x100000 //设置外边梁,TArch8 #define SFEX_CONNECTRAIL 0x20000 //设置连接扶手,TdbRectStair,TArch8 #define SFEX_SHOWSLAB 0x40000 //设置平台开关,TdbRectCornerStair,TdbRectStair,TdbParallelStair,TdbTriangleStair,TArch8 #define SFEX_SEVARADIUS 0x10000 //单侧有效半径,TArch20v3 #define SFEX_DEVARADIUS 0x400000 //双侧有效半径,TArch20v3 class TDbHandRail; class TDbSlab; class TARCH_EXP TDbStair: public TDbEntity { private: void *operator new[](size_t nSize) { return 0;} void operator delete[](void *p) {}; void *operator new[](size_t nSize, const TCHAR *file, int line) { return 0;} const static Adesk::UInt8 g_nVersion; public: ACRX_DECLARE_MEMBERS(TDbStair); TDbStair(); ~TDbStair(); virtual BOOL IsValid() const; virtual bool IsModelEntity() const{return true;} virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const; virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); // Overriden function from AcDbEntity virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; // drived from TDbEntity virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const; virtual const TCHAR *GetDefaultLayer() const; virtual Acad::ErrorStatus GetExtents2d(XPoint &ptLow, XPoint &ptUp) const; virtual Acad::ErrorStatus GetExtents(XPoint &ptLow, XPoint &ptUp) const; void GetOutline2d(XPoly2D &poly) const; virtual XDirectionCurve GetSideCurve2d(int nSide) const=0; virtual double GetStepSideWidth(int idx, int nSide) const; virtual BOOL GetSectionPoly(XPoly &polyDown, XPoly &polyUp, XPoly &polyMid) const; // 0--没有命中; 1--任意穿越; 2--任意包含; 3--重边穿越; 4--重边包含 // segHit--重边穿越或包含时的纠正位置 //virtual int HitTest(const XCurveSegment &seg, double nTol, XCurveSegment &segHit) const; virtual void ClipCurveBySection(DList &lnSet) const; //剖切掉扶手的下一部分,只用于SF_1SECT, lPath,rPath输入兼输出 void ClipPolyPath(XPoly2D &lPath, XPoly2D &rPath) const; virtual double GetElevation() const { return 0.0; } virtual void SetElevation(double ) {}; // sg add 101115,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); // 取得梯段的4个角点 XPoint GetLowLeft2d() const; XPoint GetUpLeft2d() const; XPoint GetLowRight2d() const; XPoint GetUpRight2d() const; double GetStairHeight() const; double GetStepHeight() const; int GetStepNum() const; int Get2DFlag() const; int Get3DFlag() const; BOOL Has3D() const; BOOL GetSideBeam(int nSide) const; double GetSectionPos(int nSide) const; void Set2DFlag(int nFlag2d); void Set3DFlag(int nFlag3d); void SetHas3D(BOOL bTrue); void SetSideBeam(int nSide, BOOL bTrue); void SetStepNum(int nNum); void SetStepHeight(double h); void AddTempRail(const TDbHandRail *pRail); void ResetTempRailArray() { while(m_tempRailArray.length()) m_tempRailArray.removeLast(); } void SetSectionPos(int nSide, double nRatio); // TArch6 memeber BOOL IsAscent() const; BOOL IsOnGround() const; BOOL HasSlant() const; BOOL ShowArrow() const { return ((m_nFlagEx&SFEX_ARROW)!=0); } BOOL IsAlongWall(int nSide) const { int nTestBit=nSide? SFEX_RWALL : SFEX_LWALL; return ((m_nFlagEx&nTestBit)!=0); } double GetBeamHeight() const; double GetBeamThick() const; double GetSlabThick() const; AcDbObjectId GetLayerBeam3d() const; AcDbObjectId GetLayerStep3d() const; void SetAlongWall(int nSide, BOOL bTrue) { assertWriteEnabled(); int nTestBit=nSide? SFEX_RWALL : SFEX_LWALL; if(bTrue) m_nFlagEx |= nTestBit; else m_nFlagEx &= ~nTestBit; } void SetAscent(BOOL bTrue); void SetOnGround(BOOL bTrue); void SetSlant(BOOL bTrue); void SetArrow(BOOL bShow) { assertWriteEnabled(); if(bShow) m_nFlagEx |= SFEX_ARROW; else m_nFlagEx &= ~SFEX_ARROW; } void SetBeamHeight(double val); void SetSlabThick(double val); void SetBeamThick(double val); void SetLayerBeam3d(AcDbObjectId idLayer); void SetLayerStep3d(AcDbObjectId idLayer); protected: Acad::ErrorStatus DrawAscent3d(XExplodeDraw &dc) const; // TArch6-绘制坡道 void DrawAscentSide(XExplodeDraw &dc, const XDirectionCurve &seg, int nSide) const; //绘制坡道侧面 void DrawAscentSideSeg(XExplodeDraw &dc, const XDirectionCurve &seg, int nSide, BOOL bVisStart, BOOL bVisEnd) const; void DrawAscentSlant(XExplodeDraw &dc, const XLine &lnLeft, const XLine &lnRight, BOOL bVisStart, BOOL bVisEnd, BOOL bSlant, BOOL bRev=FALSE) const; protected: Adesk::UInt16 m_nStepNum; //踏步数目 double m_nStepHeight; //踏步高 double m_lSectionPos, m_rSectionPos; // 0~1.0 Adesk::UInt8 m_nStairFlag; //TDbHandRail *m_pTempRail; AcDbVoidPtrArray m_tempRailArray; // TArch 6 member Adesk::UInt32 m_nFlagEx; double m_nBeamHeight; //边梁高,坡道专用 double m_nBeamThick; //边梁厚度 double m_nSlabThick; //板厚或梁厚 AcDbHardPointerId m_idLayerBeam3d, m_idLayerStep3d; //踏步和边梁的图层 }; class TARCH_EXP TDbLineStair: public TDbStair { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbLineStair); private: const static Adesk::UInt8 g_nVersion; protected: double m_nStepWidth; //踏步宽 double m_nStairWidth; //梯段宽 XPoint m_ptLocation; //左下角位置 double m_nRotation; //旋转角度 //add by xlc on 080729 //Tarch8 double m_dSlopeLength;//坡道长度 public: TDbLineStair(); ~TDbLineStair(); virtual BOOL IsValid() const; 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 void GetTips(DList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; // derived from TDbStair virtual XDirectionCurve GetSideCurve2d(int nSide) const; virtual double GetElevation() const; virtual void SetElevation(double elev); // Attribute Access method double GetStairLength() const; double GetStairWidth() const; double GetStepWidth() const; XPoint GetLocation() const; double GetRotation() const; void SetStepWidth(double w); void SetStairWidth(double w); void SetLocation(const XPoint &pt); void SetRotation(double rot); //add by xlc on 080729 //TArch8 double GetSlopeLength()const; void SetSlopeLength(double l); // cet 2013.9.3 add virtual CString GetXml(const AcGeMatrix3d& mat) const; }; class TARCH_EXP TDbArcStair: public TDbStair { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbArcStair); private: const static Adesk::UInt8 g_nVersion; protected: XPoint m_ptCenter; //圆心位置 double m_nStartAngle; double m_nSweepAngle; //旋转角度, 可为负数 double m_nRadiusIn, m_nRadiusOut; //TArch7 XPoly2D m_polyIn,m_polyOut;//扇步边界 public: TDbArcStair(); ~TDbArcStair(); // drived from TEntityBase virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag); virtual BOOL IsValid() const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw&dc)const; virtual void GetTips(DList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; // 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); // derived from TDbStair virtual XDirectionCurve GetSideCurve2d(int nSide) const; virtual double GetElevation() const; virtual void SetElevation(double elev); // Attribute Access method double GetStairWidth() const; double GetAverageStepWidth() const; double GetRadiusIn() const; double GetRadiusOut() const; double GetSweepAngle() const; double GetStartAngle() const; double GetEndAngle() const; XPoint GetCenter() const; BOOL IsClockwise() const; //是否为顺时针 void SetStairWidth(double w); void SetCenter(const XPoint &pt); void SetRadiusIn(double r); void SetRadiusOut(double r); void SetSweepAngle(double ang); void SetStartAngle(double ang); void SetPolyIn(const XPoly2D& poly){assertWriteEnabled();m_polyIn=poly;}//ok void SetPolyOut(const XPoly2D& poly){assertWriteEnabled();m_polyOut=poly;}//ok // cet 2013.9.4 add virtual CString GetXml(const AcGeMatrix3d& mat) const; }; class TARCH_EXP TDbCurveStair: public TDbStair { DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbCurveStair); private: const static Adesk::UInt8 g_nVersion; protected: XDirectionCurve m_lCurve, m_rCurve; double m_nElevation; public: TDbCurveStair(); ~TDbCurveStair(); virtual BOOL IsValid() const; 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 void GetTips(DList &) const; //取动态属性显示数据 virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const; // derived from TDbStair virtual XDirectionCurve GetSideCurve2d(int nSide) const; virtual double GetElevation() const; virtual void SetElevation(double elev); // Attribute Access method void SetSideCurve2d(XDirectionCurve lCurve, XDirectionCurve rCurve); }; class TARCH_EXP TDbRectStair: public TDbPolyPathEnt { //为支持栏杆的绊定 DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbRectStair); 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; //扶手距离边 Adesk::UInt8 m_nStairFlag; //楼层标记: 0--首层, 1--中间层, 2--顶层 Adesk::UInt8 m_nStartSide; //起步的一侧 Adesk::UInt8 m_nAlignment; //踏步取齐: 0--齐休息平台, 1--齐中间, 2--齐楼板,3--自由(TArch8) // TArch6 member Adesk::UInt32 m_nFlagEx; double m_nBeamHeight; //边梁高,坡道专用 double m_nBeamThick; //边梁厚度 double m_nSlabThick; //板厚或梁厚 AcDbHardPointerId m_idLayerHand3d, m_idLayerStep3d, m_idLayerBeam3d, m_idLayerRail3d; double m_lSectPos, m_rSectPos; //左右剖切位置距离起点的高差,在定制剖切标记下可用 Adesk::UInt8 m_nViewCtrl; //视图控制:0-自动(由楼层决定);1-禁止3D;2-禁止2D //add by xlc on 080626 //Tarch8 member double m_nRailDistMid; //层间转角处扶手伸出距离 double m_nRailDist; //层与层连接处扶手伸出距离 double m_dSectElev; //剖切高度 double m_dSectRotation; //剖断线旋转角度 double m_dTextHeight; //字高 double m_nSlabSize2; //二跑一侧休息平台尺寸 double m_nSlabSize1; //一跑一侧休息平台尺寸 double m_dSlopeLength1,m_dSlopeLength2;//一跑和二跑坡道长度 Adesk::UInt16 m_nEvaRadiusColor; //疏散半径颜色 AcDbHardPointerId m_idLayerText,m_idLayerArrow,m_idTextStyle; public: TDbRectStair(); ~TDbRectStair(); 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); virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase); // 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 explode(AcDbVoidPtrArray& entitySet) const; 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; // sg add 100722,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); Acad::ErrorStatus ExplodeTo(TDbLineStair &stair1, TDbLineStair &stair2, TDbSlab &slab, TDbHandRail &rail, TDbHandRail *rail1=NULL, TDbHandRail *rail2=NULL, TDbHandRail *pRailTop=NULL,TDbHandRail *pRailLeft=NULL,TDbHandRail* pRailRight=NULL) 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 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 GetSpaceWidth() const; double GetStepWidth() const; double GetStairWidth() const; double GetElevation() const; XPoint GetLocation() const; double GetRotation() const; int GetStartSide() const; int GetAlignment() const; XPoint GetUpRight2d() const; XPoint GetUpLeft2d() const; double GetStairHeight() const { return (GetStepHeight()*(GetStepNum1()+GetStepNum2())); } 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); // TArch8 memeber 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 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 IsConnectRail()const{return ((m_nFlagEx&SFEX_CONNECTRAIL)!=0);} void SetConnectRail(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx|=SFEX_CONNECTRAIL; else m_nFlagEx&=~SFEX_CONNECTRAIL; } void SetSlabSize2(double s); double GetSlabSize2() const; void SetSlabSize1(double s); double GetSlabSize1() const; double GetSectElev()const; void SetSectElev(double r); BOOL IsAutoOutRail() const; void SetAutoOutRail(BOOL bTrue); double GetTextHeight()const; void SetTextHeight(double h); double GetSectRotation()const; void SetSectRotation(double r); double GetSectStepNum()const; void SetSectStepNum(double n); double GetRailDistMid() const; void SetRailDistMid(double w); double GetRailDist() const; void SetRailDist(double w); AcDbObjectId GetLayerText() const; AcDbObjectId GetTextStyle() const; AcDbObjectId GetLayerArrow() const; void SetLayerText(AcDbObjectId idLayer); void SetTextStyle(AcDbObjectId idStyle); void SetLayerArrow(AcDbObjectId idLayer); void SetArrow(BOOL bTrue); BOOL IsArrow() const; //是否显示箭头 double GetSlopeLength1()const; double GetSlopeLength2()const; void SetSlopeLength1(double l); void SetSlopeLength2(double l); // 计算剖切高度和剖切点 BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const; int GetSectStairPos()const;//剖切梯段 // 箭头 void GetDefaultArrow(TDbLineStair &stair1,TDbLineStair &stair2, TDbSymbArrow*pArrowUp,TDbSymbArrow*pArrowDown)const; //由点推算剖切位置 int HitSectPosByPoint2d(XPoint ptHit2d) const; // 画栏杆 void DrawRail(XPoly2D polyPath,double nStepWidth,XExplodeDraw &dc) const; //add by xlc on 090121 获得梯段的扶手线 void GetRailPolyFromStair(TDbLineStair &stair,double dOffset,double dDistS,double dDistE,BOOL bLeft,XPoly2D &poly)const; // TArch6 memeber 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; void GetDefaultArrow(TDbSymbArrow*& pArrowUp,TDbSymbArrow*& pArrowDown)const; //看剖切位置命中的目标,ptHit为剖切位置,返回值:0-没有命中,否则为命中的第n个梯段 // 1-第一个梯段;2-第2个梯段 int HitTestSectPos(int nSide, XPoint &ptHit2d) const; void SetDefaultSectPos(); // 由平面二维点推算命中的高度 double HitElevationByPoint2d(XPoint ptHit2d) const; double GetSectPos(int nSide) const { return (nSide? m_rSectPos : m_lSectPos); } BOOL IsManualSectPos() const { return ((m_nFlagEx&SFEX_SECTPOS)!=0); } void SetManualSectPos(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_SECTPOS; else m_nFlagEx &= ~SFEX_SECTPOS; } void SetSectPos(int nSide, double nDist) { assertWriteEnabled(); if(nSide) m_rSectPos=nDist; else m_lSectPos=nDist; } Adesk::UInt8 GetViewCtrl() const { return m_nViewCtrl; } void SetViewCtrl(Adesk::UInt8 nCtrl) { assertWriteEnabled(); m_nViewCtrl=nCtrl; } 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); // cet 2013.9.5 add CString GetXml(const AcGeMatrix3d& mat) const; //20v3新增 //begin by jsx on 20160616 void SetSingleEvaRadius(BOOL bTrue);//设置单侧疏散半径 void SetDoubleEvaRadius(BOOL bTrue);//设置双侧疏散半径 BOOL IsSingleEvaRadius() const; //是否有单侧疏散半径 BOOL IsDoubleEvaRadius() const; //是否有双侧疏散半径 BOOL IsEvaRadius() const; //是否有疏散半径 void GetEvaRadius(AcDbArc *pArc, bool bSingle = true)const;//获取疏散半径,bSingle为真时单侧,为假时,双侧 void SetEvaRadiusColor(const AcCmColor &color); //设置疏散半径颜色 AcCmColor GetEvaRadiusColor()const; //获取疏散半径颜色 //end // From TDbPolyPathEnt virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const; private: virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&); }; TARCH_IMPEXP int EditStair0(TDbStair *pStep, TCHAR cKey); TARCH_IMPEXP int EditArcStair0(AcDbObjectId id); TARCH_IMPEXP int EditLineStair0(AcDbObjectId id); TARCH_IMPEXP int EditCurveStair0(AcDbObjectId id); TARCH_IMPEXP int EditRectStair0(AcDbObjectId id); #endif