]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gdraw/gdrwsc.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gdrwsc.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
d43b40e2 5* Revision 1.1.1.1 1999/05/18 15:55:03 fca
6* AliRoot sources
7*
fe4da5cc 8* Revision 1.1.1.1 1995/10/24 10:20:27 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
14*-- Author :
15 SUBROUTINE GDRWSC(ISHAPE,PAR)
16C.
17C. ******************************************************************
18C. * *
19C. * Draw the shape number ISHAPE, of parameters PAR, *
20C. * in cut-mode. *
21C. * *
22C. * ==>Called by : GDRAW *
23C. * Author : P.Zanarini ********* *
24C. * Modification log. *
25C. * 31-May-88 A.C.McPherson - Introduce cut tube shape. *
26C. * *
27C. ******************************************************************
28C.
29#include "geant321/gcbank.inc"
30#include "geant321/gcdraw.inc"
31#include "geant321/gconsp.inc"
32#include "geant321/gcshno.inc"
33 PARAMETER ( NLPC = 40 )
34*
35* The constant NLPC defined in the parameter statement
36* is the number of line elements to form a complete
37* circle in the surface definitions for a cut tube.
38*
d43b40e2 39 DIMENSION PAR(100),P(3,8)
fe4da5cc 40 DIMENSION XMAX1(2,42),XMIN1(2,42),XMAX2(2,42),XMIN2(2,42)
41C.
42C. ------------------------------------------------------------------
43C.
44 IF (ISHAPE.NE.1) GO TO 200
45C
46C BOX
47C
48 DX1=PAR(1)
49 DY1=PAR(2)
50 DX2=DX1
51 DY2=DY1
52 DZ=PAR(3)
53 GO TO 1000
54C
55 200 IF (ISHAPE.NE.2) GO TO 300
56C
57C TRD1
58C
59 DX1=PAR(1)
60 DX2=PAR(2)
61 DY1=PAR(3)
62 DY2=DY1
63 DZ=PAR(4)
64 GO TO 1000
65C
66 300 IF (ISHAPE.NE.3) GO TO 400
67C
68C TRD2
69C
70 DX1=PAR(1)
71 DX2=PAR(2)
72 DY1=PAR(3)
73 DY2=PAR(4)
74 DZ=PAR(5)
75 GO TO 1000
76C
77 400 IF (ISHAPE.NE.4) GO TO 500
78C
79C TRAP
80C
81 DZ=PAR(1)
82 TX=PAR(2)
83 TY=PAR(3)
84 H1=PAR(4)
85 BL1=PAR(5)
86 TL1=PAR(6)
87 TTH1=PAR(7)
88 H2=PAR(8)
89 BL2=PAR(9)
90 TL2=PAR(10)
91 TTH2=PAR(11)
92 GO TO 1500
93C
94 500 IF (ISHAPE.NE.5) GO TO 600
95C
96C TUBE
97C
98 RMIN1=PAR(1)
99 RMAX1=PAR(2)
100 RMIN2=RMIN1
101 RMAX2=RMAX1
102 Z2=PAR(3)
103 Z1=-Z2
104 GO TO 2000
105C
106 600 IF (ISHAPE.NE.6) GO TO 700
107C
108C TUBS
109C
110 RMIN1=PAR(1)
111 RMAX1=PAR(2)
112 RMIN2=RMIN1
113 RMAX2=RMAX1
114 Z2=PAR(3)
115 Z1=-Z2
116 PHIMIN=PAR(4)
117 PHIMAX=PAR(5)
118 GO TO 2500
119C
120 700 IF (ISHAPE.NE.7) GO TO 800
121C
122C CONE
123C
124 RMIN1=PAR(2)
125 RMAX1=PAR(3)
126 RMIN2=PAR(4)
127 RMAX2=PAR(5)
128 Z2=PAR(1)
129 Z1=-Z2
130 GO TO 2000
131C
132 800 IF (ISHAPE.NE.8) GO TO 900
133C
134C CONS
135C
136 RMIN1=PAR(2)
137 RMAX1=PAR(3)
138 RMIN2=PAR(4)
139 RMAX2=PAR(5)
140 Z2=PAR(1)
141 Z1=-Z2
142 PHIMIN=PAR(6)
143 PHIMAX=PAR(7)
144 GO TO 2500
145C
146 900 IF (ISHAPE.NE.9) GO TO 910
147C
148C SPHE
149C
150 RMIN=PAR(1)
151 RMAX=PAR(2)
152 GO TO 3000
153C
154 910 IF (ISHAPE.NE.10) GO TO 911
155C
156C PARA
157C
158 DX=PAR(1)
159 DY=PAR(2)
160 DZ=PAR(3)
161 TXY=PAR(4)
162 TXZ=PAR(5)
163 TYZ=PAR(6)
164C
165 TX=TXZ
166 TY=TYZ
167 H1=DY
168 BL1=DX
169 TL1=DX
170 TTH1=TXY
171 H2=DY
172 BL2=DX
173 TL2=DX
174 TTH2=TXY
175 GO TO 1500
176C
177 911 IF (ISHAPE.NE.11) GO TO 912
178C
179C PGON
180C
181 PHIMIN=PAR(1)
182 PHIMAX=PHIMIN+PAR(2)
183 NDIV=PAR(3)
184 NZ=PAR(4)
185 DPHI=(PHIMAX-PHIMIN)/NDIV
186C
187C Z(1)=PAR(5) - RMIN(1)=PAR(6) - RMAX(1)=PAR(7) - Z(2)=PAR(8) - ...
188C
189 GO TO 4000
190C
191 912 IF (ISHAPE.NE.12) GO TO 950
192C
193C PCON
194C
195 PHIMIN=PAR(1)
196 PHIMAX=PHIMIN+PAR(2)
197 NZ=PAR(3)
198C
199C Z(1)=PAR(4) - RMIN(1)=PAR(5) - RMAX(1)=PAR(6) - Z(2)=PAR(7) - ...
200C
201 GO TO 5000
202C
203 950 CONTINUE
204C
205 IF (ISHAPE.NE.13) GO TO 951
206C
207C ELTU
208C
209 A=PAR(1)
210 B=PAR(2)
211 Z2=PAR(3)
212 Z1=-Z2
213 GO TO 7000
214 951 CONTINUE
215C
216 IF (ISHAPE.NE.14) GO TO 955
217C
218C HYPErboloid
219C
220 RMIN1 = PAR(1)
221 RMAX1 = PAR(2)
222 Z2=PAR(3)
223 TANTHS = (TAN(PAR(4)*DEGRAD))**2
224 RMIN12 = RMIN1*RMIN1
225 RMAX12 = RMAX1*RMAX1
226 RMIN2 = SQRT(RMIN12 + Z2*Z2*TANTHS)
227 RMAX2 = SQRT(RMAX12 + Z2*Z2*TANTHS)
228 Z1=-Z2
229 GO TO 7350
230
231 955 CONTINUE
232 IF(ISHAPE.NE.28) GO TO 980
233C
234C General twisted trapezoid.
235C
236 DO 970 IL=1,4
237 I0=IL*4+11
238 P(3,IL)=-PAR(1)
239 P(1,IL)=PAR(I0)+PAR(I0+2)*P(3,IL)
240 P(2,IL)=PAR(I0+1)+PAR(I0+3)*P(3,IL)
241 P(3,IL+4)=PAR(1)
242 P(1,IL+4)=PAR(I0)+PAR(I0+2)*P(3,IL+4)
243 P(2,IL+4)=PAR(I0+1)+PAR(I0+3)*P(3,IL+4)
244 970 CONTINUE
245C
246 GO TO 1600
247*
248 980 CONTINUE
249 IF( ISHAPE .EQ. NSCTUB ) THEN
250*
251 DPHIS = PAR(5)-PAR(4)
252 IF( DPHIS .LE. 0.0 ) DPHIS=DPHIS+TWOPI
253 NL = DPHIS*NLPC/360.0
254 DPHI = 360.0/NLPC
255 PHIS = PAR(4)
256 IF( PAR(4) .EQ. 0.0 .AND. PAR(5) .EQ. 360.0 ) THEN
257 ISEG = 0
258 ELSE
259 ISEG = 1
260 DPHI = DPHIS/NL
261 ENDIF
262*
263 GO TO 6000
264*
265 ELSE
266 GO TO 9999
267 ENDIF
268C
269 1000 CONTINUE
270C
271C Rectilinear shapes: BOX,TRD1,TRD2
272C
273 X1=0.
274 Y1=0.
275 X2=0.
276 Y2=0.
277 Z1=-DZ
278 Z2=DZ
279C
280C Calculate the 8 vertex for rectilinear shapes
281C
282 P(1,1)=X1+DX1
283 P(2,1)=Y1+DY1
284 P(3,1)=Z1
285 P(1,2)=X1-DX1
286 P(2,2)=Y1+DY1
287 P(3,2)=Z1
288 P(1,3)=X1-DX1
289 P(2,3)=Y1-DY1
290 P(3,3)=Z1
291 P(1,4)=X1+DX1
292 P(2,4)=Y1-DY1
293 P(3,4)=Z1
294 P(1,5)=X2+DX2
295 P(2,5)=Y2+DY2
296 P(3,5)=Z2
297 P(1,6)=X2-DX2
298 P(2,6)=Y2+DY2
299 P(3,6)=Z2
300 P(1,7)=X2-DX2
301 P(2,7)=Y2-DY2
302 P(3,7)=Z2
303 P(1,8)=X2+DX2
304 P(2,8)=Y2-DY2
305 P(3,8)=Z2
306C
307 1600 CONTINUE
308C
309C Store all the surfaces (back,front,top,bottom,right,left)
310C
311 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
312 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
313 CALL GDSSUR(P(1,5),P(1,1),P(1,2),P(1,6))
314 CALL GDSSUR(P(1,8),P(1,4),P(1,3),P(1,7))
315 CALL GDSSUR(P(1,5),P(1,1),P(1,4),P(1,8))
316 CALL GDSSUR(P(1,6),P(1,2),P(1,3),P(1,7))
317C
318C Intersect cut-plane with all the surfaces of the shape
319C and draw the resulting lines
320C
321 CALL GDCUT
322C
323 GO TO 9999
324C
325 1500 CONTINUE
326C
327C TRAP or PARA
328C
329C Calculate the 8 vertex
330C
331 P(1,1)=-DZ*TX+TTH1*H1+TL1
332 P(2,1)=+H1-DZ*TY
333 P(3,1)=-DZ
334 P(1,2)=-DZ*TX+TTH1*H1-TL1
335 P(2,2)=+H1-DZ*TY
336 P(3,2)=-DZ
337 P(1,3)=-DZ*TX-TTH1*H1-BL1
338 P(2,3)=-H1-DZ*TY
339 P(3,3)=-DZ
340 P(1,4)=-DZ*TX-TTH1*H1+BL1
341 P(2,4)=-H1-DZ*TY
342 P(3,4)=-DZ
343 P(1,5)=+DZ*TX+TTH2*H2+TL2
344 P(2,5)=+H2+DZ*TY
345 P(3,5)=+DZ
346 P(1,6)=+DZ*TX+TTH2*H2-TL2
347 P(2,6)=+H2+DZ*TY
348 P(3,6)=+DZ
349 P(1,7)=+DZ*TX-TTH2*H2-BL2
350 P(2,7)=-H2+DZ*TY
351 P(3,7)=+DZ
352 P(1,8)=+DZ*TX-TTH2*H2+BL2
353 P(2,8)=-H2+DZ*TY
354 P(3,8)=+DZ
355C
356C Store all the surfaces (back,front,top,bottom,right,left)
357C
358 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
359 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
360 CALL GDSSUR(P(1,5),P(1,1),P(1,2),P(1,6))
361 CALL GDSSUR(P(1,8),P(1,4),P(1,3),P(1,7))
362 CALL GDSSUR(P(1,5),P(1,1),P(1,4),P(1,8))
363 CALL GDSSUR(P(1,6),P(1,2),P(1,3),P(1,7))
364C
365C Intersect cut-plane with all the surfaces of the shape
366C and draw the resulting lines
367C
368 CALL GDCUT
369C
370 GO TO 9999
371C
372 2000 CONTINUE
373C
374C Cylindric shapes: TUBE,CONE
375C
376 DO 2100 I=1,40
377C
378 P(1,1)=RMAX1*GCOS(I)
379 P(2,1)=RMAX1*GSIN(I)
380 P(3,1)=Z1
381 P(1,2)=RMAX1*GCOS(I+1)
382 P(2,2)=RMAX1*GSIN(I+1)
383 P(3,2)=Z1
384 P(1,3)=RMIN1*GCOS(I+1)
385 P(2,3)=RMIN1*GSIN(I+1)
386 P(3,3)=Z1
387 P(1,4)=RMIN1*GCOS(I)
388 P(2,4)=RMIN1*GSIN(I)
389 P(3,4)=Z1
390 P(1,5)=RMAX2*GCOS(I)
391 P(2,5)=RMAX2*GSIN(I)
392 P(3,5)=Z2
393 P(1,6)=RMAX2*GCOS(I+1)
394 P(2,6)=RMAX2*GSIN(I+1)
395 P(3,6)=Z2
396 P(1,7)=RMIN2*GCOS(I+1)
397 P(2,7)=RMIN2*GSIN(I+1)
398 P(3,7)=Z2
399 P(1,8)=RMIN2*GCOS(I)
400 P(2,8)=RMIN2*GSIN(I)
401 P(3,8)=Z2
402C
403C Store top,bottom,back,front surfaces
404C
405 CALL GDSSUR(P(1,1),P(1,2),P(1,6),P(1,5))
406 CALL GDSSUR(P(1,4),P(1,3),P(1,7),P(1,8))
407 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
408 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
409C
410 2100 CONTINUE
411C
412C Intersect cut-plane with all the surfaces of the shape
413C and draw the resulting lines
414C
415 CALL GDCUT
416C
417 GO TO 9999
418C
419 2500 CONTINUE
420C
421C Segmented cylindric shapes: TUBS,CONS
422C
423 CALL GDSARC(RMAX1,PHIMIN,PHIMAX,XMAX1,NP)
424 CALL GDSARC(RMIN1,PHIMIN,PHIMAX,XMIN1,NP)
425 CALL GDSARC(RMAX2,PHIMIN,PHIMAX,XMAX2,NP)
426 CALL GDSARC(RMIN2,PHIMIN,PHIMAX,XMIN2,NP)
427C
428 NP1=NP-1
429C
430 DO 2510 I=1,NP1
431C
432 P(1,1)=XMAX1(1,I)
433 P(2,1)=XMAX1(2,I)
434 P(3,1)=Z1
435 P(1,2)=XMAX1(1,I+1)
436 P(2,2)=XMAX1(2,I+1)
437 P(3,2)=Z1
438 P(1,3)=XMIN1(1,I+1)
439 P(2,3)=XMIN1(2,I+1)
440 P(3,3)=Z1
441 P(1,4)=XMIN1(1,I)
442 P(2,4)=XMIN1(2,I)
443 P(3,4)=Z1
444 P(1,5)=XMAX2(1,I)
445 P(2,5)=XMAX2(2,I)
446 P(3,5)=Z2
447 P(1,6)=XMAX2(1,I+1)
448 P(2,6)=XMAX2(2,I+1)
449 P(3,6)=Z2
450 P(1,7)=XMIN2(1,I+1)
451 P(2,7)=XMIN2(2,I+1)
452 P(3,7)=Z2
453 P(1,8)=XMIN2(1,I)
454 P(2,8)=XMIN2(2,I)
455 P(3,8)=Z2
456C
457C Store top,bottom,back,front surfaces
458C
459 CALL GDSSUR(P(1,1),P(1,2),P(1,6),P(1,5))
460 CALL GDSSUR(P(1,4),P(1,3),P(1,7),P(1,8))
461 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
462 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
463C
464C Store right surface
465C
466 IF (I.NE.1) GO TO 2505
467 CALL GDSSUR(P(1,5),P(1,1),P(1,4),P(1,8))
468C
469C Store left surface
470C
471 2505 CONTINUE
472 IF (I.NE.NP1) GO TO 2510
473 CALL GDSSUR(P(1,6),P(1,2),P(1,3),P(1,7))
474C
475 2510 CONTINUE
476C
477C Intersect cut-plane with all the surfaces of the shape
478C and draw the resulting lines
479C
480 CALL GDCUT
481C
482 GO TO 9999
483C
484 3000 CONTINUE
485C
486C Normal view or X-view or Y-view or Z-view for SPHE
487C
488C Cut not implemented
489C
490 GO TO 9999
491C
492 4000 CONTINUE
493C
494C PGON
495C
496 FACT=1./COS(DEGRAD*DPHI/2.)
497 DO 4002 IZ=1,NZ
498 PAR(6+(IZ-1)*3)=PAR(6+(IZ-1)*3)*FACT
499 PAR(7+(IZ-1)*3)=PAR(7+(IZ-1)*3)*FACT
500 4002 CONTINUE
501C
502 NZ1=NZ-1
503C
504 DO 4050 IZ=1,NZ1
505C
506 ZI=PAR(5+(IZ-1)*3)
507 R0=PAR(6+(IZ-1)*3)
508 R1=PAR(7+(IZ-1)*3)
509 ZZI=PAR(5+IZ*3)
510 RR0=PAR(6+IZ*3)
511 RR1=PAR(7+IZ*3)
512C
513 DO 4045 IDIV=1,NDIV
514C
515 PHI0=PHIMIN+(IDIV-1)*DPHI
516 PHI1=PHI0+DPHI
517 PHI0=PHI0*DEGRAD
518 PHI1=PHI1*DEGRAD
519C
520 P(1,1)=R1*COS(PHI0)
521 P(2,1)=R1*SIN(PHI0)
522 P(3,1)=ZI
523 P(1,2)=R1*COS(PHI1)
524 P(2,2)=R1*SIN(PHI1)
525 P(3,2)=ZI
526 P(1,3)=R0*COS(PHI1)
527 P(2,3)=R0*SIN(PHI1)
528 P(3,3)=ZI
529 P(1,4)=R0*COS(PHI0)
530 P(2,4)=R0*SIN(PHI0)
531 P(3,4)=ZI
532 P(1,5)=RR1*COS(PHI0)
533 P(2,5)=RR1*SIN(PHI0)
534 P(3,5)=ZZI
535 P(1,6)=RR1*COS(PHI1)
536 P(2,6)=RR1*SIN(PHI1)
537 P(3,6)=ZZI
538 P(1,7)=RR0*COS(PHI1)
539 P(2,7)=RR0*SIN(PHI1)
540 P(3,7)=ZZI
541 P(1,8)=RR0*COS(PHI0)
542 P(2,8)=RR0*SIN(PHI0)
543 P(3,8)=ZZI
544C
545C Store top and bottom surfaces
546C
547 CALL GDSSUR(P(1,1),P(1,2),P(1,6),P(1,5))
548 CALL GDSSUR(P(1,4),P(1,3),P(1,7),P(1,8))
549C
550C Store back surface
551C
552 IF (IZ.NE.1) GO TO 4010
553 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
554C
555C Store front surface
556C
557 4010 CONTINUE
558 IF (IZ.NE.NZ1) GO TO 4020
559 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
560C
561C Store right surface
562C
563 4020 CONTINUE
564 IF (ABS(PHIMAX-PHIMIN).EQ.360.) GO TO 4045
565 IF (IDIV.NE.1) GO TO 4030
566 CALL GDSSUR(P(1,5),P(1,1),P(1,4),P(1,8))
567C
568C Store left surface
569C
570 4030 CONTINUE
571 IF (IDIV.NE.NDIV) GO TO 4045
572 CALL GDSSUR(P(1,6),P(1,2),P(1,3),P(1,7))
573C
574 4045 CONTINUE
575C
576C Intersect cut-plane with the surfaces of one Z section
577C and draw the resulting lines
578C
579 CALL GDCUT
580C
581 4050 CONTINUE
582C
583 GO TO 9999
584C
585 5000 CONTINUE
586C
587C PCON
588C
589 NZ1=NZ-1
590C
591 DO 5050 IZ=1,NZ1
592C
593 ZI=PAR(4+(IZ-1)*3)
594 R0=PAR(5+(IZ-1)*3)
595 R1=PAR(6+(IZ-1)*3)
596 ZZI=PAR(4+IZ*3)
597 RR0=PAR(5+IZ*3)
598 RR1=PAR(6+IZ*3)
599C
600 CALL GDSARC(R1,PHIMIN,PHIMAX,XMAX1,NP)
601 CALL GDSARC(R0,PHIMIN,PHIMAX,XMIN1,NP)
602 CALL GDSARC(RR1,PHIMIN,PHIMAX,XMAX2,NP)
603 CALL GDSARC(RR0,PHIMIN,PHIMAX,XMIN2,NP)
604 NDIV=NP-1
605C
606 DO 5005 IDIV=1,NDIV
607C
608 P(1,1)=XMAX1(1,IDIV)
609 P(2,1)=XMAX1(2,IDIV)
610 P(3,1)=ZI
611 P(1,2)=XMAX1(1,IDIV+1)
612 P(2,2)=XMAX1(2,IDIV+1)
613 P(3,2)=ZI
614 P(1,3)=XMIN1(1,IDIV+1)
615 P(2,3)=XMIN1(2,IDIV+1)
616 P(3,3)=ZI
617 P(1,4)=XMIN1(1,IDIV)
618 P(2,4)=XMIN1(2,IDIV)
619 P(3,4)=ZI
620 P(1,5)=XMAX2(1,IDIV)
621 P(2,5)=XMAX2(2,IDIV)
622 P(3,5)=ZZI
623 P(1,6)=XMAX2(1,IDIV+1)
624 P(2,6)=XMAX2(2,IDIV+1)
625 P(3,6)=ZZI
626 P(1,7)=XMIN2(1,IDIV+1)
627 P(2,7)=XMIN2(2,IDIV+1)
628 P(3,7)=ZZI
629 P(1,8)=XMIN2(1,IDIV)
630 P(2,8)=XMIN2(2,IDIV)
631 P(3,8)=ZZI
632C
633C Store top and bottom surfaces
634C
635 CALL GDSSUR(P(1,1),P(1,2),P(1,6),P(1,5))
636 CALL GDSSUR(P(1,4),P(1,3),P(1,7),P(1,8))
637C
638C Store back surface
639C
640 IF (IZ.NE.1) GO TO 5001
641 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
642C
643C Store front surface
644C
645 5001 CONTINUE
646 IF (IZ.NE.NZ1) GO TO 5002
647 CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
648C
649C Store right surface
650C
651 5002 CONTINUE
652 IF (ABS(PHIMAX-PHIMIN).EQ.360.) GO TO 5005
653 IF (IDIV.NE.1) GO TO 5003
654 CALL GDSSUR(P(1,5),P(1,1),P(1,4),P(1,8))
655C
656C Store left surface
657C
658 5003 CONTINUE
659 IF (IDIV.NE.NDIV) GO TO 5005
660 CALL GDSSUR(P(1,6),P(1,2),P(1,3),P(1,7))
661C
662 5005 CONTINUE
663C
664C Intersect cut-plane with the surfaces of one Z section
665C and draw the resulting lines
666C
667 CALL GDCUT
668C
669 5050 CONTINUE
670C
671 GO TO 9999
672*
673 6000 CONTINUE
674*
675* Cut tube shape.
676*
677 CPHIS = COS( PHIS*DEGRAD )
678 SPHIS = SIN( PHIS*DEGRAD )
679 P( 1, 1) = PAR(2)*CPHIS
680 P( 2, 1) = PAR(2)*SPHIS
681 P( 3, 1) = -( PAR( 6)*P( 1, 1) +PAR( 7)*P( 2, 1) )/PAR( 8)
682 + -PAR( 3)
683 P( 1, 4) = PAR(1)*CPHIS
684 P( 2, 4) = PAR(1)*SPHIS
685 P( 3, 4) = -( PAR( 6)*P( 1, 4) +PAR( 7)*P( 2, 4) )/PAR( 8)
686 + -PAR( 3)
687 P( 1, 5) = PAR(2)*CPHIS
688 P( 2, 5) = PAR(2)*SPHIS
689 P( 3, 5) = -( PAR( 9)*P( 1, 5) +PAR( 10)*P( 2, 5) )/PAR( 11)
690 + +PAR( 3)
691 P( 1, 8) = PAR(1)*CPHIS
692 P( 2, 8) = PAR(1)*SPHIS
693 P( 3, 8) = -( PAR( 9)*P( 1, 8) +PAR( 10)*P( 2, 8) )/PAR( 11)
694 + +PAR( 3)
695*
696 DO 6010 I = 1, NL
697 PHIS = PHIS+DPHI
698 CPHIS = COS( PHIS*DEGRAD )
699 SPHIS = SIN( PHIS*DEGRAD )
700 P( 1, 2) = PAR(2)*CPHIS
701 P( 2, 2) = PAR(2)*SPHIS
702 P( 3, 2) = -( PAR( 6)*P( 1, 1) +PAR( 7)*P( 2, 1) )/PAR( 8)
703 + -PAR( 3)
704 P( 1, 3) = PAR(1)*CPHIS
705 P( 2, 3) = PAR(1)*SPHIS
706 P( 3, 3) = -( PAR( 6)*P( 1, 4) +PAR( 7)*P( 2, 4) )/PAR( 8)
707 + -PAR( 3)
708 P( 1, 6) = PAR(2)*CPHIS
709 P( 2, 6) = PAR(2)*SPHIS
710 P( 3, 6) = -( PAR( 9)*P( 1, 5) +PAR( 10)*P( 2, 5) )/PAR( 11)
711 + +PAR( 3)
712 P( 1, 7) = PAR(1)*CPHIS
713 P( 2, 7) = PAR(1)*SPHIS
714 P( 3, 7) = -( PAR( 9)*P( 1, 8) +PAR( 10)*P( 2, 8) )/PAR( 11)
715 + +PAR( 3)
716*
717 CALL GDSSUR( P(1,1), P(1,2), P(1,6), P(1,5) )
718 CALL GDSSUR( P(1,4), P(1,3), P(1,7), P(1,8) )
719 CALL GDSSUR( P(1,1), P(1,2), P(1,3), P(1,4) )
720 CALL GDSSUR( P(1,5), P(1,6), P(1,7), P(1,8) )
721*
722 IF( ISEG .EQ. 1 ) THEN
723 IF( I .EQ. 1 ) THEN
724 CALL GDSSUR( P(1,5), P(1,1), P(1,4), P(1,8) )
725 ELSEIF ( I .EQ. NL ) THEN
726 CALL GDSSUR( P(1,6), P(1,2), P(1,3), P(1,7) )
727 ENDIF
728 ENDIF
729*
730 P( 1, 1) = P( 1, 2)
731 P( 2, 1) = P( 2, 2)
732 P( 3, 1) = P( 3, 2)
733 P( 1, 4) = P( 1, 3)
734 P( 2, 4) = P( 2, 3)
735 P( 3, 4) = P( 3, 3)
736 P( 1, 5) = P( 1, 6)
737 P( 2, 5) = P( 2, 6)
738 P( 3, 5) = P( 3, 6)
739 P( 1, 8) = P( 1, 7)
740 P( 2, 8) = P( 2, 7)
741 P( 3, 8) = P( 3, 7)
742*
743 6010 CONTINUE
744*
745 CALL GDCUT
746 GO TO 9999
747*
748 7000 CONTINUE
749C
750C ELTU
751C
752 DO 7010 I=1,40
753C
754 P(1,1)=A*GCOS(I)
755 P(2,1)=B*GSIN(I)
756 P(3,1)=Z1
757 P(1,2)=A*GCOS(I+1)
758 P(2,2)=B*GSIN(I+1)
759 P(3,2)=Z1
760 P(1,3)=0.
761 P(2,3)=0.
762 P(3,3)=Z1
763 P(1,4)=A*GCOS(I)
764 P(2,4)=B*GSIN(I)
765 P(3,4)=Z2
766 P(1,5)=A*GCOS(I+1)
767 P(2,5)=B*GSIN(I+1)
768 P(3,5)=Z2
769 P(1,6)=0.
770 P(2,6)=0.
771 P(3,6)=Z2
772C
773C Store top,back,front surfaces
774C
775 CALL GDSSUR(P(1,1),P(1,2),P(1,5),P(1,4))
776 CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,3))
777 CALL GDSSUR(P(1,4),P(1,5),P(1,6),P(1,6))
778C
779 7010 CONTINUE
780C
781C Intersect cut-plane with all the surfaces of the shape
782C and draw the resulting lines
783C
784 CALL GDCUT
785C
786 GO TO 9999
787C
788*
789 7350 CONTINUE
790C
791C Another cylindrical shape: HYPE
792C
793 NZSTEP = 40
794 DZ = Z2 / NZSTEP * 2.
795 RMA1 = SQRT(RMAX12 + Z2*Z2*TANTHS)
796 RMI1 = SQRT(RMIN12 + Z2*Z2*TANTHS)
797 ZZ1 = Z2
798 DO 7400 J = 1, NZSTEP
799 ZZ2 = Z2 - J*DZ
800 Z2T = (ZZ2**2) * TANTHS
801 RMA2 = SQRT(RMAX12 + Z2T)
802 RMI2 = SQRT(RMIN12 + Z2T)
803 DO 7390 I=1,40
804C
805 P(1,1)=RMA1*GCOS(I)
806 P(2,1)=RMA1*GSIN(I)
807 P(3,1)=ZZ1
808 P(1,2)=RMA1*GCOS(I+1)
809 P(2,2)=RMA1*GSIN(I+1)
810 P(3,2)=ZZ1
811 P(1,3)=RMI1*GCOS(I+1)
812 P(2,3)=RMI1*GSIN(I+1)
813 P(3,3)=ZZ1
814 P(1,4)=RMI1*GCOS(I)
815 P(2,4)=RMI1*GSIN(I)
816 P(3,4)=ZZ1
817 P(1,5)=RMA2*GCOS(I)
818 P(2,5)=RMA2*GSIN(I)
819 P(3,5)=ZZ2
820 P(1,6)=RMA2*GCOS(I+1)
821 P(2,6)=RMA2*GSIN(I+1)
822 P(3,6)=ZZ2
823 P(1,7)=RMI2*GCOS(I+1)
824 P(2,7)=RMI2*GSIN(I+1)
825 P(3,7)=ZZ2
826 P(1,8)=RMI2*GCOS(I)
827 P(2,8)=RMI2*GSIN(I)
828 P(3,8)=ZZ2
829C
830C Store top and bottom surfaces only
831C
832 CALL GDSSUR(P(1,1),P(1,2),P(1,6),P(1,5))
833 CALL GDSSUR(P(1,4),P(1,3),P(1,7),P(1,8))
834C CALL GDSSUR(P(1,1),P(1,2),P(1,3),P(1,4))
835C CALL GDSSUR(P(1,5),P(1,6),P(1,7),P(1,8))
836C
837 7390 CONTINUE
838C
839 RMA1 = RMA2
840 RMI1 = RMI2
841 ZZ1 = ZZ2
842C
843 7400 CONTINUE
844C
845C Intersect cut-plane with all the surfaces of the shape
846C and draw the resulting lines
847C
848 CALL GDCUT
849C
850*
851 9999 END