📄 entity.h
字号:
#ifndef _ENTITY_H_
#define _ENTITY_H_
#include "POSITION.H"
#define PICK_RADIUS 0.1 // 选取半径
#define ENTITY_NUM 9 // 图元的种类数
enum EEntityType // 图元的类型
{
etUnknow = 0,
etPoint = 1,
etLine = 2,
etRectangle = 3,
etCircle = 4,
etArc = 5,
etBspline = 6,
etEllipse = 7,
etText = 8
};
enum EDrawMode // 绘图模式
{
dmNormal = 0, // 正常状态
dmSelect = 1, // 选中状态
dmPrompt = 2, // 提示状态
dmDrag = 3, // 拖动状态
dmInvalid = 4 // 擦除状态
};
//
void SetDrawEnvir(CDC* pDC, int drawMode, CPen* pPen);
class CEntity : public CObject
{
DECLARE_SERIAL(CEntity)
protected:
int m_type; // 图元类型(EEntityType)
COLORREF m_color ; // 图元颜色
UINT m_lineStyle ; // 图元的线型
int m_lineWidth ; // 图元的线宽
public:
CEntity() ;
CEntity(const CEntity& entity);
~CEntity() {}
CEntity operator = (const CEntity& entity); // 重载等号
virtual CEntity * Copy() { return NULL; } // 指针拷贝
virtual void Init(); //初始化成员变量值
virtual int GetType() { return m_type ; } // 返回图元的类型(EEntityType)
COLORREF GetColor() { return m_color; } // 返回图元颜色
void SetColor(COLORREF color) { m_color = color; } // 设置图元颜色
virtual void Draw(CDC * pDC, int drawMode = dmNormal ) {}; // 绘制图元对象
// 给定一点及拾取半径,判断图元是否被选中
virtual BOOL Pick(const Position& pos, const double pick_radius) { return FALSE;}
// 得到对象的最小包围盒,该包围盒将被用于图元的选取和全屏显示
virtual void GetBox(BOX2D* pBox){}
// 给定一个基点和一个目标点平移图元
virtual void Move(const Position& basePos,const Position& desPos) {}
// 给定一个基点和一个角度值旋转图元
virtual void Rotate(const Position& basePos, const double angle) {}
// 给定两点镜像图元,布尔变量bCopy用于确定是否删除原来位置的图元
virtual void Mirror(const Position& pos1, const Position& pos2){}
// 改变光标
virtual void LoadPmtCursor() {}
// Note : if true , the giving pos is reset to the feature position
virtual BOOL GetSnapPos(Position& pos) { return FALSE; }
// 图元对象串行化
virtual void Serialize(CArchive& ar);
};
////////////////////////////
// CLASS CLine
//
class CLine : public CEntity
{
DECLARE_SERIAL(CLine)
protected:
Position m_begin , m_end ; // 起点和终点
public:
CLine() ;
CLine(const CLine& line);
CLine(const Position& begin,const Position& end);
~CLine() ;
CLine& operator = (const CLine& line);
CEntity* Copy();
int GetType();
void Init();
Position GetBeginPos(); // 返回起点值
Position GetEndPos(); // 返回终点值
void Draw(CDC * pDC, int drawMode = dmNormal ) ;
//对直线的编辑操作:拾取,平移,旋转,镜向和获得最小包围盒
BOOL Pick(const Position& pos, const double pick_radius) ;
void GetBox(BOX2D* pBox);
void Move(const Position& basePos,const Position& desPos);
void Rotate(const Position& basePos, const double angle);
void Mirror(const Position& pos1, const Position& pos2);
BOOL GetSnapPos(Position& pos);
void LoadPmtCursor();
void Serialize(CArchive& ar) ;
};
////////////////////////////
// CLASS CRectangle
//
class CRectangle : public CEntity
{
DECLARE_SERIAL(CRectangle)
protected:
Position m_LeftTop , m_RightBottom ; // 起点和终点
public:
CRectangle() ;
CRectangle(const CRectangle& rect);
CRectangle(const Position& LeftTop,const Position& RightBottom);
~CRectangle() ;
CRectangle& operator = (const CRectangle& rect);
CEntity* Copy();
int GetType();
void Init();
Position GetLeftTopPos(); // 返回左上角的值
Position GetRightBottomPos(); // 返回右下角的值
void Draw(CDC * pDC, int drawMode = dmNormal ) ;
//对直线的编辑操作:拾取,平移,旋转,镜向和获得最小包围盒
BOOL Pick(const Position& pos, const double pick_radius) ;
void GetBox(BOX2D* pBox);
void Move(const Position& basePos,const Position& desPos);
void Rotate(const Position& basePos, const double angle);
void Mirror(const Position& pos1, const Position& pos2);
BOOL GetSnapPos(Position& pos);
void LoadPmtCursor() ;
void Serialize(CArchive& ar) ;
};
////////////////////////////
// CLASS CArc
//
class CArc : public CEntity
{
DECLARE_SERIAL(CArc)
protected:
//member variables
Position m_center ;
Position m_begin ;
Position m_end ;
public:
// constructor and destructor
CArc() ;
CArc(const CArc& arc);
CArc(const Position& center,const Position& startPos, const Position& endPos);
~CArc() ;
CEntity* Copy();
//-----------------------------------------------
// member function
// Attributes
int GetType();
void Init(); // initialize member variables
Position GetStartPos();
Position GetEndPos();
Position GetCenterPos() ;
BOOL GetSnapPos(Position& pos) ;
void Draw(CDC * pDC, int drawMode = dmNormal ) ;
//对直线的编辑操作:拾取,平移,旋转,镜向和获得最小包围盒
BOOL Pick(const Position& pos, const double pick_radius) ;
void Move(const Position& basePos,const Position& desPos) ;
void Rotate(const Position& basePos, const double angle) ;
void Mirror(const Position& FstPos, const Position& SecPos);
void GetBox(BOX2D* pBox);
void LoadPmtCursor();
void Serialize(CArchive& ar) ;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -