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

📄 mshowview.cpp

📁 数控译码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -