128 lines
4.8 KiB
C++
128 lines
4.8 KiB
C++
#ifndef __DBHANDRAIL_H
|
|
#define __DBHANDRAIL_H
|
|
#include "DbPolyPathEnt.h"
|
|
|
|
#define AL_CENTER 0
|
|
#define AL_LEFT 1
|
|
#define AL_RIGHT 2
|
|
|
|
class TDbStair;
|
|
|
|
class TARCH_EXP TDbHandRail: public TDbPolyPathEnt {
|
|
DECLARE_TENTBASE();
|
|
ACRX_DECLARE_MEMBERS(TDbHandRail);
|
|
public:
|
|
enum TRailStyle { RS_NONE=0, //只有二维
|
|
RS_SLAB=1, //栏板
|
|
RS_RAIL1=2, //标准扶手1 (矩形长条)
|
|
RS_RAIL2=3, //标准扶手2 (圆形)
|
|
RS_CUSTOM=100,
|
|
};
|
|
private:
|
|
const static Adesk::UInt8 g_nVersion;
|
|
protected:
|
|
TRailStyle m_nStyle; //扶手标志, 0--为自定义
|
|
Adesk::UInt8 m_nAlignment; //对齐方式: 0--中间;1-左;2-右
|
|
AcDbHardPointerId m_idCustStyle; //自定义扶手
|
|
XPoly2D m_polyBase; //扶手路径
|
|
double m_nHeight, m_nWidth, m_nThick; //扶手顶高和扶手宽和扶手厚
|
|
Adesk::UInt8 m_nDrawMode; // DRAW_2D, DRAW_3D, DRAW_2D+DRAW_3D
|
|
|
|
TDbStair *m_pTempStair;
|
|
AcDbVoidPtrArray m_tempStairArray;
|
|
public:
|
|
TDbHandRail();
|
|
~TDbHandRail();
|
|
virtual BOOL IsValid() const;
|
|
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 bool IsModelEntity() const{return true;}
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) const;
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &dc) const;
|
|
virtual void GetTips(DList<TObjInfoUnit> &) const; //取动态属性显示数据
|
|
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
|
|
virtual const TCHAR *GetDefaultLayer() const;
|
|
virtual Acad::ErrorStatus GetExtents2d(XPoint &ptLow, XPoint &ptUp) const;
|
|
|
|
|
|
// Helper method
|
|
int GetHitObjects(AcDbObjectIdArray &idArray) const;
|
|
BOOL GetPolyTrace(XPoly2D &polyTrace) const;
|
|
void ClipCurveByTrace(DList<XCurveSegment> &lnSet) const;
|
|
//BOOL AdjustOutline();
|
|
//BOOL GetAdjustedPoly(XPoly2D &polyPath) const;
|
|
|
|
// >0 命中顶点; <0 命中边; 0--没有命中
|
|
// abs(nRet)-1 为命中目标序号
|
|
int HitTestOnRail2d(const XPoint &ptTest, double nTol=_DIST_SNAP) const;
|
|
BOOL GetClosestPoint2d(const XPoint &ptTest, XPoint &ptOnCurve) const;
|
|
void GetBaseline2d(XPoly2D &poly2d) const;
|
|
void GetSidePoly2d(XPoly2D &lPoly, XPoly2D &rPoly) const;
|
|
void UpdateHitObjects() const;
|
|
|
|
|
|
BOOL AddVertex(const XPoint &ptAdd);
|
|
BOOL RemoveVertexAt(int nPos);
|
|
|
|
Adesk::UInt8 GetAlignment() const;
|
|
int GetEdgeNum() const;
|
|
double GetHeight() const;
|
|
double GetWidth() const;
|
|
double GetThickness() const;
|
|
double GetLength() const;
|
|
double GetElevationAt(int idx) const;
|
|
double GetSweepAngleAt(int idx) const;
|
|
TDbHandRail::TRailStyle GetStyle() const;
|
|
AcDbObjectId GetCustStyle() const;
|
|
BOOL Has2D() const;
|
|
BOOL Has3D() const;
|
|
const XPoly2D & GetOutline() const;
|
|
|
|
void SetHeight(double h);
|
|
void SetWidth(double w);
|
|
void SetThickness(double t);
|
|
void SetOutline(const XPoly2D &poly);
|
|
void SetStyle(TDbHandRail::TRailStyle ns, AcDbObjectId id=AcDbObjectId::kNull);
|
|
void SetElevationAt(int idx, double nElev);
|
|
void SetSweepAngleAt(int idx, double nAng);
|
|
void SetAlignment(Adesk::UInt8 nAlign);
|
|
void SetTempStair(const TDbStair *pStair);
|
|
void SetHas2D(BOOL bTrue);
|
|
void SetHas3D(BOOL bTrue);
|
|
|
|
//add by xlc on 080219
|
|
void AddTempStair(const TDbStair *pStair);
|
|
void ResetTempStairArray() {
|
|
while(m_tempStairArray.length())
|
|
m_tempStairArray.removeLast();
|
|
}
|
|
|
|
static int GetRailsByCP(const XPoly2D &poly, AcDbObjectId idOwner, AcDbObjectIdArray &idArray);
|
|
|
|
virtual Acad::ErrorStatus SetPathPoly(const XPoly2D &polyPath,const AcGeVector3d&);
|
|
virtual Acad::ErrorStatus GetPathPoly(XPoly2D &polyPath,AcGeVector3d&normal) const;
|
|
virtual Acad::ErrorStatus GetBindPath(XPoly2D &polyPath,AcGeVector3d&normal) const;
|
|
|
|
};
|
|
|
|
|
|
#endif |