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

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