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

681 lines
25 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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<XCurveSegment> &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<TObjInfoUnit> &) 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<TObjInfoUnit> &) 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<TObjInfoUnit> &) 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<TObjInfoUnit> &) 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