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

📄 mshowview.cpp

📁 用VC++开发的一个数控加工的仿真程序。此程序能根据NC代码仿真生成加工轨迹
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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;			    
    
     dc.MoveTo(x,y);
    for(int i=0;i<m_n;i++)
	{  
	if(thread!=1)break;					
	switch (m_G[i])
	{
		case 90:
		
			break;
		case 91:
		
			break;
		case 00:  
            /*
            xpe=m_X[i]-Last_x;
            			ype=m_Y[i]-Last_y;
            			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;
                            
            				CString xp,yp;
            				Sleep(20);
            				xp.Format("%d",(xps+Last_x));
                            yp.Format("%d",(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(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+Last_x+xps,y-(Last_y+yps)); 
            
                            m_pn=i;
            				m_px=xps;
            				m_py=yps; 
            								 
            			}	
            		    Last_x=m_X[i];
                        Last_y=m_Y[i];           
            			break;*/
            
		case 01:   /*line interloation*/			
		    /*
		    xpe=m_X[i]-Last_x;
		    			ype=m_Y[i]-Last_y;*/
			xpe=m_X[i];
			ype=m_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",(xps+Last_x));
                yp.Format("%d",(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+Last_x+xps,y-(Last_y+yps)); 
				
                m_pn=i;
				m_px=xps;
				m_py=yps; 

							   		 
			}
			
			xp.Format("%d",(xps+Last_x));
			yp.Format("%d",(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",(xps+ox));
                yp.Format("%d",(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(ox+xps+x,y-(oy+yps)); 
				m_pn=i;
				m_px=xps;
				m_py=yps;
				
			}

			xp.Format("%d",(xps+ox));
			yp.Format("%d",(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",(xps+ox));
                yp.Format("%d",(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(ox+xps+x,y-(oy+yps));
				m_pn=i;
				m_px=xps;
				m_py=yps;
				
			}

			xp.Format("%d",(xps+ox));
			yp.Format("%d",(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;
				}
	
}
        dc.SelectObject(oldpen);
		newpen.DeleteObject();
thread=0;
start=1;
work=1;
pause=0;
stop=0;
return 0;
}

void CMshowView::OnSenddate() 
{
	// 菜单编译
	GetDocument()->UpdateAllViews(NULL,1);
}

void CMshowView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	
	if(lHint==1)
	{
	  CMshowDoc*pDoc=(CMshowDoc*)GetDocument();
	  
	  m_n=pDoc->CodeNum;
	  for(int i=0;i<m_n;i++)
	  {
          m_M[i]=pDoc->GCode[i].m;   
	      m_F[i]=pDoc->GCode[i].f;
	      m_S[i]=pDoc->GCode[i].s;
//	 	  m_R[i]=pDoc->GCode[i].r;
	      m_K[i]=pDoc->GCode[i].k;
	      m_J[i]=pDoc->GCode[i].j;
	      m_I[i]=pDoc->GCode[i].i;
	      m_Z[i]=pDoc->GCode[i].z;
	      m_Y[i]=pDoc->GCode[i].y;
	      m_X[i]=pDoc->GCode[i].x;
	      m_G[i]=pDoc->GCode[i].g;
	      m_N[i]=pDoc->GCode[i].n;
		
	  }
		AfxMessageBox("编译完成,数据转换成功!");
		Invalidate();
		start=1;
		work=1;
	}
	
	
}
void CMshowView::OnUpdateXY(CCmdUI* pCmdUI)
{
	pCmdUI->Enable(TRUE);
}




BOOL CMshowView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR));
	return true;
	
	//return CView::OnSetCursor(pWnd, nHitTest, message);
}



void CMshowView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CString str;
	CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
	CStatusBar*pStatus=&pFrame->m_wndStatusBar;
	if(pStatus)
	{
		str.Format("实际(%d/%d)",point.x,point.y);
		pStatus->SetPaneText(2,str);
		str.Format("X=%d",(point.x-x));
		pStatus->SetPaneText(3,str);
		str.Format("Y=%d",(y-point.y));
		pStatus->SetPaneText(4,str);
	}
	CView::OnMouseMove(nFlags, point);
}

void CMshowView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
//	m_pdlgbar->Create(this,IDD_DIALOGBAR,CBRS_LEFT,IDD_DIALOGBAR);
}

void CMshowView::OnUpdateStartthread(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
	if(start==0)pCmdUI->Enable(FALSE);
	
}
void CMshowView::OnUpdateStartwork(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(work==0)pCmdUI->Enable(FALSE);
}
void CMshowView::OnUpdatePausethread(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(pause==0)pCmdUI->Enable(FALSE);
}

void CMshowView::OnUpdateStopthread(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(stop==0)pCmdUI->Enable(FALSE);
}





void CMshowView::OnUpdateZB(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(b==1)pCmdUI->SetCheck(TRUE);

}

void CMshowView::OnZB() 
{
	if(b==1)b=0;
	else b=1;
	Invalidate();

	// TODO: Add your command handler code here
	
	
}



void CMshowView::Onpaint()
{	
	CClientDC dc(this);
	CPen newpen;
		CPen *oldpen;
		newpen.CreatePen(PS_SOLID,1,RGB(255,0,0));
		oldpen=dc.SelectObject(&newpen);
int ox=0,oy=0,xps=0,yps=0,xpe=0,ype=0,d=0,Last_x=0,Last_y=0;			    
    
     dc.MoveTo(x,y);
for(int i=1;i<=m_pn;i++)
	{  
					
	switch (m_G[i])
	{
		case 90:
		
			break;
		case 91:
		
			break;
		case 00:  
            
			xpe=m_X[i]-Last_x;
			ype=m_Y[i]-Last_y;
			
			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)
			{	
				if(i==m_pn&&(xps==m_px&&yps==m_py))break;
				d = ( xpe*yps -  xps*ype  );					
				if(d >0)
				{                                           
                   if(xpe>0&&ype>=0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe>=0&&ype<0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe<0&&ype<=0){xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else{yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
                }
                else if(d<0)
                {
                   if(xpe>0&&ype>=0){yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe>=0&&ype<0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe<0&&ype<=0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else{xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
                 }
				else
				{
                   if(xpe>0&&ype>=0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else if(xpe>=0&&ype<0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else if(xpe<0&&ype<=0){xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else{yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
				}					 
			}	
		    Last_x=m_X[i];
            Last_y=m_Y[i];           
			break;
		case 01:   /*line interloation*/
			
		    xpe=m_X[i]-Last_x;
			ype=m_Y[i]-Last_y;
			
			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)
			{							
				d = ( xpe*yps -  xps*ype  );
				if(i==m_pn&&(xps==m_px&&yps==m_py))break;
				if(d >0)
				{                                           
                   if(xpe>0&&ype>=0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe>=0&&ype<0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe<0&&ype<=0){xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else{yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
                }
                else if(d<0)
                {
                   if(xpe>0&&ype>=0){yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe>=0&&ype<0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else if(xpe<0&&ype<=0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
                   else{xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
                }
			    else
				{
                   if(xpe>0&&ype>=0){xps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else if(xpe>=0&&ype<0){yps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else if(xpe<0&&ype<=0){xps--;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));}
				   else{yps++;dc.LineTo(x+Last_x+xps,y-(Last_y+yps));} 
				}					 
			}		
		    Last_x=m_X[i];
            Last_y=m_Y[i];
			break;
		case 02:   /* shun yuan 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;
			
			while(xps!=xpe||yps!=ype)
			{	
				if(i==m_pn&&(xps==m_px&&yps==m_py))break;
				d = ( xps*xps + yps*yps - xpe*xpe - ype*ype );
				if(d >= 0)
				{
				   if(xps>0 && yps>=0) { yps--;dc.LineTo(ox+xps+x,y-(oy+yps)); }
				   else if(xps>=0 && yps<0) { xps--;dc.LineTo(ox+xps+x,y-(oy+yps)); }
				   else if(xps<0 && yps<=0) { yps++ ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else{ xps++ ; dc.LineTo(ox+xps+x,y-(oy+yps)); }
				}
				else
				{
				   if(xps>=0 && yps>0) { xps++ ; dc.LineTo(ox+xps+x,y-(oy+yps));}
	   			   else if(xps>0 && yps<=0) { yps-- ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else if(xps<=0 && yps<0) { xps-- ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else { yps++ ; dc.LineTo(ox+xps+x,y-(oy+yps)); }
				}
			}
			Last_x=m_X[i];
            Last_y=m_Y[i];
			break;
		case 03:   /* ni yuan 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;
			
			while(xps!=xpe||yps!=ype)
			{	
				if(i==m_pn&&(xps==m_px&&yps==m_py))break;
				d = ( xps*xps + yps*yps - xpe*xpe - ype*ype );
				if(d >= 0)
				{
				   if(xps>0 && yps>=0) { xps--;dc.LineTo(ox+xps+x,y-(oy+yps)); }
				   else if(xps>=0 && yps<0) { yps++;dc.LineTo(ox+xps+x,y-(oy+yps)); }
				   else if(xps<0 && yps<=0) { xps++ ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else { yps-- ; dc.LineTo(ox+xps+x,y-(oy+yps)); }
				}
				else
				{
				   if(xps>0 && yps>=0) { yps++ ; dc.LineTo(ox+xps+x,y-(oy+yps));}
	   			   else if(xps>=0 && yps<0) { xps++ ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else if(xps<0 && yps<=0) { yps-- ; dc.LineTo(ox+xps+x,y-(oy+yps));}
				   else { xps-- ; dc.LineTo(ox+xps+x,y-(oy+yps)); }
				}
			}
			Last_x=m_X[i];
            Last_y=m_Y[i];
			break;
		case 04:  /*pause*/
		
			break;
		
		default:
			break;
				}
}
dc.SelectObject(oldpen);
newpen.DeleteObject();
}




void CMshowView::OnButtonSim() 
{
	// TODO: Add your control notification handler code here
	CMshowDoc*pDoc=(CMshowDoc*)GetDocument();
	
	m_n=pDoc->CodeNum;
	for(int i=0;i<m_n;i++)
	{
		m_M[i]=pDoc->GCode[i].m;   
		m_F[i]=pDoc->GCode[i].f;
		m_S[i]=pDoc->GCode[i].s;
		//	 	  m_R[i]=pDoc->GCode[i].r;
		m_K[i]=pDoc->GCode[i].k;
		m_J[i]=pDoc->GCode[i].j;
		m_I[i]=pDoc->GCode[i].i;
		m_Z[i]=pDoc->GCode[i].z;
		m_Y[i]=pDoc->GCode[i].y;
		m_X[i]=pDoc->GCode[i].x;
		m_G[i]=pDoc->GCode[i].g;
		m_N[i]=pDoc->GCode[i].n;
		
	}

	(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar).GetDlgItem(IDC_STATIC_SIM)->SetWindowText("建立");

	Invalidate();
	start=1;
	work=1;


	
}

⌨️ 快捷键说明

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