453 lines
12 KiB
C++
453 lines
12 KiB
C++
#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<Adesk::UInt8> 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<TDbStair> &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<TDbStair> &stairs,double &lSectPos,double &rSectPos,XPoint &ptLeft2d,XPoint &ptRight2d)const;
|
|
int GetSectStairPos(const DList<TDbStair> &stairs)const;//剖切梯段
|
|
// 由平面二维点推算命中的相对高度
|
|
double HitElevationByPoint2d(const DList<TDbStair> &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<TDbEntity> &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<TObjInfoUnit> &) 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 |