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

📄 line.h

📁 这是书上的代码
💻 H
字号:

// line.h : interface of the CPaintLine class
//
/////////////////////////////////////////////////////////////////////////////
//画直线类头文件
#ifndef __CCPaintLineinterfaceyhh
#define __CCPaintLineinterfaceyhh
class CPaintLine : public CPainted
{
public:
	virtual void Init(CPath* pPath);
	char * toData(char *p_Char);
	void toChar(char *p_Char);
	//返回路段给定端点的姿态角(外射角)
	virtual double ReturnPostureAngle(UINT id);
	virtual void GetPostureAngle();//计算得到路段的姿态角(外射角)
	//就近点判断函数,pnt1为鼠标点坐标,id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的起点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge1(CPnt pnt1,UINT& id,CPnt& pnt,double& angle);
	//就近点判断函数,	
	//pnt1为鼠标点坐标或计算得到的准终点坐标,
	//id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的终点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge2(CPnt pnt1,UINT& id,CPnt& pnt,double& angle);
	//计算路径在某一终点处的终点姿态角
	//pnt为传递的点坐标,angle为返回点的姿态角
	//return FALSE表示给定的点不满足路径方程
	//return TRUE表示给定的点满足路径方程
	virtual BOOL GetEndPostureAngle(CPnt pnt,double& angle);
	double Distance1(double x1,double y1,double x2,double y2);
	void Move(double x_Move,double y_Move);
    CPaintLine();
	CPnt returnattr1();//返回起点坐标
	CPnt returnattr2();//返回终点坐标
	void ChangeOrigin(CPnt pnt);//改变坐标原点
  	void Draw(CDC* pCDC);//画直线
	void DragDraw(CDC* pCDC, CPnt& pointDragged);//动态画直线
	void MoveDraw(CDC* pCDC, CPnt& p1,CPnt& p2);//移动画线或图形
	void DrawSelected(CDC* pCDC, void* pTemp);//直线被选中时以虚线直线
	void DrawErase(CDC* pCDC, void* pTemp);//擦除图形
	void DrawErase1(CDC* pCDC, void* pTemp);//擦除图形
	void DrawSpecialNode(CDC* pCDC);//显示断点非相切点
	void OnDown2(CPnt& pointDown);
	void OnDown(CPnt& pointDown);//第一次按下左键
	void OnUp(CPnt& pointUp, CWnd* pWnd);//左键抬起
	void onup1(CPnt& point1,CPnt& point2,CPnt& point3,CWnd*pWnd);	//从直线属性对话框修改属性后重新画直线
	BOOL IsHit(CPnt& pointBang);//是否被双击选中
	virtual void IsDblClk(void* pTemp1,void* pTemp2);//被双击选中

	UINT IsHit1(CPnt& pointBang);//端点是否被选中
	void Serialize(CArchive& ar);//串行化
	void GetBoundingRect(double &minx,double &miny,double &maxx,double &maxy);	//得到边界矩形
	//得到路径的绘制起点
	virtual int GetPathStartnode(CPnt& pnt1, CPnt& pnt2);
	//得到路径的绘制起点
	//pnt1 为传递的鼠标点坐标或给定的起点坐标,
	//id为返回点的ID,
	//pnt为返回点的坐标,angle为返回点的姿态角
	//return FALSE表示无就近点
	//return TRUE表示有就近点
	virtual BOOL GetPathStartnode1(CPnt& pnt1,UINT& id,CPnt& pnt,double& angle);
	//得到路径的绘制终点
	virtual BOOL GetPathEndnode(CPnt& pnt1);
	//得到路径的绘制终点
	virtual BOOL GetPathEndnode1(CPnt& pnt1);

public:
	void Calculate(CPnt& pnt);
	void IsDblClkDevice(void* pTemp1,void* pTemp2);
	void IsDblClkBuilding(void* pTemp1,void* pTemp2);
	void IsDblClkPath(void* pTemp1,void* pTemp2);
	CPaintobjDoc* m_pDoc;

protected:
	DECLARE_SERIAL(CPaintLine)
	
	CPnt m_pointEnd;//终点坐标	
	double m_flength;//直线长度
	double m_fangle;//直线角度
	int m_bpointEndControl;//终点坐标控制	
};

//画弧类头文件

