Господа! При использовании этих функций, представленных ниже
прошу делать ссылку на мое авторство, или в случае коммерческого ее
использования, делать мне отчисления. Процент отчислений обговаривается в каждом отдельном случае.

Код на С++ обработки DXF-файла:

while(1){
    fscanf(in,"%s",str);
        if(strcmp(str,"ENDSEC")==0)break;
    if(strcmp(str,"KONTUR")==0){strcpy(layer,"KONTUR"); break;}
    }
fclose(in);
//---------------------------------------------------------------
ar=fopen("array.dat","w");
er=fopen("err.dat","w");
in=fopen("inp.dxf","r");

// ===> ЗАПИСЫВАЕМ ПОЛЯ МАССИВА
//fprintf(ar,"npp name  xkrd  ykrd   r      l_arc    xst   yst     xen      yen\n");
//----------------------------------------------------------------------------
while(1){
    fscanf(in,"%s",str);all++;
    if(strcmp(str,"ENTITIES")==0)break;
    }
while(1)
    {
fscanf(in,"%s",str);
        if(strcmp(str,"ENDSEC")==0)break; //==>> КРУТИМ ДО ENDSEC
//==========================    A R C   ==================================
if(strcmp(str,"ARC")==0)varc=1;   
        if(varc==1&&strcmp(str,layer)==0)
    {
    all++; arc++; varc=0;
//    fprintf(ar,"=>arc=%d str=%s layer=%s\n",arc,str,layer);
    while(1){
//fprintf(er,"str=%s\nlayer=%s\n",str,layer);goto lin;
    fscanf(in,"%s",str);
        if(atof(str)==10){ //all++; arc++;
fscanf(in,"%s",str); x_krd=atof(str);
fscanf(in,"%s",str);
if(atof(str)==20){
    fscanf(in,"%s",str);
    fprintf(er,"ARC %d\n",all);
    fprintf(er,"%3.3lf\n",x_krd);
    y_krd=atof(str);fprintf(er,"%3.3lf\n",y_krd);
    goto l1;    }//=20
                    }//=10
        }// while
l1: read z_krd=atof(str);
read rad=atof(str);fprintf(er,"%3.3lf\n",rad);
read st_ang=atof(str);fprintf(er,"%3.3lf\n",st_ang);
read end_ang=atof(str);fprintf(er,"%3.3lf\n",end_ang);

//*  НАХОДИМ КООРДИНАТЫ НАЧАЛЬНОЙ И КОНЕЧНОЙ ТОЧЕК ДУГИ   *
if(st_ang<90&&st_ang>=0){st_y=(sin(st_ang*0.017453)*rad);
                           st_y+=y_krd;
       st_x=(cos(st_ang*0.017453)*rad);
       st_x+=x_krd;
      }
if(end_ang<90&&end_ang>=0){end_y=(sin(end_ang*0.017453)*rad);
                           end_y+=y_krd;
       end_x=(cos(end_ang*0.017453)*rad);
       end_x+=x_krd;
      }
if(st_ang<180&&st_ang>=90){st_y=(sin((180-st_ang)*0.017453)*rad);
                              st_y+=y_krd;
          st_x=(cos((180-st_ang)*0.017453)*rad);
          st_x=x_krd-st_x;
          }
if(end_ang<180&&end_ang>=90){end_y=(sin((180-end_ang)*0.017453)*rad);
                             end_y+=y_krd;
         end_x=(cos((180-end_ang)*0.017453)*rad);
         end_x=x_krd-end_x;
        }
if(st_ang<270&&st_ang>=180){st_y=(sin((st_ang-180)*0.017453)*rad);
                            st_y=y_krd-st_y;
        st_x=(cos((st_ang-180)*0.017453)*rad);
        st_x=x_krd-st_x;
        }
if(end_ang<270&&end_ang>=180){end_y=(sin((end_ang-180)*0.017453)*rad);
                              end_y=y_krd-end_y;
          end_x=(cos((end_ang-180)*0.017453)*rad);
          end_x=x_krd-end_x;
          }
if(st_ang<360&&st_ang>=270){st_y=(sin((360-st_ang)*0.017453)*rad);
                            st_y=y_krd-st_y;
        st_x=(cos((360-st_ang)*0.017453)*rad);
        st_x=x_krd+st_x;
        }
if(end_ang<360&&end_ang>=270){end_y=(sin((360-end_ang)*0.017453)*rad);
                              end_y=y_krd-end_y;
          end_x=(cos((360-end_ang)*0.017453)*rad);
          end_x=x_krd+end_x;
          }

npp[m]=m; name[m]='a'; xkrd[m]=x_krd; ykrd[m]=y_krd; zkrd[m]=z_krd; r[m]=rad;
st_angle[m]=st_ang; end_angle[m]=end_ang;
l_arc[m]=fabs((end_angle[m]-st_angle[m])/360*2*3.1416*rad); //НАШЛИ ДЛИНУ ДУГИ
xst[m]=st_x; yst[m]=st_y; zst[m]=-0.0001; xen[m]=end_x; yen[m]=end_y; zen[m]=-0.0001;
// ЗАПИСЫВАЕМ В ФАЙЛ ARRAY.DAT ДАННЫЕ МАССИВА
//fprintf(ar,"%d %c %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf\n",
//npp[m],name[m],xkrd[m],ykrd[m],r[m],l_arc[m],xst[m],yst[m],xen[m],yen[m]);
m++;    } // END ARC
//=======================   L I N E   =========================
if(strcmp(str,"LINE")==0)vlin=1;   
    if(vlin==1&&strcmp(str,layer)==0)
    { all++; lin++; vlin=0;
    while(1){
    fscanf(in,"%s",str);
//if(strcmp(str,"KONTUR")!=0)break; //ЕСЛИ РАЗМЕРНАЯ ЛИНИЯ
    if(atof(str)==10){ //all++; lin++;
fscanf(in,"%s",str); st_x=atof(str);
fscanf(in,"%s",str);
if(atof(str)==20){
    fscanf(in,"%s",str); st_y=atof(str);
    fprintf(er,"LINE %d\n",all);
    fprintf(er,"%3.3lf\n",st_x);
    fprintf(er,"%3.3lf\n",st_y);
goto l2;        }
                    }
        }// while
l2: read st_z=atof(str);
read end_x=atof(str);fprintf(er,"%3.3lf\n",end_x);
read end_y=atof(str);fprintf(er,"%3.3lf\n",end_y);
read end_z=atof(str);

npp[m]=m; name[m]='l'; xkrd[m]=ykrd[m]=zkrd[m]=r[m]=l_arc[m]=-0.0001;
xst[m]=st_x; yst[m]=st_y; zst[m]=st_z; xen[m]=end_x; yen[m]=end_y; zen[m]=end_z;
// ЗАПИСЫВАЕМ В ФАЙЛ ARRAY.DAT ДАННЫЕ МАССИВА
//fprintf(ar,"%d %c %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf\n",
//npp[m],name[m],xkrd[m],ykrd[m],r[m],l_arc[m],xst[m],yst[m],xen[m],yen[m]);
m++;    } // END LINE
// =================   C I R C L E   ==========================
if(strcmp(str,"CIRCLE")==0)vcir=1;
    if(vcir==1&&strcmp(str,layer)==0)
    { all++; cir++; vcir=0;
    while(1){
    fscanf(in,"%s",str);
//if(strcmp(str,"RASMER")==0)break; //ЕСЛИ РАЗМЕРНАЯ ЛИНИЯ
    if(atof(str)==10){
fscanf(in,"%s",str); x_krd=atof(str);
fscanf(in,"%s",str);
if(atof(str)==20){
    fscanf(in,"%s",str); y_krd=atof(str);
    fprintf(er,"CIRCLE %d\n",all);
    fprintf(er,"%3.3lf\n",x_krd);
    fprintf(er,"%3.3lf\n",y_krd);
goto l3;        }
                    }
        }// while
l3: read z_krd=atof(str);
read rad=atof(str);fprintf(er,"%3.3lf\n",rad);

npp[m]=m; name[m]='c'; xkrd[m]=x_krd; ykrd[m]=y_krd; zkrd[m]=z_krd; r[m]=rad;
xst[m]=yst[m]=zst[m]=xen[m]=yen[m]=zen[m]=l_arc[m]=-0.0001;
// ЗАПИСЫВАЕМ В ФАЙЛ ARRAY.DAT ДАННЫЕ МАССИВА
//fprintf(ar,"%d %c %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf\n",
//npp[m],name[m],xkrd[m],ykrd[m],r[m],l_arc[m],xst[m],yst[m],xen[m],yen[m]);
m++;    } // END CIRCLE
// =================   P O I N T   ===========================
if(strcmp(str,"POINT")==0)vpoi=1;   
    if(vpoi==1&&strcmp(str,layer)==0)
    { all++; poi++; vpoi=0;
    while(1){
    fscanf(in,"%s",str);
//if(strcmp(str,"RASMER")==0)break; //ЕСЛИ РАЗМЕРНАЯ ЛИНИЯ
    if(atof(str)==10){
fscanf(in,"%s",str); st_x=atof(str);
fscanf(in,"%s",str);
if(atof(str)==20){
    fscanf(in,"%s",str); st_y=atof(str);
    fprintf(er,"POINT %d\n",all);
    fprintf(er,"%3.3lf\n",st_x);
    fprintf(er,"%3.3lf\n",st_y);
goto l4;        }
                    }
        }// while
l4: read st_z=atof(str);

npp[m]=m; name[m]='p'; xkrd[m]=ykrd[m]=zkrd[m]=r[m]=l_arc[m]=-0.0001;
xst[m]=xen[m]=st_x; yst[m]=yen[m]=st_y; zst[m]=zen[m]=st_z;
// ЗАПИСЫВАЕМ В ФАЙЛ ARRAY.DAT ДАННЫЕ МАССИВА
//fprintf(ar,"%d %c %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf %3.4lf\n",
//npp[m],name[m],xkrd[m],ykrd[m],r[m],l_arc[m],xst[m],yst[m],xen[m],yen[m]);
m++;    } // END POINT
    gipot[m]=0;}  //*  ---> E N D   W H I L E   *