Mapper
contour_pcpn_new.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 void contour_pcpn(Pixmap pixm,int h, int display_flag,char *file,int num)
5 
6 {
7 
8 extern int wfo_all;
9 extern int wfo_in_use[20];
10 extern int pcp_in_use[500];
11 extern struct pcp *pcp;
12 extern Font font[10];
13 extern Display *display;
14 extern int npoint[2],zoom;
15 extern int kscale;
16 extern GC gc;
17 extern unsigned long xmap[16];
18 extern Widget drawing_area;
19 extern float delim[][16];
20 extern struct display_set display_set[4];
21 extern struct hrap_grid *hrap_grid;
22 int i,j,k,m,l;
23 int color,MY=10;
24 float xrat,yrat,mult,dmult,cmult;
25 long nx[4],ny[4];
26 Dimension width,height;
27 Arg args[10];
28 unsigned long XSIZE,YSIZE;
29 XPoint point[5];
31 signed long xcen,ycen;
32 int di[5],dj[5],dy,dx,pnum,kk,mm;
33 float value[5];
34 float x[5],y[5],xx[5],yy[5];
35 int line_style,cap_style,join_style;
36 unsigned line_width;
37 int xint,yint,dup_flag[5];
38 
39 if(pcp_in_use[num]==-1)
40  return;
41 
42 read_file(file,num,pcp);
43 
44 dx=1;dy=1;
45 
46 di[0]=0;dj[0]=0;
47 di[1]=1;dj[1]=0;
48 di[2]=1;dj[2]=1;
49 di[3]=0;dj[3]=1;
50 di[4]=0;dj[4]=0;
51 
52 XSetFont(display,gc,font[0]);
53 
61 
62 XtSetArg(args[0],XtNwidth,&width);
63 XtSetArg(args[1],XtNheight,&height);
64 XtGetValues(drawing_area,args,2);
65 
66 XSIZE=(long)width*10L;
67 YSIZE=(long)height*10L;
68 
69 xrat=(float)XSIZE/(float)12800;
70 yrat=(float)YSIZE/(float)9600;
71 
72 if(xrat < yrat)
73  mult=xrat;
74 
75 else
76  mult=yrat;
77 
79 lint1=(long)npoint[0]*(long)MY;
80 lint2=(long)npoint[1]*(long)MY;
81 
82 line_width=2;
83 line_style=LineSolid;
84 cap_style=CapButt;
85 join_style=JoinMiter;
86 
87 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
88 
89 for(i=0;i<hrap_grid->maxi-1;i++) {
90 
91 for(j=0;j<hrap_grid->maxj-1;j++) {
92 
93  if(wfo_all != 1) {
94 
95  for(m=0;m<20;m++) {
96 
97  if(wfo_in_use[m] == -1)
98  break;
99 
100  if(hrap_grid->owner[i][j]== wfo_in_use[m] &&
101  hrap_grid->owner[i+1][j]== wfo_in_use[m] &&
102  hrap_grid->owner[i+1][j+1]==wfo_in_use[m] &&
103  hrap_grid->owner[i][j+1]== wfo_in_use[m])
104 
105  break;
106 
107  }
108 
109  if(wfo_in_use[m]==-1)
110  continue;
111 
112  }
113 
114 
115  value[0]=(float)pcp->value[i][j]/100;
116  value[1]=(float)pcp->value[i+1][j]/100;
117  value[2]=(float)pcp->value[i+1][j+1]/100;
118  value[3]=(float)pcp->value[i][j+1]/100;
119 
120  if(value[0]<=0.001 && value[0]>=-0.001 &&
121  value[1]<=0.001 && value[1]>=-0.001 &&
122  value[2]<=0.001 && value[2]>=-0.001 &&
123  value[3]<=0.001 && value[3]>=-0.001)
124  continue;
125 
126  value[4]=value[0];
127 
128  for(l=0;l<16;l++) {
129  if(xmap[l]==0)
130  continue;
131 
132  pnum=0;
133 
134  for(m=0;m<4;m++) {
135 
136  if((delim[kscale][l] >= value[m] &&
137  delim[kscale][l] < value[m+1]) ||
138  (delim[kscale][l] < value[m] &&
139  delim[kscale][l] >= value[m+1])) {
140 
141  if(value[m]==value[m+1])
142  continue;
143 
144  x[pnum]=(float)hrap_grid->coord[i+di[m+1]][j+dj[m+1]].x +
145  (float)(hrap_grid->coord[i+di[m]][j+dj[m]].x-
146  hrap_grid->coord[i+di[m+1]][j+dj[m+1]].x)/
147  (value[m]-value[m+1])*
148  (delim[kscale][l]-value[m+1]);
149 
150  y[pnum]=(float)hrap_grid->coord[i+di[m+1]][j+dj[m+1]].y +
151  (float)(hrap_grid->coord[i+di[m]][j+dj[m]].y-
152  hrap_grid->coord[i+di[m+1]][j+dj[m+1]].y)/
153  (value[m]-value[m+1])*
154  (delim[kscale][l]-value[m+1]);
155 
156  for(h=0;h<pnum;h++){
157 
158  if(x[h]==x[pnum] && y[h]==y[pnum])
159  goto hop;
160 
161  }
162 
163  if(pnum==2) {
164 
165  for(kk=0;kk<3;kk++) {
166 
167  dup_flag[kk]=0;
168 
169  for(mm=0;mm<4;mm++) {
170 
171  xint=(int)x[kk];
172  yint=(int)y[kk];
173 
174  if(xint/10==hrap_grid->coord[i+di[mm]][j+dj[mm]].x/10 &&
175  yint/10==hrap_grid->coord[i+di[mm]][j+dj[mm]].y/10)
176  dup_flag[kk]=1;
177 
178 
179  }
180  }
181  }
182  pnum++;
183 
184  hop:
185 
186  pnum=pnum;
187 
188  }
189 
190  }
191 
192 if(pnum==3) {
193 
194  mm=0;
195  for(kk=0;kk<3;kk++){
196 
197  if(dup_flag[kk]==0) {
198  xx[mm]=x[kk];
199  yy[mm++]=y[kk];
200 
201 
202  }
203 
204  }
205 
206 
207 
208  for(kk=0;kk<2;kk++){
209 
210  x[kk]=xx[kk];
211  y[kk]=yy[kk];
212 
213  }
214  pnum=mm;
215 
216  }
217 
218 if(pnum != 2 && pnum != 4)
219  continue;
220 
221  color=xmap[l];
222  XSetForeground(display,gc,color);
223 
224  if(zoom <= 1) {
225 
226  for(k=0;k<pnum;k++) {
227 
228  nx[k]=xmin+x[k]*cmult;
229  ny[k]=ymin+y[k]*cmult;
230 
231  }
232  }
233 
234  else {
235 
236  for(k=0;k<pnum;k++) {
237 
238  nx[k]=(xmin+(x[k]*cmult-lint1))*zoom + xcen;
239  ny[k]=(ymin+(y[k]*cmult-lint2))*zoom + ycen;
240 
241  }
242 
243 }
244  for(k=0;k<pnum;k++) {
245 
246  point[k].x=(nx[k]+5)/MY;
247  point[k].y=(ny[k]+5)/MY;
248 
249 
250  }
251 
252 
253 
254  if(pnum==2)
255  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
256 
257  else {
258 
259  if(delim[kscale][l] < value[1]) {
260 
261  XDrawLine(display,pixm,gc,point[1].x,point[1].y,point[2].x,point[2].y);
262  XDrawLine(display,pixm,gc,point[3].x,point[3].y,point[0].x,point[0].y);
263 
264  }
265 
266  else {
267 
268  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
269  XDrawLine(display,pixm,gc,point[2].x,point[2].y,point[3].x,point[3].y);
270 
271  }
272 
273  }
274  }
275 
276  }
277 }
278 
279 
280 line_width=0;
281 line_style=LineSolid;
282 cap_style=CapButt;
283 join_style=JoinMiter;
284 
285 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
286 
287 
288 return;
289 
290 }
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 
323 
324 
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
340 
341 
342 
343 
344 
345 
346 
347 
348 
349 
350 
351 
352 
353 
354 
static int i
void contour_pcpn(Pixmap pixm, int h, int display_flag, char *file, int num)
Display * display
Definition: mapper.c:159
Font font[10]
Definition: mapper.c:161
float mult
Definition: edit_stations.c:6
void read_file(char *, int, struct pcp *)
Definition: read_file.c:5
double yy
Definition: mapp2h.h:41
int j
Definition: mapp2h.h:48
int k
Definition: mapp2h.h:48
double xx
Definition: mapp2h.h:41
int display_flag
Definition: mapper.c:100
float xrat
long xmax
int dj[4]
int color
float value
float yrat
long ny[4]
long ymax
struct pcp * pcp
Definition: mapper.c:140
int dy
int pcp_in_use[50]
Definition: mapper.c:78
long lint1
GC gc
Definition: mapper.c:163
int dx
struct hrap_grid * hrap_grid
Definition: mapper.c:142
float cmult
unsigned long xmap[16]
Definition: mapper.c:116
signed long xcen
Dimension height
signed long ycen
Dimension width
long lint2
Arg args[10]
long xmin
unsigned long XSIZE
int MY
int zoom
float delim[][16]
Definition: mapper.c:30
long nx[4]
float dmult
Widget drawing_area
Definition: mapper.c:185
int npoint[2]
Definition: mapper.c:105
long ymin
unsigned long YSIZE
int kscale
Definition: mapper.c:101
int di[4]
short int y
Definition: misc.h:498
short int x
Definition: misc.h:497
float dmult[4]
Definition: misc.h:613
long xmin[4]
Definition: misc.h:607
long xmax[4]
Definition: misc.h:609
long ymax[4]
Definition: misc.h:610
long ymin[4]
Definition: misc.h:608
long ycen[4]
Definition: misc.h:612
long xcen[4]
Definition: misc.h:611
short int maxi
Definition: misc.h:580
short int maxj
Definition: misc.h:581
struct coord ** coord
Definition: misc.h:584
short int ** owner
Definition: misc_new.h:811
Definition: misc.h:596
short int ** value
Definition: misc.h:599
Definition: mapp2h.h:29
int y
Definition: mapp2h.h:30
int x
Definition: mapp2h.h:30