#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 &) 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 &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