1 #include <stdlib.h>
2 #include <string.h>
3 #include "global.h"
4
add_arc(struct dxf_file * dxf,struct Map_info * Map)5 void add_arc(struct dxf_file *dxf, struct Map_info *Map)
6 {
7 int code;
8 char handle[DXF_BUF_SIZE]; /* entity handle, 16 hexadecimal digits */
9 char layer[DXF_BUF_SIZE]; /* layer name */
10 int layer_flag = 0; /* indicates if a layer name has been found */
11 int xflag = 0; /* indicates if a x value has been found */
12 int yflag = 0; /* indicates if a y value has been found */
13 int rflag = 0; /* indicates if a radius has been found */
14 int sflag = 0; /* indicates if a start_angle has been found */
15 int fflag = 0; /* indicates if a finish_angle has been found */
16 double centerx = 0; /* read in from dxf file */
17 double centery = 0; /* read in from dxf file */
18 double radius = 0; /* read in from dxf file */
19 double zcoor = 0; /* read in from dxf file */
20 float start_angle = 0; /* read in from dxf file */
21 float finish_angle = 0; /* read in from dxf file */
22 int arr_size = 0;
23
24 handle[0] = 0;
25 strcpy(layer, UNIDENTIFIED_LAYER);
26
27 /* read in lines and process information until a 0 is read in */
28 while ((code = dxf_get_code(dxf)) != 0) {
29 if (code == -2)
30 return;
31
32 switch (code) {
33 case 5: /* entity handle */
34 strcpy(handle, dxf_buf);
35 break;
36 case 8: /* layer name */
37 if (!layer_flag && *dxf_buf) {
38 if (flag_list) {
39 if (!is_layer_in_list(dxf_buf))
40 add_layer_to_list(dxf_buf, 1);
41 return;
42 }
43 /* skip if (opt_layers != NULL && (
44 * (flag_invert == 0 && is_layer_in_list == 0) ||
45 * (flag_invert == 1 && is_layer_in_list == 1)
46 * )
47 */
48 if (opt_layers && flag_invert == is_layer_in_list(dxf_buf))
49 return;
50 strcpy(layer, dxf_buf);
51 layer_flag = 1;
52 }
53 break;
54 case 10: /* x coordinate */
55 centerx = atof(dxf_buf);
56 xflag = 1;
57 break;
58 case 20: /* y coordinate */
59 centery = atof(dxf_buf);
60 yflag = 1;
61 break;
62 case 30: /* z coordinate */
63 zcoor = atof(dxf_buf);
64 break;
65 case 40: /* radius */
66 radius = atof(dxf_buf);
67 rflag = 1;
68 break;
69 case 50: /* start angle */
70 start_angle = atof(dxf_buf);
71 sflag = 1;
72 break;
73 case 51: /* end angle */
74 finish_angle = atof(dxf_buf);
75 fflag = 1;
76 break;
77 }
78 }
79
80 if (xflag && yflag && rflag && sflag && fflag) {
81 arr_size =
82 make_arc(0, centerx, centery, radius, start_angle, finish_angle,
83 zcoor);
84 write_vect(Map, layer, "ARC", handle, "", arr_size, GV_LINE);
85 }
86
87 return;
88 }
89