Files
envi-code/SourceCode/Code2026/tg_shs/inc/TArch/dbParallelStair.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

265 lines
9.6 KiB
C++

#ifndef __DBPARALLELSTAIR_H
#define __DBPARALLELSTAIR_H
#include "DbPolyPathEnt.h"
#include "dbStair.h"
// 楼梯的标志
class TDbSymbArrow;
class TDbHandRail;
class TDbSlab;
#define OFFSET_MID 0 //中跑上楼
#define OFFSET_SIDE 1 //边跑上楼
// 双分平行楼梯
class TARCH_EXP TDbParallelStair: public TDbPolyPathEnt { //为支持栏杆的绊定
DECLARE_TENTBASE();
ACRX_DECLARE_MEMBERS(TDbParallelStair);
private:
const static Adesk::UInt8 g_nVersion;
protected:
double m_nStepHeight; //踏步高
double m_nStepWidth; //踏步宽
double m_nStairWidth; //边梯段宽
double m_nMStairWidth; //中梯段宽
double m_nSlabSize; //休息平台尺寸
double m_nSlabSizeSide; //休息平台边段尺寸
double m_nSlabSizeMid; //休息平台中段尺寸
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--齐楼板,3--自由
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:
TDbParallelStair();
~TDbParallelStair();
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 100722,支持统一标高
virtual bool UnifyElevation(double dElevation = 0.0);
Acad::ErrorStatus ExplodeTo(TDbLineStair &stair1, TDbLineStair &stair2,TDbLineStair &stair3,
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,XLine line,double lengthS,double lengthE,XPoly2D &poly)const;
// 计算剖切高度和剖切点
BOOL CalSectPos(double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const;
// 中梯起步时的内侧扶手
void GetRailFromMid(TDbLineStair &stair1,TDbLineStair &stair2,TDbLineStair &stair3,
XPoly2D &polyRail,XPoly2D &polyRail2,XPoint &ptStart,XPoint &ptStart2)const;
// 边梯起步时的内侧扶手
void GetRailFromSide(TDbLineStair &stair1,TDbLineStair &stair2,TDbLineStair &stair3,
XPoly2D &polyRail,XPoly2D &polyRail2,XPoint &ptStart,XPoint &ptStart2)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;
// 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 GetSlabSizeMid() const;
void SetSlabSizeSide(double s);
double GetSlabSizeSide() 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 GetMStairWidth() const;
double GetElevation() const;
XPoint GetLocation() const;
double GetRotation() const;
int GetStartSide() const;
int GetAlignment() const;
int GetSectStepNum()const;
XPoint GetUpRight2d() const;
XPoint GetUpLeft2d() 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 SetSlabSizeMid(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 SetMStairWidth(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 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 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*pArrowUp1,TDbSymbArrow*pArrowUp2,
TDbSymbArrow*pArrowDown1,TDbSymbArrow*pArrowDown2)const;
//add by xlc on 090426 箭头文字,动态数据
CString GetTextUp() const;
void SetTextUp(const TCHAR *sVal);
CString GetTextDown() const;
void SetTextDown(const TCHAR *sVal);
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);
// cet 2013.9.5 add
CString GetXml(const AcGeMatrix3d& mat) const;
// From TDbPolyPathEnt
virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const;
private:
virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&);
};
TARCH_IMPEXP int EditParallelStair0(AcDbObjectId id);
#endif