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