📄 mshowview.cpp
字号:
// MshowView.cpp : implementation of the CMshowView class
//
#include "stdafx.h"
#include "Mshow.h"
#include "MshowDoc.h"
#include "MshowView.h"
#include "MainFrm.h"
#include "drive.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define CodeMax 50
volatile int a;
volatile int thread;
volatile int pthread;
volatile int work;
volatile int start;
volatile int pause;
volatile int stop;
volatile int m_w;
int x=100;
int y=300;
int b=1;
int m_pn;
int m_px;
int m_py;
int m_M[CodeMax];
int m_F[CodeMax];
int m_S[CodeMax];
//int m_R[CodeMax];
int m_K[CodeMax];
int m_J[CodeMax];
int m_I[CodeMax];
int m_Z[CodeMax];
int m_Y[CodeMax];
int m_X[CodeMax];
int m_G[CodeMax];
int m_N[CodeMax];
volatile int m_n;
/////////////////////////////////////////////////////////////////////////////
// CMshowView
IMPLEMENT_DYNCREATE(CMshowView, CView)
BEGIN_MESSAGE_MAP(CMshowView, CView)
//{{AFX_MSG_MAP(CMshowView)
ON_UPDATE_COMMAND_UI(ID_TRUEXY,OnUpdateXY)
ON_COMMAND(ID_STARTTHREAD, OnStartthread)
ON_COMMAND(ID_STOPTHREAD, OnStopthread)
ON_COMMAND(ID_PAUSETHREAD, OnPausethread)
ON_COMMAND(ID_SENDDATE, OnSenddate)
ON_WM_SETCURSOR()
ON_WM_MOUSEMOVE()
ON_UPDATE_COMMAND_UI(ID_STARTTHREAD, OnUpdateStartthread)
ON_UPDATE_COMMAND_UI(ID_PAUSETHREAD, OnUpdatePausethread)
ON_UPDATE_COMMAND_UI(ID_STOPTHREAD, OnUpdateStopthread)
ON_UPDATE_COMMAND_UI(ID_XY, OnUpdateZB)
ON_COMMAND(ID_XY, OnZB)
ON_COMMAND(ID_STARTWORK, OnStartwork)
ON_UPDATE_COMMAND_UI(ID_STARTWORK, OnUpdateStartwork)
ON_BN_CLICKED(IDC_BUTTON_SIM, OnButtonSim)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMshowView construction/destruction
CMshowView::CMshowView()
{
// TODO: add construction code here
m_pnewthread = NULL;
}
CMshowView::~CMshowView()
{
}
BOOL CMshowView::PreCreateWindow(CREATESTRUCT& cs) //绘图的界面
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.lpszClass=AfxRegisterWndClass(
CS_HREDRAW|CS_VREDRAW,
0,
(HBRUSH)::GetStockObject(BLACK_BRUSH),
0);
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMshowView drawing
void CMshowView::OnDraw(CDC* pDC)
{
CMshowDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(b==1)
{
CPen newpen;
CPen *oldpen;
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x,0);
pDC->LineTo(x,600);
pDC->MoveTo(0,y);
pDC->LineTo(600,y);
/*
//缩短型刀补 直线接直线
pDC->MoveTo(x,y);
pDC->LineTo(x+80,y-80);
pDC->LineTo(x+160,y-120);
pDC->LineTo(x+240,y-80);
pDC->LineTo(x+320,y);
pDC->LineTo(x+300,y-(-40));
float r1,r2;
int xs,ys;
pDC->Arc(10,90,110,190,110,140,10,140);
int tr = 20;
float x1,y1,x2,y2;
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
xs = (int)(80 + tr * 40/r1);
ys = (int)(80 - tr *80/r1);
pDC->MoveTo(x,y);
pDC->LineTo(x+xs,y-ys);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,255));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
pDC->LineTo(x+80,y-80);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
float tmp0,tmp1,tmp2;
char bf[40];
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
r2 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
x1 = 80; y1 = 40;
x2 = 80; y2 = -40;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
pDC->LineTo(x+(int)(160+tmp1),y-(int)(120 -tmp2) );
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
r2 = sqrt(80.0 * 80.0 + 80.0 * 80.0);
x1 = 80; y1 = -40;
x2 = 80; y2 = -80;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
pDC->LineTo(x+(int)(240+tmp1),y-(int)(80 -tmp2) );
r1 = sqrt(80.0 * 80.0 + 80.0 * 80.0);
xs = (int)(320 + tr * (-80)/r1);
ys = (int)(0 - tr *80/r1);
pDC->LineTo(x+xs,y-ys);
pDC->LineTo(x+300,y-(-40));*/
/*
//缩短型 直线接圆弧 圆弧接直线
pDC->MoveTo(x,y);
pDC->LineTo(x+80,y-80);
pDC->LineTo(x+160,y-120);
pDC->Arc(x+80,y-120,x+240,y-(-40),x+240,y-40,x+160,y-120);
pDC->MoveTo(x+240,y-40);
//pDC->LineTo(x+240,y-80);
pDC->LineTo(x+230,y);
pDC->LineTo(x+210,y-(-40));
float r1,r2;
int xs,ys;
int tr = 20;
float x1,y1,x2,y2;
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
xs = (int)(80 + tr * 40/r1);
ys = (int)(80 - tr *80/r1);
pDC->MoveTo(x,y);
pDC->LineTo(x+xs,y-ys);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,255));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
pDC->LineTo(x+80,y-80);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
float tmp0,tmp1,tmp2;
char bf[40];
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
r2 = sqrt(80.0 * 80.0 + 0.0 * 0.0);
x1 = 80; y1 = 40;x2 = 80; y2 = 0;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
float tmp3,tmp4;
pDC->LineTo(x+(int)(160+tmp1),y-(int)(120 -tmp2) );
tmp3 =160+tmp1; tmp4 = 120 -tmp2;
//圆弧段
r1 = sqrt(0.0 * 0.0 + 80.0 * 80.0);
r2 = sqrt(10.0 * 10.0 + 40.0 * 40.0);
x1 = 0; y1 = -80;
x2 = -10; y2 = -40;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
pDC->Arc(x+80+tr,y-(120-tr),x+240-tr,y-(-40+tr),x+(int)(240+tmp1),y-(int)(40 -tmp2),x+(int)tmp3,y-(int)tmp4);
//pDC->LineTo(x+(int)(240+tmp1),y-(int)(40 -tmp2) );
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,255));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+(int)(240+tmp1),y-(int)(40 -tmp2));
pDC->LineTo(x+240,y-40);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
r1 = sqrt(10.0 * 10.0 + 40.0 * 40.0);
xs = (int)(230 + tr * (-40)/r1);
ys = (int)(0 - tr *(-10)/r1);
pDC->MoveTo(x+(int)(240+tmp1),y-(int)(40 -tmp2));
//char bf[40];
sprintf(bf," %f %f ",tmp1,tmp2);
AfxMessageBox(bf);
pDC->LineTo(x+xs,y-ys);
pDC->LineTo(x+210,y-(-40));
*/
//缩短型 + 圆弧过渡型刀补 直线接直线
pDC->MoveTo(x,y);
pDC->LineTo(x+80,y-80);
pDC->LineTo(x+120,y-60);
pDC->LineTo(x+160,y-120);
pDC->LineTo(x+240,y-80);
pDC->LineTo(x+320,y);
pDC->LineTo(x+300,y-(-40));
float r1,r2;
int xs,ys;
pDC->Arc(10,90,110,190,110,140,10,140);
int tr = 20;
float x1,y1,x2,y2;
r1 = sqrt(40.0 * 40.0 + 20.0 * 20.0);
xs = (int)(80 + tr * (-20)/r1);
ys = (int)(80 - tr *40/r1);
pDC->MoveTo(x,y);
pDC->LineTo(x+xs,y-ys);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,255));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
pDC->LineTo(x+80,y-80);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs,y-ys);
float tmp0,tmp1,tmp2;
char bf[40];
r1 = sqrt(40.0 * 40.0 + 20.0 * 20.0);
r2 = sqrt(40.0 *40.0 + 60.0 * 60.0);
x1 = 40; y1 = -20;
x2 = 40; y2 = 60;
int xs1,xs2,ys1,ys2;
xs1 = (int)(120 + tr * y1 / r1);
ys1 = (int)(60 - tr * x1 / r1);
xs2 = (int)(120 + tr * y2 / r2);
ys2 = (int)(60 - tr * x2 /r2);
pDC->LineTo(x+xs1,y-ys1);
pDC->ArcTo(x+120 -tr,y-(60+tr),x+120+tr,y-(60-tr),x+xs1,y-ys1,x+xs2,y-ys2 );
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,255));
oldpen=pDC->SelectObject(&newpen);
// pDC->MoveTo(x+xs1,y-ys1);
// pDC->LineTo(x+120,y-60);
// pDC->LineTo(x+xs2,y-ys2);
newpen.DeleteObject();
newpen.CreatePen(PS_SOLID,1,RGB(0,255,0));
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(x+xs2,y-ys2);
r1 = sqrt(40.0 * 40.0 + 60.0 * 60.0);
r2 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
x1 = 40; y1 = 60;
x2 = 80; y2 = -40;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
pDC->LineTo(x+(int)(160+tmp1),y-(int)(120 -tmp2) );
r1 = sqrt(80.0 * 80.0 + 40.0 * 40.0);
r2 = sqrt(80.0 * 80.0 + 80.0 * 80.0);
x1 = 80; y1 = -40;
x2 = 80; y2 = -80;
tmp0 = (1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp1 = tr *(y1/r1+y2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
tmp2 = tr *(x1/r1+x2/r2) /(1+ x1 * x2/r1/r2 + y1 * y2/r1/r2);
pDC->LineTo(x+(int)(240+tmp1),y-(int)(80 -tmp2) );
r1 = sqrt(80.0 * 80.0 + 80.0 * 80.0);
xs = (int)(320 + tr * (-80)/r1);
ys = (int)(0 - tr *80/r1);
pDC->LineTo(x+xs,y-ys);
pDC->LineTo(x+300,y-(-40));
pDC->SelectObject(oldpen);
newpen.DeleteObject();
}
if(start==1||pause==1||stop==1)
{
Onpaint();
}
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CMshowView diagnostics
#ifdef _DEBUG
void CMshowView::AssertValid() const
{
CView::AssertValid();
}
void CMshowView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMshowDoc* CMshowView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMshowDoc)));
return (CMshowDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMshowView message handlers
void CMshowView::OnStartthread() //线程开始
{
thread=1;
work=0;
start=0;
pause=1;
stop=1;
m_w=1;
if(pthread==1)
{
pthread=0;
}
else
{
m_pn=0;
m_pdlgbar = &(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar);
m_pnewthread = AfxBeginThread(ThreadProc,this,THREAD_PRIORITY_NORMAL);
}
Invalidate();
}
void CMshowView::OnStartwork()
{
thread=1;
work=0;
start=0;
pause=1;
stop=1;
m_w=1;
if(pthread==1)
{
pthread=0;
}
else
{
m_pn=0;
m_pdlgbar = &(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar);
m_pnewthread = AfxBeginThread(ThreadProc,this,THREAD_PRIORITY_NORMAL);
}
Invalidate();
}
void CMshowView::OnStopthread() //线程结束
{
thread=0;
start=1;
work=1;
pause=0;
stop=0;
pthread=0;
}
void CMshowView::OnPausethread() //线程暂停(挂起)
{
// if(m_w==1)
// {start=1;}
// else
// {work=1;}
// pause=0;
// stop=1;
// pthread=1;
if (pthread==0)
{
m_pnewthread->SuspendThread();
pthread=1;
}
else
{
m_pnewthread->ResumeThread();
pthread=0;
}
}
UINT ThreadProc(LPVOID param) //画线模拟线程
{
ASSERT(param);
CMshowView *pMshowview = (CMshowView*)param;
CString xp,yp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -