1 /***********************************************************************
2 *
3 * ***** *** ***
4 * * * * * *
5 * * *** ***
6 * * * * * *
7 * ***** *** ***
8 *
9 * A FREE Finite Elements Analysis Program in ANSI C for the Windows &
10 * the UNIX OS.
11 *
12 * Composed and edited and copyright by
13 * Professor Dr.-Ing. Frank Rieg, University of Bayreuth, Germany
14 *
15 * eMail:
16 * frank.rieg@uni-bayreuth.de
17 * dr.frank.rieg@t-online.de
18 *
19 * V15.0 November 18, 2015
20 *
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 2, or (at your option)
24 * any later version.
25 *
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
30 *
31 * You should have received a copy of the GNU General Public License
32 * along with this program; see the file COPYING. If not, write to
33 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
34 ***********************************************************************/
35 /***********************************************************************
36 * Compilerunit m16.c fuer Z88O enthaelt:
37 * mrbd88
38 * ri5x88
39 * mko88
40 * magp88
41 * 19.7.2011 Rieg
42 ***********************************************************************/
43 /***********************************************************************
44 * Leseformate fuer ri5x88
45 ***********************************************************************/
46 #define NL "\n"
47
48 #ifdef FR_XINT
49 #define PD "%d"
50 #define BPD " %d"
51 #endif
52
53 #ifdef FR_XLONG
54 #define PD "%ld"
55 #define BPD " %ld"
56 #endif
57
58 #ifdef FR_XDOUB
59 #define BPG " %lg"
60 #endif
61
62 #ifdef FR_XQUAD
63 #define BPG " %Lg"
64 #endif
65
66 /***********************************************************************
67 * Windows
68 ***********************************************************************/
69 #ifdef FR_WIN
70 #include <z88o.h>
71 #include <windows.h>
72 #include <commctrl.h>
73 #include <gl\gl.h>
74 #include <stdio.h>
75 #endif
76
77 /***********************************************************************
78 * UNIX
79 ***********************************************************************/
80 #ifdef FR_UNIX
81 #include <z88o.h>
82 #include <stdio.h>
83 #include <GL/gl.h>
84 #include <GL/glx.h>
85 #endif
86
87 /***********************************************************************
88 * Functions
89 ***********************************************************************/
90 int wlog88o(FR_INT4,int);
91
92 /***********************************************************************
93 * hier beginnt Function mrbd88: Randbedingungen malen
94 ***********************************************************************/
mrbd88(void)95 int mrbd88(void)
96 {
97 extern FILE *fwlo;
98 extern FR_DOUBLEAY xv;
99 extern FR_DOUBLEAY yv;
100 extern FR_DOUBLEAY zv;
101 extern FR_DOUBLEAY rwert;
102
103 extern GLfloat rot[];
104 extern GLfloat gruen[];
105 extern GLfloat blau[];
106
107 extern FR_INT4AY ityp;
108 extern FR_INT4AY koi;
109 extern FR_INT4AY koffs;
110 extern FR_INT4AY noi;
111 extern FR_INT4AY nep;
112 extern FR_INT4AY nkn;
113 extern FR_INT4AY ifg;
114 extern FR_INT4AY iflag1;
115
116 extern FR_DOUBLE zorbd,fazoo;
117
118 extern FR_INT4 nkp,nrb,ipflag,iqflag,nnp,npr,neg;
119
120 extern int ifwbc;
121
122 FR_DOUBLE xmin= +1e+10,xmax= -1e+10;
123
124 GLfloat xps;
125
126 FR_INT4 i,j,k,m;
127
128 /*----------------------------------------------------------------------
129 * Grenzen feststellen
130 *---------------------------------------------------------------------*/
131 for(i= 1;i <= nkp;i++)
132 {
133 if(xv[i] < xmin) xmin= xv[i];
134 if(xv[i] > xmax) xmax= xv[i];
135 }
136
137 /*----------------------------------------------------------------------
138 * Punktgroesse setzen
139 *---------------------------------------------------------------------*/
140 xps= (GLfloat) (zorbd*(xmax-xmin)*fazoo);
141 glPointSize(xps);
142
143 /*----------------------------------------------------------------------
144 * Punkte malen: Randbedingungen aus Z88I2.TXT
145 *---------------------------------------------------------------------*/
146 for(i= 1;i <= nrb;i++)
147 {
148 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149 * Verschiebung X ist 0
150 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
151 if((ifwbc == IDM_RBDUX || ifwbc == IDM_RBDALL) && ifg[i] == 1 &&
152 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
153 glColor3f(rot[1],gruen[1],blau[1]);
154 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
155 * Verschiebung Y ist 0
156 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
157 else if((ifwbc == IDM_RBDUY || ifwbc == IDM_RBDALL) && ifg[i] == 2 &&
158 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
159 glColor3f(rot[2],gruen[2],blau[2]);
160 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
161 * Verschiebung Z ist 0
162 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
163 else if((ifwbc == IDM_RBDUZ || ifwbc == IDM_RBDALL) && ifg[i] == 3 &&
164 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
165 glColor3f(rot[3],gruen[3],blau[3]);
166 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
167 * Verschiebung U4 ist 0
168 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
169 else if((ifwbc == IDM_RBDU4 || ifwbc == IDM_RBDALL) && ifg[i] == 4 &&
170 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
171 glColor3f(rot[4],gruen[4],blau[4]);
172 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
173 * Verschiebung U5 ist 0
174 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
175 else if((ifwbc == IDM_RBDU5 || ifwbc == IDM_RBDALL) && ifg[i] == 5 &&
176 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
177 glColor3f(rot[5],gruen[5],blau[5]);
178 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
179 * Verschiebung U4 ist 0
180 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
181 else if((ifwbc == IDM_RBDU6 || ifwbc == IDM_RBDALL) && ifg[i] == 6 &&
182 iflag1[i]== 2 && fabs(rwert[i]) < 1e-7)
183 glColor3f(rot[6],gruen[6],blau[6]);
184 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185 * Verschiebung vorgegeben
186 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
187 else if((ifwbc == IDM_RBDUA || ifwbc == IDM_RBDALL) &&
188 iflag1[i]== 2 && fabs(rwert[i]) > 1e-7)
189 glColor3f(rot[7],gruen[7],blau[7]);
190 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191 * Kraft X
192 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
193 else if((ifwbc == IDM_RBDFX || ifwbc == IDM_RBDALL) &&
194 iflag1[i]==1 && ifg[i]==1)
195 glColor3f(rot[9],gruen[9],blau[9]);
196 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
197 * Kraft Y
198 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
199 else if((ifwbc == IDM_RBDFY || ifwbc == IDM_RBDALL) &&
200 iflag1[i]==1 && ifg[i]==2)
201 glColor3f(rot[10],gruen[10],blau[10]);
202 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
203 * Kraft Z
204 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
205 else if((ifwbc == IDM_RBDFZ || ifwbc == IDM_RBDALL) &&
206 iflag1[i]==1 && ifg[i]==3)
207 glColor3f(rot[11],gruen[11],blau[11]);
208
209 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
210 * nichts tun
211 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
212 else
213 continue;
214 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215 * Punkt malen
216 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
217 glBegin(GL_POINTS);
218 glVertex3d(xv[nkn[i]],yv[nkn[i]],zv[nkn[i]]);
219 glEnd();
220 }
221
222 /*----------------------------------------------------------------------
223 * Punkte malen: Randbedingungen aus Z88I5.TXT
224 * Dabei werden nur stur die Punkte gemalt, obwohl alle Infos auch fuer
225 * die Elemente da sind. Dies fuer ggf. spaeter.
226 *---------------------------------------------------------------------*/
227 if(iqflag == 1 && (ifwbc == IDM_RBDOL || ifwbc == IDM_RBDALL))
228 {
229 glColor3f(rot[8],gruen[8],blau[8]);
230
231 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
232 * alle Elemente mit Flaechenlasten ausser Platten 18,29 und 20
233 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
234 glBegin(GL_POINTS);
235 for(i= 1; i <= nnp; i++) glVertex3d(xv[noi[i]],yv[noi[i]],zv[noi[i]]);
236 glEnd();
237
238 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
239 * Platten 18,19 und 20, wenn Druecke in Z88I5.TXT
240 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
241 for(i= 1; i <= npr; i++)
242 {
243 if(ityp[nep[i]]== 18)
244 {
245 glBegin(GL_POINTS);
246 for(j= 0; j < 6; j++)
247 {
248 m= koi[koffs[nep[i]]+j];
249 glVertex3d(xv[m],yv[m],zv[m]);
250 }
251 glEnd();
252 }
253 if(ityp[nep[i]]== 19)
254 {
255 glBegin(GL_POINTS);
256 for(j= 0; j < 16; j++)
257 {
258 m= koi[koffs[nep[i]]+j];
259 glVertex3d(xv[m],yv[m],zv[m]);
260 }
261 glEnd();
262 }
263 if(ityp[nep[i]]== 20)
264 {
265 glBegin(GL_POINTS);
266 for(j= 0; j < 8; j++)
267 {
268 m= koi[koffs[nep[i]]+j];
269 glVertex3d(xv[m],yv[m],zv[m]);
270 }
271 glEnd();
272 }
273 }
274 } /* Ende iqflag */
275
276 return 0;
277 }
278
279 /***********************************************************************
280 * ri5x88
281 ***********************************************************************/
282 /***********************************************************************
283 * hier beginnt Function ri5x88; sie ist gegenueber den aehnlichen
284 * Funktionen RI588 und RI588I etwas vereinfacht, weil die Double-Arrays
285 * (noch) nicht gebraucht werden.
286 *
287 * ri5x88.c liest z88i5.txt ein
288 * hier wird File z88i5.txt geoeffnet
289 ***********************************************************************/
ri5x88(void)290 int ri5x88(void)
291 {
292 extern FILE *fi5,*fwlo;
293 extern char ci5[];
294
295 extern FR_INT4AY noi;
296 extern FR_INT4AY noffs;
297 extern FR_INT4AY ityp;
298 extern FR_INT4AY nep;
299
300 extern FR_INT4 npr,nnp;
301 extern FR_INT4 MAXPR;
302
303 FR_DOUBLE rdummy,sdummy,tdummy;
304 FR_INT4 i,idummy,nofold= 0;
305
306 char cline[256];
307
308 /*----------------------------------------------------------------------
309 * Einlesen der allgemeinen Strukturdaten
310 *---------------------------------------------------------------------*/
311 fgets(cline,256,fi5);
312 sscanf(cline,PD,&npr);
313
314 if(npr >= MAXPR-1)
315 {
316 wlog88o(MAXPR,LOG_EXMAXPR);
317 return(AL_EXMAXPR);
318 }
319
320 /***********************************************************************
321 * Einlesen des Lastvektors
322 ***********************************************************************/
323 nnp= 0; /* Anzahl der Knoten mit Drucklasten, auch doppelte */
324 for(i= 1; i <= npr; i++)
325 {
326 fgets(cline,256,fi5);
327 sscanf(cline,PD,&nep[i]);
328
329 /*----------------------------------------------------------------------
330 * den koinzidenzvektor noi & den zugehoerigen pointervektor noffs
331 * auffuellen
332 *---------------------------------------------------------------------*/
333
334 /*======================================================================
335 * Elementtypen 7, 8, 14, 15
336 *=====================================================================*/
337 if(ityp[nep[i]]== 7 || ityp[nep[i]]== 8 ||
338 ityp[nep[i]]== 14 || ityp[nep[i]]== 15)
339 {
340 if(i== 1) noffs[1]= 1;
341 else noffs[i]= noffs[i-1] + nofold;
342
343 sscanf(cline,PD BPG BPG BPD BPD BPD,&idummy,&rdummy,&sdummy,
344 &noi[noffs[i]],&noi[noffs[i]+1],&noi[noffs[i]+2]);
345
346 nnp+=3;
347 nofold= 3;
348 }
349
350 /*======================================================================
351 * Elementtyp 17
352 *=====================================================================*/
353 if(ityp[nep[i]]== 17)
354 {
355 if(i== 1) noffs[1]= 1;
356 else noffs[i]= noffs[i-1] + nofold;
357
358 sscanf(cline,PD BPG BPD BPD BPD,&idummy,&rdummy,
359 &noi[noffs[i]],&noi[noffs[i]+1],&noi[noffs[i]+2]);
360
361 nnp+=3;
362 nofold= 3;
363 }
364
365 /*======================================================================
366 * Elementtyp 16 und 22
367 *=====================================================================*/
368 if(ityp[nep[i]]== 16 || ityp[nep[i]]== 22)
369 {
370 if(i== 1) noffs[1]= 1;
371 else noffs[i]= noffs[i-1] + nofold;
372
373 sscanf(cline,PD BPG BPD BPD BPD BPD BPD BPD,
374 &idummy,&rdummy,
375 &noi[noffs[i] ], &noi[noffs[i]+1],
376 &noi[noffs[i]+2], &noi[noffs[i]+3],
377 &noi[noffs[i]+4], &noi[noffs[i]+5]);
378
379 nnp+=6;
380 nofold= 6;
381 }
382
383 /*======================================================================
384 * Elementtyp 10 u. 21
385 *=====================================================================*/
386 if(ityp[nep[i]]== 10 || ityp[nep[i]]== 21)
387 {
388 if(i== 1) noffs[1]= 1;
389 else noffs[i]= noffs[i-1] + nofold;
390
391 sscanf(cline,PD BPG BPG BPG BPD BPD BPD BPD BPD BPD BPD BPD,
392 &idummy,&rdummy,&sdummy,&tdummy,
393 &noi[noffs[i] ], &noi[noffs[i]+1],
394 &noi[noffs[i]+2], &noi[noffs[i]+3],
395 &noi[noffs[i]+4], &noi[noffs[i]+5],
396 &noi[noffs[i]+6], &noi[noffs[i]+7]);
397
398 nnp+=8;
399 nofold= 8;
400 }
401
402 /*======================================================================
403 * Elementtyp 1
404 *=====================================================================*/
405 if(ityp[nep[i]]== 1)
406 {
407 if(i== 1) noffs[1]= 1;
408 else noffs[i]= noffs[i-1] + nofold;
409
410 sscanf(cline,PD BPG BPG BPG BPD BPD BPD BPD,
411 &idummy,&rdummy,&sdummy,&tdummy,
412 &noi[noffs[i] ], &noi[noffs[i]+1],
413 &noi[noffs[i]+2], &noi[noffs[i]+3]);
414
415 nnp+=4;
416 nofold= 4;
417 }
418
419 /*======================================================================
420 * Elementtypen 11 und 12
421 *=====================================================================*/
422 if(ityp[nep[i]]== 11 || ityp[nep[i]]== 12)
423 {
424 if(i== 1) noffs[1]= 1;
425 else noffs[i]= noffs[i-1] + nofold;
426
427 sscanf(cline,PD BPG BPG BPD BPD BPD BPD,
428 &idummy,&rdummy,&sdummy,
429 &noi[noffs[i] ], &noi[noffs[i]+1],
430 &noi[noffs[i]+2], &noi[noffs[i]+3]);
431
432 nnp+=4;
433 nofold= 4;
434 }
435
436 /*======================================================================
437 * Elementtyp 18,19,20,23 und 24
438 *=====================================================================*/
439 if(ityp[nep[i]]== 18 || ityp[nep[i]]== 19 ||
440 ityp[nep[i]]== 20 || ityp[nep[i]]== 23 || ityp[nep[i]]== 24)
441 {
442 sscanf(cline,PD BPG,&idummy,&rdummy);
443 }
444
445
446 } /* Ende Schleife ueber alle Flaechenlasten */
447
448 wlog88o(0,LOG_EXITRI588);
449 return (0);
450 }
451
452 /***********************************************************************
453 * hier beginnt Function mko88
454 ***********************************************************************/
mko88(void)455 int mko88(void)
456 {
457 extern FR_DOUBLEAY xv;
458 extern FR_DOUBLEAY yv;
459 extern FR_DOUBLEAY zv;
460
461 extern FR_INT4 nkp;
462
463 FR_DOUBLE xmin= +1e+10,xmax= -1e+10;
464 FR_DOUBLE ymin= +1e+10;
465 FR_DOUBLE zmin= +1e+10;
466 FR_DOUBLE xinc,xar,yar,zar,xr,yr,zr;
467 FR_DOUBLE yap,xap;
468
469 FR_INT4 i;
470
471 /*----------------------------------------------------------------------
472 * Grenzen feststellen, es richtet sich alles nach der X-Achse
473 *---------------------------------------------------------------------*/
474 for(i= 1;i <= nkp;i++)
475 {
476 if(xv[i] < xmin) xmin= xv[i];
477 if(xv[i] > xmax) xmax= xv[i];
478 if(yv[i] < ymin) ymin= yv[i];
479 if(zv[i] < zmin) zmin= zv[i];
480 }
481
482 xinc= (xmax-xmin)*0.1;
483 xar = xinc*0.2;
484 yar= xar;
485 zar= xar;
486
487 yap= xinc*0.05;
488 xap= yap;
489
490 xr= xmin+xinc;
491 yr= ymin+xinc;
492 zr= zmin+xinc;
493
494 /*----------------------------------------------------------------------
495 * Koordinatensystem malen
496 *---------------------------------------------------------------------*/
497 glBegin(GL_LINES);
498 /* X-Koordinate */
499 /* Linie */
500 glVertex3d(xmin,ymin,zmin);
501 glVertex3d(xr, ymin,zmin);
502 /* Pfeil */
503 glVertex3d(xr, ymin, zmin);
504 glVertex3d(xr-xar,ymin+yap,zmin);
505 glVertex3d(xr, ymin, zmin);
506 glVertex3d(xr-xar,ymin-yap,zmin);
507 /* X */
508 glVertex3d(xr+xar,ymin+xar,zmin);
509 glVertex3d(xr+3*xar,ymin-xar,zmin);
510 glVertex3d(xr+xar,ymin-xar,zmin);
511 glVertex3d(xr+3*xar,ymin+xar,zmin);
512
513 /* Y-Koordinate */
514 glVertex3d(xmin,ymin,zmin);
515 glVertex3d(xmin,yr ,zmin);
516 /* Pfeil */
517 glVertex3d(xmin, yr, zmin);
518 glVertex3d(xmin-xap,yr-yar,zmin);
519 glVertex3d(xmin, yr, zmin);
520 glVertex3d(xmin+xap,yr-yar,zmin);
521 /* Y */
522 glVertex3d(xmin, yr+ yar,zmin);
523 glVertex3d(xmin, yr+2*yar,zmin);
524 glVertex3d(xmin, yr+2*yar,zmin);
525 glVertex3d(xmin-xar,yr+3*yar,zmin);
526 glVertex3d(xmin, yr+2*yar,zmin);
527 glVertex3d(xmin+xar,yr+3*yar,zmin);
528
529 /* Z-Koordinate */
530 glVertex3d( xmin,ymin,zmin);
531 glVertex3d( xmin,ymin,zr );
532 /* Pfeil */
533 glVertex3d(xmin, ymin,zr );
534 glVertex3d(xmin-xap,ymin,zr-zar);
535 glVertex3d(xmin, ymin,zr );
536 glVertex3d(xmin+xap,ymin,zr-zar);
537 /* Z */
538 glVertex3d(xmin-xar,ymin+yar,zr+zar);
539 glVertex3d(xmin+xar,ymin+yar,zr+zar);
540 glVertex3d(xmin+xar,ymin+yar,zr+zar);
541 glVertex3d(xmin-xar,ymin-yar,zr+zar);
542 glVertex3d(xmin-xar,ymin-yar,zr+zar);
543 glVertex3d(xmin+xar,ymin-yar,zr+zar);
544 glEnd();
545
546 return 0;
547 }
548
549 /***********************************************************************
550 * hier beginnt Function magp88: Gausspunkte malen
551 ***********************************************************************/
magp88(void)552 int magp88(void)
553 {
554 extern FILE *fwlo;
555 extern FR_DOUBLEAY xgpo;
556 extern FR_DOUBLEAY ygpo;
557 extern FR_DOUBLEAY zgpo;
558 extern FR_DOUBLEAY xv;
559
560 extern FR_INT4AY kfarbe;
561
562 extern FR_DOUBLE zoogp,fazoo;
563 extern FR_INT4 nkp,igpanz;
564
565 extern GLfloat rot[];
566 extern GLfloat gruen[];
567 extern GLfloat blau[];
568
569 GLfloat xps;
570
571 FR_DOUBLE xmin= +1e+10,xmax= -1e+10;
572
573 FR_INT4 i;
574
575 /*----------------------------------------------------------------------
576 * Grenzen feststellen
577 *---------------------------------------------------------------------*/
578 for(i= 1;i <= nkp;i++)
579 {
580 if(xv[i] < xmin) xmin= xv[i];
581 if(xv[i] > xmax) xmax= xv[i];
582 }
583
584 /*----------------------------------------------------------------------
585 * Punktgroesse setzen
586 *---------------------------------------------------------------------*/
587 xps= (GLfloat) (zoogp*(xmax-xmin)*fazoo);
588 glPointSize(xps);
589
590 /*----------------------------------------------------------------------
591 * Gausspunkte malen
592 *---------------------------------------------------------------------*/
593 for(i= 1;i <= igpanz;i++)
594 {
595 glColor3f(rot[kfarbe[i]],gruen[kfarbe[i]],blau[kfarbe[i]]);
596 glBegin(GL_POINTS);
597 glVertex3d(xgpo[i],ygpo[i],zgpo[i]);
598 glEnd();
599 }
600
601 return 0;
602 }
603