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