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

📄 converter.c

📁 This is a CNCPro source file. It is include the G-Code interpreter source.
💻 C
📖 第 1 页 / 共 2 页
字号:
          if(k==0) {x1=x2; y1=y2; z1=z2; ctemp=layer[entity[k].layer].zchar;}
          dist1=sqrt(pow(x2-x1,2)+pow(y2-y1,2));
          if(dist1>priority[i].close || k==0 || entity[k].type==POINT || ctemp!=layer[entity[k].layer].zchar)
            {if(k==0)
               {zchar=wchar=achar=cchar=FALSE;
                for(l=0;l<num_of_ent;l++)
                  {if(layer[entity[l].layer].zchar=='Z') zchar=TRUE;
                   if(layer[entity[l].layer].zchar=='W') wchar=TRUE;
                   if(layer[entity[l].layer].zchar=='A') achar=TRUE;
                   if(layer[entity[l].layer].zchar=='C') cchar=TRUE;
                  }
                if(zchar==TRUE) fprintf(ofp,"G00 Z%f\n",priority[i].release);
                if(wchar==TRUE) fprintf(ofp,"G00 W%f\n",priority[i].release);
                if(achar==TRUE) fprintf(ofp,"G00 A%f\n",priority[i].release);
                if(cchar==TRUE) fprintf(ofp,"G00 C%f\n",priority[i].release);
               }
             else if(ctemp!=layer[entity[k].layer].zchar)
               {fprintf(ofp,"G00 %c%f\n",ctemp,priority[i].release);
                ctemp=layer[entity[k].layer].zchar;
               }
             else fprintf(ofp,"G00 %c%f\n",layer[entity[k].layer].zchar,priority[i].release);
             fprintf(ofp,"G00 X%f Y%f\n",x2,y2);
             fprintf(ofp,"G01 %c%f\n",layer[entity[k].layer].zchar,z2);
            }
          if((dist1>.0001 && dist1<=priority[i].close) || fabs(z2-z1)>.0001)
            {fprintf(ofp,"G01 X%f Y%f %c%f\n",x2,y2,layer[entity[k].layer].zchar, z2);
            }
          get_second_point(&x1, &y1, &z1, &entity[k]);
          //write entity
          if(entity[k].type==LINE)
            {if(entity[k].dir==FOR)
               fprintf(ofp,"G01 X%f Y%f %c%f\n",entity[k].x2,entity[k].y2,
                       layer[entity[k].layer].zchar, entity[k].z2);
             else
               fprintf(ofp,"G01 X%f Y%f %c%f\n",entity[k].x1,entity[k].y1,
                       layer[entity[k].layer].zchar, entity[k].z1);
            }
          if(entity[k].type==ARC)
            {if(entity[k].dir==CCW)
               {if(convertop.ijfirst==TRUE)
                  {if(convertop.ijrel==TRUE)
                     fprintf(ofp,"G03 I%f J%f X%f Y%f\n",
                             -entity[k].radius*cos(entity[k].ang_start),
                             -entity[k].radius*sin(entity[k].ang_start),
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_end),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_end));
                   else
                     fprintf(ofp,"G03 I%f J%f X%f Y%f\n",
                             entity[k].x1, entity[k].y1,
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_end),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_end));
                  }
                else
                  {if(convertop.ijrel==TRUE)
                     fprintf(ofp,"G03 X%f Y%f I%f J%f\n",
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_end),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_end),
                             -entity[k].radius*cos(entity[k].ang_start),
                             -entity[k].radius*sin(entity[k].ang_start));
                   else
                     fprintf(ofp,"G03 X%f Y%f I%f J%f\n",
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_end),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_end),
                             entity[k].x1, entity[k].y1);
                  }
               }
             else
               {if(convertop.ijfirst==TRUE)
                  {if(convertop.ijrel==TRUE)
                     fprintf(ofp,"G02 I%f J%f X%f Y%f\n",
                             -entity[k].radius*cos(entity[k].ang_end),
                             -entity[k].radius*sin(entity[k].ang_end),
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_start),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_start));
                  else
                     fprintf(ofp,"G02 I%f J%f X%f Y%f\n",
                             entity[k].x1, entity[k].y1,
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_start),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_start));
                  }
                else
                  {if(convertop.ijrel==TRUE)
                     fprintf(ofp,"G02 X%f Y%f I%f J%f\n",
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_start),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_start),
                             -entity[k].radius*cos(entity[k].ang_end),
                             -entity[k].radius*sin(entity[k].ang_end));
                   else
                     fprintf(ofp,"G02 X%f Y%f I%f J%f\n",
                             entity[k].x1+entity[k].radius*cos(entity[k].ang_start),
                             entity[k].y1+entity[k].radius*sin(entity[k].ang_start),
                             entity[k].x1, entity[k].y1);
                  }
               }
            }
         }
      if(num_of_ent>0)
        {fprintf(ofp,"G00 %c%f\n",layer[entity[num_of_ent-1].layer].zchar,priority[i].release);
        }
      //write postcode to file
      if(demo==FALSE || (demo==TRUE && count<=20))
        {fprintf(ofp,"%s",priority[i].postcode);
         if(strlen(priority[i].postcode)>0 &&
            priority[i].postcode[strlen(priority[i].postcode)-1]!='\n') fputc('\n',ofp);
        }
     }
   fclose(ofp);
   fclose(ifp);
   if(convertop.line_num==TRUE)
     {ifp=fopen(szToFileName,"r");
      ofp=fopen("temp.tmp","w");
      while((ctemp=fgetc(ifp))!=EOF)
        {if(ctemp!='\n') {fprintf(ofp,"N%u ",10*line_num++); fputc(ctemp, ofp);}
         else {fputc(ctemp, ofp); continue;}
         while((ctemp=fgetc(ifp))!=EOF) {fputc(ctemp, ofp); if(ctemp=='\n') break;}
         if(ctemp==EOF) break;
        }
      fclose(ofp);
      fclose(ifp);
      ifp=fopen("temp.tmp","r");
      ofp=fopen(szToFileName,"w");
      while((ctemp=fgetc(ifp))!=EOF) fputc(ctemp, ofp);
      fclose(ifp);
      fclose(ofp);
      remove("temp.tmp");
     }
   if(demo==TRUE)
     {ofp=fopen(szToFileName,"a");
      fprintf(ofp,"\n\nThank You For Evaluating ACEconverter\n");
      fprintf(ofp,"Converting Has Stopped Because Of The\n");
      fprintf(ofp,"Evaluation Limit.  To Order Your Licensed\n");
      fprintf(ofp,"Version Of ACEconverter Go To:\n");
      fprintf(ofp,"The World Wide Web At:\n");
      fprintf(ofp,"http://www.yeagerautomation.com\n");
      fclose(ofp);
     }
   sprintf(status,"Converting Complete");
   SetWindowText(GetDlgItem(hWindow, IDD_STATUS),status);
   DONE:
   if(msg==1)
     {fclose(ofp);
      fclose(ifp);
      sprintf(status,"Invalid .dxf File Format");
      SetWindowText(GetDlgItem(hWindow, IDD_STATUS),status);
     }
   if(msg==2)
     {fclose(ofp);
      fclose(ifp);
      sprintf(status,"Out Of Memory, Converting Aborted");
      SetWindowText(GetDlgItem(hWindow, IDD_STATUS),status);
     }
   farfree(entity);
   EnableWindow(GetDlgItem(hWindow,IDD_CONVERT), TRUE);
   EnableWindow(GetDlgItem(hWindow,IDD_OPEN), TRUE);
   EnableWindow(GetDlgItem(hWindow,IDD_LAYER), TRUE);
   EnableWindow(GetDlgItem(hWindow,IDD_PRIORITY), TRUE);
   _endthread();
}

