#ifndef __DBMULTISTAIR_H #define __DBMULTISTAIR_H #include "dbstair.h" class TARCH_EXP TDbMultiStair: public TDbEntity { //为支持栏杆的绊定 DECLARE_TENTBASE(); ACRX_DECLARE_MEMBERS(TDbMultiStair); private: const static Adesk::UInt8 g_nVersion; protected: Adesk::UInt32 m_nFlagEx; //控制标记 Adesk::UInt8 m_nStairFlag; //楼层标记: 0--首层, 1--中间层, 2--顶层 Adesk::UInt8 m_nPathSide; //0--左边基线,1-右边基线 XPoly2D m_polySide2d; double m_nElevation; //标高 double m_nStairWidth; double m_nStairHeight; //楼梯总高 double m_nStepWidth; double m_nStepHeight; double m_nRailHeight; //扶手高度 double m_nRailWidth; //扶手宽度 double m_nRailDistToSide; //扶手距离边 double m_nSlabThick; //平台厚度 double m_nBeamHeight; //边梁高度 double m_nBeamThick; //边梁厚度 double m_lSectPos, m_rSectPos; //左右剖切位置距离起点的距离,在定制剖切标记下可用 AcDbHardPointerId m_idLayerStep3d, m_idLayerHand3d, m_idLayerRail3d, m_idLayerBeam3d; Adesk::UInt8 m_nViewCtrl; //视图控制:0-自动(由楼层决定);1-禁止3D;2-禁止2D //TArch8 DList m_lstSegType;//每一段的类形,0,梯段;1,平台。 //add by xlc on 080718 //Tarch8 member double m_nRailDistEnd; //终端扶手伸出距离 double m_nRailDist; //起始端扶手伸出距离 double m_dSectElev; //剖切高度 double m_dSectRotation; //剖断线旋转角度 double m_dTextHeight; //字高 AcDbHardPointerId m_idLayerText,m_idLayerArrow,m_idTextStyle; protected: long m_iActiveStep;//当前定位的梯段(不存盘,只是用于JIG绘制过程,其它情况都为-1; public: // 为导入到PDMS中,所新增接口 by gjm 2015/09/08 Adesk::UInt32 GetFlagEx(){ return m_nFlagEx; } // Attribute Access method void SetActiveStep(long i){m_iActiveStep=i;}//ok,0,最后一段,否则倒数第二个 // 0-Left Side, 1 or other-Right Side void GetSidePoly2d(int nSide, XPoly2D &polySide) const; const XPoly2D &GetPolySide2d() const { return m_polySide2d; } Adesk::UInt8 GetPathSide() const { return m_nPathSide; } double GetStairHeight() const { return m_nStairHeight; } double GetStairWidth() const { return m_nStairWidth; } double GetStepHeight() const { return m_nStepHeight; } double GetStepWidth() const { return m_nStepWidth; } Adesk::UInt8 GetStairFlag() const { return m_nStairFlag; } double GetRailHeight() const { return m_nRailHeight; } double GetRailWidth() const { return m_nRailWidth; } double GetRailDistToSide() const { return m_nRailDistToSide; } double GetSlabThick() const { return m_nSlabThick; } double GetBeamThick() const { return m_nBeamThick; } double GetBeamHeight() const { return m_nBeamHeight; } double GetElevation() const { return m_nElevation; } Adesk::UInt8 GetViewCtrl() const { return m_nViewCtrl; } //看剖切位置命中的目标,ptHit为剖切位置,返回值:0-没有命中,否则为命中的第n个梯段 int HitTestSectPos(int nSide, XPoint &ptHit2d) const; int HitTestSectPos(int nSide, const DList &stairs, XPoint &ptHit2d) const; void SetDefaultSectPos(); //add by xlc on 090426 箭头文字,动态数据 CString GetTextUp() const; void SetTextUp(const TCHAR *sVal); CString GetTextDown() const; void SetTextDown(const TCHAR *sVal); double GetSectPos(int nSide) const { return (nSide? m_rSectPos : m_lSectPos); } BOOL IsManualSectPos() const { return ((m_nFlagEx&SFEX_SECTPOS)!=0); } BOOL IsAutoRail() const{ return ((m_nFlagEx&SFEX_AUTORAIL)!=0); } BOOL HasHandRail(int nSide) const { int nBitFlag=nSide? SFEX_RRAIL : SFEX_LRAIL; return ((m_nFlagEx&nBitFlag)!=0); } BOOL HasSideBeam(int nSide) const { int nBitFlag=nSide? SFEX_RBEAM : SFEX_LBEAM; return ((m_nFlagEx&nBitFlag)!=0); } BOOL IsAscent() const{ return ((m_nFlagEx&SFEX_ASCENT)!=0); } BOOL IsOnGround() const{ return ((m_nFlagEx&SFEX_GROUND)!=0); } BOOL HasSlant() const { return ((m_nFlagEx&SFEX_SLANT)!=0); } BOOL IsAlongWall(int nSide) const { int nTestBit=nSide? SFEX_RWALL : SFEX_LWALL; return ((m_nFlagEx&nTestBit)!=0); } AcDbObjectId GetLayerBeam3d() const{ return m_idLayerBeam3d; } AcDbObjectId GetLayerStep3d() const { return m_idLayerStep3d; } AcDbObjectId GetLayerHand3d() const { return m_idLayerHand3d; } AcDbObjectId GetLayerRail3d() const { return m_idLayerRail3d; } 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; } void SetPolySide2d(const XPoly2D &polySide) { assertWriteEnabled(); m_polySide2d=polySide; } //add by xlc on 080718 Tarch8 double GetSectStepNum() const; void SetSectStepNum(double d); double GetSectElev()const { assertReadEnabled(); return m_dSectElev; } void SetSectElev(double r) { assertWriteEnabled(); m_dSectElev = r; } double GetTextHeight()const { assertReadEnabled(); return m_dTextHeight; } void SetTextHeight(double h) { assertWriteEnabled(); m_dTextHeight=h; } double GetSectRotation()const { assertReadEnabled(); return m_dSectRotation; } void SetSectRotation(double r) { assertWriteEnabled(); m_dSectRotation=r; } double GetRailDistEnd() const { assertReadEnabled(); return m_nRailDistEnd; } void SetRailDistEnd(double w) { assertWriteEnabled(); m_nRailDistEnd=w; } double GetRailDist() const { assertReadEnabled(); return m_nRailDist; } void SetRailDist(double w) { assertWriteEnabled(); m_nRailDist=w; } void SetArrow(BOOL bTrue) { assertWriteEnabled(); if(bTrue) m_nFlagEx|=SFEX_ARROW; else m_nFlagEx&=~SFEX_ARROW; } BOOL IsArrow() const//是否显示箭头 { return ((m_nFlagEx&SFEX_ARROW)!=0); } AcDbObjectId GetLayerText() const { return m_idLayerText; } AcDbObjectId GetTextStyle() const { return m_idTextStyle; } AcDbObjectId GetLayerArrow() const { return m_idLayerArrow; } void SetLayerText(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerText=idLayer; } void SetTextStyle(AcDbObjectId idStyle) { assertWriteEnabled(); m_idTextStyle=idStyle; } void SetLayerArrow(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerArrow=idLayer; } // 计算剖切高度和剖切点 BOOL CalSectPos(const DList &stairs,double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const; int GetSectStairPos(const DList &stairs)const;//剖切梯段 // 由平面二维点推算命中的相对高度 double HitElevationByPoint2d(const DList &stairs,XPoint ptHit2d) const; Adesk::UInt8 GetSegType(long i)const; void ResetSegType(){assertWriteEnabled();m_lstSegType.Reset();}//ok void SetSegType(long i,Adesk::UInt8 type); void SwapPolySide();//对齐方式变化,但楼梯形状不变 void SetRailHeight(double l) { assertWriteEnabled(); m_nRailHeight=l; } void SetRailWidth(double w) { assertWriteEnabled(); m_nRailWidth=w; } void SetRailDistToSide(double l) { assertWriteEnabled(); m_nRailDistToSide=l; } void SetStepWidth(double w) { assertWriteEnabled(); m_nStepWidth=w; } void SetStairWidth(double w){ assertWriteEnabled(); m_nStairWidth=w; } void SetElevation(double elev) { assertWriteEnabled(); m_nElevation = elev; } void SetPathSide(int nSide) { assertWriteEnabled(); m_nPathSide=nSide; } void SetStepHeight(double h){ assertWriteEnabled(); m_nStepHeight=h; } void SetStairHeight(double h) { assertWriteEnabled(); m_nStairHeight=h; } void SetAutoRail(BOOL bTrue){ assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_AUTORAIL; else m_nFlagEx &= ~SFEX_AUTORAIL; } void SetAscent(BOOL bTrue){ assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_ASCENT; else m_nFlagEx &= ~SFEX_ASCENT; } void SetOnGround(BOOL bTrue){ assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_GROUND; else m_nFlagEx &= ~SFEX_GROUND; } void SetSlant(BOOL bTrue){ assertWriteEnabled(); if(bTrue) m_nFlagEx |= SFEX_SLANT; else m_nFlagEx &= ~SFEX_SLANT; } void SetSideBeam(int nSide, BOOL bTrue){ assertWriteEnabled(); int nBitFlag=nSide? SFEX_RBEAM : SFEX_LBEAM; if(bTrue) m_nFlagEx |= nBitFlag; else m_nFlagEx &= ~nBitFlag; } void SetHandRail(int nSide, BOOL bTrue) { assertWriteEnabled(); int nBitFlag=nSide? SFEX_RRAIL : SFEX_LRAIL; if(bTrue) m_nFlagEx |= nBitFlag; else m_nFlagEx &= ~nBitFlag; } void SetAlongWall(int nSide, BOOL bTrue) { assertWriteEnabled(); int nTestBit=nSide? SFEX_RWALL : SFEX_LWALL; if(bTrue) m_nFlagEx |= nTestBit; else m_nFlagEx &= ~nTestBit; } void SetStairFlag(Adesk::UInt8 flag) { assertWriteEnabled(); m_nStairFlag = flag; } void SetBeamHeight(double val){ assertWriteEnabled(); m_nBeamHeight = val; } void SetSlabThick(double val) { assertWriteEnabled(); m_nSlabThick=val; } void SetBeamThick(double val) { assertWriteEnabled(); m_nBeamThick=val; } // 设置三维部件的图层 void SetLayerBeam3d(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerBeam3d=idLayer; } void SetLayerStep3d(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerStep3d=idLayer; } void SetLayerHand3d(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerHand3d=idLayer; } void SetLayerRail3d(AcDbObjectId idLayer) { assertWriteEnabled(); m_idLayerRail3d=idLayer; } void SetViewCtrl(Adesk::UInt8 nCtrl) { assertWriteEnabled(); m_nViewCtrl=nCtrl; } Adesk::UInt8 GetSegNum()const{return m_polySide2d.TotalSegments();}//ok Adesk::UInt8 GetTotalStepNum() const; Adesk::UInt8 GetStairNum() const; Adesk::UInt8 GetSlabNum() const; Acad::ErrorStatus ExplodeTo(DList &lstComponents) const; public: TDbMultiStair(); ~TDbMultiStair(); virtual BOOL IsValid() const; virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const; 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 bool IsModelEntity() const{return true;} 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 6;}//ok // sg add 101115,支持统一标高 virtual bool UnifyElevation(double dElevation = 0.0); // cet 2013.9.6 add CString GetXml(const AcGeMatrix3d& mat) const; }; #endif