📄 mshowdoc.cpp
字号:
// 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 + -