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