Mapper
contour_maxmin.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 void contour_maxmin(int isom,Pixmap pixm,int h, int display_flag,int type)
5 
6 {
7 
8 extern float delim[][16];
9 extern Font font[10];
10 extern Display *display;
11 extern int npoint[2],zoom;
12 extern GC gc;
13 extern unsigned long mnmap[16];
14 extern Widget drawing_area;
15 extern struct display_set display_set[4];
16 extern struct maxmin *maxmin;
17 int i,j,k,m,l;
18 int color,MY=10;
19 float xrat,yrat,mult,dmult,cmult;
20 long nx[4],ny[4];
21 Dimension width,height;
22 Arg args[10];
23 unsigned long XSIZE,YSIZE;
24 XPoint point[5];
26 signed long xcen,ycen;
27 int di[5],dj[5],dy,dx,pnum,kk,mm;
28 float value[5];
29 float x[5],y[5],xx[5],yy[5];
30 int line_style,cap_style,join_style;
31 unsigned line_width;
32 int xint,yint,dup_flag[5];
33 int maxtop,mintop;
34 extern int tscale;
35 float fm;
36 
37 dx=1;dy=1;
38 
39 di[0]=0;dj[0]=0;
40 di[1]=1;dj[1]=0;
41 di[2]=1;dj[2]=1;
42 di[3]=0;dj[3]=1;
43 di[4]=0;dj[4]=0;
44 
45 XSetFont(display,gc,font[0]);
46 
54 
55 XtSetArg(args[0],XtNwidth,&width);
56 XtSetArg(args[1],XtNheight,&height);
57 XtGetValues(drawing_area,args,2);
58 
59 XSIZE=(long)width*10L;
60 YSIZE=(long)height*10L;
61 
62 xrat=(float)XSIZE/(float)12800;
63 yrat=(float)YSIZE/(float)9600;
64 
65 if(xrat < yrat)
66  mult=xrat;
67 
68 else
69  mult=yrat;
70 
72 lint1=(long)npoint[0]*(long)MY;
73 lint2=(long)npoint[1]*(long)MY;
74 
75 line_width=0;
76 line_style=LineSolid;
77 cap_style=CapButt;
78 join_style=JoinMiter;
79 
80 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
81 
82 for(i=0;i<maxmin->maxi-1;i++) {
83 
84 for(j=0;j<maxmin->maxj-1;j++) {
85 
86  if(type==0) {
87 
88  value[0]=(float)(maxmin->maxvalue[isom][i][j])/10;
89  value[1]=(float)(maxmin->maxvalue[isom][i+1][j])/10;
90  value[2]=(float)(maxmin->maxvalue[isom][i+1][j+1])/10;
91  value[3]=(float)(maxmin->maxvalue[isom][i][j+1])/10;
92 
93  }
94 
95  else if(type==1) {
96 
97  value[0]=(float)(maxmin->minvalue[isom][i][j])/10;
98  value[1]=(float)(maxmin->minvalue[isom][i+1][j])/10;
99  value[2]=(float)(maxmin->minvalue[isom][i+1][j+1])/10;
100  value[3]=(float)(maxmin->minvalue[isom][i][j+1])/10;
101 
102  }
103 
104  maxtop=0;
105  mintop=9999;
106  for(mm=0;mm<4;mm++) {
107 
108  if(value[mm] < mintop)
109  mintop=value[mm];
110 
111  if(value[mm] > maxtop)
112  maxtop=value[mm];
113 
114  }
115 
116  value[4]=value[0];
117 
118  for(l=0;l<16;l++) {
119 
120  if(mnmap[l]==0)
121  continue;
122 
123  /*
124  if(telim < mintop || telim > maxtop)
125  continue; */
126 
127  pnum=0;
128 
129  for(m=0;m<4;m++) {
130 
131  if((delim[tscale][l] >= value[m] &&
132  delim[tscale][l] < value[m+1]) ||
133  (delim[tscale][l] < value[m] &&
134  delim[tscale][l] >= value[m+1])) {
135 
136  if(value[m]==value[m+1])
137  continue;
138 
139  x[pnum]=(float)maxmin->coord[i+di[m+1]][j+dj[m+1]].x +
140  (float)(maxmin->coord[i+di[m]][j+dj[m]].x-
141  maxmin->coord[i+di[m+1]][j+dj[m+1]].x)/
142  (value[m]-value[m+1])*
143  (delim[tscale][l]-value[m+1]);
144 
145  y[pnum]=(float)maxmin->coord[i+di[m+1]][j+dj[m+1]].y +
146  (float)(maxmin->coord[i+di[m]][j+dj[m]].y-
147  maxmin->coord[i+di[m+1]][j+dj[m+1]].y)/
148  (value[m]-value[m+1])*
149  (delim[tscale][l]-value[m+1]);
150 
151  for(h=0;h<pnum;h++){
152 
153  if(x[h]==x[pnum] && y[h]==y[pnum])
154  goto hop;
155 
156  }
157 
158  if(pnum==2) {
159 
160  for(kk=0;kk<3;kk++) {
161 
162  dup_flag[kk]=0;
163 
164  for(mm=0;mm<4;mm++) {
165 
166  xint=(int)x[kk];
167  yint=(int)y[kk];
168 
169  if(xint/10==maxmin->coord[i+di[mm]][j+dj[mm]].x/10 &&
170  yint/10==maxmin->coord[i+di[mm]][j+dj[mm]].y/10)
171  dup_flag[kk]=1;
172 
173 
174  }
175  }
176  }
177  pnum++;
178 
179  hop:
180 
181  pnum=pnum;
182 
183  }
184 
185  }
186 
187 if(pnum==3) {
188 
189  mm=0;
190  for(kk=0;kk<3;kk++){
191 
192  if(dup_flag[kk]==0) {
193  xx[mm]=x[kk];
194  yy[mm++]=y[kk];
195 
196 
197  }
198 
199  }
200 
201  for(kk=0;kk<2;kk++){
202 
203  x[kk]=xx[kk];
204  y[kk]=yy[kk];
205 
206  }
207  pnum=mm;
208 
209  }
210 
211 if(pnum != 2 && pnum != 4)
212  continue;
213 
214  color=mnmap[l];
215  XSetForeground(display,gc,color);
216 
217  if(zoom <= 1) {
218 
219  for(k=0;k<pnum;k++) {
220 
221  nx[k]=xmin+x[k]*cmult;
222  ny[k]=ymin+y[k]*cmult;
223 
224  }
225  }
226 
227  else {
228 
229  for(k=0;k<pnum;k++) {
230 
231  nx[k]=(xmin+x[k]*cmult-lint1)*zoom + xcen;
232  ny[k]=(ymin+y[k]*cmult-lint2)*zoom + ycen;
233 
234  }
235 
236  }
237  for(k=0;k<pnum;k++) {
238 
239  point[k].x=(nx[k]+5)/MY;
240  point[k].y=(ny[k]+5)/MY;
241 
242 
243  }
244 
245 
246 
247  if(pnum==2)
248  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
249 
250  else {
251 
252  if(delim[tscale][l] < value[1]) {
253 
254  XDrawLine(display,pixm,gc,point[1].x,point[1].y,point[2].x,point[2].y);
255  XDrawLine(display,pixm,gc,point[3].x,point[3].y,point[0].x,point[0].y);
256 
257  }
258 
259  else {
260 
261  XDrawLine(display,pixm,gc,point[0].x,point[0].y,point[1].x,point[1].y);
262  XDrawLine(display,pixm,gc,point[2].x,point[2].y,point[3].x,point[3].y);
263 
264  }
265 
266  }
267  }
268 
269  }
270 }
271 
272 
273 line_width=0;
274 line_style=LineSolid;
275 cap_style=CapButt;
276 join_style=JoinMiter;
277 
278 XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
279 
280 
281 return;
282 
283 }
284 
285 
286 
287 
288 
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 
static int i
void contour_maxmin(int isom, Pixmap pixm, int h, int display_flag, int type)
Definition: contour_maxmin.c:4
Display * display
Definition: mapper.c:159
Font font[10]
Definition: mapper.c:161
float mult
Definition: edit_stations.c:6
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
int dy
long lint1
GC gc
Definition: mapper.c:163
int dx
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]
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 y
Definition: misc_new.h:681
short int x
Definition: misc_new.h:680
int maxj
Definition: misc_new.h:768
short int *** maxvalue
Definition: misc_new.h:765
struct icoord ** coord
Definition: misc_new.h:764
short int *** minvalue
Definition: misc_new.h:766
int maxi
Definition: misc_new.h:767
Definition: mapp2h.h:29
int y
Definition: mapp2h.h:30
int x
Definition: mapp2h.h:30