Mapper
contour_mxn.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 void contour_mxn(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 tscale;
16 extern GC gc;
17 extern unsigned long mnmap[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(hrap_grid->owner[i][j]==-1)
94  continue;
95 
96  if(wfo_all != 1) {
97 
98  for(m=0;m<20;m++) {
99 
100  if(wfo_in_use[m] == -1)
101  break;
102 
103  if(hrap_grid->owner[i][j]== wfo_in_use[m] &&
104  hrap_grid->owner[i+1][j]== wfo_in_use[m] &&
105  hrap_grid->owner[i+1][j+1]==wfo_in_use[m] &&
106  hrap_grid->owner[i][j+1]== wfo_in_use[m])
107 
108  break;
109 
110  }
111 
112  if(wfo_in_use[m]==-1)
113  continue;
114 
115  }
116 
117  value[0]=(float)pcp->value[i][j]/100;
118  value[1]=(float)pcp->value[i+1][j]/100;
119  value[2]=(float)pcp->value[i+1][j+1]/100;
120  value[3]=(float)pcp->value[i][j+1]/100;
121 
122  if(value[0]<=-50 || value[1]<=-50 ||
123  value[2]<=-50 || value[3]<=-50)
124  continue;
125 
126  value[4]=value[0];
127 
128  for(l=0;l<16;l++) {
129 
130  if(mnmap[l]==0)
131  continue;
132 
133  pnum=0;
134 
135  for(m=0;m<4;m++) {
136 
137  if((delim[tscale][l] >= value[m] &&
138  delim[tscale][l] < value[m+1]) ||
139  (delim[tscale][l] < value[m] &&
140  delim[tscale][l] >= value[m+1])) {
141 
142  if(value[m]==value[m+1])
143  continue;
144 
145  x[pnum]=(float)hrap_grid->coord[i+di[m+1]][j+dj[m+1]].x +
146  (float)(hrap_grid->coord[i+di[m]][j+dj[m]].x-
147  hrap_grid->coord[i+di[m+1]][j+dj[m+1]].x)/
148  (value[m]-value[m+1])*
149  (delim[tscale][l]-value[m+1]);
150 
151  y[pnum]=(float)hrap_grid->coord[i+di[m+1]][j+dj[m+1]].y +
152  (float)(hrap_grid->coord[i+di[m]][j+dj[m]].y-
153  hrap_grid->coord[i+di[m+1]][j+dj[m+1]].y)/
154  (value[m]-value[m+1])*
155  (delim[tscale][l]-value[m+1]);
156 
157  for(h=0;h<pnum;h++){
158 
159  if(x[h]==x[pnum] && y[h]==y[pnum])
160  goto hop;
161 
162  }
163 
164  if(pnum==2) {
165 
166  for(kk=0;kk<3;kk++) {
167 
168  dup_flag[kk]=0;
169 
170  for(mm=0;mm<4;mm++) {
171 
172  xint=(int)x[kk];
173  yint=(int)y[kk];
174 
175  if(xint/10==hrap_grid->coord[i+di[mm]][j+dj[mm]].x/10 &&
176  yint/10==hrap_grid->coord[i+di[mm]][j+dj[mm]].y/10)
177  dup_flag[kk]=1;
178 
179 
180  }
181  }
182  }
183  pnum++;
184 
185  hop:
186 
187  pnum=pnum;
188 
189  }
190 
191  }
192 
193 if(pnum==3) {
194 
195  mm=0;
196  for(kk=0;kk<3;kk++){
197 
198  if(dup_flag[kk]==0) {
199  xx[mm]=x[kk];
200  yy[mm++]=y[kk];
201 
202 
203  }
204 
205  }
206 
207 
208 
209  for(kk=0;kk<2;kk++){
210 
211  x[kk]=xx[kk];
212  y[kk]=yy[kk];
213 
214  }
215  pnum=mm;
216 
217  }
218 
219 if(pnum != 2 && pnum != 4)
220  continue;
221 
222  color=mnmap[l];
223 
224  XSetForeground(display,gc,color);
225 
226  if(zoom <= 1) {
227 
228  for(k=0;k<pnum;k++) {
229 
230  nx[k]=xmin+x[k]*cmult;
231  ny[k]=ymin+y[k]*cmult;
232 
233  }
234  }
235 
236  else {
237 
238  for(k=0;k<pnum;k++) {
239 
240  nx[k]=(xmin+(x[k]*cmult-lint1))*zoom + xcen;
241  ny[k]=(ymin+(y[k]*cmult-lint2))*zoom + ycen;
242 
243  }
244 
245 }
246  for(k=0;k<pnum;k++) {
247 
248  point[k].x=(nx[k]+5)/MY;
249  point[k].y=(ny[k]+5)/MY;
250 
251 
252  }
253 
254 
255 
256  if(pnum==2)
257  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
258 
259  else {
260 
261  if(delim[tscale][l] < value[1]) {
262 
263  XDrawLine(display,pixm,gc,point[1].x,point[1].y,point[2].x,point[2].y);
264  XDrawLine(display,pixm,gc,point[3].x,point[3].y,point[0].x,point[0].y);
265 
266  }
267 
268  else {
269 
270  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
271  XDrawLine(display,pixm,gc,point[2].x,point[2].y,point[3].x,point[3].y);
272 
273  }
274 
275  }
276  }
277 
278  }
279 }
280 
281 
282 line_width=0;
283 line_style=LineSolid;
284 cap_style=CapButt;
285 join_style=JoinMiter;
286 
287 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
288 
289 
290 return;
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 
355 
356 
static int i
void contour_mxn(Pixmap pixm, int h, int display_flag, char *file, int num)
Definition: contour_mxn.c:4
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
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 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