Rev 1027 | Rev 8102 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1027 | bpr | 1 | /* Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis |
2 | * |
||
3 | * This program is free software; you can redistribute it and/or modify |
||
4 | * it under the terms of the GNU General Public License as published by |
||
5 | * the Free Software Foundation; either version 2 of the License, or |
||
6 | * (at your option) any later version. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
11 | * GNU General Public License for more details. |
||
12 | * |
||
13 | * You should have received a copy of the GNU General Public License |
||
14 | * along with this program; if not, write to the Free Software |
||
15 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
16 | */ |
||
17 | |||
18 | |||
19 | void vimg_init (void) |
||
20 | { |
||
21 | double x1,x2,y1,y2,t; |
||
22 | char *p, *p1, namebuf[2048]; |
||
23 | vimgf=NULL; |
||
24 | if(vimgfilename[0]==0) vimgf=stdout; |
||
25 | else { |
||
7675 | bpr | 26 | p=getenv("flydraw_filebase"); |
27 | if(p!=NULL && *p!=0) { /* secured execution */ |
||
28 | if(vimgfilename[0]=='/' || strstr(vimgfilename,"..")!=NULL) goto init_fail; |
||
29 | for(p1=vimgfilename;*p1;p1++) |
||
30 | if(!isalnum(*p1) && !isspace(*p1) && strchr("~_-/.",*p1)==NULL) goto init_fail; |
||
31 | p1=getenv("w_wims_session"); |
||
32 | if(p1!=NULL && *p1!=0) { |
||
33 | snprintf(namebuf,sizeof(namebuf),"../s2/%s/%s",p1,vimgfilename); |
||
34 | vimgf=fopen(namebuf,"w"); |
||
35 | } |
||
36 | else goto init_fail; |
||
37 | } |
||
38 | else vimgf=fopen(vimgfilename,"w"); |
||
1027 | bpr | 39 | } |
40 | if(vimgf==NULL) { |
||
7675 | bpr | 41 | init_fail: vimg_enable=0; return; |
1027 | bpr | 42 | } |
43 | x1=xstart; y1=ystart; |
||
44 | x2=sizex/xscale+xstart; |
||
45 | y2=sizey/yscale+ystart; |
||
46 | if(x2<x1) {t=x1;x1=x2;x2=t;} |
||
47 | if(y2<y1) {t=y1;y1=y2;y2=t;} |
||
48 | fprintf(vimgf,"999\nDXF created by Flydraw\n\ |
||
49 | 0\nSECTION\n 2\nHEADER\n\ |
||
50 | 9\n$ACADVER\n 1\nAC1006\n\ |
||
51 | 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n\ |
||
52 | 9\n$EXTMIN\n 10\n%f\n 20\n%f\n\ |
||
53 | 9\n$EXTMAX\n 10\n%f\n 20\n%f\n\ |
||
54 | 9\n$LIMMIN\n 10\n%f\n 20\n%f\n\ |
||
55 | 9\n$LIMMAX\n 10\n%f\n 20\n%f\n\ |
||
56 | 9\n$MEASUREMENT\n 70\n1\n 0\nENDSEC\n\ |
||
57 | 0\nSECTION\n 2\nCLASSES\n 0\nENDSEC\n\ |
||
58 | 0\nSECTION\n 2\nTABLES\n\ |
||
59 | 0\nTABLE\n 2\nLTYPE\n 70\n1\n\ |
||
60 | 0\nLTYPE\n 2\nCONTINUOUS\n 70\n64\n 3\nSolid line\n\ |
||
61 | 72\n65\n 73\n0\n 40\n0.0000\n 0\nENDTAB\n\ |
||
62 | 0\nTABLE\n 2\nLAYER\n 70\n1\n\ |
||
63 | 0\nLAYER\n 2\n1\n 70\n64\n 62\n7\n 6\nCONTINUOUS\n\ |
||
64 | 0\nENDTAB\n\ |
||
65 | 0\nTABLE\n 2\nSTYLE\n 70\n0\n 0\nENDTAB\n\ |
||
66 | 0\nENDSEC\n\ |
||
67 | 0\nSECTION\n 2\nBLOCKS\n 0\nENDSEC\n\ |
||
68 | 0\nSECTION\n 2\nENTITIES\n", |
||
7675 | bpr | 69 | x1,y1,x2,y2, x1,y1,x2,y2); |
1027 | bpr | 70 | vimg_ready=1; |
71 | } |
||
72 | |||
73 | void vimg_close (void) |
||
74 | { |
||
75 | if(vimgf==NULL || vimg_ready==0) return; |
||
76 | fprintf(vimgf," 0\nENDSEC \n 0\nEOF\n"); |
||
77 | fclose(vimgf); vimg_ready=vimg_enable=0; vimgf=NULL; |
||
78 | } |
||
79 | |||
80 | void vimg_arc (double x0,double y0, double rx, double ry,double a1, double a2) |
||
81 | { |
||
82 | double mx,my,ratio; |
||
83 | if(rx==ry) { |
||
7675 | bpr | 84 | fprintf(vimgf," 0\nARC\n 8\n1\n 10\n%f\n 20\n%f\n 40\n%f\n\ |
1027 | bpr | 85 | 50\n%f\n51\n%f\n",x0,y0,rx,a1,a2); |
7675 | bpr | 86 | return; |
1027 | bpr | 87 | } |
88 | if(rx>ry) {mx=rx;my=0;ratio=ry/rx;} |
||
89 | else {mx=0;my=ry;ratio=rx/ry;} |
||
90 | fprintf(vimgf," 0\nELLIPSE\n 10\n%f\n 20\n%f\n\ |
||
91 | 11\n%f\n 21\n%f\n 40\n%f\n 41\n%f\n 42\n%f\n", |
||
7675 | bpr | 92 | x0,y0,mx,my,ratio, |
93 | a1*3.14159265/180,a2*3.14159265/180); |
||
94 | |||
1027 | bpr | 95 | } |
96 | |||
97 | void vimg_ellipse (double x0, double y0, double rx, double ry) |
||
98 | { |
||
99 | if(rx==ry) { |
||
7675 | bpr | 100 | fprintf(vimgf," 0\nCIRCLE\n 8\n1\n 10\n%f\n 20\n%f\n\ |
1027 | bpr | 101 | 40\n%f\n",x0,y0,rx); |
7675 | bpr | 102 | return; |
1027 | bpr | 103 | } |
104 | else vimg_arc (x0,y0,rx,ry,0,360); |
||
105 | } |
||
106 | |||
107 | void vimg_line (double x1,double y1,double x2,double y2) |
||
108 | { |
||
109 | fprintf(vimgf," 0\nLINE\n 8\n1\n10\n%f\n 20\n%f\n 11\n%f\n 21\n%f\n", |
||
7675 | bpr | 110 | x1,y1,x2,y2); |
1027 | bpr | 111 | } |
112 | |||
113 | void vimg_polyline (double xy[], int cnt, int closed) |
||
114 | { |
||
115 | int i; |
||
116 | fprintf(vimgf," 0\nPOLYLINE\n 70\n%d\n",closed); |
||
117 | for(i=0;i<2*cnt;i++,i++) { |
||
7675 | bpr | 118 | fprintf(vimgf," 0\nVERTEX\n 8\n1\n 10\n%f\n 20\n%f\n", |
119 | xy[i],xy[i+1]); |
||
1027 | bpr | 120 | } |
121 | fprintf(vimgf," 0\nSEQEND\n"); |
||
122 | } |
||
123 | |||
124 | void vimg_rect (double x1, double y1, double x2, double y2) |
||
125 | { |
||
126 | double d[8]; |
||
127 | d[0]=x1; d[1]=y1; d[2]=x1; d[3]=y2; |
||
128 | d[4]=x2; d[5]=y2; d[6]=x2; d[7]=y1; |
||
129 | vimg_polyline (d,4,1); |
||
130 | } |
||
131 | |||
132 | void vimg_plotstart (void) |
||
133 | { |
||
134 | fprintf(vimgf," 0\nPOLYLINE\n 8\n1\n 70\n0\n"); |
||
135 | } |
||
136 | |||
137 | void vimg_plot1 (double x, double y) |
||
138 | { |
||
139 | fprintf(vimgf," 0\nVERTEX\n 8\n1\n 10\n%f\n 20\n%f\n", x,y); |
||
140 | } |
||
141 | |||
142 | void vimg_plotend (void) |
||
143 | { |
||
144 | fprintf(vimgf," 0\nSEQEND\n"); |
||
145 | } |
||
146 |