Mapper
plot_map.c
Go to the documentation of this file.
1 
2 #include "/usr/include/X11/bitmaps/wide_weave"
3 #include "prototypes.h"
4 
5 void plot_map(Pixmap pixm,int h, int display_flag,int num)
6 
7 {
9 int forecast_basins_flag;
10 extern struct map map[1500];
11 extern int kscale;
12 extern struct hrap_grid *hrap_grid;
13 extern Font font[10];
14 extern Display *display;
15 extern int npoint[2],zoom;
16 extern int kscale;
17 extern GC gc;
18 extern unsigned long xmap[16];
19 extern unsigned long qmap[16];
20 extern Widget drawing_area;
21 extern float delim[5][16];
22 extern struct display_set display_set[4];
23 int k;
24 int x,y,ip,ib;
25 int color,MY=10;
26 float xrat,yrat,mult,dmult,cmult;
27 Dimension width,height;
28 Arg args[10];
29 unsigned long XSIZE,YSIZE;
30 signed long xmin,xmax,ymin,ymax,lint1,lint2;
31 signed long xcen,ycen;
32 int di[4],dj[4],dy,dx;
33 XPoint point[10000];
34 XPoint mpoint[6];
35 int l,line_width,line_style,cap_style,join_style;
36 double mapvalue;
37 signed long r,s;
38 int nx[6],ny[6];
39 int minx,miny,ix,iy,maxx,maxy;
40 extern Region region;
41 float uz,mz,lz,gz,fx,fy;
42 
43 minx=hrap_grid->hrap_minx;
44 miny=hrap_grid->hrap_miny;
45 maxx=hrap_grid->maxi;
46 maxy=hrap_grid->maxj;
47 
48 dx=1;dy=1;
49 
50 di[0]=0;dj[0]=0;
51 di[1]=1;dj[1]=0;
52 di[2]=1;dj[2]=1;
53 di[3]=0;dj[3]=1;
54 
55 
56 
64 
65 XtSetArg(args[0],XtNwidth,&width);
66 XtSetArg(args[1],XtNheight,&height);
67 XtGetValues(drawing_area,args,2);
68 
69 XSIZE=(long)width*10L;
70 YSIZE=(long)height*10L;
71 
72 xrat=(float)XSIZE/(float)12800;
73 yrat=(float)YSIZE/(float)9600;
74 
75 if(xrat < yrat)
76  mult=xrat;
77 
78 else
79  mult=yrat;
80 
82 lint1=(long)npoint[0]*(long)MY;
83 lint2=(long)npoint[1]*(long)MY;
84 XSetFillRule(display,gc,WindingRule);
85 
86 for(ib=0;map[ib].hb5[0]!=0;ib++) {
87 
88  if(map[ib].maps_done[num] <=0)
89  continue;
90 
91  for(l=0;l<map[ib].basin_points;l++) {
92 
93  r=map[ib].basin[l].x;
94  s=map[ib].basin[l].y;
95 
96  if(zoom<=1) {
97 
98  point[l].x=(xmin+(float)r * cmult)/MY;
99  point[l].y=(ymin+(float)s * cmult)/MY;
100 
101  }
102  else {
103 
104  fx =((((xmin+(float)r*cmult)-lint1)*zoom+xcen)/MY);
105  fy=((((ymin+(float)s*cmult)-lint2)*zoom+ycen)/MY);
106 
107 
108  if(fx < 0)
109  fx=0;
110  if(fy < 0)
111  fy=0;
112  if(fx > width)
113  fx=width;
114  if(fy>height)
115  fy=height;
116 
117  point[l].x=(short int)fx;
118  point[l].y=(short int)fy;
119 
120  }
121 
122  }
123 
124  if(map[ib].fmap_flag==0)
125  continue;
126 
127  lz=map[ib].lz[num];
128  mz=map[ib].mz[num];
129  uz=map[ib].uz[num];
130  gz=map[ib].gz[num];
131 
132  region=XPolygonRegion(point,map[ib].basin_points,WindingRule);
133 
134  XSetRegion(display,gc,region);
135  XDestroyRegion(region);
136  for(l=0;l<map[ib].hrap_points;l++) {
137 
138  x=map[ib].hrap_data[l].x;
139  y=map[ib].hrap_data[l].y;
140 
141  /* search for highest zone number is hrap block */
142 
143  ip=1;
144 
145  if(map[ib].hrap_data[l].zone[1] >= 0)
146  ip=2;
147 
148  if(map[ib].hrap_data[l].zone[2] >= 0)
149  ip=3;
150 
151  if(map[ib].hrap_data[l].zone[3] >= 0)
152  ip=4;
153 
154  if(ip==4)
155  mapvalue=gz;
156 
157  else if(ip==3)
158  mapvalue=uz;
159 
160  else if(ip==2)
161  mapvalue=mz;
162 
163  else
164  mapvalue=lz;
165 
166  ix=x-minx;
167  iy=y-miny;
168 
169  if(ix < 0 || iy < 0 || ix > maxx-1 || iy > maxy-1) {
170 
171  printf("coordinate error\n");
172 
173  continue;
174 
175  }
176 
177  if(zoom <= 1) {
178 
179  for(k=0;k<4;k++) {
180 
181  nx[k]=xmin+(float)hrap_grid->coord[ix+di[k]][iy+dj[k]].x*
182  cmult;
183  ny[k]=ymin+(float)hrap_grid->coord[ix+di[k]][iy+dj[k]].y*
184  cmult;
185 
186  }
187  }
188 
189  else {
190 
191  for(k=0;k<4;k++) {
192 
193  nx[k]=(xmin+((float)hrap_grid->coord[ix+di[k]][iy+dj[k]].x*
194  cmult-lint1))*zoom + xcen;
195  ny[k]=(ymin+((float)hrap_grid->coord[ix+di[k]][iy+dj[k]].y*
196  cmult-lint2))*zoom + ycen;
197 
198 
199  }
200 
201  }
202 
203  for(k=0;k<4;k++) {
204 
205  mpoint[k].x=(nx[k]+5)/MY;
206  mpoint[k].y=(ny[k]+5)/MY;
207 
208  }
209 
210  mpoint[4].x=mpoint[0].x;
211  mpoint[4].y=mpoint[0].y;
212 
213  for(k=0;k<15;k++) {
214 
215  if(mapvalue >= delim[kscale][k] &&
216  mapvalue < delim[kscale][k+1]) {
217 
218  color=xmap[k];
219  break;
220 
221  }
222 
223  }
224 
225  if(mapvalue <= 0.01 && mapvalue >= -0.01)
226  continue;
227 
228  else if(k==15)
229  color=xmap[15];
230 
231  XSetForeground(display,gc,color);
232 
233  XFillPolygon(display,pixm,gc,mpoint,5,Convex,CoordModeOrigin);
234 
235  }
236 
237  line_width=2;
238  line_style=LineSolid;
239  cap_style=CapButt;
240  join_style=JoinMiter;
241 
242  XSetLineAttributes(display,gc,line_width,line_style,cap_style,
243  join_style);
244 
245  XSetForeground(display,gc,qmap[15]);
246 
247  XDrawLines(display,pixm,gc,point,map[ib].basin_points,CoordModeOrigin);
248 
249 
250  }
251 
252 XSetClipMask(display,gc,None);
253 
254 }
255 
256 
257 
258 
259 
260 
261 
262 
263 
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 
Display * display
Definition: mapper.c:159
Font font[10]
Definition: mapper.c:161
float mult
Definition: edit_stations.c:6
void plot_map(Pixmap pixm, int h, int display_flag, int num)
Definition: plot_map.c:5
printf("fbuf is %s\n", fbuf)
int k
Definition: mapp2h.h:48
unsigned long qmap[16]
Definition: mapper.c:116
Region region
Definition: mapper.c:170
int display_flag
Definition: mapper.c:100
float xrat
long xmax
int dj[4]
int color
float yrat
long ny[4]
long ymax
int dy
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]
ib
Definition: shleap.cc:46
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
int x
Definition: misc.h:230
int y
Definition: misc.h:231
short int hrap_miny
Definition: misc.h:583
short int hrap_minx
Definition: misc.h:582
short int maxi
Definition: misc.h:580
short int maxj
Definition: misc.h:581
struct coord ** coord
Definition: misc.h:584
Definition: misc.h:236
char hb5[10]
Definition: misc.h:238
float lz[200]
Definition: misc.h:250
float uz[200]
Definition: misc.h:248
struct hrap_data * hrap_data
Definition: misc.h:245
int basin_points
Definition: misc.h:240
int hrap_points
Definition: misc.h:244
float gz[200]
Definition: misc.h:247
float mz[200]
Definition: misc.h:249
XPoint * basin
Definition: misc.h:243
Definition: mapp2h.h:29
int y
Definition: mapp2h.h:30
int x
Definition: mapp2h.h:30