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

📄 mshowdoc.cpp

📁 数控译码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MshowDoc.cpp : implementation of the CMshowDoc class
//

#include "stdafx.h"
#include "Mshow.h"

#include "MainFrm.h"
#include "MshowDoc.h"
#include "MshowView.h"

#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMshowDoc

IMPLEMENT_DYNCREATE(CMshowDoc, CDocument)

BEGIN_MESSAGE_MAP(CMshowDoc, CDocument)
	//{{AFX_MSG_MAP(CMshowDoc)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMshowDoc construction/destruction

CMshowDoc::CMshowDoc()
{
	// TODO: add one-time construction code here
	Init();
	
}

CMshowDoc::~CMshowDoc()
{
}

BOOL CMshowDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CMshowDoc serialization

void CMshowDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CMshowDoc diagnostics

#ifdef _DEBUG
void CMshowDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CMshowDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMshowDoc commands

void CMshowDoc::OnFileOpen() 
{
	
	CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为SAVE AS对话框
    
	
	if(dlg.DoModal()==IDOK)
	{
		int listindex;
		listindex = ((CListBox *)(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar.GetDlgItem(IDC_LIST)))->GetCount();
		if (listindex) 
		{
			for(int i=0;i<listindex;i++)
				((CListBox *)(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar.GetDlgItem(IDC_LIST)))->DeleteString(i);
		}


		(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar).GetDlgItem(IDC_STATIC_SIM)->SetWindowText("未建立");
       FileName=dlg.GetFileName();
       fp=fopen(FileName,"r");
	   Read();
	   fclose(fp);
	   List();
	}
}
int CMshowDoc::Read()
{  
//	char cha;
	
	
	
	int SectErr = 0,SenErr = 0;

	char GSen[50];

	char * pGSen;

	
	CodeNum=-1;

	Init();

	do 
	{
		pGSen = fgets(GSen,50,fp);

		if (pGSen == NULL)			
			break;
	
		SectErr = CheckSect(GSen);
		if ( SectErr != 0)
		{
			AfxMessageBox(bf);
			return 1;
		}


		SenErr = CheckSen(GSen);
		if ( SenErr != 0)
		{
			sprintf(bf,"Line %d  Error",CodeLine+1);
			AfxMessageBox(bf);
			return 1;
		}

		SenErr = CutComp();
		if ( SenErr != 0)
		{
			AfxMessageBox(bf);
			return 1;
		}


		
	} while(pGSen != NULL);



    

	CodeNum +=1;

	return 0;
}

