📄 line.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 + -