681 lines
25 KiB
C++
681 lines
25 KiB
C++
#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 |