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

📄 uline.cpp

📁 数控直线插补C语言原代码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Uline.h"
#include "stdio.h"


int XS ;  /*起点横坐标*/
int YS ;  /*起点纵坐标*/
int XE0;  /*终点横坐标*/
int YE0;  /*终点纵坐标*/
int STEP=1; /*步长*/
int XE;   /*变换后终点横坐标*/
int YE;   /*变换后终点纵坐标*/

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

int XOY;   /*用来存放直线位置值*/
int FM, p_xe,p_ye,p_xs,p_ys;   /*定义偏差及相对坐标*/

void initial(void)    /*确定直线位置*/
{ FM=0;/*偏差置0*/

 if(XE>0&&YE>0)
   {if(XE>YE) XOY=1;
    if(XE==YE)XOY=2;
    if(XE<YE) XOY=3;}
 if(XE<0&&YE>0)
   {if(fabs(XE)<YE) XOY=4;
    if(fabs(XE)==YE)XOY=5;
    if(fabs(XE)>YE) XOY=6;}
 if(XE<0&&YE<0)
   {if(fabs(XE)>fabs(YE)) XOY=7;
    if(fabs(XE)==fabs(YE))XOY=8;
    if(fabs(XE)<fabs(YE)) XOY=9;}
 if(XE>0&&YE<0)
   {if(XE<fabs(YE)) XOY=10;
    if(XE==fabs(YE))XOY=11;
    if(XE>fabs(YE)) XOY=12;}
 if(XE>0&&YE==0) XOY=13;
 if(XE==0&&YE>0) XOY=14;
 if(XE<0&&YE==0) XOY=15;
 if(XE==0&&YE<0) XOY=16;

}


 void xoy1()                     /*插补函数*/
 {if(FM>=0) {XS=XS+STEP;FM=FM-YE;}
 else {XS=XS+STEP;YS=YS+STEP;FM=FM+XE-YE;}
 }
 void xoy2()
 {XS=XS+STEP;YS=YS+STEP;}

 void xoy3()
 {if(FM>=0) {XS=XS+STEP;YS=YS+STEP;FM=FM-YE+XE;}
 else {YS=YS+STEP;FM=FM+XE;}
 }
 void xoy4()
 {if(FM>=0) {XS=XS-STEP;YS=YS+STEP;FM=FM+fabs(XE)-YE;}
  else {YS=YS+STEP;FM=FM+fabs(XE);}
 }
 void xoy5()
  {XS=XS-STEP;YS=YS+STEP;}

 void xoy6()
  {if(FM>=0) {XS=XS-STEP;FM=FM-YE;}
   else {XS=XS-STEP;YS=YS+STEP;FM=FM+fabs(XE)-YE;}
 }
 void xoy7()
 {if(FM>=0) {XS=XS-STEP;FM=FM-fabs(YE);}
  else {XS=XS-STEP;YS=YS-STEP;FM=FM+fabs(XE)-fabs(YE);}
 }
 void xoy8()
  {XS=XS-STEP;YS=YS-STEP;}

 void xoy9()
 {if(FM>=0) {XS=XS-STEP;YS=YS-STEP;FM=FM+fabs(XE)-fabs(YE);}
   else {YS=YS-STEP;FM=FM+fabs(XE);}
 }
 void xoy10()
  {if(FM>=0) {XS=XS+STEP;YS=YS-STEP;FM=FM-fabs(YE)+XE;}
   else { YS=YS-STEP;FM=FM+XE;}
  }
 void  xoy11()
   {XS=XS+STEP;YS=YS-STEP;}
  
 void  xoy12()
 {if(FM>=0) {XS=XS+STEP;FM=FM-fabs(YE);}
 else {XS=XS+STEP;YS=YS-STEP;FM=FM-fabs(YE)+XE;}
 }
 void xoy13()
 { XS=XS+STEP;}
 void xoy14()
 { YS=YS+STEP; }
 void xoy15()
 { XS=XS-STEP; }
 void xoy16()
 { YS=YS-STEP; }





void __fastcall TForm1::FormPaint(TObject *Sender) /*主函数*/
{
 Canvas->Pen->Color=clBlack;               /*画相对坐标原点(160,160)*/
 Canvas->MoveTo(10,160);Canvas->LineTo(310,160);
 Canvas->MoveTo(160,10);Canvas->LineTo(160,310);


 { int k=0;
   FILE *open;            /*定义指向打开文本的指针*/
   FILE *yfp;             /*定义指向存储原直线文本的指针*/
   FILE *fp;              /*定义指明向存储插补后直线文本的指针*/
   char p[]="pline";
   open=fopen("d:/line.txt","r");

   fp=fopen("d:\\line_pro.scr","w");
   fprintf(fp,"%s\n",p);
   yfp=fopen("d:\\yuan_line.scr","w");
   fprintf(yfp,"%s\n",p);

   for(;;)
    {if(!feof(open))
      {if(k==0)
        {fscanf(open,"%d,%d",&XS,&YS);
         fprintf(yfp,"%d,%d\n",XS,YS);
            fprintf(fp,"%d,%d\n",XS,YS);
         fscanf(open,"%d,%d",&XE0,&YE0);
         fprintf(yfp,"%d,%d\n",XE0,YE0);
          k++;

         }


       else if(k!=0)
        {XS=XE0,YS=YE0;
         fscanf(open,"%d,%d",&XE0,&YE0);
         if(feof(open)) break;
         fprintf(yfp,"%d,%d\n",XE0,YE0);
        }
      }
     if(feof(open)) break;



    p_xs=XS+160;                 /*进行坐标转换*/
    p_ys=-YS+160;
    p_xe=XE0+160;
    p_ye=-YE0+160;
   XE=XE0-XS,YE=YE0-YS;
   Canvas->MoveTo(p_xs,p_ys); /*画出起点相对坐标*/
   initial();/*初始化*/

   for(;;)
   {
    switch(XOY)
    {case 1:xoy1();break;
     case 2:xoy2();break;
     case 3:xoy3();break;
     case 4:xoy4();break;
     case 5:xoy5();break;
     case 6:xoy6();break;
     case 7:xoy7();break;
     case 8:xoy8();break;
     case 9:xoy9();break;
     case 10:xoy10();break;
     case 11:xoy11();break;
     case 12:xoy12();break;
     case 13:xoy13();break;
     case 14:xoy14();break;
     case 15:xoy15();break;
     case 16:xoy16();break;
     }
    Canvas->LineTo(XS+160,-YS+160);
    fprintf(fp,"%d,%d\n",XS,YS);


    if((fabs(XS-XE0)<=STEP*1/2)&&(fabs(YS-YE0)<=STEP*1/2))
    { XE0=XS;YE0=YS; break;}/*判断步数*/

   }
 }
fprintf(fp,"\n\n");fclose(fp);
fprintf(yfp,"\n\n");fclose(yfp);
}


}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

 __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------







⌨️ 快捷键说明

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