int CMshowDoc::CheckSect( char* GSen)
{
	int  fd=0;

	char gsen;

	
	for (int i = 0;GSen[i];i++)
	{
		gsen = GSen[i];
		
		switch (GSen[i])
		{
			case 'n':
			case 'N':
				if (nflag ==1)
				{
					sprintf(bf,"Line %d N error",CodeLine+1);
					return 1;
				}
				nflag = 1;
				CodeNum+=1;


				fd = atoi(&GSen[i+1]);

				if (fd<0||fd>999)
				{
					sprintf(bf,"Line %d N error",CodeLine+1);
					return 1;
				}
				NNow = fd;
				 break;

			case 't':
			case 'T':
				tflag = 1;

				fd = atoi(&GSen[i+1]);
				
				if (fd<0||fd>8)
				{
					sprintf(bf,"Line %d T error",CodeLine+1);
					return 1;
				}

				switch(fd)
				{
				case 1:
					Tr = 20;
					break;

				case 2:
				case 3:
				case 4:
				case 5:
				case 6:
				case 7:
				case 8:
					break;

				}
				break;



				

			case 'g':
			case 'G':
				if (GSen[i+1]<'0' || GSen[i+1] >'9')
				{
					sprintf(bf,"Line %d G error",CodeLine+1);
					return 1;
				}

				fd = atoi(&GSen[i+1]);
				if (fd<0||fd>99)
				{
					sprintf(bf,"Line %d G error",CodeLine+1);
					return 1;
				}
				switch (fd)
				{
					
					case 90:
						G91Sign=0;	//absolute
						break;
					case 91:
						G91Sign=1;  //relate
						break;

					case 92:
						G92flag = 1;
						break;

					case 31:
						G31flag = 1;

						G31x = datumx;
						G31y = datumy;
						G31z = datumz;
						break;

					case 32:
						if (G31flag == 0)
						{
							sprintf(bf,"Line %d ",CodeLine+1);
							return 1;
						}
						datumx = G31x;
						datumy = G31y;
						datumz = G31z;
						G31flag = 0;
						break;

					case 53:
						datumx = G53x;
						datumy = G53y;
						datumz = G53z;
						break;


					case 41:
						G40Sign = 1;
						break;
					
					case 42:
						G40Sign = 2;
						break;

					case 40:
						if (G40Sign == 3)
							G40Sign = 5;
						else if (G40Sign == 4)
							G40Sign = 6;
						else
						{
							sprintf(bf,"Line %d G40 error",CodeLine+1);
							return 1;
						}
						break;

						
					case 00:   /*line fastmove*/		
					case 01:   /*line interloation*/
					case 02:   /* CW */
					case 03:   /* CCW */
						if (GCodeNow.gflag == 1)
						{
							sprintf(bf,"Line %d G error",CodeLine+1);
							return 1;
						}
						GSim[CodeNum].gflag = 1;
						GSim[CodeNum].g=fd;

						GCodeNow.gflag = 1;
						GCodeNow.g=fd;
						
						
						G00Sign = fd;

						break;				
					
					default:
						break;
				}
				 break;

			case 'x':
		    case 'X': 
				

			    if (xflag == 1)
				{
					sprintf(bf,"Line %d X error",CodeLine+1);
//					AfxMessageBox(bf);
					return 1;
				}
				xflag = 1;

				if ( !((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d X error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				if (fd<X_MIN||fd>X_MAX)
				{
					sprintf(bf,"Line %d X error",CodeLine+1);
					return 1;
				}

				if (G92flag == 1)
				{
					datumx = mchx - fd;
					break;
				}
		
				if(G91Sign==1)
				{
					GSim[CodeNum].x=fd;
					GCodeNow.x = fd;
				}
				else
				{
					mchx = datumx + fd;
					GSim[CodeNum].x= mchx - xNow;
					GCodeNow.x = mchx - xNow;
				}
				xNow += GCodeNow.x;
								
			
				break;

			case 'y':
			case 'Y': 				
				if (yflag == 1)
				{
					sprintf(bf,"Line %d Y error",CodeLine+1);
					return 1;
				}
				yflag = 1;
				if (!((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d X error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				if (fd<Y_MIN||fd>Y_MAX)
				{
					sprintf(bf,"Line %d Y error",CodeLine+1);
					return 1;
				}


				if (G92flag == 1)
				{
					datumy = mchy - fd;
					break;
				}

				if(G91Sign==1)
				{
					GSim[CodeNum].y=fd;				
					GCodeNow.y = fd;
				}
				else
				{
					mchy = datumy + fd;
					GSim[CodeNum].y= mchy - yNow;
					GCodeNow.y= mchy - yNow;
				}
				
				yNow +=GCodeNow.y;
					
				break;

			case 'z':
			case 'Z': 
				if (zflag == 1)
				{
					sprintf(bf,"Line %d Z error",CodeLine+1);
					return 1;
				}
				zflag =1;
				if (!((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d Z error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				if (fd<Z_MIN||fd>Z_MAX)
				{
					sprintf(bf,"Line %d Z error",CodeLine+1);
//					AfxMessageBox(bf);
					return 1;
				}

				if (G92flag == 1)
				{
					datumz = mchz - fd;
					break;
				}

				if(G91Sign==1)
				{
					GSim[CodeNum].z=fd;				
					GCodeNow.z = fd;
				}
				else
				{
					mchz = datumz + fd;
					GSim[CodeNum].z= mchz - zNow;
					GCodeNow.z = mchz - zNow;
				}
					
				zNow += GCodeNow.z;
				break;

			case 'i':
			case 'I': 				
				if (iflag == 1)
				{
					sprintf(bf,"Line %d I error",CodeLine+1);
					return 1;
				}
				iflag = 1;

				if (!((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d I error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				GSim[CodeNum].i = fd;
				GCodeNow.i = fd;
				break;
			
			case 'j':
			case 'J': 				
				if (jflag == 1)
				{
					sprintf(bf,"Line %d J error",CodeLine+1);
					return 1;
				}
				jflag = 1;
				if (!((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d J error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				GSim[CodeNum].j = fd;
				GCodeNow.j = fd;
				break;

			case 'k':
			case 'K': 				
				if (kflag == 1)
				{
					sprintf(bf,"Line %d K error",CodeLine+1);
					return 1;
				}
				kflag = 1;
				if (!((GSen[i+1]>='0') && (GSen[i+1] <='9') || (GSen[i+1] =='-')))
				{
					sprintf(bf,"Line %d X error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				GSim[CodeNum].k = fd;
				GCodeNow.k = fd;
				break;
			
			case 'r':	
			case 'R': 				
				break;

			case 's':
			case 'S': 

⌨️ 快捷键说明

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