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