⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entity.h

📁 一个用VC++编写的绘图工具
💻 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 + -