?? 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"
#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 done;
volatile int m_w;
int x_sys=100;
int y_sys=300;
int z_sys=0;
/*
int x=100+DUIDAOX;
int y=300+DUIDAOY;
int z=0+DUIDAOZ;*/
int x=100;
int y=300;
int z=0;
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];
bool m_gflag[CodeMax];
volatile int m_n;
//for 刀補仿真
int pn;
int px;
int py;
int M[CodeMax];
int F[CodeMax];
int S[CodeMax];
//int R[CodeMax];
int K[CodeMax];
int J[CodeMax];
int I[CodeMax];
int Z[CodeMax];
int Y[CodeMax];
int X[CodeMax];
int G[CodeMax];
//int N[CodeMax];
bool gflag[CodeMax];
volatile int 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_sys,0);
pDC->LineTo(x_sys,600);
pDC->MoveTo(0,y_sys);
pDC->LineTo(600,y_sys);
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;
CClientDC dc(pMshowview);
CPen newpen;
CPen *oldpen;
newpen.CreatePen(PS_SOLID,1,RGB(0,0,255));
oldpen=dc.SelectObject(&newpen);
//int nID=pMshowview->m_pdlgbar->GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);
//if(nID=IDC_RADIO1)
//{AfxMessageBox("1");}
int ox=0,oy=0,xps=0,yps=0,xpe=0,ype=0,d=0,Last_x=0,Last_y=0;
int Datumx = DUIDAOX,Datumy = DUIDAOY, Datumz = DUIDAOZ;
dc.MoveTo(x+Datumx,y-Datumy);
for(int i=0;i<m_n;i++)
{
if(thread!=1)break;
if (m_gflag[i] == 0 )
continue;
switch (m_G[i])
{
case 90:
break;
case 91:
break;
case 00:
case 01: /*line interloation*/
xpe=m_X[i];
ype=m_Y[i];
xps = yps = 0;
dc.LineTo(x+Datumx+Last_x+xpe,y-(Datumy+Last_y+ype));
/*
// if(xpe>0&&ype>=0){xps=1;yps=0;}
// else if(xpe>=0&&ype<0){xps=0;yps=-1;}
// else if(xpe<0&&ype<=0){xps=-1;yps=0;}
// else{xps=0;yps=1;};
//
while(xps!=xpe||yps!=ype)
{
while(pthread==1)
{
if(thread!=1)break;
};
if(thread!=1)break;
xp.Format("%d",(Datumx + xps+Last_x));
yp.Format("%d",(Datumy + yps+Last_y));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
d = ( xpe*yps - xps*ype );
if(m_G[i] = 01) Sleep(20);
if(d >= 0)
{
if(xpe>0&&ype>=0) xps++;
else if(xpe>=0&&ype<0) yps--;
else if(xpe<0&&ype<=0) xps--;
else yps++;
}
else
{
if(xpe>0&&ype>=0) yps++;
else if(xpe>=0&&ype<0) xps++;
else if(xpe<0&&ype<=0) yps--;
else xps--;
}
dc.LineTo(x+Datumx+Last_x+xps,y-(Datumy+Last_y+yps));
m_pn=i;
m_px=xps;
m_py=yps;
}
*/
xp.Format("%d",(Datumx + xps+Last_x));
yp.Format("%d",(Datumy + yps+Last_y));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
Last_x+=m_X[i];
Last_y+=m_Y[i];
break;
case 02: /* CW */
/*
ox=Last_x+m_I[i];
oy=Last_y+m_J[i];
xps=Last_x-ox;
yps=Last_y-oy;
xpe=m_X[i]-ox;
ype=m_Y[i]-oy;*/
ox=Last_x+m_I[i];
oy=Last_y+m_J[i];
xps=-m_I[i];
yps=-m_J[i];
xpe=m_X[i]-m_I[i];
ype=m_Y[i]-m_J[i];
while(xps!=xpe||yps!=ype)
{
while(pthread==1)
{
if(thread!=1)break;
};
if(thread!=1)break;
xp.Format("%d",(Datumx+xps+ox));
yp.Format("%d",(Datumy+yps+oy));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
Sleep(20);
d = ( xps*xps + yps*yps - xpe*xpe - ype*ype );
if(d >= 0)
{
if(xps>0 && yps>=0) yps--;
else if(xps>=0 && yps<0) xps--;
else if(xps<0 && yps<=0) yps++;
else xps++;
}
else
{
if(xps>=0 && yps>0) xps++;
else if(xps>0 && yps<=0) yps--;
else if(xps<=0 && yps<0) xps--;
else yps++;
}
dc.LineTo(x+Datumx+xps+ox,y-(Datumy+oy+yps));
m_pn=i;
m_px=xps;
m_py=yps;
}
xp.Format("%d",(Datumx+xps+ox));
yp.Format("%d",(Datumy+yps+oy));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
Last_x+=m_X[i];
Last_y+=m_Y[i];
break;
case 03: /* CCW */
/*
ox=Last_x+m_I[i];
oy=Last_y+m_J[i];
xps=Last_x-ox;
yps=Last_y-oy;
xpe=m_X[i]-ox;
ype=m_Y[i]-oy;*/
ox=Last_x+m_I[i];
oy=Last_y+m_J[i];
xps=-m_I[i];
yps=-m_J[i];
xpe=m_X[i]-m_I[i];
ype=m_Y[i]-m_J[i];
while(xps!=xpe||yps!=ype)
{
while(pthread==1)
{
if(thread!=1)break;
};
if(thread!=1)break;
xp.Format("%d",(Datumx+xps+ox));
yp.Format("%d",(Datumy+yps+oy));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
Sleep(20);
d = ( xps*xps + yps*yps - xpe*xpe - ype*ype );
if(d >= 0)
{
if(xps>0 && yps>=0) xps--;
else if(xps>=0 && yps<0) yps++;
else if(xps<0 && yps<=0) xps++;
else yps--;
}
else
{
if(xps>0 && yps>=0) yps++;
else if(xps>=0 && yps<0) xps++;
else if(xps<0 && yps<=0) yps--;
else xps--;
}
dc.LineTo(x+Datumx+xps+ox,y-(Datumy+oy+yps));
m_pn=i;
m_px=xps;
m_py=yps;
}
xp.Format("%d",(Datumx+xps+ox));
yp.Format("%d",(Datumy+yps+oy));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
Last_x+=m_X[i];
Last_y+=m_Y[i];
break;
case 04: /*pause*/
break;
default:
break;
}
}
//for 刀補
ox=0,oy=0,xps=0,yps=0,xpe=0,ype=0,d=0,Last_x=0,Last_y=0;
Datumx = DUIDAOX,Datumy = DUIDAOY, Datumz = DUIDAOZ;
dc.MoveTo(x+Datumx,y-Datumy);
int i;
for( i=0;i<n;i++)
{
if(thread!=1)break;
if (gflag[i] == 0 )
continue;
switch (G[i])
{
case 90:
break;
case 91:
break;
case 00:
case 01: /*line interloation*/
xpe=X[i];
ype=Y[i];
xps = yps = 0;
/*
if(xpe>0&&ype>=0){xps=1;yps=0;}
else if(xpe>=0&&ype<0){xps=0;yps=-1;}
else if(xpe<0&&ype<=0){xps=-1;yps=0;}
else{xps=0;yps=1;};
*/
while(xps!=xpe||yps!=ype)
{
while(pthread==1)
{
if(thread!=1)break;
};
if(thread!=1)break;
xp.Format("%d",(Datumx + xps+Last_x));
yp.Format("%d",(Datumy + yps+Last_y));
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC1)->SetWindowText(xp);
pMshowview->m_pdlgbar->GetDlgItem(IDC_STATIC2)->SetWindowText(yp);
d = ( xpe*yps - xps*ype );
if(G[i] = 01) Sleep(20);
if(d >= 0)
{
if(xpe>0&&ype>=0) xps++;
else if(xpe>=0&&ype<0) yps--;
else if(xpe<0&&ype<=0) xps--;
else yps++;
}
else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -