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