int get_values(FILE *ifp, struct entity_obj *ent)
{
   static char string[100];
   int temp, temp2, mode=1;
   fpos_t pos;

   ent->x1=ent->y1=ent->z1=ent->x2=ent->y2=ent->z2=ent->radius=ent->ang_start=ent->ang_end=0;
   while(1)
     {fgetpos(ifp, &pos);
      if((temp=fscanf(ifp,"%s",string))==EOF || temp==0) return 0;
      if(strcmp(string,"0")==0) {fsetpos(ifp, &pos); return mode;}
      else if(strcmp(string,"10")==0) {if((temp=fscanf(ifp,"%lf",&(ent->x1)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"20")==0) {if((temp=fscanf(ifp,"%lf",&(ent->y1)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"30")==0) {if((temp=fscanf(ifp,"%lf",&(ent->z1)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"11")==0) {if((temp=fscanf(ifp,"%lf",&(ent->x2)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"21")==0) {if((temp=fscanf(ifp,"%lf",&(ent->y2)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"31")==0) {if((temp=fscanf(ifp,"%lf",&(ent->z2)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"40")==0) {if((temp=fscanf(ifp,"%lf",&(ent->radius)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"42")==0) {if((temp=fscanf(ifp,"%lf",&(ent->radius)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"50")==0) {if((temp=fscanf(ifp,"%lf",&(ent->ang_start)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"51")==0) {if((temp=fscanf(ifp,"%lf",&(ent->ang_end)))==0 || temp==EOF) return 0;}
      else if(strcmp(string,"70")==0)
        {if((temp=fscanf(ifp,"%d",&temp2))==0 || temp==EOF) return 0;
         else if((temp2&1)==1) mode=2;
        }
      else if((temp=fscanf(ifp,"%s",string))==0 || temp==EOF) return 0;
     }
}

int get_string(FILE *ifp, const char *string_match, char *string_ret)
{
   static char string[100];
   int temp;
   fpos_t pos;

   while(1)
     {fgetpos(ifp, &pos);
      if((temp=fscanf(ifp,"%s",string))==EOF || temp==0) return 0;
      if(strcmp(string,"0")==0) {fsetpos(ifp,&pos); return 1;}
      if(strcmp(string,string_match)==0)
        {if((temp=fscanf(ifp,"%s",string_ret))==0 || temp==EOF) return 0; 
         return 1;
        }
      else if((temp=fscanf(ifp,"%s",string))==0 || temp==EOF) return 0;
     }
}

void make_arc(struct entity_obj *ent)
{
   double x_mid, y_mid, angle, x_start, y_start, x_end, y_end, chord, dist;
   x_mid=((*ent).x2-(*ent).x1)/2;
   y_mid=((*ent).y2-(*ent).y1)/2;
   x_start=(*ent).x1;
   y_start=(*ent).y1;
   x_end=(*ent).x2;
   y_end=(*ent).y2;
   angle=atan2(y_mid,x_mid);
   if((*ent).radius>0) angle=angle+PI/2;
   else angle=angle-PI/2;
   chord=2*sqrt(pow(x_mid,2)+pow(y_mid,2));
   dist=(*ent).radius-(pow(chord/2,2)+pow((*ent).radius,2))/(2*(*ent).radius);
   (*ent).x1=x_start+x_mid+dist*cos(angle);
   (*ent).y1=y_start+y_mid+dist*sin(angle);
   if((*ent).radius<0)
     {(*ent).ang_start=atan2(y_start-(*ent).y1,x_start-(*ent).x1);
      (*ent).ang_end=atan2(y_end-(*ent).y1,x_end-(*ent).x1);
     }
   else
     {(*ent).ang_end=atan2(y_start-(*ent).y1,x_start-(*ent).x1);
      (*ent).ang_start=atan2(y_end-(*ent).y1,x_end-(*ent).x1);
     }
   (*ent).radius=fabs((pow(chord/2,2)+pow((*ent).radius,2))/(2*(*ent).radius));
}

void get_first_point(double *x, double *y, double *z, struct entity_obj *entity)
{
   if(entity->type==LINE)
     {if(entity->dir==FOR) {*x=entity->x1; *y=entity->y1; *z=entity->z1;}
      else {*x=entity->x2; *y=entity->y2; *z=entity->z2;}
     }
   if(entity->type==ARC)
     {if(entity->dir==CW) {*x=entity->x1+entity->radius*cos(entity->ang_end);
                           *y=entity->y1+entity->radius*sin(entity->ang_end);
                           *z=entity->z1;}
      else {*x=entity->x1+entity->radius*cos(entity->ang_start);
            *y=entity->y1+entity->radius*sin(entity->ang_start);
            *z=entity->z1;}
     }
   if(entity->type==POINT) {*x=entity->x1; *y=entity->y1; *z=entity->z1;}
}

void get_second_point(double *x, double *y, double *z, struct entity_obj *entity)
{
   if(entity->type==LINE)
     {if(entity->dir==REV) {*x=entity->x1; *y=entity->y1; *z=entity->z1;}
      else {*x=entity->x2; *y=entity->y2; *z=entity->z2;}
     }
   if(entity->type==ARC)
     {if(entity->dir==CCW) {*x=entity->x1+entity->radius*cos(entity->ang_end);
                           *y=entity->y1+entity->radius*sin(entity->ang_end);
                           *z=entity->z1;}
      else {*x=entity->x1+entity->radius*cos(entity->ang_start);
            *y=entity->y1+entity->radius*sin(entity->ang_start);
            *z=entity->z1;}
     }
   if(entity->type==POINT) {*x=entity->x1; *y=entity->y1; *z=entity->z1;}
}

⌨️ 快捷键说明

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