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

📄 painted.h

📁 这是书上的代码
💻 H
字号:
// painted.h : interface of the CPaintLine class
//
#ifndef __CPaintedinterfaceyh
#define __CPaintedinterfaceyh
/////////////////////////////////////////////////////////////////////////////
//定义CPainted类为所有画图类的抽象基类
//利用基类指针操纵其它画图类完成各类图形的绘制
//其它画图类中重定义基类中各函数,完成具体功能
class CPainted : public CObject
{
public:	
	CPainted();
	virtual void Init(CPath* pPath) {};
	//改变坐标原点
	virtual void ChangeOrigin(CPnt pnt) {};
	//就近点判断函数,
	//pnt1为鼠标点坐标或给定的起点坐标,
	//id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的起点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge1(CPnt pnt1,UINT& id,CPnt& pnt,double& angle) {return FALSE;};
	
	//就近点判断函数,	
	//pnt1为鼠标点坐标或计算得到的准终点坐标,
	//id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的终点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge2(CPnt pnt1,UINT& id,CPnt& pnt,double& angle) {return FALSE;};

	virtual void GetPostureAngle() {};//计算得到路段的姿态角(外射角)
	//返回路段给定端点的姿态角(外射角)
	virtual double ReturnPostureAngle(UINT id) {return 0.0;};
	virtual CPnt returnattr1() = 0;		//返回起点
	virtual CPnt returnattr2() = 0;		//返回终点	
	virtual CPnt returncirclecenter() {return CPnt(0,0);};	//返回圆心
	virtual double returnradius() {return 0;} ;			//返回半径
	virtual UINT IsHit1(CPnt& pointBang) {return 0;};//端点是否被选中
	//得到路径的绘制起点
	//画线时自动取就近的线条端点为起点
	//起点为直线端点时return 1;
	//起点为圆弧端点时return 2;
	//起点为鼠标点时return 0;(即鼠标点距离就近的线条端点超过规定的范围)
	//pnt1 为传递的鼠标点坐标,成功则赋值为就近的线条端点坐标,不成功则无意义
	//pnt2 成功则为直线的另一端点或圆弧的圆心,不成功则无意义
	virtual int GetPathStartnode(CPnt& pnt1, CPnt& pnt2)= 0;

	//得到路径的绘制起点
	//pnt1 为传递的鼠标点坐标或给定的起点坐标,
	//id为返回点的ID,
	//pnt为返回点的坐标,angle为返回点的姿态角
	//return FALSE表示无就近点
	//return TRUE表示有就近点
	virtual BOOL GetPathStartnode1(CPnt& pnt1,UINT& id,CPnt& pnt,double& angle){return FALSE;};

	//得到路径的绘制终点
	virtual BOOL GetPathEndnode(CPnt& pnt1)= 0;
	//得到路径的绘制终点
	virtual BOOL GetPathEndnode1(CPnt& pnt1) {return FALSE;};


	//计算路径在某一终点处的终点姿态角
	//pnt为传递的点坐标,angle为返回点的姿态角
	//return FALSE表示给定的点不满足路径方程
	//return TRUE表示给定的点满足路径方程
	virtual BOOL GetEndPostureAngle(CPnt pnt,double& angle){return FALSE;};

	virtual void Move(double x_Move,double y_Move) {};
	virtual char * toData(char *p_Char) {return p_Char;};
	virtual void toChar(char *p_Char){};
	virtual void Draw(CDC* pCDC)= 0;		//画线或图形
	virtual void DragDraw(CDC* pCDC, CPnt& pointDragged) = 0;//动态画线或图形
	virtual void MoveDraw(CDC* pCDC, CPnt& p1,CPnt& p2) = 0;//移动画线或图形
	virtual void DrawSelected(CDC* pCDC, void* pTemp) {};////被选中时以虚线或阴影画线或图形
	virtual void DrawErase(CDC* pCDC, void* pTemp) {};//擦除图形
	virtual void DrawErase1(CDC* pCDC, void* pTemp) {};//擦除图形
	virtual void DrawSpecialNode(CDC* pCDC) {};//显示断点非相切点
	virtual void onup1(CPnt& point1,CPnt& point2,CPnt& point3,CWnd*pWnd)=0;//从属性对话框修改属性后重新画线或图形
	virtual void OnDown(CPnt& pointDown) = 0;//第一次按下左键记录起点坐标
	virtual void OnDown2(CPnt& pointDown) = 0;//第二次按下左键,记录圆弧中间点坐标
	virtual void OnUp(CPnt& pointUp, CWnd* pWnd) = 0;//左键抬起

	virtual BOOL IsHit(CPnt& pointBang) = 0;//是否被选中
	virtual void IsDblClk(void* pTemp1,void* pTemp2) {};//被双击选中
	virtual void GetBoundingRect(double &minx,double &miny,double &maxx,double &maxy) {};//得到边界矩形

	virtual void Serialize(CArchive& ar);//串行化

	void NormalizePoints(CPnt& pointTopLeft, CPnt& pointBottomRight);//使边界矩形为常态矩形
	virtual void Normalize() {};//顶点规格化
//protected:
public:
	//DECLARE_DYNAMIC(CPainted)
	BOOL        m_bReferencePoint;//参考点FALSE表示终点为参考点
	BOOL        m_bSelect;		//TRUE表示图形元素被选中
	BOOL        m_bSelectStartNode;	//TRUE表示图形元素起点被选中
	BOOL        m_bSelectEndNode;	//TRUE表示图形元素终点被选中
	CPnt		m_pointTemp;		//用于保存临时坐标
	CPnt		m_pointPrimary;		//起点坐标
	CPnt		m_p1;//用于移动的起点坐标
	CPnt		m_p2;//用于移动的终点坐标
	COLORREF	m_rgbPrimary;	//线条画刷颜色
	int			m_nWidth;		//线条宽度
	BOOL        m_bhitarc;		//TRUE表示圆弧被选中
	BOOL        m_bFirstMove;		//TRUE表示第一次移动
	UINT		m_uPathId;		//路径ID	
	double		m_fPathLimit;//速度限制
	double		m_fStartHeading;//起点车头方向角(度)
	double		m_fEndHeading;//终点车头方向角(度)
	UINT		m_uPathGuideType;//导航方式
	UINT		m_uPathExtType;//路径扩展类型
	UINT		m_uFigureType;//图形类型
	UINT		m_uPathObstacle;//路径障碍物模式
	UINT		m_uPathHeading;//路径车头方向
	UINT		m_uStartNodeId;//起点ID
	UINT		m_uStartNodeType;//起点类型
	UINT		m_uStartNodeExtType;//起点扩展类型
	UINT		m_uEndNodeId;//终点ID
	UINT		m_uEndNodeType;//终点类型
	UINT		m_uEndNodeExtType;//终点扩展类型
	UINT		m_uEndNodeState;//终点状态0=相切点1=非相切点2=断点
	UINT		m_uStartNodeState;//起点状态0=相切点1=非相切点2=断点
	double		m_StartPostureAngle;//路段起点的姿态角(外射角)
	double		m_EndPostureAngle;//路段终点的姿态角(外射角)
	UINT		m_uObjectType;//地图对象的类型0=路径1=建筑2=设备
	UINT		m_nDeviceId;//设备编号
	UINT		m_nSomeStatus;//图形所处的状态
	UINT		m_nStatusNumber;//设备的状态数量

};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -