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

📄 newsimu.c

📁 激光加工控制系统 可以读入plt文件
💻 C
字号:
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#include "key.h"

char buf[100];
char filename[200];
int down_flag= 0;
long x_c,y_c;
int cur_x,cur_y;
int old_x,old_y;
int step;
int cur_status;
int o_x1,o_y1,o_x2,o_y2;
int first_flag;
FILE *fpe;
int gdriver = DETECT, gmode=18, errorcode;
int ret,i,x1,y1,x2,y2;
long minx,miny,maxx,maxy;
long curx,cury,x,y,oldx,oldy;
int ch;
int sx,sy;

main()
{
  int si;

  x_c = y_c = 0;
  strcpy(filename,"c:\\jgs\\test.23");
  fpe = fopen(filename,"rb");
  ret = get_a_line(fpe);
  minx = miny = maxx = maxy = curx = cury = 0;
  sx = sy = 0;
  si = 0;
  while (ret != -1){
    if ((buf[0] == 'P')||(buf[0] == 'B')){
      x = atoi(&(buf[1]));
      i = 1;
      while (buf[i++] != ' ');
      y = atoi(&(buf[i]));
      curx += x;
      cury += y;
      if (minx > curx)
	minx = curx;
      if (maxx < curx)
	maxx = curx;
      if (miny > cury)
	miny = cury;
      if (maxy < cury)
	maxy = cury;
      if (buf[0] == 'P'){
	if (abs(x-sx)+abs(y-sy) > 16){
	  i = 0;
	}
	sx = x;
	sy = y;
      }
    }
    si ++;
    ret = get_a_line(fpe);
  }
  fclose(fpe);
  show_graph();
  printf("%ld    %ld\n",x_c,y_c);
  ch = getch();
  step = 10;
  old_x = -100;
  cur_x = 320;
  cur_y = 240;
  cur_status = 0;
  first_flag = 0;
  show_x();
  while (ch != ESC){
    if (ch == 0){
      ch = getch();
      switch (ch){
	case LEFT:
	  cur_x -= step;
	  break;
	case RIGHT:
	  cur_x += step;
	  break;
	case UP:
	  cur_y -= step;
	  break;
	case DOWN:
	  cur_y += step;
	  break;
	case PGUP:
	  step *= 2;
	  if (step > 40)
	    step = 40;
	  break;
	case PGDN:
	  step /= 2;
	  if (step == 0)
	    step = 1;
	  break;
      }
    }
    else{
      if (ch == 13){
	if (cur_status == 0){
	  o_x1 = cur_x;
	  o_y1 = cur_y;
	  cur_status = 1;
	}
	else if (cur_status == 1){
	  cur_status = 2;
	  show_x();
	  cur_status = 0;
	  show_graph1();
	  getch();
	  show_graph();
	}
      }
    }
    show_x();
    ch = getch();
  }
  closegraph();
}

get_a_line(FILE *fpe)
{
  int i,ch;

  ch = fgetc(fpe);
  if (ch == EOF)
    return -1;
  i = 0;
  while ((ch != 13)&&(ch != 10)&&(ch != EOF)){
    buf[i++] = ch;
    ch = fgetc(fpe);
  }
  buf[i] = 0;
  if (ch == EOF)
    return -1;
  fgetc(fpe);

  return 0;
}

show_x()
{
  setwritemode(XOR_PUT);
  o_x2 = cur_x;
  o_y2 = cur_y;
  if (cur_status != 0){
    if (first_flag == 1){
      line(o_x1,o_y1,old_x,o_y1);
      line(o_x1,old_y,old_x,old_y);
      line(o_x1,o_y1,o_x1,old_y);
      line(old_x,o_y1,old_x,old_y);
    }
    else
      first_flag = 1;
  }
  if (cur_status == 1){
    if (cur_y >= o_y1)
      cur_y = o_y2 = o_y1+abs(cur_x - o_x1)*480./640.;
    else
      cur_y = o_y2 = o_y1-abs(cur_x - o_x1)*480./640.;
    line(o_x1,o_y1,o_x2,o_y1);
    line(o_x1,o_y2,o_x2,o_y2);
    line(o_x1,o_y1,o_x1,o_y2);
    line(o_x2,o_y1,o_x2,o_y2);
  }
  if (old_x != -100){
    line(old_x-10,old_y,old_x+10,old_y);
    line(old_x,old_y-10,old_x,old_y+10);
  }
  line(cur_x-10,cur_y,cur_x+10,cur_y);
  line(cur_x,cur_y-10,cur_x,cur_y+10);
  old_x = cur_x;
  old_y = cur_y;
}

show_graph()
{
  fpe = fopen(filename,"rb");
  ret = get_a_line(fpe);
  oldx = oldy = 0;
  initgraph(&gdriver, &gmode, "c:\\jgs");
  setcolor(WHITE);
  while (ret != -1){
    if ((buf[0] == 'P')||(buf[0] == 'B')){
      x = atoi(&(buf[1]));
      i = 1;
      while (buf[i++] != ' ');
      y = atoi(&(buf[i]));
      curx = oldx + x;
      cury = oldy + y;
      x_c += x;
      y_c += y;
      if (fabs(maxx-minx) > fabs(maxy-miny)){
	x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxx-minx) + 240;
	y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxx-minx);
	x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxx-minx) + 240;
	y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxx-minx);
      }
      else{
	x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxy-miny) + 240;
	y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxy-miny);
	x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxy-miny) + 240;
	y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxy-miny);
      }
      if (down_flag == 0)
	setcolor(GREEN);
      else
	setcolor(WHITE);
      line(x1,y1,x2,y2);
      oldx = curx;
      oldy = cury;
    }
    if (strcmp(buf,"O 32 63") == 0){
      down_flag = 1;
    }
    if (strcmp(buf,"O 0 63") == 0){
      down_flag = 0;
    }
    ret = get_a_line(fpe);
  }
  fclose(fpe);
}

show_graph1()
{
  int tt;
  int m_x,m_y;

  if (o_x1 > o_x2){
    tt = o_x1;
    o_x1 = o_x2;
    o_x2 = tt;
  }
  if (o_y1 > o_y2){
    tt = o_y1;
    o_y1 = o_y2;
    o_y2 = tt;
  }
  m_x = o_x1 + (o_x2-o_x1)/2;
  m_y = o_y1 + (o_y2-o_y1)/2;
  fpe = fopen(filename,"rb");
  ret = get_a_line(fpe);
  oldx = oldy = 0;
  initgraph(&gdriver, &gmode, "c:\\jgs");
  setcolor(WHITE);
  while (ret != -1){
    if ((buf[0] == 'P')||(buf[0] == 'B')){
      x = atoi(&(buf[1]));
      i = 1;
      while (buf[i++] != ' ');
      y = atoi(&(buf[i]));
      curx = oldx + x;
      cury = oldy + y;
      x_c += x;
      y_c += y;
      if (fabs(maxx-minx) > fabs(maxy-miny)){
	x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxx-minx) + 240;
	y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxx-minx);
	x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxx-minx) + 240;
	y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxx-minx);
      }
      else{
	x1 = 480.0*(oldx-(maxx+minx)/2.0)/(maxy-miny) + 240;
	y1 = 240 - 480.0*(oldy-(maxy+miny)/2.0)/(maxy-miny);
	x2 = 480.0*(curx-(maxx+minx)/2.0)/(maxy-miny) + 240;
	y2 = 240 - 480.0*(cury-(maxy+miny)/2.0)/(maxy-miny);
      }
      x1 = 320.0*(x1-m_x)/(o_x2-m_x) + 320;
      y1 = 240.0*(y1-m_y)/(o_y2-m_y) + 320;
      x2 = 320.0*(x2-m_x)/(o_x2-m_x) + 320;
      y2 = 240.0*(y2-m_y)/(o_y2-m_y) + 320;
      if (down_flag == 0)
	setcolor(GREEN);
      else
	setcolor(WHITE);
      line(x1,y1,x2,y2);
      oldx = curx;
      oldy = cury;
    }
    if (strcmp(buf,"O 32 63") == 0){
      down_flag = 1;
    }
    if (strcmp(buf,"O 0 63") == 0){
      down_flag = 0;
    }
    ret = get_a_line(fpe);
  }
  fclose(fpe);
}

⌨️ 快捷键说明

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