class CPaintArc : public CPainted
{
public:
	virtual void Init(CPath* pPath);
	//返回路段给定端点的姿态角(外射角)
	virtual double ReturnPostureAngle(UINT id);
	virtual void GetPostureAngle();//计算得到路段的姿态角(外射角)
	//就近点判断函数,pnt1为鼠标点坐标,id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的起点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge1(CPnt pnt1,UINT& id,CPnt& pnt,double& angle);
	//就近点判断函数,	
	//pnt1为鼠标点坐标或计算得到的准终点坐标,
	//id为返回点的ID,pnt为返回点的坐标,angle为返回点的姿态角
	//此函数只用于得到路径的终点!!
	//返回值为TRUE表示有就近点,FALSE表示无就近点
	virtual BOOL NearJudge2(CPnt pnt1,UINT& id,CPnt& pnt,double& angle);
	void Move(double x_Move,double y_Move);
	char * toData(char *p_Char);
	void toChar(char *p_Char);
	BOOL Calculate(CPnt& point);//拖动画弧时计算圆弧各元素
	BOOL Calculate1(CPnt& point);//改变圆弧各元素后进行重新计算
    CPaintArc();
	CPnt returnattr1();			//返回起点坐标
	CPnt returnattr2();			//返回终点坐标	
	CPnt returncirclecenter();	//返回圆心坐标
	double returnradius();			//返回半径
	void ChangeOrigin(CPnt pnt);//改变坐标原点
  	void Draw(CDC* pCDC);							//画弧
	void DrawErase1(CDC* pCDC, void* pTemp);//擦除图形
	void DrawErase(CDC* pCDC, void* pTemp);//擦除图形
	void DrawSpecialNode(CDC* pCDC);//显示断点非相切点
	void DragDraw(CDC* pCDC, CPnt& pointDragged);//动态画弧
	void DragDrawCircle(CDC* pCDC, CPnt& pnt,CPaintobjDoc* pDoc);//动态显示半径和圆弧所在的圆

	void MoveDraw(CDC* pCDC, CPnt& p1,CPnt& p2);//移动画线或图形
	void DrawSelected(CDC* pCDC, void* pTemp);					//圆弧被选中时以虚线画弧
	void OnDown(CPnt& pointDown);					//第一次按下左键
	void OnDown2(CPnt& pointDown);				//第二次按下左键,记录圆弧中间点坐标
	void OnUp(CPnt& pointUp, CWnd* pWnd);			//左键抬起
	void onup1(CPnt& point1,CPnt& point2,CPnt& point3,CWnd*pWnd);	//从圆弧属性对话框修改属性后重新画弧
	BOOL IsHit(CPnt& pointBang);			//是否被双击选中
	virtual void IsDblClk(void* pTemp1,void* pTemp2);//被双击选中
	UINT IsHit1(CPnt& pointBang);//端点是否被选中
	void Serialize(CArchive& ar);					//串行化
	void GetBoundingRect(double &minx,double &miny,double &maxx,double &maxy);				//得到边界矩形

	//得到路径的绘制起点
	//pnt1 为传递的鼠标点坐标或给定的起点坐标,
	//id为返回点的ID,
	//pnt为返回点的坐标,angle为返回点的姿态角
	//return FALSE表示无就近点
	//return TRUE表示有就近点
	virtual BOOL GetPathStartnode1(CPnt& pnt1,UINT& id,CPnt& pnt,double& angle);
	//得到路径的绘制终点
	virtual BOOL GetPathEndnode(CPnt& pnt1);
	//得到路径的绘制终点
	virtual BOOL GetPathEndnode1(CPnt& pnt1);
	//得到路径的绘制起点
	virtual int GetPathStartnode(CPnt& pnt1, CPnt& pnt2);
	
	//得到圆弧路径的圆心
	int GetArcCirclecenter(CPnt& pnt1,CPaintobjDoc* pDoc);
	//得到圆弧路径的圆心
	int GetArcCirclecenter1(CPnt& pnt1,CPaintobjDoc* pDoc);
	void JoinTwolines(CPaintobjDoc* pDoc);//给定两直线用圆弧连接
	void JoinTwolines1(CPaintobjDoc* pDoc);//给定两直线用圆弧连接
	void GetArcType();//自动计算得到圆弧的类型1--spp 2--spline

public:	
	void IsDblClkDevice(void* pTemp1,void* pTemp2);
	void IsDblClkBuilding(void* pTemp1,void* pTemp2);
	void IsDblClkPath(void* pTemp1,void* pTemp2);
	CPaintobjDoc* m_pDoc;

protected:
	DECLARE_SERIAL(CPaintArc)	
	double	 m_nr;				//圆半径
	double	 m_Angle1;				//起始弧度
	double	 m_Angle2;				//结束弧度
	CPnt m_pupperleft;	//边界矩形左上角	
	CPnt m_plowerright;	//边界矩形右下角								
	CPnt m_pointEnd;		//终点坐标
	CPnt m_pcirclecenter;	//圆心坐标
	UINT m_uArcPathDirection;//圆弧方向0==anticlockwise
	int m_nArcType;//圆弧类型1--spp 2--spline 6--arc

	CPnt m_pcirclecenter2;	//用于移动的圆心坐标
	CPnt m_pdiscirclecenter;	//用于显示的圆心坐标	
	int m_ncirclecenterControl;//圆心坐标控制
	CPnt m_pupperleft2;	//用于移动的边界矩形左上角	
	CPnt m_plowerright2;//用于移动的边界矩形右下角
	
	BOOL m_TheFirst;
};
#endif

⌨️ 快捷键说明

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