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