Daily_QC
plot_stations.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 
5 void plot_zstations(Drawable pix,int type,int h,int display_flag)
6 
7 {
8 
9 extern int find_station_flag;
10 extern struct zdata zdata[10];
11 extern struct dval dval;
12 extern int npoint[2],zoom;
13 extern GC gc;
14 extern unsigned long qmap[16];
15 extern Widget drawing_area;
16 extern Display *display;
17 extern Font font[10];
18 extern XFontStruct *info_font[10];
19 extern struct station zstation[500];
20 extern int max_zstations;
21 extern long amap[16];
22 extern int pcpn_time,pcpn_day;
23 extern int pcpn_time_step;
24 int i,xc,yc,text_width,length,m;
25 int x1,y1,xadd,yadd,MY=10;
26 float xrat,yrat,mult,dmult,cmult;
27 long xmin,xmax,ymin,ymax;
28 signed long xcen,ycen,lint1,lint2;
29 Dimension width,height;
30 Arg args[10];
31 signed long XSIZE,YSIZE;
32 extern struct display_set display_set[4];
33 long r,s;
34 float conv=.0174;
35 float lat,lon;
36 char tbuf[100],mbuf[100];
37 int yheight;
38 int time_pos;
39 int mm;
40 
41 if(pcpn_time_step==0)
42  time_pos=pcpn_time;
43 
44 else
45  time_pos=4;
46 
47 XSetFont(display,gc,font[4]);
48 
49 yheight=info_font[4]->ascent;
50 
51 if(type==0)
52  return;
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 
77 
78 lint1=(long)npoint[0]*(long)MY;
79 lint2=(long)npoint[1]*(long)MY;
80 
81 cmult=mult*dmult;
82 
83 for(i=0;i<max_zstations;i++) {
84 
85  lat=zstation[i].lat;
86  lon=zstation[i].lon;
87 
88  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
89  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
90 
91  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
92  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
93 
94  if(zoom==1) {
95 
96  x1=(xmin+(float)r * cmult)/MY;
97  y1=(ymin+(float)s * cmult)/MY;
98 
99  }
100 
101  else {
102 
103  x1=(((xmin+(float)r*cmult)-lint1)*zoom+xcen)/MY;
104  y1=(((ymin+(float)s*cmult)-lint2)*zoom+ycen)/MY;
105 
106  }
107 
108  XSetForeground(display,gc,qmap[15]);
109 
110  if((type==4 || type==5)
111  && zdata[pcpn_day].stn[i].zlevel[time_pos].data == -1)
112  continue;
113 
114  XDrawLine(display,pix,gc,x1+1,y1+1,x1+1,y1-1);
115  XDrawLine(display,pix,gc,x1+1,y1-1,x1-1,y1-1);
116  XDrawLine(display,pix,gc,x1-1,y1-1,x1-1,y1+1);
117  XDrawLine(display,pix,gc,x1-1,y1+1,x1+1,y1-1);
118 
119  if(type==1)
120  strcpy(tbuf,zstation[i].hb5);
121 
122  else if(type==2) {
123 
124  strcpy(tbuf,&zstation[i].parm[4]);
125  tbuf[1]=0;
126 
127  }
128 
129  else if(type==3)
130  strcpy(tbuf,zstation[i].name);
131 
132  else if(type==4) {
133 
134  if(zdata[pcpn_day].used[time_pos]==0)
135  continue;
136 
137  if(z0data[pcpn_day].stn[i].zlevel[time_pos].data == -2)
138  continue;
139 
140  sprintf(mbuf,"%5.2f",zdata[pcpn_day].stn[i].zlevel[time_pos].data);
141 
142  if(mbuf[0]=='0')
143  strcpy(tbuf,&mbuf[1]);
144 
145  else
146  strcpy(tbuf,mbuf);
147 
148  }
149 
150  XSetForeground(display,gc,amap[m]);
151  length=strlen(tbuf);
152  text_width=XTextWidth(info_font[4],tbuf,length);
153 
154  xadd=zstation[i].xadd;
155  yadd=zstation[i].yadd;
156 
157  if(xadd < 0)
158  xc=x1 - text_width;
159 
160  else
161  xc=x1+3;
162 
163  if(yadd < 0)
164  yc=y1;
165 
166  else
167  yc=y1+yheight;
168 
169  XDrawString(display,pix,gc,xc,yc,tbuf,length);
170 
171  if(i==find_station_flag) {
172 
173  find_zstation_flag=-1;
174 
175  XDrawLine(display,pix,gc,xc,yc,xc+text_width,yc);
176 
177  }
178 return;
179 
180 }
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 
212 
213 
214 
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 
228 
229 
230 
231 
232 
233 
234 
235 
236 
237 
238 
239 
240 
241 
242 
243 
244 
char s
Definition: build_list.c:122
int pcpn_time
Definition: daily_qc.c:248
struct station zstation[500]
Definition: daily_qc.c:196
XFontStruct * info_font[10]
Definition: daily_qc.c:230
int pcpn_time_step
Definition: daily_qc.c:238
int find_station_flag
Definition: daily_qc.c:165
unsigned long qmap[16]
Definition: daily_qc.c:225
int pcpn_day
Definition: daily_qc.c:248
GC gc
Definition: daily_qc.c:224
Display * display
Definition: daily_qc.c:228
int max_zstations
Definition: daily_qc.c:45
Font font[10]
Definition: daily_qc.c:231
char type[5]
Definition: daily_qc.c:98
unsigned long amap[16]
Definition: daily_qc.c:226
int zoom
Definition: daily_qc.c:289
Widget drawing_area
Definition: daily_qc.c:214
int npoint[2]
Definition: daily_qc.c:289
int display_flag
Definition: daily_qc.c:268
void plot_zstations(Drawable pix, int type, int h, int display_flag)
Definition: plot_stations.c:5
float dmult[4]
Definition: misc.h:540
long xmin[4]
Definition: misc.h:534
long xmax[4]
Definition: misc.h:536
long ymax[4]
Definition: misc.h:537
long ymin[4]
Definition: misc.h:535
long ycen[4]
Definition: misc.h:539
long xcen[4]
Definition: misc.h:538
Definition: misc.h:397
double lo
Definition: misc.h:402
double a
Definition: misc.h:399
double yo
Definition: misc.h:401
double xo
Definition: misc.h:400
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
int yadd
Definition: misc.h:246
int xadd
Definition: misc.h:245
Definition: misc.h:200