241 lines
8.3 KiB
C++
241 lines
8.3 KiB
C++
#ifndef __DBTRIANGLESTAIR_H
|
|
#define __DBTRIANGLESTAIR_H
|
|
#include "DbPolyPathEnt.h"
|
|
#include "dbStair.h"
|
|
|
|
// 楼梯的标志
|
|
class TDbSymbArrow;
|
|
|
|
class TDbHandRail;
|
|
class TDbSlab;
|
|
|
|
#define OFFSET_LEFT 0 //顺时针上楼
|
|
#define OFFSET_RIGHT 1 //逆时针上楼
|
|
#define SFEX_OPENRAIL 0x10000 //设置扶手开放端口,TdbTriangleStair
|
|
//#define SFEX_SHOWSLAB 0x40000 //设置平台开关,TdbTriangleStair
|
|
|
|
// 三角角楼梯
|
|
class TARCH_EXP TDbTriangleStair: public TDbPolyPathEnt { //为支持栏杆的绊定
|
|
DECLARE_TENTBASE();
|
|
ACRX_DECLARE_MEMBERS(TDbTriangleStair);
|
|
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_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::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:
|
|
TDbTriangleStair();
|
|
~TDbTriangleStair();
|
|
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<TObjInfoUnit> &) 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,TDbSlab &slab1,
|
|
TDbSlab &slab2,TDbSlab &slab3,TDbHandRail &rail, TDbHandRail &rail2, TDbHandRail &rail3, TDbHandRail *pRailTop=NULL,
|
|
TDbHandRail *pRailOut1=NULL,TDbHandRail* pRailOut2=NULL,TDbHandRail *pRailOut3=NULL) const;
|
|
|
|
// 绘制栏杆
|
|
void DrawRail(XPoly2D polyPath,double nStepWidth,XExplodeDraw &dc) const;
|
|
// 计算剖切高度和剖切点
|
|
BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const;
|
|
// 由梯段计算扶手线
|
|
void GetRail(TDbLineStair &stair,XPoly2D &polyRail,int nStairNo,BOOL bIn,BOOL bLeft,BOOL bTop=FALSE)const;
|
|
// 计算poly线
|
|
void CalPolyFromPoint(XPoint ptS,XPoint ptE,double dAngle,XPoly2D &poly)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;
|
|
void SetSlabSize(double s);
|
|
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 GetSectStepNum()const;
|
|
BOOL IsConnectRail()const{return ((m_nFlagEx&SFEX_CONNECTRAIL)!=0);}
|
|
BOOL IsShowSlab()const{return ((m_nFlagEx&SFEX_SHOWSLAB)!=0);}
|
|
|
|
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;
|
|
}
|
|
|
|
double GetStairHeight() const {
|
|
return (GetStepHeight()*GetStepNum()*3);
|
|
}
|
|
|
|
double GetTextHeight()const;
|
|
void SetTextHeight(double h);
|
|
void SetShowSlab(BOOL bTrue);
|
|
void SetConnectRail(BOOL bTrue);
|
|
void SetSectRotation(double r);
|
|
void SetSectStepNum(int n);
|
|
void SetRailDist(double w);
|
|
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 SetStepNum(Adesk::UInt8 n);
|
|
void SetStepHeight(double h);
|
|
void SetStairFlag(Adesk::UInt8 flag);
|
|
|
|
void SetArrow(BOOL bTrue);
|
|
BOOL IsArrow() const; //是否显示箭头
|
|
BOOL IsAutoOutRail() const;
|
|
BOOL IsOpenRail() const {return ((m_nFlagEx&SFEX_OPENRAIL)!=0);}
|
|
void SetOpenRail(BOOL bTrue);
|
|
|
|
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*pArrowUp,TDbSymbArrow*pArrowDown)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 |