Rev 8102 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8102 | Rev 12473 | ||
---|---|---|---|
Line 17... | Line 17... | ||
17 | 17 | ||
18 | #include "flydraw.h" |
18 | #include "flydraw.h" |
19 | 19 | ||
20 | void vimg_init (void) |
20 | void vimg_init (void) |
21 | { |
21 | { |
22 |
|
22 | double x1,x2,y1,y2,t; |
23 |
|
23 | char *p, *p1, namebuf[2048]; |
24 |
|
24 | vimgf=NULL; |
25 |
|
25 | if(vimgfilename[0]==0) vimgf=stdout; |
26 |
|
26 | else { |
27 |
|
27 | p=getenv("flydraw_filebase"); |
28 |
|
28 | if(p!=NULL && *p!=0) { /* secured execution */ |
29 |
|
29 | if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail; |
30 |
|
30 | for(p1=vimgfilename;*p1;p1++) |
31 |
|
31 | if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail; |
32 |
|
32 | p1=getenv("w_wims_session"); |
33 |
|
33 | if(p1!=NULL && *p1!=0) { |
34 |
|
34 | snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename); |
35 |
|
35 | vimgf=fopen(namebuf,"w"); |
36 | } |
- | |
37 | else goto init_fail; |
- | |
38 | } |
36 | } |
39 | else |
37 | else goto init_fail; |
40 | } |
38 | } |
- | 39 | else vimgf=fopen(vimgfilename,"w"); |
|
- | 40 | } |
|
41 |
|
41 | if(vimgf==NULL) { |
42 | init_fail: vimg_enable=0; return; |
42 | init_fail: vimg_enable=0; return; |
43 |
|
43 | } |
44 |
|
44 | x1=xstart; y1=ystart; |
45 |
|
45 | x2=sizex/xscale+xstart; |
46 |
|
46 | y2=sizey/yscale+ystart; |
47 |
|
47 | if(x2<x1) {t=x1;x1=x2;x2=t;} |
48 |
|
48 | if(y2<y1) {t=y1;y1=y2;y2=t;} |
49 |
|
49 | fprintf(vimgf,"999\nDXF created by Flydraw\n\ |
50 | 0\nSECTION\n 2\nHEADER\n\ |
50 | 0\nSECTION\n 2\nHEADER\n\ |
51 | 9\n$ACADVER\n 1\nAC1006\n\ |
51 | 9\n$ACADVER\n 1\nAC1006\n\ |
52 | 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n\ |
52 | 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n\ |
53 | 9\n$EXTMIN\n 10\n%f\n 20\n%f\n\ |
53 | 9\n$EXTMIN\n 10\n%f\n 20\n%f\n\ |
54 | 9\n$EXTMAX\n 10\n%f\n 20\n%f\n\ |
54 | 9\n$EXTMAX\n 10\n%f\n 20\n%f\n\ |
Line 67... | Line 67... | ||
67 | 0\nENDSEC\n\ |
67 | 0\nENDSEC\n\ |
68 | 0\nSECTION\n 2\nBLOCKS\n 0\nENDSEC\n\ |
68 | 0\nSECTION\n 2\nBLOCKS\n 0\nENDSEC\n\ |
69 | 0\nSECTION\n 2\nENTITIES\n", |
69 | 0\nSECTION\n 2\nENTITIES\n", |
70 | x1,y1,x2,y2, x1,y1,x2,y2); |
70 | x1,y1,x2,y2, x1,y1,x2,y2); |
71 | vimg_ready=1; |
71 | vimg_ready=1; |
72 | } |
72 | } |
73 | 73 | ||
74 | void vimg_close (void) |
74 | void vimg_close (void) |
75 | { |
75 | { |
76 |
|
76 | if(vimgf==NULL || vimg_ready==0) return; |
77 |
|
77 | fprintf(vimgf," 0\nENDSEC \n 0\nEOF\n"); |
78 |
|
78 | fclose(vimgf); vimg_ready=vimg_enable=0; vimgf=NULL; |
79 | } |
79 | } |
80 | 80 | ||
81 | void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2) |
81 | void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2) |
82 | { |
82 | { |
83 |
|
83 | double mx,my,ratio; |
84 |
|
84 | if(rx==ry) { |
85 |
|
85 | fprintf(vimgf," 0\nARC\n 8\n1\n 10\n%f\n 20\n%f\n 40\n%f\n\ |
86 | 50\n%f\n51\n%f\n",x0,y0,rx,a1,a2); |
86 | 50\n%f\n51\n%f\n",x0,y0,rx,a1,a2); |
87 |
|
87 | return; |
88 |
|
88 | } |
89 |
|
89 | if(rx>ry) {mx=rx;my=0;ratio=ry/rx;} |
90 |
|
90 | else {mx=0;my=ry;ratio=rx/ry;} |
91 |
|
91 | fprintf(vimgf," 0\nELLIPSE\n 10\n%f\n 20\n%f\n\ |
92 | 11\n%f\n 21\n%f\n 40\n%f\n 41\n%f\n 42\n%f\n", |
92 | 11\n%f\n 21\n%f\n 40\n%f\n 41\n%f\n 42\n%f\n", |
93 | x0,y0,mx,my,ratio, |
93 | x0,y0,mx,my,ratio, |
94 | a1*3.14159265/180,a2*3.14159265/180); |
94 | a1*3.14159265/180,a2*3.14159265/180); |
95 | 95 | ||
96 | } |
96 | } |
97 | 97 | ||
98 | void vimg_ellipse (double x0, double y0, double rx, double ry) |
98 | void vimg_ellipse (double x0, double y0, double rx, double ry) |
99 | { |
99 | { |
100 |
|
100 | if(rx==ry) { |
101 |
|
101 | fprintf(vimgf," 0\nCIRCLE\n 8\n1\n 10\n%f\n 20\n%f\n\ |
102 | 40\n%f\n",x0,y0,rx); |
102 | 40\n%f\n",x0,y0,rx); |
103 |
|
103 | return; |
104 |
|
104 | } |
105 |
|
105 | else vimg_arc (x0,y0,rx,ry,0,360); |
106 | } |
106 | } |
107 | 107 | ||
108 | void vimg_line (double x1,double y1,double x2,double y2) |
108 | void vimg_line (double x1,double y1,double x2,double y2) |
109 | { |
109 | { |
110 |
|
110 | fprintf(vimgf," 0\nLINE\n 8\n1\n10\n%f\n 20\n%f\n 11\n%f\n 21\n%f\n", |
111 |
|
111 | x1,y1,x2,y2); |
112 | } |
112 | } |
113 | 113 | ||
114 | void vimg_polyline (double xy[], int cnt, int closed) |
114 | void vimg_polyline (double xy[], int cnt, int closed) |
115 | { |
115 | { |
116 |
|
116 | int i; |
117 |
|
117 | fprintf(vimgf," 0\nPOLYLINE\n 70\n%d\n",closed); |
118 |
|
118 | for(i=0;i<2*cnt;i++,i++) { |
119 |
|
119 | fprintf(vimgf," 0\nVERTEX\n 8\n1\n 10\n%f\n 20\n%f\n", |
120 |
|
120 | xy[i],xy[i+1]); |
121 |
|
121 | } |
122 |
|
122 | fprintf(vimgf," 0\nSEQEND\n"); |
123 | } |
123 | } |
124 | 124 | ||
125 | void vimg_rect (double x1, double y1, double x2, double y2) |
125 | void vimg_rect (double x1, double y1, double x2, double y2) |
126 | { |
126 | { |
127 |
|
127 | double d[8]; |
128 |
|
128 | d[0]=x1; d[1]=y1; d[2]=x1; d[3]=y2; |
129 |
|
129 | d[4]=x2; d[5]=y2; d[6]=x2; d[7]=y1; |
130 |
|
130 | vimg_polyline (d,4,1); |
131 | } |
131 | } |
132 | 132 | ||
133 | void vimg_plotstart (void) |
133 | void vimg_plotstart (void) |
134 | { |
134 | { |
135 |
|
135 | fprintf(vimgf," 0\nPOLYLINE\n 8\n1\n 70\n0\n"); |
136 | } |
136 | } |
137 | 137 | ||
138 | void vimg_plot1 (double x, double y) |
138 | void vimg_plot1 (double x, double y) |
139 | { |
139 | { |
140 |
|
140 | fprintf(vimgf," 0\nVERTEX\n 8\n1\n 10\n%f\n 20\n%f\n", x,y); |
141 | } |
141 | } |
142 | 142 | ||
143 | void vimg_plotend (void) |
143 | void vimg_plotend (void) |
144 | { |
144 | { |
145 |
|
145 | fprintf(vimgf," 0\nSEQEND\n"); |
146 | } |
146 | } |
147 | - |