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 M12.C enthaelt:
37 * tet188 mit Licht
38 * tet288 mit Spannungen, Eckknoten
39 * tet388 Hidden Line
40 * tet488 mit Spannungen, Elemente
41 * 18.11.2015 RIEG
42 **********************************************************/
43
44 /*----------------------------------------------------------------------
45 * Windows
46 *---------------------------------------------------------------------*/
47 #ifdef FR_WIN
48 #include <z88o.h>
49 #include <windows.h>
50 #include <commctrl.h>
51 #include <gl\gl.h>
52 #include <stdio.h> /* fprintf,fgets,sscanf */
53 #endif
54
55 /*----------------------------------------------------------------------
56 * UNIX
57 *---------------------------------------------------------------------*/
58 #ifdef FR_UNIX
59 #include <z88o.h>
60 #include <stdio.h> /* fprintf,fgets,sscanf */
61 #include <GL/gl.h>
62 #include <GL/glx.h>
63 #endif
64
65 /***********************************************************************
66 * hier beginnt Function tet188: mit Licht
67 ***********************************************************************/
tet188(void)68 int tet188(void)
69 {
70 extern FR_DOUBLEAY xv;
71 extern FR_DOUBLEAY yv;
72 extern FR_DOUBLEAY zv;
73
74 extern FR_DOUBLE xe[];
75 extern FR_DOUBLE ye[];
76 extern FR_DOUBLE ze[];
77
78 extern FR_DOUBLE vx[];
79 extern FR_DOUBLE vy[];
80 extern FR_DOUBLE vz[];
81
82 extern FR_INT4AY ityp;
83 extern FR_INT4AY koi;
84 extern FR_INT4AY koffs;
85
86 extern FR_INT4 ne;
87
88 FR_DOUBLE ax,ay,az,bx,by,bz;
89
90 FR_INT4 i,j;
91
92 /***********************************************************************
93 * Schleife ueber alle Elemente
94 ***********************************************************************/
95 for (i= 1; i <= ne; i++)
96 {
97
98 /*----------------------------------------------------------------------
99 * Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25
100 *---------------------------------------------------------------------*/
101 if(ityp[i] == 4 || ityp[i] == 9 ||
102 ityp[i] == 2 || ityp[i] == 13 ||
103 ityp[i] == 5 || ityp[i] == 25)
104 {
105
106 /*======================================================================
107 * die zwei Eck-Punkte fuer jeden Stab holen
108 *=====================================================================*/
109 for (j= 1; j <= 2; j++)
110 {
111 xe[j]= xv[koi[koffs[i]+j-1]];
112 ye[j]= yv[koi[koffs[i]+j-1]];
113 ze[j]= zv[koi[koffs[i]+j-1]];
114 }
115
116 /*======================================================================
117 * ... und rendern
118 *=====================================================================*/
119 glBegin(GL_LINES);
120 glVertex3d( xe[1],ye[1],ze[1]);
121 glVertex3d( xe[2],ye[2],ze[2]);
122 glEnd();
123 } /* Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25 */
124
125 /*----------------------------------------------------------------------
126 * Scheibe 7,Torus 8,Scheibe 11,Torus 12 u.Platte 19 u. 20, Schale 23
127 *---------------------------------------------------------------------*/
128 if(ityp[i] == 7 || ityp[i] == 8 ||
129 ityp[i] == 11 || ityp[i] == 12 ||
130 ityp[i] == 19 || ityp[i] == 20 || ityp[i] == 23)
131 {
132
133 /*======================================================================
134 * die vier Eck-Punkte fuer jede Scheibe oder Platte holen
135 *=====================================================================*/
136 if(ityp[i] != 19)
137 {
138 for (j= 1; j <= 4; j++)
139 {
140 xe[j]= xv[koi[koffs[i]+j-1]];
141 ye[j]= yv[koi[koffs[i]+j-1]];
142 ze[j]= zv[koi[koffs[i]+j-1]];
143 }
144 }
145 else
146 {
147 xe[1]= xv[koi[koffs[i]]];
148 ye[1]= yv[koi[koffs[i]]];
149 ze[1]= zv[koi[koffs[i]]];
150
151 xe[2]= xv[koi[koffs[i]+12]];
152 ye[2]= yv[koi[koffs[i]+12]];
153 ze[2]= zv[koi[koffs[i]+12]];
154
155 xe[3]= xv[koi[koffs[i]+15]];
156 ye[3]= yv[koi[koffs[i]+15]];
157 ze[3]= zv[koi[koffs[i]+15]];
158
159 xe[4]= xv[koi[koffs[i]+3]];
160 ye[4]= yv[koi[koffs[i]+3]];
161 ze[4]= zv[koi[koffs[i]+3]];
162 }
163
164 /*======================================================================
165 * den Normalenvektor bestimmen
166 *=====================================================================*/
167 /* erster Vektor */
168 ax= xe[2]-xe[1];
169 ay= ye[2]-ye[1];
170 az= ze[2]-ze[1];
171
172 /* zweiter Vektor */
173 bx= xe[4]-xe[1];
174 by= ye[4]-ye[1];
175 bz= ze[4]-ze[1];
176
177 /* Kreuzprodukt */
178 vx[1]= ay*bz-by*az;
179 vy[1]= az*bx-bz*ax;
180 vz[1]= ax*by-bx*ay;
181
182 /*======================================================================
183 * ... und rendern
184 *=====================================================================*/
185 glBegin(GL_QUADS);
186 glNormal3d( vx[1],vy[1],vz[1]);
187 glVertex3d( xe[1],ye[1],ze[1]);
188 glVertex3d( xe[2],ye[2],ze[2]);
189 glVertex3d( xe[3],ye[3],ze[3]);
190 glVertex3d( xe[4],ye[4],ze[4]);
191 glEnd();
192 } /* Scheibe 7,11,Torus 8,12 u.Platte 19 u.20, Schale 23 */
193
194 /*----------------------------------------------------------------------
195 * Scheibe 3, Torus 6, Scheibe 14, Torus 15, Platte 18, Schale 24
196 *---------------------------------------------------------------------*/
197 if(ityp[i] == 3 || ityp[i] == 14 ||
198 ityp[i] == 6 || ityp[i] == 15 ||
199 ityp[i] == 18 || ityp[i] == 24)
200 {
201
202 /*======================================================================
203 * die drei Eck-Punkte fuer jede Scheibe oder Platte holen
204 *=====================================================================*/
205 for (j= 1; j <= 3; j++)
206 {
207 xe[j]= xv[koi[koffs[i]+j-1]];
208 ye[j]= yv[koi[koffs[i]+j-1]];
209 ze[j]= zv[koi[koffs[i]+j-1]];
210 }
211
212 /*======================================================================
213 * den Normalenvektor bestimmen
214 *=====================================================================*/
215 /* erster Vektor */
216 ax= xe[2]-xe[1];
217 ay= ye[2]-ye[1];
218 az= ze[2]-ze[1];
219
220 /* zweiter Vektor */
221 bx= xe[3]-xe[1];
222 by= ye[3]-ye[1];
223 bz= ze[3]-ze[1];
224
225 /* Kreuzprodukt */
226 vx[1]= ay*bz-by*az;
227 vy[1]= az*bx-bz*ax;
228 vz[1]= ax*by-bx*ay;
229
230 /*======================================================================
231 * ... und rendern
232 *=====================================================================*/
233 glBegin(GL_TRIANGLES);
234 glNormal3d( vx[1],vy[1],vz[1]);
235 glVertex3d( xe[1],ye[1],ze[1]);
236 glVertex3d( xe[2],ye[2],ze[2]);
237 glVertex3d( xe[3],ye[3],ze[3]);
238 glEnd();
239 } /* Scheibe 3,14, Torus 6,15, Platte 18, Schale 24 */
240
241 /*----------------------------------------------------------------------
242 * Tetraeder 16 und 17
243 *---------------------------------------------------------------------*/
244 if(ityp[i] == 16 || ityp[i] == 17)
245 {
246 /*======================================================================
247 * die vier Punkte fuer jeden Tetraeder holen
248 *=====================================================================*/
249 for (j= 1; j <= 4; j++)
250 {
251 xe[j]= xv[koi[koffs[i]+j-1]];
252 ye[j]= yv[koi[koffs[i]+j-1]];
253 ze[j]= zv[koi[koffs[i]+j-1]];
254 }
255
256 /*======================================================================
257 * die Normalenvektoren fuer die vier Dreiecke bestimmen
258 *=====================================================================*/
259 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
260 * erster Normalenvektor
261 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
262 /* erster Vektor */
263 ax= xe[3]-xe[1];
264 ay= ye[3]-ye[1];
265 az= ze[3]-ze[1];
266
267 /* zweiter Vektor */
268 bx= xe[2]-xe[1];
269 by= ye[2]-ye[1];
270 bz= ze[2]-ze[1];
271
272 /* Kreuzprodukt */
273 vx[1]= ay*bz-by*az;
274 vy[1]= az*bx-bz*ax;
275 vz[1]= ax*by-bx*ay;
276
277 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
278 * zweiter Normalenvektor
279 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
280 /* erster Vektor */
281 ax= xe[2]-xe[1];
282 ay= ye[2]-ye[1];
283 az= ze[2]-ze[1];
284
285 /* zweiter Vektor */
286 bx= xe[4]-xe[1];
287 by= ye[4]-ye[1];
288 bz= ze[4]-ze[1];
289
290 /* Kreuzprodukt */
291 vx[2]= ay*bz-by*az;
292 vy[2]= az*bx-bz*ax;
293 vz[2]= ax*by-bx*ay;
294
295 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
296 * dritter Normalenvektor
297 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
298 /* erster Vektor */
299 ax= xe[4]-xe[1];
300 ay= ye[4]-ye[1];
301 az= ze[4]-ze[1];
302
303 /* zweiter Vektor */
304 bx= xe[3]-xe[1];
305 by= ye[3]-ye[1];
306 bz= ze[3]-ze[1];
307
308 /* Kreuzprodukt */
309 vx[3]= ay*bz-by*az;
310 vy[3]= az*bx-bz*ax;
311 vz[3]= ax*by-bx*ay;
312
313 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
314 * vierter Normalenvektor
315 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
316 /* erster Vektor */
317 ax= xe[3]-xe[2];
318 ay= ye[3]-ye[2];
319 az= ze[3]-ze[2];
320
321 /* zweiter Vektor */
322 bx= xe[4]-xe[2];
323 by= ye[4]-ye[2];
324 bz= ze[4]-ze[2];
325
326 /* Kreuzprodukt */
327 vx[4]= ay*bz-by*az;
328 vy[4]= az*bx-bz*ax;
329 vz[4]= ax*by-bx*ay;
330
331 /*======================================================================
332 * ... und rendern
333 *=====================================================================*/
334 glBegin(GL_TRIANGLES);
335 glNormal3d( vx[1],vy[1],vz[1]);
336 glVertex3d( xe[1],ye[1],ze[1]);
337 glVertex3d( xe[3],ye[3],ze[3]);
338 glVertex3d( xe[2],ye[2],ze[2]);
339
340 glNormal3d( vx[2],vy[2],vz[2]);
341 glVertex3d( xe[1],ye[1],ze[1]);
342 glVertex3d( xe[2],ye[2],ze[2]);
343 glVertex3d( xe[4],ye[4],ze[4]);
344
345 glNormal3d( vx[3],vy[3],vz[3]);
346 glVertex3d( xe[1],ye[1],ze[1]);
347 glVertex3d( xe[4],ye[4],ze[4]);
348 glVertex3d( xe[3],ye[3],ze[3]);
349
350 glNormal3d( vx[4],vy[4],vz[4]);
351 glVertex3d( xe[2],ye[2],ze[2]);
352 glVertex3d( xe[3],ye[3],ze[3]);
353 glVertex3d( xe[4],ye[4],ze[4]);
354 glEnd();
355 } /* Ende Tetraeder 16 und 17 */
356
357 /*----------------------------------------------------------------------
358 * Hexaeder 1, 10 und 21
359 *---------------------------------------------------------------------*/
360 if(ityp[i] == 1 || ityp[i] == 10 || ityp[i] == 21)
361 {
362 /*======================================================================
363 * die acht Punkte fuer jeden Hexaeder holen
364 *=====================================================================*/
365 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
366 * Hexaeder 1 und 10
367 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
368 if(ityp[i] == 1 || ityp[i] == 10)
369 {
370 for (j= 1; j <= 8; j++)
371 {
372 xe[j]= xv[koi[koffs[i]+j-1]];
373 ye[j]= yv[koi[koffs[i]+j-1]];
374 ze[j]= zv[koi[koffs[i]+j-1]];
375 }
376 }
377
378 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
379 * Volumenschalenele. 21
380 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
381 if(ityp[i] == 21)
382 {
383 for (j= 1; j <= 4; j++)
384 {
385 xe[j]= xv[koi[koffs[i]+j-1]];
386 ye[j]= yv[koi[koffs[i]+j-1]];
387 ze[j]= zv[koi[koffs[i]+j-1]];
388 }
389 for (j= 5; j <= 8; j++)
390 {
391 xe[j]= xv[koi[koffs[i]+j+4-1]];
392 ye[j]= yv[koi[koffs[i]+j+4-1]];
393 ze[j]= zv[koi[koffs[i]+j+4-1]];
394 }
395 }
396
397 /*======================================================================
398 * die Normalenvektoren fuer die 12 Dreiecke (2 pro Seite) bestimmen
399 *=====================================================================*/
400 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
401 * erster Normalenvektor
402 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
403 /* erster Vektor */
404 ax= xe[2]-xe[1];
405 ay= ye[2]-ye[1];
406 az= ze[2]-ze[1];
407
408 /* zweiter Vektor */
409 bx= xe[3]-xe[1];
410 by= ye[3]-ye[1];
411 bz= ze[3]-ze[1];
412
413 /* Kreuzprodukt */
414 vx[1]= ay*bz-by*az;
415 vy[1]= az*bx-bz*ax;
416 vz[1]= ax*by-bx*ay;
417
418 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
419 * zweiter Normalenvektor
420 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
421 /* erster Vektor */
422 ax= xe[3]-xe[1];
423 ay= ye[3]-ye[1];
424 az= ze[3]-ze[1];
425
426 /* zweiter Vektor */
427 bx= xe[4]-xe[1];
428 by= ye[4]-ye[1];
429 bz= ze[4]-ze[1];
430
431 /* Kreuzprodukt */
432 vx[2]= ay*bz-by*az;
433 vy[2]= az*bx-bz*ax;
434 vz[2]= ax*by-bx*ay;
435
436 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
437 * dritter Normalenvektor
438 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
439 /* erster Vektor */
440 ax= xe[6]-xe[5];
441 ay= ye[6]-ye[5];
442 az= ze[6]-ze[5];
443
444 /* zweiter Vektor */
445 bx= xe[2]-xe[5];
446 by= ye[2]-ye[5];
447 bz= ze[2]-ze[5];
448
449 /* Kreuzprodukt */
450 vx[3]= ay*bz-by*az;
451 vy[3]= az*bx-bz*ax;
452 vz[3]= ax*by-bx*ay;
453
454 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
455 * vierter Normalenvektor
456 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
457 /* erster Vektor */
458 ax= xe[2]-xe[5];
459 ay= ye[2]-ye[5];
460 az= ze[2]-ze[5];
461
462 /* zweiter Vektor */
463 bx= xe[1]-xe[5];
464 by= ye[1]-ye[5];
465 bz= ze[1]-ze[5];
466
467 /* Kreuzprodukt */
468 vx[4]= ay*bz-by*az;
469 vy[4]= az*bx-bz*ax;
470 vz[4]= ax*by-bx*ay;
471
472 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
473 * fuenfter Normalenvektor
474 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
475 /* erster Vektor */
476 ax= xe[7]-xe[6];
477 ay= ye[7]-ye[6];
478 az= ze[7]-ze[6];
479
480 /* zweiter Vektor */
481 bx= xe[3]-xe[6];
482 by= ye[3]-ye[6];
483 bz= ze[3]-ze[6];
484
485 /* Kreuzprodukt */
486 vx[5]= ay*bz-by*az;
487 vy[5]= az*bx-bz*ax;
488 vz[5]= ax*by-bx*ay;
489
490 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
491 * sechster Normalenvektor
492 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
493 /* erster Vektor */
494 ax= xe[3]-xe[6];
495 ay= ye[3]-ye[6];
496 az= ze[3]-ze[6];
497
498 /* zweiter Vektor */
499 bx= xe[2]-xe[6];
500 by= ye[2]-ye[6];
501 bz= ze[2]-ze[6];
502
503 /* Kreuzprodukt */
504 vx[6]= ay*bz-by*az;
505 vy[6]= az*bx-bz*ax;
506 vz[6]= ax*by-bx*ay;
507
508 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
509 * 7. Normalenvektor
510 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
511 /* erster Vektor */
512 ax= xe[7]-xe[8];
513 ay= ye[7]-ye[8];
514 az= ze[7]-ze[8];
515
516 /* zweiter Vektor */
517 bx= xe[5]-xe[8];
518 by= ye[5]-ye[8];
519 bz= ze[5]-ze[8];
520
521 /* Kreuzprodukt */
522 vx[7]= ay*bz-by*az;
523 vy[7]= az*bx-bz*ax;
524 vz[7]= ax*by-bx*ay;
525
526 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
527 * 8. Normalenvektor
528 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
529 /* erster Vektor */
530 ax= xe[6]-xe[7];
531 ay= ye[6]-ye[7];
532 az= ze[6]-ze[7];
533
534 /* zweiter Vektor */
535 bx= xe[5]-xe[7];
536 by= ye[5]-ye[7];
537 bz= ze[5]-ze[7];
538
539 /* Kreuzprodukt */
540 vx[8]= ay*bz-by*az;
541 vy[8]= az*bx-bz*ax;
542 vz[8]= ax*by-bx*ay;
543
544 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
545 * 9. Normalenvektor
546 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
547 /* erster Vektor */
548 ax= xe[8]-xe[7];
549 ay= ye[8]-ye[7];
550 az= ze[8]-ze[7];
551
552 /* zweiter Vektor */
553 bx= xe[3]-xe[7];
554 by= ye[3]-ye[7];
555 bz= ze[3]-ze[7];
556
557 /* Kreuzprodukt */
558 vx[9]= ay*bz-by*az;
559 vy[9]= az*bx-bz*ax;
560 vz[9]= ax*by-bx*ay;
561
562 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
563 * 10. Normalenvektor
564 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
565 /* erster Vektor */
566 ax= xe[4]-xe[8];
567 ay= ye[4]-ye[8];
568 az= ze[4]-ze[8];
569
570 /* zweiter Vektor */
571 bx= xe[3]-xe[8];
572 by= ye[3]-ye[8];
573 bz= ze[3]-ze[8];
574
575 /* Kreuzprodukt */
576 vx[10]= ay*bz-by*az;
577 vy[10]= az*bx-bz*ax;
578 vz[10]= ax*by-bx*ay;
579
580 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
581 * 11. Normalenvektor
582 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
583 /* erster Vektor */
584 ax= xe[5]-xe[8];
585 ay= ye[5]-ye[8];
586 az= ze[5]-ze[8];
587
588 /* zweiter Vektor */
589 bx= xe[4]-xe[8];
590 by= ye[4]-ye[8];
591 bz= ze[4]-ze[8];
592
593 /* Kreuzprodukt */
594 vx[11]= ay*bz-by*az;
595 vy[11]= az*bx-bz*ax;
596 vz[11]= ax*by-bx*ay;
597
598 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
599 * 12. Normalenvektor
600 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
601 /* erster Vektor */
602 ax= xe[1]-xe[5];
603 ay= ye[1]-ye[5];
604 az= ze[1]-ze[5];
605
606 /* zweiter Vektor */
607 bx= xe[4]-xe[5];
608 by= ye[4]-ye[5];
609 bz= ze[4]-ze[5];
610
611 /* Kreuzprodukt */
612 vx[12]= ay*bz-by*az;
613 vy[12]= az*bx-bz*ax;
614 vz[12]= ax*by-bx*ay;
615
616
617 /*======================================================================
618 * ... und rendern
619 *=====================================================================*/
620 glBegin(GL_TRIANGLES);
621 glNormal3d( vx[1],vy[1],vz[1]);
622 glVertex3d( xe[1],ye[1],ze[1]);
623 glVertex3d( xe[2],ye[2],ze[2]);
624 glVertex3d( xe[3],ye[3],ze[3]);
625
626 glNormal3d( vx[2],vy[2],vz[2]);
627 glVertex3d( xe[1],ye[1],ze[1]);
628 glVertex3d( xe[3],ye[3],ze[3]);
629 glVertex3d( xe[4],ye[4],ze[4]);
630
631 glNormal3d( vx[3],vy[3],vz[3]);
632 glVertex3d( xe[5],ye[5],ze[5]);
633 glVertex3d( xe[6],ye[6],ze[6]);
634 glVertex3d( xe[2],ye[2],ze[2]);
635
636 glNormal3d( vx[4],vy[4],vz[4]);
637 glVertex3d( xe[5],ye[5],ze[5]);
638 glVertex3d( xe[2],ye[2],ze[2]);
639 glVertex3d( xe[1],ye[1],ze[1]);
640
641 glNormal3d( vx[5],vy[5],vz[5]);
642 glVertex3d( xe[6],ye[6],ze[6]);
643 glVertex3d( xe[7],ye[7],ze[7]);
644 glVertex3d( xe[3],ye[3],ze[3]);
645
646 glNormal3d( vx[6],vy[6],vz[6]);
647 glVertex3d( xe[6],ye[6],ze[6]);
648 glVertex3d( xe[3],ye[3],ze[3]);
649 glVertex3d( xe[2],ye[2],ze[2]);
650
651 glNormal3d( vx[7],vy[7],vz[7]);
652 glVertex3d( xe[5],ye[5],ze[5]);
653 glVertex3d( xe[8],ye[8],ze[8]);
654 glVertex3d( xe[7],ye[7],ze[7]);
655
656 glNormal3d( vx[8],vy[8],vz[8]);
657 glVertex3d( xe[5],ye[5],ze[5]);
658 glVertex3d( xe[7],ye[7],ze[7]);
659 glVertex3d( xe[6],ye[6],ze[6]);
660
661 glNormal3d( vx[9],vy[9],vz[9]);
662 glVertex3d( xe[3],ye[3],ze[3]);
663 glVertex3d( xe[7],ye[7],ze[7]);
664 glVertex3d( xe[8],ye[8],ze[8]);
665
666 glNormal3d( vx[10],vy[10],vz[10]);
667 glVertex3d( xe[3],ye[3],ze[3]);
668 glVertex3d( xe[8],ye[8],ze[8]);
669 glVertex3d( xe[4],ye[4],ze[4]);
670
671 glNormal3d( vx[11],vy[11],vz[11]);
672 glVertex3d( xe[4],ye[4],ze[4]);
673 glVertex3d( xe[8],ye[8],ze[8]);
674 glVertex3d( xe[5],ye[5],ze[5]);
675
676 glNormal3d( vx[12],vy[12],vz[12]);
677 glVertex3d( xe[4],ye[4],ze[4]);
678 glVertex3d( xe[5],ye[5],ze[5]);
679 glVertex3d( xe[1],ye[1],ze[1]);
680 glEnd();
681 } /* Ende Hexaeder 1, 10 und 21 */
682
683 /*----------------------------------------------------------------------
684 * Volumenschale 22
685 *---------------------------------------------------------------------*/
686 if(ityp[i] == 22)
687 {
688 /*======================================================================
689 * die sechs Punkte fuer jede Schale holen
690 *=====================================================================*/
691 for (j= 1; j <= 3; j++)
692 {
693 xe[j]= xv[koi[koffs[i]+j-1]];
694 ye[j]= yv[koi[koffs[i]+j-1]];
695 ze[j]= zv[koi[koffs[i]+j-1]];
696 }
697 for (j= 4; j <= 6; j++)
698 {
699 xe[j]= xv[koi[koffs[i]+j+3-1]];
700 ye[j]= yv[koi[koffs[i]+j+3-1]];
701 ze[j]= zv[koi[koffs[i]+j+3-1]];
702 }
703
704 /*======================================================================
705 * die Normalenvektoren fuer 8 Dreiecke (2 pro Seiten-Seite) bestimmen
706 *=====================================================================*/
707 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
708 * erster Normalenvektor (Deckflaeche)
709 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
710 /* erster Vektor */
711 ax= xe[2]-xe[1];
712 ay= ye[2]-ye[1];
713 az= ze[2]-ze[1];
714
715 /* zweiter Vektor */
716 bx= xe[3]-xe[1];
717 by= ye[3]-ye[1];
718 bz= ze[3]-ze[1];
719
720 /* Kreuzprodukt */
721 vx[1]= ay*bz-by*az;
722 vy[1]= az*bx-bz*ax;
723 vz[1]= ax*by-bx*ay;
724
725 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
726 * zweiter Normalenvektor (Unterseite)
727 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
728 /* erster Vektor */
729 ax= xe[5]-xe[4];
730 ay= ye[5]-ye[4];
731 az= ze[5]-ze[4];
732
733 /* zweiter Vektor */
734 bx= xe[6]-xe[4];
735 by= ye[6]-ye[4];
736 bz= ze[6]-ze[4];
737
738 /* Kreuzprodukt */
739 vx[2]= ay*bz-by*az;
740 vy[2]= az*bx-bz*ax;
741 vz[2]= ax*by-bx*ay;
742
743 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
744 * dritter Normalenvektor
745 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
746 /* erster Vektor */
747 ax= xe[5]-xe[4];
748 ay= ye[5]-ye[4];
749 az= ze[5]-ze[4];
750
751 /* zweiter Vektor */
752 bx= xe[1]-xe[4];
753 by= ye[1]-ye[4];
754 bz= ze[1]-ze[4];
755
756 /* Kreuzprodukt */
757 vx[3]= ay*bz-by*az;
758 vy[3]= az*bx-bz*ax;
759 vz[3]= ax*by-bx*ay;
760
761 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
762 * vierter Normalenvektor
763 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
764 /* erster Vektor */
765 ax= xe[5]-xe[1];
766 ay= ye[5]-ye[1];
767 az= ze[5]-ze[1];
768
769 /* zweiter Vektor */
770 bx= xe[2]-xe[1];
771 by= ye[2]-ye[1];
772 bz= ze[2]-ze[1];
773
774 /* Kreuzprodukt */
775 vx[4]= ay*bz-by*az;
776 vy[4]= az*bx-bz*ax;
777 vz[4]= ax*by-bx*ay;
778
779 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
780 * fuenfter Normalenvektor
781 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
782 /* erster Vektor */
783 ax= xe[6]-xe[5];
784 ay= ye[6]-ye[5];
785 az= ze[6]-ze[5];
786
787 /* zweiter Vektor */
788 bx= xe[2]-xe[5];
789 by= ye[2]-ye[5];
790 bz= ze[2]-ze[5];
791
792 /* Kreuzprodukt */
793 vx[5]= ay*bz-by*az;
794 vy[5]= az*bx-bz*ax;
795 vz[5]= ax*by-bx*ay;
796
797 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
798 * sechster Normalenvektor
799 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
800 /* erster Vektor */
801 ax= xe[6]-xe[2];
802 ay= ye[6]-ye[2];
803 az= ze[6]-ze[2];
804
805 /* zweiter Vektor */
806 bx= xe[3]-xe[2];
807
808
809 by= ye[3]-ye[2];
810 bz= ze[3]-ze[2];
811
812 /* Kreuzprodukt */
813 vx[6]= ay*bz-by*az;
814 vy[6]= az*bx-bz*ax;
815 vz[6]= ax*by-bx*ay;
816
817 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
818 * 7. Normalenvektor
819 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
820 /* erster Vektor */
821 ax= xe[4]-xe[6];
822 ay= ye[4]-ye[6];
823 az= ze[4]-ze[6];
824
825 /* zweiter Vektor */
826 bx= xe[3]-xe[6];
827 by= ye[3]-ye[6];
828 bz= ze[3]-ze[6];
829
830 /* Kreuzprodukt */
831 vx[7]= ay*bz-by*az;
832 vy[7]= az*bx-bz*ax;
833 vz[7]= ax*by-bx*ay;
834
835 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
836 * 8. Normalenvektor
837 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
838 /* erster Vektor */
839 ax= xe[4]-xe[3];
840 ay= ye[4]-ye[3];
841 az= ze[4]-ze[3];
842
843 /* zweiter Vektor */
844 bx= xe[1]-xe[3];
845 by= ye[1]-ye[3];
846 bz= ze[1]-ze[3];
847
848 /* Kreuzprodukt */
849 vx[8]= ay*bz-by*az;
850 vy[8]= az*bx-bz*ax;
851 vz[8]= ax*by-bx*ay;
852
853 /*======================================================================
854 * ... und rendern
855 *=====================================================================*/
856 glBegin(GL_TRIANGLES);
857 glNormal3d( vx[1],vy[1],vz[1]);
858 glVertex3d( xe[1],ye[1],ze[1]);
859 glVertex3d( xe[2],ye[2],ze[2]);
860 glVertex3d( xe[3],ye[3],ze[3]);
861
862 glNormal3d( vx[2],vy[2],vz[2]);
863 glVertex3d( xe[4],ye[4],ze[4]);
864 glVertex3d( xe[5],ye[5],ze[5]);
865 glVertex3d( xe[6],ye[6],ze[6]);
866
867 glNormal3d( vx[3],vy[3],vz[3]);
868 glVertex3d( xe[4],ye[4],ze[4]);
869 glVertex3d( xe[5],ye[5],ze[5]);
870 glVertex3d( xe[1],ye[1],ze[1]);
871
872 glNormal3d( vx[4],vy[4],vz[4]);
873 glVertex3d( xe[1],ye[1],ze[1]);
874 glVertex3d( xe[5],ye[5],ze[5]);
875 glVertex3d( xe[2],ye[2],ze[2]);
876
877 glNormal3d( vx[5],vy[5],vz[5]);
878 glVertex3d( xe[5],ye[5],ze[5]);
879 glVertex3d( xe[6],ye[6],ze[6]);
880 glVertex3d( xe[2],ye[2],ze[2]);
881
882 glNormal3d( vx[6],vy[6],vz[6]);
883 glVertex3d( xe[2],ye[2],ze[2]);
884 glVertex3d( xe[6],ye[6],ze[6]);
885 glVertex3d( xe[3],ye[3],ze[3]);
886
887 glNormal3d( vx[7],vy[7],vz[7]);
888 glVertex3d( xe[6],ye[6],ze[6]);
889 glVertex3d( xe[4],ye[4],ze[4]);
890 glVertex3d( xe[3],ye[3],ze[3]);
891
892 glNormal3d( vx[8],vy[8],vz[8]);
893 glVertex3d( xe[3],ye[3],ze[3]);
894 glVertex3d( xe[4],ye[4],ze[4]);
895 glVertex3d( xe[1],ye[1],ze[1]);
896
897 glEnd();
898 } /* Ende Volumenschale 22 */
899
900
901 } /* Ende Schleife ueber alle Elemente */
902
903 return 0;
904 }
905
906 /***********************************************************************
907 * hier beginnt Function tet288: mit Spannungen oder Verschiebungen an
908 * den Eckknoten
909 ***********************************************************************/
tet288(void)910 int tet288(void)
911 {
912 extern FR_DOUBLEAY xv;
913 extern FR_DOUBLEAY yv;
914 extern FR_DOUBLEAY zv;
915
916 extern FR_DOUBLE xe[];
917 extern FR_DOUBLE ye[];
918 extern FR_DOUBLE ze[];
919
920 extern FR_DOUBLE vx[];
921 extern FR_DOUBLE vy[];
922 extern FR_DOUBLE vz[];
923
924 extern GLfloat rot[];
925 extern GLfloat gruen[];
926 extern GLfloat blau[];
927
928 extern FR_INT4AY ifarbe;
929
930 extern FR_INT4AY ityp;
931 extern FR_INT4AY koi;
932 extern FR_INT4AY koffs;
933
934 extern FR_INT4 kf[];
935
936 extern FR_INT4 ne;
937
938 FR_INT4 i,j,k;
939
940 static FR_INT4 jp7[5]= {0,1,2,3,4};
941
942 static FR_INT4 jp16[13]={0,1,3,2,1,2,4,1,4,3,2,3,4};
943
944 static FR_INT4 jp10[37]={0,1,2,3,1,3,4,5,6,2,5,2,1,6,7,3,6,3,2,
945 5,8,7,5,7,6,3,7,8,3,8,4,4,8,5,4,5,1};
946
947 static FR_INT4 jp22[25]={0,1,2,3,4,6,5,4,5,1,1,5,2,5,6,2,2,6,3,
948 6,4,3,3,4,1};
949
950 /***********************************************************************
951 * Schleife ueber alle Elemente
952 ***********************************************************************/
953 for (i= 1; i <= ne; i++)
954 {
955
956 /*----------------------------------------------------------------------
957 * Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25
958 *---------------------------------------------------------------------*/
959 if(ityp[i] == 4 || ityp[i] == 9 ||
960 ityp[i] == 2 || ityp[i] == 13 ||
961 ityp[i] == 5 || ityp[i] == 25)
962 {
963
964 /*======================================================================
965 * die zwei Eck-Punkte fuer jeden Stab holen
966 *=====================================================================*/
967 for (j= 1; j <= 2; j++)
968 {
969 xe[j]= xv[koi[koffs[i]+j-1]];
970 ye[j]= yv[koi[koffs[i]+j-1]];
971 ze[j]= zv[koi[koffs[i]+j-1]];
972 kf[j]= koi[koffs[i]+j-1];
973 }
974
975 /*======================================================================
976 * ... und rendern
977 *=====================================================================*/
978 glBegin(GL_LINES);
979 for(k= 1; k <= 2; k++)
980 {
981 glColor3f (rot [ifarbe[kf[jp7[k]]]],
982 gruen[ifarbe[kf[jp7[k]]]],
983 blau [ifarbe[kf[jp7[k]]]]);
984 glVertex3d(xe[k],ye[k],ze[k]);
985 }
986 glEnd();
987 } /* Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25 */
988
989 /*----------------------------------------------------------------------
990 * Scheibe 7,Torus 8,Scheibe 11,Torus 12 u.Platte 19 u.20,Schale 23
991 *---------------------------------------------------------------------*/
992 if(ityp[i] == 7 || ityp[i] == 8 ||
993 ityp[i] == 11 || ityp[i] == 12 ||
994 ityp[i] == 19 || ityp[i] == 20 || ityp[i] == 23)
995 {
996
997 /*======================================================================
998 * die vier Eck-Punkte fuer jede Scheibe oder Platte holen
999 *=====================================================================*/
1000 if(ityp[i] != 19)
1001 {
1002 for (j= 1; j <= 4; j++)
1003 {
1004 xe[j]= xv[koi[koffs[i]+j-1]];
1005 ye[j]= yv[koi[koffs[i]+j-1]];
1006 ze[j]= zv[koi[koffs[i]+j-1]];
1007 kf[j]= koi[koffs[i]+j-1];
1008 }
1009 }
1010 else
1011 {
1012 xe[1]= xv[koi[koffs[i]]];
1013 ye[1]= yv[koi[koffs[i]]];
1014 ze[1]= zv[koi[koffs[i]]];
1015 kf[1]= koi[koffs[i]];
1016
1017 xe[2]= xv[koi[koffs[i]+12]];
1018 ye[2]= yv[koi[koffs[i]+12]];
1019 ze[2]= zv[koi[koffs[i]+12]];
1020 kf[2]= koi[koffs[i]+12];
1021
1022 xe[3]= xv[koi[koffs[i]+15]];
1023 ye[3]= yv[koi[koffs[i]+15]];
1024 ze[3]= zv[koi[koffs[i]+15]];
1025 kf[3]= koi[koffs[i]+15];
1026
1027 xe[4]= xv[koi[koffs[i]+3]];
1028 ye[4]= yv[koi[koffs[i]+3]];
1029 ze[4]= zv[koi[koffs[i]+3]];
1030 kf[4]= koi[koffs[i]+3];
1031 }
1032
1033 /*======================================================================
1034 * ... und rendern
1035 *=====================================================================*/
1036 glBegin(GL_QUADS);
1037 for(k= 1; k <= 4; k++)
1038 {
1039 glColor3f (rot [ifarbe[kf[jp7[k]]]],
1040 gruen[ifarbe[kf[jp7[k]]]],
1041 blau [ifarbe[kf[jp7[k]]]]);
1042 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1043 }
1044 glEnd();
1045 } /* Scheibe 7,11,Torus 8,12 u.Platte 19 u.20,Schale 23 */
1046
1047 /*----------------------------------------------------------------------
1048 * Scheibe 3, Torus 6, Scheibe 14, Torus 15, Platte 18, Schale 24
1049 *---------------------------------------------------------------------*/
1050 if(ityp[i] == 3 || ityp[i] == 14 ||
1051 ityp[i] == 6 || ityp[i] == 15 ||
1052 ityp[i] == 18 || ityp[i] == 24)
1053 {
1054
1055 /*======================================================================
1056 * die drei Eck-Punkte fuer jede Scheibe oder Platte holen
1057 *=====================================================================*/
1058 for (j= 1; j <= 3; j++)
1059 {
1060 xe[j]= xv[koi[koffs[i]+j-1]];
1061 ye[j]= yv[koi[koffs[i]+j-1]];
1062 ze[j]= zv[koi[koffs[i]+j-1]];
1063 kf[j]= koi[koffs[i]+j-1];
1064 }
1065
1066 /*======================================================================
1067 * ... und rendern
1068 *=====================================================================*/
1069 glBegin(GL_TRIANGLES);
1070 for(k= 1; k <= 3; k++)
1071 {
1072 glColor3f (rot [ifarbe[kf[jp7[k]]]],
1073 gruen[ifarbe[kf[jp7[k]]]],
1074 blau [ifarbe[kf[jp7[k]]]]);
1075 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1076 }
1077 glEnd();
1078 } /* Scheibe 3,14, Torus 6,15, Platte 18, Schale 24 */
1079
1080 /*----------------------------------------------------------------------
1081 * Tetraeder 16 und 17
1082 *---------------------------------------------------------------------*/
1083 if(ityp[i] == 16 || ityp[i] == 17)
1084 {
1085
1086 /*======================================================================
1087 * die vier Punkte fuer jeden Tetraeder holen
1088 *=====================================================================*/
1089 for (j= 1; j <= 4; j++)
1090 {
1091 xe[j]= xv[koi[koffs[i]+j-1]];
1092 ye[j]= yv[koi[koffs[i]+j-1]];
1093 ze[j]= zv[koi[koffs[i]+j-1]];
1094 kf[j]= koi[koffs[i]+j-1];
1095 }
1096
1097 /*======================================================================
1098 * ... und rendern
1099 *=====================================================================*/
1100 glBegin(GL_TRIANGLES);
1101 for(k= 1; k <= 12; k++)
1102 {
1103 glColor3f (rot [ifarbe[kf[jp16[k]]]],
1104 gruen[ifarbe[kf[jp16[k]]]],
1105 blau [ifarbe[kf[jp16[k]]]]);
1106 glVertex3d(xe[jp16[k]],ye[jp16[k]],ze[jp16[k]]);
1107 }
1108 glEnd();
1109 } /* Ende Tetraeder 16 und 17 */
1110
1111 /*----------------------------------------------------------------------
1112 * Hexaeder 1, 10 und 21
1113 *---------------------------------------------------------------------*/
1114 if(ityp[i] == 1 || ityp[i] == 10 || ityp[i] == 21)
1115 {
1116 /*======================================================================
1117 * die acht Punkte fuer jeden Hexaeder holen
1118 *=====================================================================*/
1119 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1120 * Hexaeder 1 und 10
1121 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1122 if(ityp[i] == 1 || ityp[i] == 10)
1123 {
1124 for (j= 1; j <= 8; j++)
1125 {
1126 xe[j]= xv[koi[koffs[i]+j-1]];
1127 ye[j]= yv[koi[koffs[i]+j-1]];
1128 ze[j]= zv[koi[koffs[i]+j-1]];
1129 kf[j]= koi[koffs[i]+j-1];
1130 }
1131 }
1132
1133 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1134 * Volumenschalenele. 21
1135 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1136 if(ityp[i] == 21)
1137 {
1138 for (j= 1; j <= 4; j++)
1139 {
1140 xe[j]= xv[koi[koffs[i]+j-1]];
1141 ye[j]= yv[koi[koffs[i]+j-1]];
1142 ze[j]= zv[koi[koffs[i]+j-1]];
1143 kf[j]= koi[koffs[i]+j-1];
1144 }
1145 for (j= 5; j <= 8; j++)
1146 {
1147 xe[j]= xv[koi[koffs[i]+j+4-1]];
1148 ye[j]= yv[koi[koffs[i]+j+4-1]];
1149 ze[j]= zv[koi[koffs[i]+j+4-1]];
1150 kf[j]= koi[koffs[i]+j+4-1];
1151 }
1152 }
1153
1154 /*======================================================================
1155 * ... und rendern
1156 *=====================================================================*/
1157 glBegin(GL_TRIANGLES);
1158 for(k= 1; k <= 36; k++) /* 12 Dreiecke */
1159 {
1160 glColor3f (rot [ifarbe[kf[jp10[k]]]],
1161 gruen[ifarbe[kf[jp10[k]]]],
1162 blau [ifarbe[kf[jp10[k]]]]);
1163 glVertex3d(xe[jp10[k]],ye[jp10[k]],ze[jp10[k]]);
1164 }
1165 glEnd();
1166 } /* Ende Hexaeder 1, 10 und Schale 21 */
1167
1168 /*----------------------------------------------------------------------
1169 * Volumenschale 22
1170 *---------------------------------------------------------------------*/
1171 if(ityp[i] == 22)
1172 {
1173 /*======================================================================
1174 * die sechs Punkte fuer jede Schale holen
1175 *=====================================================================*/
1176 for (j= 1; j <= 3; j++)
1177 {
1178 xe[j]= xv[koi[koffs[i]+j-1]];
1179 ye[j]= yv[koi[koffs[i]+j-1]];
1180 ze[j]= zv[koi[koffs[i]+j-1]];
1181 kf[j]= koi[koffs[i]+j-1];
1182 }
1183 for (j= 4; j <= 6; j++)
1184 {
1185 xe[j]= xv[koi[koffs[i]+j+3-1]];
1186 ye[j]= yv[koi[koffs[i]+j+3-1]];
1187 ze[j]= zv[koi[koffs[i]+j+3-1]];
1188 kf[j]= koi[koffs[i]+j+3-1];
1189 }
1190
1191 /*======================================================================
1192 * ... und rendern
1193 *=====================================================================*/
1194 glBegin(GL_TRIANGLES);
1195 for(k= 1; k <= 24; k++) /* 8 Dreiecke */
1196 {
1197 glColor3f (rot [ifarbe[kf[jp22[k]]]],
1198 gruen[ifarbe[kf[jp22[k]]]],
1199 blau [ifarbe[kf[jp22[k]]]]);
1200 glVertex3d(xe[jp22[k]],ye[jp22[k]],ze[jp22[k]]);
1201 }
1202 glEnd();
1203 } /* Ende Volumenschale 22 */
1204
1205 } /* Ende Schleife ueber alle Elemente */
1206
1207 return 0;
1208 }
1209
1210 /***********************************************************************
1211 * hier beginnt Function tet388: Hidden Line
1212 ***********************************************************************/
tet388(void)1213 int tet388(void)
1214 {
1215 extern FR_DOUBLEAY xv;
1216 extern FR_DOUBLEAY yv;
1217 extern FR_DOUBLEAY zv;
1218
1219 extern FR_DOUBLE xe[];
1220 extern FR_DOUBLE ye[];
1221 extern FR_DOUBLE ze[];
1222
1223 extern FR_INT4AY ityp;
1224 extern FR_INT4AY koi;
1225 extern FR_INT4AY koffs;
1226
1227 extern FR_INT4 ne;
1228
1229 FR_INT4 i,j,k;
1230
1231 static FR_INT4 jp7[5]= {0,1,2,3,4};
1232
1233 static FR_INT4 jp16[13]={0,1,3,2,1,2,4,1,4,3,2,3,4};
1234
1235 static FR_INT4 jp10[25]={0,1,2,3,4,5,6,7,8,1,2,6,5,2,3,7,6,
1236 3,4,8,7,1,4,8,5};
1237
1238 static FR_INT4 jd22[7] ={0,1,2,3,4,5,6};
1239
1240 static FR_INT4 jv22[13]={0,1,4,5,2,2,5,6,3,3,6,4,1};
1241
1242 /***********************************************************************
1243 * Schleife ueber alle Elemente
1244 ***********************************************************************/
1245 for (i= 1; i <= ne; i++)
1246 {
1247
1248 /*----------------------------------------------------------------------
1249 * Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25
1250 *---------------------------------------------------------------------*/
1251 if(ityp[i] == 4 || ityp[i] == 9 ||
1252 ityp[i] == 2 || ityp[i] == 13 ||
1253 ityp[i] == 5 || ityp[i] == 25)
1254 {
1255
1256 /*======================================================================
1257 * die zwei Eck-Punkte fuer jeden Stab holen
1258 *=====================================================================*/
1259 for (j= 1; j <= 2; j++)
1260 {
1261 xe[j]= xv[koi[koffs[i]+j-1]];
1262 ye[j]= yv[koi[koffs[i]+j-1]];
1263 ze[j]= zv[koi[koffs[i]+j-1]];
1264 }
1265
1266 /*======================================================================
1267 * ... und rendern
1268 *=====================================================================*/
1269 glBegin(GL_LINES);
1270 glVertex3d( xe[1],ye[1],ze[1]);
1271 glVertex3d( xe[2],ye[2],ze[2]);
1272 glEnd();
1273 } /* Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25 */
1274
1275
1276 /*----------------------------------------------------------------------
1277 * Scheibe 7,Torus 8,Scheibe 11,Torus 12 u.Platte 19 u.20,Schale 23
1278 *---------------------------------------------------------------------*/
1279 if(ityp[i] == 7 || ityp[i] == 8 ||
1280 ityp[i] == 11 || ityp[i] == 12 ||
1281 ityp[i] == 19 || ityp[i] == 20 || ityp[i] == 23)
1282 {
1283
1284 /*======================================================================
1285 * die vier Eck-Punkte fuer jede Scheibe oder Platte holen
1286 *=====================================================================*/
1287 if(ityp[i] != 19)
1288 {
1289 for (j= 1; j <= 4; j++)
1290 {
1291 xe[j]= xv[koi[koffs[i]+j-1]];
1292 ye[j]= yv[koi[koffs[i]+j-1]];
1293 ze[j]= zv[koi[koffs[i]+j-1]];
1294 }
1295 }
1296 else
1297 {
1298 xe[1]= xv[koi[koffs[i]]];
1299 ye[1]= yv[koi[koffs[i]]];
1300 ze[1]= zv[koi[koffs[i]]];
1301
1302 xe[2]= xv[koi[koffs[i]+12]];
1303 ye[2]= yv[koi[koffs[i]+12]];
1304 ze[2]= zv[koi[koffs[i]+12]];
1305
1306 xe[3]= xv[koi[koffs[i]+15]];
1307 ye[3]= yv[koi[koffs[i]+15]];
1308 ze[3]= zv[koi[koffs[i]+15]];
1309
1310 xe[4]= xv[koi[koffs[i]+3]];
1311 ye[4]= yv[koi[koffs[i]+3]];
1312 ze[4]= zv[koi[koffs[i]+3]];
1313 }
1314
1315 /*======================================================================
1316 * ... und rendern
1317 *=====================================================================*/
1318 glBegin(GL_QUADS);
1319 for(k= 1; k <= 4; k++)
1320 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1321 glEnd();
1322 } /* Scheibe 7,11,Torus 8,12 u.Platte 19 u.20,Schale 23 */
1323
1324 /*----------------------------------------------------------------------
1325 * Scheibe 3, Torus 6, Scheibe 14, Torus 15, Platte 18, Schale 24
1326 *---------------------------------------------------------------------*/
1327 if(ityp[i] == 3 || ityp[i] == 14 ||
1328 ityp[i] == 6 || ityp[i] == 15 ||
1329 ityp[i] == 18 || ityp[i] == 24)
1330 {
1331
1332 /*======================================================================
1333 * die drei Eck-Punkte fuer jede Scheibe oder Platte holen
1334 *=====================================================================*/
1335 for (j= 1; j <= 3; j++)
1336 {
1337 xe[j]= xv[koi[koffs[i]+j-1]];
1338 ye[j]= yv[koi[koffs[i]+j-1]];
1339 ze[j]= zv[koi[koffs[i]+j-1]];
1340 }
1341
1342 /*======================================================================
1343 * ... und rendern
1344 *=====================================================================*/
1345 glBegin(GL_TRIANGLES);
1346 for(k= 1; k <= 3; k++)
1347 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1348 glEnd();
1349 } /* Scheibe 3,14, Torus 6,15, Platte 18, Schale 24 */
1350
1351 /*----------------------------------------------------------------------
1352 * Tetraeder 16 und 17
1353 *---------------------------------------------------------------------*/
1354 if(ityp[i] == 16 || ityp[i] == 17)
1355 {
1356
1357 /*======================================================================
1358 * die vier Eck-Punkte fuer jeden Tetraeder holen
1359 *=====================================================================*/
1360 for (j= 1; j <= 4; j++)
1361 {
1362 xe[j]= xv[koi[koffs[i]+j-1]];
1363 ye[j]= yv[koi[koffs[i]+j-1]];
1364 ze[j]= zv[koi[koffs[i]+j-1]];
1365 }
1366
1367 /*======================================================================
1368 * ... und rendern
1369 *=====================================================================*/
1370 glBegin(GL_TRIANGLES);
1371 for(k= 1; k <= 12; k++)
1372 glVertex3d(xe[jp16[k]],ye[jp16[k]],ze[jp16[k]]);
1373 glEnd();
1374 } /* Ende Tetraeder 16 und 17 */
1375
1376 /*----------------------------------------------------------------------
1377 * Hexaeder 1, 10 und 21
1378 *---------------------------------------------------------------------*/
1379 if(ityp[i] == 1 || ityp[i] == 10 || ityp[i] == 21)
1380 {
1381 /*======================================================================
1382 * die acht Punkte fuer jeden Hexaeder holen
1383 *=====================================================================*/
1384 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1385 * Hexaeder 1 und 10: die 8 Eckknoten
1386 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1387 if(ityp[i] == 1 || ityp[i] == 10)
1388 {
1389 for (j= 1; j <= 8; j++)
1390 {
1391 xe[j]= xv[koi[koffs[i]+j-1]];
1392 ye[j]= yv[koi[koffs[i]+j-1]];
1393 ze[j]= zv[koi[koffs[i]+j-1]];
1394 }
1395 }
1396
1397 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1398 * Volumenschalenele. 21: die 8 Eckknoten
1399 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1400 if(ityp[i] == 21)
1401 {
1402 for (j= 1; j <= 4; j++)
1403 {
1404 xe[j]= xv[koi[koffs[i]+j-1]];
1405 ye[j]= yv[koi[koffs[i]+j-1]];
1406 ze[j]= zv[koi[koffs[i]+j-1]];
1407 }
1408 for (j= 5; j <= 8; j++)
1409 {
1410 xe[j]= xv[koi[koffs[i]+j+4-1]];
1411 ye[j]= yv[koi[koffs[i]+j+4-1]];
1412 ze[j]= zv[koi[koffs[i]+j+4-1]];
1413 }
1414 }
1415
1416 /*======================================================================
1417 * ... und rendern
1418 *=====================================================================*/
1419 glBegin(GL_QUADS);
1420 for(k= 1; k <= 24; k++)
1421 glVertex3d(xe[jp10[k]],ye[jp10[k]],ze[jp10[k]]);
1422 glEnd();
1423 } /* Ende Hexaeder 1, 10 und 21 */
1424
1425 /*----------------------------------------------------------------------
1426 * Volumenschale 22
1427 *---------------------------------------------------------------------*/
1428 if(ityp[i] == 22)
1429 {
1430 for (j= 1; j <= 3; j++)
1431 {
1432 xe[j]= xv[koi[koffs[i]+j-1]];
1433 ye[j]= yv[koi[koffs[i]+j-1]];
1434 ze[j]= zv[koi[koffs[i]+j-1]];
1435 }
1436 for (j= 4; j <= 6; j++)
1437 {
1438 xe[j]= xv[koi[koffs[i]+j+3-1]];
1439 ye[j]= yv[koi[koffs[i]+j+3-1]];
1440 ze[j]= zv[koi[koffs[i]+j+3-1]];
1441 }
1442
1443 /*======================================================================
1444 * ... und rendern
1445 *=====================================================================*/
1446 glBegin(GL_TRIANGLES);
1447 for(k= 1; k <= 6; k++)
1448 glVertex3d(xe[jd22[k]],ye[jd22[k]],ze[jd22[k]]);
1449 glEnd();
1450
1451 glBegin(GL_QUADS);
1452 for(k= 1; k <= 12; k++)
1453 glVertex3d(xe[jv22[k]],ye[jv22[k]],ze[jv22[k]]);
1454 glEnd();
1455 } /* Ende Volumenschale 22 */
1456
1457
1458 } /* Ende Schleife ueber alle Elemente */
1459
1460 return 0;
1461 }
1462
1463 /***********************************************************************
1464 * hier beginnt Function tet488: Spannungen pro Element
1465 ***********************************************************************/
tet488(void)1466 int tet488(void)
1467 {
1468 extern FR_DOUBLEAY xv;
1469 extern FR_DOUBLEAY yv;
1470 extern FR_DOUBLEAY zv;
1471
1472 extern FR_DOUBLE xe[];
1473 extern FR_DOUBLE ye[];
1474 extern FR_DOUBLE ze[];
1475
1476 extern FR_DOUBLE vx[];
1477 extern FR_DOUBLE vy[];
1478 extern FR_DOUBLE vz[];
1479
1480 extern GLfloat rot[];
1481 extern GLfloat gruen[];
1482 extern GLfloat blau[];
1483
1484 extern FR_INT4AY jfarbe;
1485
1486 extern FR_INT4AY ityp;
1487 extern FR_INT4AY koi;
1488 extern FR_INT4AY koffs;
1489
1490 extern FR_INT4 ne;
1491
1492 FR_INT4 i,j,k;
1493
1494 static FR_INT4 jp7[5]= {0,1,2,3,4};
1495
1496 static FR_INT4 jp16[13]={0,1,3,2,1,2,4,1,4,3,2,3,4};
1497
1498 static FR_INT4 jp10[37]={0,1,2,3,1,3,4,5,6,2,5,2,1,6,7,3,6,3,2,
1499 5,8,7,5,7,6,3,7,8,3,8,4,4,8,5,4,5,1};
1500
1501 static FR_INT4 jp22[25]={0,1,2,3,4,6,5,4,5,1,1,5,2,5,6,2,2,6,3,
1502 6,4,3,3,4,1};
1503
1504 /***********************************************************************
1505 * Schleife ueber alle Elemente
1506 ***********************************************************************/
1507 for (i= 1; i <= ne; i++)
1508 {
1509
1510 /*----------------------------------------------------------------------
1511 * Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25
1512 *---------------------------------------------------------------------*/
1513 if(ityp[i] == 4 || ityp[i] == 9 ||
1514 ityp[i] == 2 || ityp[i] == 13 ||
1515 ityp[i] == 5 || ityp[i] == 25)
1516 {
1517
1518 /*======================================================================
1519 * die zwei Eck-Punkte fuer jeden Stab holen
1520 *=====================================================================*/
1521 for (j= 1; j <= 2; j++)
1522 {
1523 xe[j]= xv[koi[koffs[i]+j-1]];
1524 ye[j]= yv[koi[koffs[i]+j-1]];
1525 ze[j]= zv[koi[koffs[i]+j-1]];
1526 }
1527
1528 /*======================================================================
1529 * ... und rendern
1530 *=====================================================================*/
1531 glBegin(GL_LINES);
1532 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1533 glVertex3d( xe[1],ye[1],ze[1]);
1534 glVertex3d( xe[2],ye[2],ze[2]);
1535 glEnd();
1536 } /* Stab 4 u. 9, Balken 2 und 13, Welle 5, Balken 25*/
1537
1538
1539 /*----------------------------------------------------------------------
1540 * Scheibe 7,Torus 8,Scheibe 11,Torus 12 u. Platte 19 u.20,Schale 23
1541 *---------------------------------------------------------------------*/
1542 if(ityp[i] == 7 || ityp[i] == 8 ||
1543 ityp[i] == 11 || ityp[i] == 12 ||
1544 ityp[i] == 19 || ityp[i] == 20 || ityp[i] == 23)
1545 {
1546
1547 /*======================================================================
1548 * die vier Eck-Punkte fuer jede Scheibe oder Platte holen
1549 *=====================================================================*/
1550 if(ityp[i] != 19)
1551 {
1552 for (j= 1; j <= 4; j++)
1553 {
1554 xe[j]= xv[koi[koffs[i]+j-1]];
1555 ye[j]= yv[koi[koffs[i]+j-1]];
1556 ze[j]= zv[koi[koffs[i]+j-1]];
1557 }
1558 }
1559 else
1560 {
1561 xe[1]= xv[koi[koffs[i]]];
1562 ye[1]= yv[koi[koffs[i]]];
1563 ze[1]= zv[koi[koffs[i]]];
1564
1565 xe[2]= xv[koi[koffs[i]+12]];
1566 ye[2]= yv[koi[koffs[i]+12]];
1567 ze[2]= zv[koi[koffs[i]+12]];
1568
1569 xe[3]= xv[koi[koffs[i]+15]];
1570 ye[3]= yv[koi[koffs[i]+15]];
1571 ze[3]= zv[koi[koffs[i]+15]];
1572
1573 xe[4]= xv[koi[koffs[i]+3]];
1574 ye[4]= yv[koi[koffs[i]+3]];
1575 ze[4]= zv[koi[koffs[i]+3]];
1576 }
1577
1578 /*======================================================================
1579 * ... und rendern
1580 *=====================================================================*/
1581 glBegin(GL_QUADS);
1582 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1583 for(k= 1; k <= 4; k++)
1584 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1585 glEnd();
1586 } /* Scheibe 7,11, Torus 8,12 und Platte 19 u.20,Schale 23 */
1587
1588 /*----------------------------------------------------------------------
1589 * Scheibe 3, Torus 6, Scheibe 14, Torus 15, Platte 18, Schale 24
1590 *---------------------------------------------------------------------*/
1591 if(ityp[i] == 3 || ityp[i] == 14 ||
1592 ityp[i] == 6 || ityp[i] == 15 ||
1593 ityp[i] == 18 || ityp[i] == 24)
1594 {
1595
1596 /*======================================================================
1597 * die drei Eck-Punkte fuer jede Scheibe oder Platte holen
1598 *=====================================================================*/
1599 for (j= 1; j <= 3; j++)
1600 {
1601 xe[j]= xv[koi[koffs[i]+j-1]];
1602 ye[j]= yv[koi[koffs[i]+j-1]];
1603 ze[j]= zv[koi[koffs[i]+j-1]];
1604 }
1605
1606 /*======================================================================
1607 * ... und rendern
1608 *=====================================================================*/
1609 glBegin(GL_TRIANGLES);
1610 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1611 for(k= 1; k <= 3; k++)
1612 glVertex3d(xe[jp7[k]],ye[jp7[k]],ze[jp7[k]]);
1613 glEnd();
1614 } /* Scheibe 3,14, Torus 6,15, Platte 18, Schale 24 */
1615
1616 /*----------------------------------------------------------------------
1617 * Tetraeder 16 und 17
1618 *---------------------------------------------------------------------*/
1619 if(ityp[i] == 16 || ityp[i] == 17)
1620 {
1621
1622 /*======================================================================
1623 * die vier Eck-Punkte fuer jeden Tetraeder holen
1624 *=====================================================================*/
1625 for (j= 1; j <= 4; j++)
1626 {
1627 xe[j]= xv[koi[koffs[i]+j-1]];
1628 ye[j]= yv[koi[koffs[i]+j-1]];
1629 ze[j]= zv[koi[koffs[i]+j-1]];
1630 }
1631
1632 /*======================================================================
1633 * ... und rendern
1634 *=====================================================================*/
1635 glBegin(GL_TRIANGLES);
1636 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1637 for(k= 1; k <= 12; k++)
1638 glVertex3d(xe[jp16[k]],ye[jp16[k]],ze[jp16[k]]);
1639 glEnd();
1640 } /* Ende Tetraeder 16 und 17 */
1641
1642 /*----------------------------------------------------------------------
1643 * Hexaeder 1, 10 und 21
1644 *---------------------------------------------------------------------*/
1645 if(ityp[i] == 1 || ityp[i] == 10 || ityp[i] == 21)
1646 {
1647 /*======================================================================
1648 * die acht Punkte fuer jeden Hexaeder holen
1649 *=====================================================================*/
1650 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1651 * Hexaeder 1 und 10: die 8 Eckknoten
1652 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1653 if(ityp[i] == 1 || ityp[i] == 10)
1654 {
1655 for (j= 1; j <= 8; j++)
1656 {
1657 xe[j]= xv[koi[koffs[i]+j-1]];
1658 ye[j]= yv[koi[koffs[i]+j-1]];
1659 ze[j]= zv[koi[koffs[i]+j-1]];
1660 }
1661 }
1662
1663 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1664 * Volumenschalenele. 21: die 8 Eckknoten
1665 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1666 if(ityp[i] == 21)
1667 {
1668 for (j= 1; j <= 4; j++)
1669 {
1670 xe[j]= xv[koi[koffs[i]+j-1]];
1671 ye[j]= yv[koi[koffs[i]+j-1]];
1672 ze[j]= zv[koi[koffs[i]+j-1]];
1673 }
1674 for (j= 5; j <= 8; j++)
1675 {
1676 xe[j]= xv[koi[koffs[i]+j+4-1]];
1677 ye[j]= yv[koi[koffs[i]+j+4-1]];
1678 ze[j]= zv[koi[koffs[i]+j+4-1]];
1679 }
1680 }
1681
1682 /*======================================================================
1683 * ... und rendern
1684 *=====================================================================*/
1685 glBegin(GL_TRIANGLES);
1686 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1687 for(k= 1; k <= 36; k++)
1688 glVertex3d(xe[jp10[k]],ye[jp10[k]],ze[jp10[k]]);
1689 glEnd();
1690 } /* Ende Hexaeder 1, 10 und 21 */
1691
1692 /*----------------------------------------------------------------------
1693 * Volumenschale 22
1694 *---------------------------------------------------------------------*/
1695 if(ityp[i] == 22)
1696 {
1697 for (j= 1; j <= 3; j++)
1698 {
1699 xe[j]= xv[koi[koffs[i]+j-1]];
1700 ye[j]= yv[koi[koffs[i]+j-1]];
1701 ze[j]= zv[koi[koffs[i]+j-1]];
1702 }
1703 for (j= 4; j <= 6; j++)
1704 {
1705 xe[j]= xv[koi[koffs[i]+j+3-1]];
1706 ye[j]= yv[koi[koffs[i]+j+3-1]];
1707 ze[j]= zv[koi[koffs[i]+j+3-1]];
1708 }
1709
1710 /*======================================================================
1711 * ... und rendern
1712 *=====================================================================*/
1713 glBegin(GL_TRIANGLES);
1714 glColor3f (rot[jfarbe[i]],gruen[jfarbe[i]],blau [jfarbe[i]]);
1715 for(k= 1; k <= 24; k++)
1716 glVertex3d(xe[jp22[k]],ye[jp22[k]],ze[jp22[k]]);
1717 glEnd();
1718 } /* Ende Volumenschale 22 */
1719
1720
1721 } /* Ende Schleife ueber alle Elemente */
1722
1723 return 0;
1724 }
1725
1726