📄 nccodeparse.cpp
字号:
m_ArrayForwardDirection_CodeLineInterpolation.Add("X-");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 4:
if(iStartPointQuadrant==4 && iEndPointQuadrant!=4)
{
nStep = (iStart_r_o+(fRadius-fabs(jStart_r_o)))/m_fScale;
}
if(iStartPointQuadrant!=4 && iEndPointQuadrant==4)
{
nStep = ((fRadius-xEnd_r_o)+fabs(yEnd_r_o))/m_fScale;
}
if(iStartPointQuadrant==4 && iEndPointQuadrant==4)
{
if(nCrossAxis==0)
nStep = ((iStart_r_o-xEnd_r_o)+(jStart_r_o-yEnd_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = (iStart_r_o+(fRadius-fabs(jStart_r_o)))/m_fScale;
}
else
{
nStep = ((fRadius-xEnd_r_o)+fabs(yEnd_r_o))/m_fScale;
}
}
}
if(iStartPointQuadrant!=4 && iEndPointQuadrant!=4)
{
nStep = 2*fRadius/m_fScale;
}
// 第四象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(x_iStep)+1;
x_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("X-");
}
else
{
Fm=Fm+2*abs(y_iStep)+1;
y_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Y-");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
}
}
}
// 如果是ZX平面.
if(m_strFuncGroup[3]==_T("G18"))
{
fRadius=sqrt(iStart_r_o*iStart_r_o+kStart_r_o*kStart_r_o);
// 确定插补时跨坐标轴的次数.
if(iStart_r_o>0 && kStart_r_o>=0) iStartPointQuadrant=1;
if(iStart_r_o<=0 && kStart_r_o>0) iStartPointQuadrant=2;
if(iStart_r_o<0 && kStart_r_o<=0) iStartPointQuadrant=3;
if(iStart_r_o>=0 && kStart_r_o<0) iStartPointQuadrant=4;
if(xEnd_r_o>0 && zEnd_r_o>=0) iEndPointQuadrant=1;
if(xEnd_r_o<=0 && zEnd_r_o>0) iEndPointQuadrant=2;
if(xEnd_r_o<0 && zEnd_r_o<=0) iEndPointQuadrant=3;
if(xEnd_r_o>=0 && zEnd_r_o<0) iEndPointQuadrant=4;
nCrossAxis = iStartPointQuadrant - iEndPointQuadrant;
if(nCrossAxis<0)
nCrossAxis += 4;
if((iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==1 && iStart_r_o>=xEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==2 && iStart_r_o>=xEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==3 && iStart_r_o<=xEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==4 && iStart_r_o<=xEnd_r_o))
nCrossAxis=4;
int x_iStep,y_iStep,z_iStep; // 动点的坐标(步数坐标).
x_iStep=iStart_r_o/m_fScale,y_iStep=jStart_r_o/m_fScale,z_iStep=kStart_r_o/m_fScale;
// 开始插补计算出坐标值.
for(int i=0;i<=nCrossAxis;i++)
{
int nNowQuadrantAt = iStartPointQuadrant - i;
if(nNowQuadrantAt<=0)
nNowQuadrantAt += 4;
int nStep = 0; // 在各个分象限中的进给步数.
int Fm=0; // 在各个分象限中插补中的偏差值.
int xe,ye,ze; // 各坐标的终点总步数.
switch(nNowQuadrantAt)
{
case 1:
// 计算进给步数.
if(iStartPointQuadrant==1 && iEndPointQuadrant!=1)
{
nStep = ((fRadius-iStart_r_o)+kStart_r_o)/m_fScale;
}
if(iStartPointQuadrant!=1 && iEndPointQuadrant==1)
{
nStep = (xEnd_r_o+(fRadius-zEnd_r_o))/m_fScale;
}
if(iStartPointQuadrant==1 && iEndPointQuadrant==1)
{
if(nCrossAxis==0)
nStep = ((xEnd_r_o-iStart_r_o)+(kStart_r_o-zEnd_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = ((fRadius-iStart_r_o)+kStart_r_o)/m_fScale;
}
else
{
nStep = (xEnd_r_o+(fRadius-zEnd_r_o))/m_fScale;
}
}
}
if(iStartPointQuadrant!=1 && iEndPointQuadrant!=1)
{
nStep = 2*fRadius/m_fScale;
}
// 第一象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*z_iStep+1;
z_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z-");
}
else
{
Fm=Fm+2*x_iStep+1;
x_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("X+");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 2:
if(iStartPointQuadrant==2 && iEndPointQuadrant!=2)
{
nStep = (fabs(iStart_r_o)+(fRadius-kStart_r_o))/m_fScale;
}
if(iStartPointQuadrant!=2 && iEndPointQuadrant==2)
{
nStep = ((fRadius-fabs(xEnd_r_o))+zEnd_r_o)/m_fScale;
}
if(iStartPointQuadrant==2 && iEndPointQuadrant==2)
{
if(nCrossAxis==0)
nStep = ((xEnd_r_o-iStart_r_o)+(zEnd_r_o-kStart_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = (fabs(iStart_r_o)+(fRadius-kStart_r_o))/m_fScale;
}
else
{
nStep = ((fRadius-fabs(xEnd_r_o))+zEnd_r_o)/m_fScale;
}
}
}
if(iStartPointQuadrant!=2 && iEndPointQuadrant!=2)
{
nStep = 2*fRadius/m_fScale;
}
// 第二象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(x_iStep)+1;
x_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("X+");
}
else
{
Fm=Fm+2*abs(z_iStep)+1;
z_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z+");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 3:
if(iStartPointQuadrant==3 && iEndPointQuadrant!=3)
{
nStep = ((fRadius-fabs(iStart_r_o))+fabs(kStart_r_o))/m_fScale;
}
if(iStartPointQuadrant!=3 && iEndPointQuadrant==3)
{
nStep = (fabs(xEnd_r_o)+(fRadius-fabs(zEnd_r_o)))/m_fScale;
}
if(iStartPointQuadrant==3 && iEndPointQuadrant==3)
{
if(nCrossAxis==0)
nStep = ((fabs(xEnd_r_o)-fabs(iStart_r_o))+(fabs(kStart_r_o)-fabs(zEnd_r_o)))/m_fScale;
else
{
if(i==0)
{
nStep = ((fRadius-fabs(iStart_r_o))+fabs(kStart_r_o))/m_fScale;
}
else
{
nStep = (fabs(xEnd_r_o)+(fRadius-fabs(zEnd_r_o)))/m_fScale;
}
}
}
if(iStartPointQuadrant!=3 && iEndPointQuadrant!=3)
{
nStep = 2*fRadius/m_fScale;
}
// 第三象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(z_iStep)+1;
z_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z+");
}
else
{
Fm=Fm+2*abs(x_iStep)+1;
x_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("X-");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 4:
if(iStartPointQuadrant==4 && iEndPointQuadrant!=4)
{
nStep = (iStart_r_o+(fRadius-fabs(kStart_r_o)))/m_fScale;
}
if(iStartPointQuadrant!=4 && iEndPointQuadrant==4)
{
nStep = ((fRadius-xEnd_r_o)+fabs(zEnd_r_o))/m_fScale;
}
if(iStartPointQuadrant==4 && iEndPointQuadrant==4)
{
if(nCrossAxis==0)
nStep = ((iStart_r_o-xEnd_r_o)+(kStart_r_o-zEnd_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = (iStart_r_o+(fRadius-fabs(kStart_r_o)))/m_fScale;
}
else
{
nStep = ((fRadius-xEnd_r_o)+fabs(zEnd_r_o))/m_fScale;
}
}
}
if(iStartPointQuadrant!=4 && iEndPointQuadrant!=4)
{
nStep = 2*fRadius/m_fScale;
}
// 第四象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(x_iStep)+1;
x_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("X-");
}
else
{
Fm=Fm+2*abs(z_iStep)+1;
z_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z-");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
}
}
}
// 如果是YZ平面.
if(m_strFuncGroup[3]==_T("G19"))
{
fRadius=sqrt(jStart_r_o*jStart_r_o+kStart_r_o*kStart_r_o);
// 确定插补时跨坐标轴的次数.
if(jStart_r_o>0 && kStart_r_o>=0) iStartPointQuadrant=1;
if(jStart_r_o<=0 && kStart_r_o>0) iStartPointQuadrant=2;
if(jStart_r_o<0 && kStart_r_o<=0) iStartPointQuadrant=3;
if(jStart_r_o>=0 && kStart_r_o<0) iStartPointQuadrant=4;
if(yEnd_r_o>0 && zEnd_r_o>=0) iEndPointQuadrant=1;
if(yEnd_r_o<=0 && zEnd_r_o>0) iEndPointQuadrant=2;
if(yEnd_r_o<0 && zEnd_r_o<=0) iEndPointQuadrant=3;
if(yEnd_r_o>=0 && zEnd_r_o<0) iEndPointQuadrant=4;
nCrossAxis = iStartPointQuadrant - iEndPointQuadrant;
if(nCrossAxis<0)
nCrossAxis += 4;
if((iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==1 && jStart_r_o>=yEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==2 && jStart_r_o>=yEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==3 && jStart_r_o<=yEnd_r_o)||
(iStartPointQuadrant==iEndPointQuadrant && iStartPointQuadrant==4 && jStart_r_o<=yEnd_r_o))
nCrossAxis=4;
int x_iStep,y_iStep,z_iStep; // 动点的坐标(步数坐标).
x_iStep=iStart_r_o/m_fScale,y_iStep=jStart_r_o/m_fScale,z_iStep=kStart_r_o/m_fScale;
// 开始插补计算出坐标值.
for(int i=0;i<=nCrossAxis;i++)
{
int nNowQuadrantAt = iStartPointQuadrant - i;
if(nNowQuadrantAt<=0)
nNowQuadrantAt += 4;
int nStep = 0; // 在各个分象限中的进给步数.
int Fm=0; // 在各个分象限中插补中的偏差值.
int xe,ye,ze; // 各坐标的终点总步数.
switch(nNowQuadrantAt)
{
case 1:
// 计算进给步数.
if(iStartPointQuadrant==1 && iEndPointQuadrant!=1)
{
nStep = ((fRadius-jStart_r_o)+kStart_r_o)/m_fScale;
}
if(iStartPointQuadrant!=1 && iEndPointQuadrant==1)
{
nStep = (yEnd_r_o+(fRadius-zEnd_r_o))/m_fScale;
}
if(iStartPointQuadrant==1 && iEndPointQuadrant==1)
{
if(nCrossAxis==0)
nStep = ((yEnd_r_o-jStart_r_o)+(kStart_r_o-zEnd_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = ((fRadius-jStart_r_o)+kStart_r_o)/m_fScale;
}
else
{
nStep = (yEnd_r_o+(fRadius-zEnd_r_o))/m_fScale;
}
}
}
if(iStartPointQuadrant!=1 && iEndPointQuadrant!=1)
{
nStep = 2*fRadius/m_fScale;
}
// 第一象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*z_iStep+1;
z_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z-");
}
else
{
Fm=Fm+2*y_iStep+1;
y_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Y+");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 2:
if(iStartPointQuadrant==2 && iEndPointQuadrant!=2)
{
nStep = (fabs(jStart_r_o)+(fRadius-kStart_r_o))/m_fScale;
}
if(iStartPointQuadrant!=2 && iEndPointQuadrant==2)
{
nStep = ((fRadius-fabs(yEnd_r_o))+zEnd_r_o)/m_fScale;
}
if(iStartPointQuadrant==2 && iEndPointQuadrant==2)
{
if(nCrossAxis==0)
nStep = ((yEnd_r_o-jStart_r_o)+(zEnd_r_o-kStart_r_o))/m_fScale;
else
{
if(i==0)
{
nStep = (fabs(jStart_r_o)+(fRadius-kStart_r_o))/m_fScale;
}
else
{
nStep = ((fRadius-fabs(yEnd_r_o))+zEnd_r_o)/m_fScale;
}
}
}
if(iStartPointQuadrant!=2 && iEndPointQuadrant!=2)
{
nStep = 2*fRadius/m_fScale;
}
// 第二象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(y_iStep)+1;
y_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Y+");
}
else
{
Fm=Fm+2*abs(z_iStep)+1;
z_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z+");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 3:
if(iStartPointQuadrant==3 && iEndPointQuadrant!=3)
{
nStep = ((fRadius-fabs(jStart_r_o))+fabs(kStart_r_o))/m_fScale;
}
if(iStartPointQuadrant!=3 && iEndPointQuadrant==3)
{
nStep = (fabs(yEnd_r_o)+(fRadius-fabs(zEnd_r_o)))/m_fScale;
}
if(iStartPointQuadrant==3 && iEndPointQuadrant==3)
{
if(nCrossAxis==0)
nStep = ((fabs(yEnd_r_o)-fabs(jStart_r_o))+(fabs(kStart_r_o)-fabs(zEnd_r_o)))/m_fScale;
else
{
if(i==0)
{
nStep = ((fRadius-fabs(jStart_r_o))+fabs(kStart_r_o))/m_fScale;
}
else
{
nStep = (fabs(yEnd_r_o)+(fRadius-fabs(zEnd_r_o)))/m_fScale;
}
}
}
if(iStartPointQuadrant!=3 && iEndPointQuadrant!=3)
{
nStep = 2*fRadius/m_fScale;
}
// 第三象限插补计算.
for(int i=0;i<nStep;i++)
{
if(Fm>=0)
{
Fm=Fm-2*abs(z_iStep)+1;
z_iStep+=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Z+");
}
else
{
Fm=Fm+2*abs(y_iStep)+1;
y_iStep-=1;
m_ArrayForwardDirection_CodeLineInterpolation.Add("Y-");
}
// char a[200];
// sprintf(a,"%d,%d,%d",x_iStep,y_iStep,Fm);
// AfxMessageBox(_T(a));
}
break;
case 4:
if(iStartPointQuadrant==4 && iEndPointQuadrant!=4)
{
nStep = (jStart_r_o+(fRadius-fabs(kStart_r_o)))/m_fScale;
}
if(iStartPointQuadrant!=4 && iEndPointQuadrant==4)
{
nStep = ((fRadius-yEnd_r_o)+fabs(zEnd_r_o))/m_fScale;
}
if(iStartPointQuadrant==4 && iEndPointQuadrant==4)
{
if(nCrossAxis==0)
nStep = ((jStart_r_o-yEnd_r_o)+(kStart_r_o-zE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -