]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gdraw/gdcgob.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gdcgob.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/02/27 10:02:05 ravndal
6* Drawing of PCON's optimized for 'HIDE ON'
7*
8* Revision 1.1.1.1 1995/10/24 10:20:20 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/04 13/12/94 17.13.38 by S.Giani
14*-- Author :
15*
16 SUBROUTINE GDCGOB(ITASK,ISHAPE,PAR,NOBJ,NWWS,IVOLNA,
17 +LSTEP)
18C.
19C. ******************************************************************
20C. * *
21C. * Make the CG-Object with shape ISHAPE of parameters PAR *
22C. * with the same logic as GDRAWS. 1992 *
23C. * *
24C. * Input Parameters : *
25C. * *
26C. * ITASK: Number for indicating the task to be performed *
27C. * *
28C. * *
29C. * = 0 Counting task *
30C. * = 1 Slicing + Counting *
31C. * = 2 Clipping + Counting *
32C. * = 3 Insert into the H.S. + Convert to Wire *
33C. * = 4 Slicing + Insert into the H.S. + Convert *
34C. * to Wire *
35C. * = 5 Clipping + Insert into the H.S. + Convert *
36C. * to Wire *
37C. * *
38C. * SHAPE SHAPE SHAPE *
39C. * NUMBER TYPE PARAMETERS *
40C. * -------------------------------------------------------------- *
41C. * *
42C. * 1 BOX DX,DY,DZ *
43C. * 2 TRD1 DX1,DX2,DY,DZ *
44C. * 3 TRD2 DX1,DX2,DY1,DY2,DZ *
45C. * 4 TRAP DZ,TX,TY,H1,BL1,TL1,TTH1,H2,BL2,TL2,TTH2 *
46C. * *
47C. * 5 TUBE RMIN,RMAX,DZ *
48C. * 6 TUBS RMIN,RMAX,DZ,PHIMIN,PHIMAX *
49C. * 7 CONE DZ,RMIN1,RMAX1,RMIN2,RMAX2 *
50C. * 8 CONS DZ,RMIN1,RMAX1,RMIN2,RMAX2,PHIMIN,PHIMAX *
51C. * *
52C. * 9 SPHE RMIN,RMAX,THEMIN,THEMAX,PHIMIN,PHIMAX *
53C. * *
54C. * 10 PARA DX,DY,DZ,TXY,TXZ,TYZ *
55C. * 11 PGON PHIMIN,DPHI,NDIV,NZ,Z(1),RMIN(1),RMAX(1),...*
56C. * 12 PCON PHIMIN,DPHI,NZ,Z(1),RMIN(1),RMAX(1),Z(2),...*
57C. * *
58C. * NOBJ = Counter of cg objects *
59C. * NWWS = Size of Wire structure *
60C. * IVOLNA = Name of volume *
61C. * LSTEP = Number of CG objects forming each volume *
62C. * *
63C. * ==>Called by : GDRAW *
64C. * Author : P.Zanarini, J.Salt, S.Giani ********* *
65C. * *
66C. ******************************************************************
67C.
68#include "geant321/gcbank.inc"
69#include "geant321/gcunit.inc"
70#include "geant321/gcvolu.inc"
71#include "geant321/gcgobj.inc"
72#include "geant321/gcmutr.inc"
73#include "geant321/gcdraw.inc"
74#include "geant321/gchiln.inc"
75#include "geant321/gcspee.inc"
76#include "geant321/gconsp.inc"
77 SAVE NWPROD
78 COMMON /QUEST/IQUEST(100)
79 DIMENSION PAR(50),P(3,8)
80*SG
81 DIMENSION RRMIN(3),RRMAX(3)
82 DIMENSION SLI1(4),SLI2(4),SPI1(4),SPI2(4)
83*SG
84 DIMENSION XZ(2,4),ZR(18),RMIR(18),RMAR(18),AMIRMA(18),AMARMA(18)
85 DIMENSION T(4,3)
86C. ------------------------------------------------------------------
87C.
88**SG
89 CALL UCTOH('PERS',IPERS,4,4)
90 T(4,1)=0.
91 T(4,2)=0.
92 T(4,3)=0.
93 LINSTY=IBITS(LINATT,10,3)
94 IF(LINSTY.EQ.7)THEN
95 APPROS=30.
96 ELSE
97 APPROS=15.
98 ENDIF
99 IF(ISUBLI.LT.IOLDSU)THEN
100 PORGX=0
101 PORGY=0
102 PORGZ=0
103 DO 10 J=1,15
104 POX(J)=0
105 POY(J)=0
106 POZ(J)=0
107 10 CONTINUE
108 ENDIF
109 IOLDSU=ISUBLI
110*
111* LHC flag 'ON' (default)
112*
113* CALL UCTOH('ON ',LHIF,4,4)
114* IF(LEP.EQ.LHIF)THEN
115* VITE=1
116* ELSE
117* VITE=0
118* ENDIF
119*
120* Flag for GDCGHI resetted for each CG object
121 ISG=0
122 ICGP=0
123 LINFIL=IBITS(LINATT,13,3)
124**SG
125 IVCLOS=0
126 IVFUN=1
127 IWORK=ITASK
128 CALL UCTOH('ON ',IFLH,4,4)
129*JS
130 IF (ISHAPE.EQ.1) THEN
131C
132C BOX
133C
134 DX1=PAR(1)
135 DY1=PAR(2)
136 DX2=DX1
137 DY2=DY1
138 DZ=PAR(3)
139 GO TO 20
140C
141 ELSEIF (ISHAPE.EQ.2) THEN
142C
143C TRD1
144C
145 DX1=PAR(1)
146 DX2=PAR(2)
147 DY1=PAR(3)
148 DY2=DY1
149 DZ=PAR(4)
150 GO TO 20
151C
152 ELSEIF (ISHAPE.EQ.3) THEN
153C
154C TRD2
155C
156 DX1=PAR(1)
157 DX2=PAR(2)
158 DY1=PAR(3)
159 DY2=PAR(4)
160 DZ=PAR(5)
161 GO TO 20
162C
163 ELSEIF (ISHAPE.EQ.4) THEN
164C
165C TRAP
166C
167 DZ=PAR(1)
168 TX=PAR(2)
169 TY=PAR(3)
170 H1=PAR(4)
171 BL1=PAR(5)
172 TL1=PAR(6)
173 TTH1=PAR(7)
174 H2=PAR(8)
175 BL2=PAR(9)
176 TL2=PAR(10)
177 TTH2=PAR(11)
178 GO TO 30
179C
180 ELSEIF (ISHAPE.EQ.5) THEN
181C
182C TUBE
183C
184 AFINV=1./COS(PI/APPROS)
185 FINV=ABS(AFINV)
186 RMIN1=PAR(1)*FINV
187 RMAX1=PAR(2)*FINV
188 RMIN2=RMIN1
189 RMAX2=RMAX1
190 Z2=PAR(3)
191* Z1=-Z2
192 PHIMIN=0.
193 PHIMAX=360.
194 IF((LINFIL.EQ.2.OR.LINFIL.EQ.3)
195 + .AND.RMIN1.NE.0)PHIMIN=5.
196*SG
197 ANG1=PHIMIN
198 ANG2=PHIMAX
199 AANG=ABS(ANG2-ANG1)
200 AZLAT=AANG*APPROS
201 ZLAT=AZLAT/360
202 NANG=ZLAT
203 IF(NANG.EQ.0)NANG=1
204 AZ=ZLAT-NANG
205 IF(AZ.GT..5)NANG=NANG+1
206*SG
207 GO TO 70
208C
209 ELSEIF (ISHAPE.EQ.6.OR.ISHAPE.EQ.29) THEN
210C
211C TUBS
212C
213 AFINV=1./COS(PI/APPROS)
214 FINV=ABS(AFINV)
215 RMIN1=PAR(1)*FINV
216 RMAX1=PAR(2)*FINV
217 RMIN2=RMIN1
218 RMAX2=RMAX1
219 AZ2=PAR(3)
220 Z2=ABS(AZ2)
221* Z1=-Z2
222 PHIMIN=PAR(4)
223 PHIMAX=PAR(5)
224**SG
225 ANG1=PHIMIN
226 ANG2=PHIMAX
227 AANG=ABS(ANG2-ANG1)
228 AZLAT=AANG*APPROS
229 ZLAT=AZLAT/360
230 NANG=ZLAT
231 IF(NANG.EQ.0)NANG=1
232 AZ=ZLAT-NANG
233 IF(AZ.GT..5)NANG=NANG+1
234 IF(ISHAPE.EQ.29)NANG=APPROS
235**SG
236 GO TO 70
237C
238 ELSEIF (ISHAPE.EQ.7) THEN
239C
240C CONE
241C
242 AFINV=1./COS(PI/APPROS)
243 FINV=ABS(AFINV)
244 RMIN1=PAR(2)*FINV
245 RMAX1=PAR(3)*FINV
246 RMIN2=PAR(4)*FINV
247 RMAX2=PAR(5)*FINV
248 Z2=PAR(1)
249* Z1=-Z2
250 PHIMIN=0.
251 PHIMAX=360.
252 IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.RMIN2.NE.0)PHIMIN=5.
253*SG
254 ANG1=PHIMIN
255 ANG2=PHIMAX
256 AANG=ABS(ANG2-ANG1)
257 AZLAT=AANG*APPROS
258 ZLAT=AZLAT/360
259 NANG=ZLAT
260 IF(NANG.EQ.0)NANG=1
261 AZ=ZLAT-NANG
262 IF(AZ.GT..5)NANG=NANG+1
263*SG
264 GO TO 70
265C
266 ELSEIF (ISHAPE.EQ.8) THEN
267C
268C CONS
269C
270 AFINV=1./COS(PI/APPROS)
271 FINV=ABS(AFINV)
272 RMIN1=PAR(2)*FINV
273 RMAX1=PAR(3)*FINV
274 RMIN2=PAR(4)*FINV
275 RMAX2=PAR(5)*FINV
276 Z2=PAR(1)
277* Z1=-Z2
278 PHIMIN=PAR(6)
279 PHIMAX=PAR(7)
280**SG
281 ANG1=PHIMIN
282 ANG2=PHIMAX+.1
283 AANG=ABS(ANG2-ANG1)
284 AZLAT=AANG*APPROS
285 ZLAT=AZLAT/360
286 NANG=ZLAT
287 IF(NANG.EQ.0)NANG=1
288 AZ=ZLAT-NANG
289 IF(AZ.GT..5)NANG=NANG+1
290**SG
291 GO TO 70
292C
293 ELSEIF (ISHAPE.EQ.9) THEN
294C
295C SPHE
296C
297* RMIN=PAR(1)
298 RMAX=PAR(2)
299 GO TO 120
300C
301 ELSEIF (ISHAPE.EQ.10) THEN
302C
303C PARA
304C
305 DX=PAR(1)
306 DY=PAR(2)
307 DZ=PAR(3)
308 TXY=PAR(4)
309 TXZ=PAR(5)
310 TYZ=PAR(6)
311C
312 TX=TXZ
313 TY=TYZ
314 H1=DY
315 BL1=DX
316 TL1=DX
317 TTH1=TXY
318 H2=DY
319 BL2=DX
320 TL2=DX
321 TTH2=TXY
322 GO TO 30
323C
324 ELSEIF (ISHAPE.EQ.11) THEN
325C
326C PGON
327C
328 PHIMIN=PAR(1)
329 IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.PAR(2).GT.359.)PAR(2)=359.
330 PHIMAX=PHIMIN+PAR(2)
331 NDIVAN=PAR(3)
332 NZ=PAR(4)
333C
334C Z(1)=PAR(5) - RMIN(1)=PAR(6) - RMAX(1)=PAR(7) - Z(2)=PAR(8
335C
336 GO TO 150
337C
338 ELSEIF (ISHAPE.EQ.12) THEN
339C
340C PCON
341C
342 PHIMIN=PAR(1)
343 IF((LINFIL.EQ.2.OR.LINFIL.EQ.3).AND.PAR(2).GT.359.)PAR(2)=359.
344 PHIMAX=PHIMIN+PAR(2)
345 NZ=PAR(3)
346C
347C Z(1)=PAR(4) - RMIN(1)=PAR(5) - RMAX(1)=PAR(6) - Z(2)=PAR(7
348C
349 GO TO 230
350 ELSE
351 GO TO 999
352 ENDIF
353C
354* GO TO 150
355C
356 20 CONTINUE
357C
358C Rectilinear shapes: BOX,TRD1,TRD2
359C
360 X1=0.
361 Y1=0.
362 X2=0.
363 Y2=0.
364 IF(DZ.LT.0.001)DZ=0.001
365 Z1=-DZ
366 Z2=DZ
367C
368C Calculate the 8 vertex for rectilinear shapes
369C
370 IF(DX1.EQ.0.)DX1=0.0001
371 IF(DY1.EQ.0.)DY1=0.0001
372 IF(DX2.EQ.0.)DX2=0.0001
373 IF(DY2.EQ.0.)DY2=0.0001
374 P(1,1)=X1+DX1
375 P(2,1)=Y1+DY1
376 P(3,1)=Z1
377 P(1,2)=X1-DX1
378 P(2,2)=Y1+DY1
379 P(3,2)=Z1
380 P(1,3)=X1-DX1
381 P(2,3)=Y1-DY1
382 P(3,3)=Z1
383 P(1,4)=X1+DX1
384 P(2,4)=Y1-DY1
385 P(3,4)=Z1
386 P(1,5)=X2+DX2
387 P(2,5)=Y2+DY2
388 P(3,5)=Z2
389 P(1,6)=X2-DX2
390 P(2,6)=Y2+DY2
391 P(3,6)=Z2
392 P(1,7)=X2-DX2
393 P(2,7)=Y2-DY2
394 P(3,7)=Z2
395 P(1,8)=X2+DX2
396 P(2,8)=Y2-DY2
397 P(3,8)=Z2
398*
399 GOTO 40
400C
401 30 CONTINUE
402C
403C TRAP,PARA
404C
405C Calculate the 8 vertex
406C
407 P(1,1)=-DZ*TX+TTH1*H1+TL1
408 P(2,1)=+H1-DZ*TY
409 P(3,1)=-DZ
410 P(1,2)=-DZ*TX+TTH1*H1-TL1
411 P(2,2)=+H1-DZ*TY
412 P(3,2)=-DZ
413 P(1,3)=-DZ*TX-TTH1*H1-BL1
414 P(2,3)=-H1-DZ*TY
415 P(3,3)=-DZ
416 P(1,4)=-DZ*TX-TTH1*H1+BL1
417 P(2,4)=-H1-DZ*TY
418 P(3,4)=-DZ
419 P(1,5)=+DZ*TX+TTH2*H2+TL2
420 P(2,5)=+H2+DZ*TY
421 P(3,5)=+DZ
422 P(1,6)=+DZ*TX+TTH2*H2-TL2
423 P(2,6)=+H2+DZ*TY
424 P(3,6)=+DZ
425 P(1,7)=+DZ*TX-TTH2*H2-BL2
426 P(2,7)=-H2+DZ*TY
427 P(3,7)=+DZ
428 P(1,8)=+DZ*TX-TTH2*H2+BL2
429 P(2,8)=-H2+DZ*TY
430 P(3,8)=+DZ
431C
432 40 CONTINUE
433C
434C BOX,TRD1,TRD2,TRAP,PARA --->> call CGBOX
435C
436 IVCLOS=1
437*SG
438* Size evaluation
439*
440 IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN
441* NWB = n. words for each box
442 NCGVOL=NCGVOL+NWB
443 GOTO 999
444 ENDIF
445 ICPOIN=JCGOBJ+1
446* Creating object
447*SG
448 RMIN1=0
449 RMIN2=0
450 RMAX1=0
451 RMAX2=0
452 CALL CGBOX(P,4,4,300,Q(ICPOIN))
453 DO 50 J=1,3
454 T(J,1)=GRMAT(3*J-2,NLEVEL)
455 T(J,2)=GRMAT(3*J-1,NLEVEL)
456 T(J,3)=GRMAT(3*J,NLEVEL)
457 50 CONTINUE
458 CALL CGRIFL(T,Q(ICPOIN))
459 CGERR=Q(ICPOIN)
460 IF(CGERR.LE.0)THEN
461 CALL GDCGER(CGERR)
462 IF(KCGST.EQ.-2) GOTO 999
463 IF(KCGST.EQ.-3) THEN
464 KCGST=0
465 WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL)
466 CALL GMAIL(0,0)
467 GOTO 999
468 ENDIF
469 ENDIF
470 CALL CGCEV(1,Q(ICPOIN))
471 DO 60 J=1,3
472 T(J,1)=GRMAT(3*J-2,NLEVEL)
473 T(J,2)=GRMAT(3*J-1,NLEVEL)
474 T(J,3)=GRMAT(3*J,NLEVEL)
475 60 CONTINUE
476 CALL CGAFFI(T,Q(ICPOIN))
477 XV=GTRAN(1,NLEVEL)
478 YV=GTRAN(2,NLEVEL)
479 ZV=GTRAN(3,NLEVEL)
480 CALL CGSHIF(XV,YV,ZV,Q(ICPOIN))
481***SG
482* Shifting object
483 IF(KSHIFT.GT.0)THEN
484 CALL GDSHIF(IVOLNA,ICPOIN)
485 ENDIF
486*
487 IF(GBOOM.NE.0)THEN
488 CALL GDBOMB(ICPOIN,ISHAPE)
489 IF(ITSTCU.EQ.0)GOTO 999
490 ENDIF
491*
492*
493*
494* Hidden Volume Removal:
495* Computing volumes visibility and skipping
496* the unvisible ones; a great increase in speed
497* and a great reduction in n. of words used can be
498* obtained in this way.
499*
500 CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX)
501 IF(ISUBLI.EQ.1)THEN
502 AA1=RRMIN(1)-S1
503 AA2=RRMIN(2)-S2
504 AA3=RRMIN(3)-S3
505 BB1=RRMAX(1)-SS1
506 BB2=RRMAX(2)-SS2
507 BB3=RRMAX(3)-SS3
508 IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT.
509 + 0.001.AND.BB2.LT.0.001.AND.BB3.LT.0.001)THEN
510 IF(ISCOP.NE.1)THEN
511 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
512 ITSTCU=0
513 NCGVOL=NCGVOL-NWB
514 GOTO 999
515 ENDIF
516 ENDIF
517 ENDIF
518 ENDIF
519 IF(IPORLI.EQ.1)THEN
520 S1=RRMIN(1)
521 S2=RRMIN(2)
522 S3=RRMIN(3)
523 SS1=RRMAX(1)
524 SS2=RRMAX(2)
525 SS3=RRMAX(3)
526 SRAGMX=0
527 SRAGMN=0
528 RAINT1=0
529 RAINT2=0
530 ENDIF
531* Create clipping objects
532 IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE)
533* Perspective view
534 IF (IPRJ.EQ.IPERS) THEN
535 CALL CGPERS(Q(ICPOIN))
536 ENDIF
537* Inserting volumes in Hide + Wire Structures
538 CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
539 GOTO 999
540***SG
541C
542 70 CONTINUE
543C
544C TUBE,CONE,TUBS,CONS -----> call CGZREV
545C
546*
547* Checking Shape Parameters
548*
549 IF(RMIN1.GT.RMAX1) THEN
550 WRITE(CHMAIL,10100)ISHAPE,NAMES(NLEVEL)
551 CALL GMAIL(0,0)
552 ENDIF
553 IF(RMIN2.GT.RMAX2) THEN
554 WRITE(CHMAIL,10200)ISHAPE,NAMES(NLEVEL)
555 CALL GMAIL(0,0)
556 ENDIF
557 IF(PHIMIN.GT.PHIMAX)THEN
558 WRITE(CHMAIL,10300)ISHAPE,NAMES(NLEVEL)
559 CALL GMAIL(0,0)
560 ENDIF
561*
562*
563* Checking if all Inner Radii are 0. ==> 'Closed' Volume
564*
565 IF(RMIN1.LE.0.00001.AND.RMIN2.LE.0.00001)IVCLOS=1
566*SG
567* Size evaluation
568 IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN
569* NWPROD = n. words for each body of revolution
570 NWPROD=NWREV*(NANG+1)
571 NCGVOL=NCGVOL+NWPROD
572 GOTO 999
573 ENDIF
574* Creating object
575 ICPOIN=JCGOBJ+1
576*SG
577 IF(ISHAPE.EQ.29)THEN
578 SAL=PAR(8)
579 IF(PAR(11).GT.SAL)SAL=PAR(11)
580 PAR3=MAX(PAR(3),0.)
581 Z2=PAR3+1.001*RMAX1*SQRT((1-SAL*SAL)/(SAL*SAL))
582 ENDIF
583 XZ(1,1)=RMIN1
584 XZ(2,1)=-Z2
585 XZ(1,2)=RMAX1
586 XZ(2,2)=-Z2
587 XZ(1,3)=RMAX2
588 XZ(2,3)=Z2
589 XZ(1,4)=RMIN2
590 XZ(2,4)=Z2
591 CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN))
592 DO 80 J=1,3
593 T(J,1)=GRMAT(3*J-2,NLEVEL)
594 T(J,2)=GRMAT(3*J-1,NLEVEL)
595 T(J,3)=GRMAT(3*J,NLEVEL)
596 80 CONTINUE
597 CALL CGRIFL(T,Q(ICPOIN))
598 CGERR=Q(ICPOIN)
599 IF(CGERR.LE.0)THEN
600 CALL GDCGER(CGERR)
601 IF(KCGST.EQ.-2) GOTO 999
602 IF(KCGST.EQ.-3) THEN
603 KCGST=0
604 WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL)
605 CALL GMAIL(0,0)
606 GOTO 999
607 ENDIF
608 ENDIF
609 CALL CGCEV(1,Q(ICPOIN))
610 IF(ISHAPE.EQ.29)THEN
611 SLI1(1)=-PAR(6)
612 SLI1(2)=-PAR(7)
613 SLI1(3)=-PAR(8)
614 SLI1(4)=-PAR(3)*PAR(8)
615 SLI2(1)=-PAR(9)
616 SLI2(2)=-PAR(10)
617 SLI2(3)=-PAR(11)
618 SLI2(4)=+PAR(3)*PAR(11)
619 ISL1=JCGOBJ+4000
620 CALL CGSLIC(Q(ICPOIN),SLI1,4000,Q(ISL1))
621 ISL2=JCGOBJ+8000
622 CALL CGSLIC(Q(ISL1),SLI2,4000,Q(ISL2))
623 ICPOIN=ISL2
624 CALL CGCEV(1,Q(ICPOIN))
625 ENDIF
626 DO 90 J=1,3
627 T(J,1)=GRMAT(3*J-2,NLEVEL)
628 T(J,2)=GRMAT(3*J-1,NLEVEL)
629 T(J,3)=GRMAT(3*J,NLEVEL)
630 90 CONTINUE
631 CALL CGAFFI(T,Q(ICPOIN))
632 XV=GTRAN(1,NLEVEL)
633 YV=GTRAN(2,NLEVEL)
634 ZV=GTRAN(3,NLEVEL)
635 CALL CGSHIF(XV,YV,ZV,Q(ICPOIN))
636***SG
637* Shifting object
638 IF(KSHIFT.GT.0)THEN
639 CALL GDSHIF(IVOLNA,ICPOIN)
640 ENDIF
641*
642 IF(GBOOM.NE.0)THEN
643 CALL GDBOMB(ICPOIN,ISHAPE)
644 IF(ITSTCU.EQ.0)GOTO 999
645 ENDIF
646*
647*
648* Hidden Volume Removal:
649* Computing closed volumes visibility and skipping
650* the unvisible ones; a great increase in speed
651* and a great reduction in n. of words used are obtained
652* in this way.
653*
654 CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX)
655 IF(ISUBLI.EQ.1)THEN
656 AA1=RRMIN(1)-S1
657 AA2=RRMIN(2)-S2
658 AA3=RRMIN(3)-S3
659 BB1=RRMAX(1)-SS1
660 BB2=RRMAX(2)-SS2
661 BB3=RRMAX(3)-SS3
662 IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT.
663 + -0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN
664 IF(ISHAPE.EQ.7.OR.ISHAPE.EQ.8)THEN
665 IF((RMAX2.LT.SRAGMX.AND.RMAX1.LT.SRAGMN).OR. (SRAGMX.EQ.
666 + 0))THEN
667 IF((RMIN2.GT.RAINT2.AND.RMIN1.GT.RAINT1).OR. (RAINT2.
668 + EQ.0))THEN
669 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
670 ITSTCU=0
671 NCGVOL=NCGVOL-NWPROD
672 GOTO 999
673 ENDIF
674 ENDIF
675 ENDIF
676 ELSEIF(SRAGMX.NE.0.)THEN
677 DO 100 ITER=1,IPORNT
678 IF(RMAX1.EQ.PORMAR(ITER))GOTO 110
679 IF(RMIN1.EQ.PORMIR(ITER))THEN
680 IF(PORMIR(ITER).NE.0.)GOTO 110
681 ENDIF
682 100 CONTINUE
683 ENDIF
684 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
685 ITSTCU=0
686 NCGVOL=NCGVOL-NWPROD
687 GOTO 999
688 ENDIF
689 ENDIF
690 ENDIF
691 IF(IPORLI.EQ.1)THEN
692 S1=RRMIN(1)
693 S2=RRMIN(2)
694 S3=RRMIN(3)
695 SS1=RRMAX(1)
696 SS2=RRMAX(2)
697 SS3=RRMAX(3)
698 SRAGMX=RMAX2
699 SRAGMN=RMAX1
700 RAINT1=RMIN1
701 RAINT2=RMIN2
702 IPORNT=1
703 PORMAR(1)=RMAX2
704 PORMIR(1)=RMIN1
705 ENDIF
706 110 CONTINUE
707* Create clipping objects
708 IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE)
709* Perspective view
710 IF (IPRJ.EQ.IPERS) THEN
711 CALL CGPERS(Q(ICPOIN))
712 ENDIF
713* Inserting objects in Hide + Wire structures
714 CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
715 GOTO 999
716***SG
717C
718 120 CONTINUE
719C
720C SPHE -----> call CGSPHE
721C
722 IVCLOS=1
723*SG
724* Size evaluation
725 IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN
726* NWS = n. words for each sphere
727 NCGVOL=NCGVOL+NWS
728 GOTO 999
729 ENDIF
730*
731 R=RMAX
732 RMAX2=R
733 RMAX1=0
734 RMIN1=0
735 RMIN2=0
736 NLAT=11
737 NLON=11
738 NWOR=4000
739 IF(IWORK.EQ.3.AND.(PAR(3).EQ.0.AND.(PAR(4).EQ.0.OR.
740 +PAR(4).EQ.180)))THEN
741 NLAT=29
742 NLON=29
743 NWOR=30000
744 ENDIF
745 ICPOIN=JCGOBJ+1
746* Creating object
747 CALL CGSPHE(R,NLAT,NLON,NWOR,Q(ICPOIN))
748 DO 130 J=1,3
749 T(J,1)=GRMAT(3*J-2,NLEVEL)
750 T(J,2)=GRMAT(3*J-1,NLEVEL)
751 T(J,3)=GRMAT(3*J,NLEVEL)
752 130 CONTINUE
753 CALL CGRIFL(T,Q(ICPOIN))
754*SG
755 CGERR=Q(ICPOIN)
756 IF(CGERR.LE.0)THEN
757 CALL GDCGER(CGERR)
758 IF(KCGST.EQ.-2) GOTO 999
759 IF(KCGST.EQ.-3) THEN
760 KCGST=0
761 WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL)
762 CALL GMAIL(0,0)
763 GOTO 999
764 ENDIF
765 ENDIF
766 CALL CGCEV(1,Q(ICPOIN))
767 IF(PAR(3).NE.0.OR.(PAR(4).NE.0.AND.PAR(4).NE.180))THEN
768 ISHAPE=99
769 SPI1(1)=-COS((90-PAR(3))*DEGRAD)
770 SPI1(2)=0
771 SPI1(3)=-COS(PAR(3)*DEGRAD)
772 SPI1(4)=0
773 SPI2(1)=-COS((90-PAR(4))*DEGRAD)
774 SPI2(2)=0
775 SPI2(3)=-COS(PAR(4)*DEGRAD)
776 SPI2(4)=0
777 ISP1=JCGOBJ+4000
778 CALL CGSLIC(Q(ICPOIN),SPI1,4000,Q(ISP1))
779 ISP2=JCGOBJ+8000
780 CALL CGSLIC(Q(ISP1),SPI2,4000,Q(ISP2))
781 ICPOIN=ISP2
782 CALL CGCEV(1,Q(ICPOIN))
783 ENDIF
784 DO 140 J=1,3
785 T(J,1)=GRMAT(3*J-2,NLEVEL)
786 T(J,2)=GRMAT(3*J-1,NLEVEL)
787 T(J,3)=GRMAT(3*J,NLEVEL)
788 140 CONTINUE
789 CALL CGAFFI(T,Q(ICPOIN))
790 XV=GTRAN(1,NLEVEL)
791 YV=GTRAN(2,NLEVEL)
792 ZV=GTRAN(3,NLEVEL)
793 CALL CGSHIF(XV,YV,ZV,Q(ICPOIN))
794***SG
795* Shifting object
796 IF(KSHIFT.GT.0)THEN
797 CALL GDSHIF(IVOLNA,ICPOIN)
798 ENDIF
799*
800 IF(GBOOM.NE.0)THEN
801 CALL GDBOMB(ICPOIN,ISHAPE)
802 IF(ITSTCU.EQ.0)GOTO 999
803 ENDIF
804*
805*
806* Hidden Volume Removal:
807* Computing closed volumes visibility and skipping
808* the unvisible ones; a great increase in speed
809* and a great reduction in n. of words used are obtained
810* in this way.
811*
812 CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX)
813 IF(ISUBLI.EQ.1)THEN
814 AA1=RRMIN(1)-S1
815 AA2=RRMIN(2)-S2
816 AA3=RRMIN(3)-S3
817 BB1=RRMAX(1)-SS1
818 BB2=RRMAX(2)-SS2
819 BB3=RRMAX(3)-SS3
820 IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND. BB1.LT.
821 + -0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN
822 IF(ISHAPE.NE.99)THEN
823 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
824 ITSTCU=0
825 NCGVOL=NCGVOL-NWS
826 GOTO 999
827 ENDIF
828 ENDIF
829 ENDIF
830 ENDIF
831 IF(IPORLI.EQ.1)THEN
832 S1=RRMIN(1)
833 S2=RRMIN(2)
834 S3=RRMIN(3)
835 SS1=RRMAX(1)
836 SS2=RRMAX(2)
837 SS3=RRMAX(3)
838 SRAGMX=R
839 SRAGMN=0.
840 RAINT1=0.
841 RAINT2=0.
842 IPORNT=1
843 PORMAR(1)=R
844 PORMIR(1)=0.
845 ENDIF
846* Create clipping objects
847 IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE)
848* Perspective view
849 IF (IPRJ.EQ.IPERS) THEN
850 CALL CGPERS(Q(ICPOIN))
851 ENDIF
852* Inserting objects in Hide + Wire structures
853 CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
854 GOTO 999
855***SG
856*
857 150 CONTINUE
858C
859C PGON ----> call CGZREV
860C
861 NTVOL=NZ-1
862 ANG1=PHIMIN
863 ANG2=PHIMAX
864**SG
865 AANG=ABS(ANG2-ANG1)
866 AZLAT=AANG*APPROS
867 ZLAT=AZLAT/360
868 NANG=ZLAT
869 IF(NANG.EQ.0)NANG=1
870 AZ=ZLAT-NANG
871 IF(AZ.GT..5)NANG=NANG+1
872 IF(NDIVAN.LT.NANG)THEN
873 NANG=NDIVAN
874* WRITE(CHMAIL,10400)NANG,NAMES(NLEVEL)
875* CALL GMAIL(0,0)
876 ENDIF
877 AATMAX=NANG*360./AANG
878 LATMAX=AATMAX
879 ALA=AATMAX-LATMAX
880 IF(ALA.GT..5)LATMAX=LATMAX+1
881**SG
882 AFINV=1./COS(PI/LATMAX)
883 FINV=ABS(AFINV)
884 JSURZ=1
885 ZR(1)=PAR(5)
886 RMIR(1)=PAR(6)*FINV
887 RMAR(1)=PAR(7)*FINV
888*SG
889 RMAR(1)=RMAR(1)+.001
890*SG
891 DO 160 I=1,NTVOL
892* ZA=PAR(5+3*(I-1))
893 ZB=PAR(5+3*I)
894**SG
895 ZB=ZB+.001
896********* DIFZ=ABS(ZB-ZA)
897********* IF(DIFZ.LT.0.001)GOTO 220
898**SG
899 JSURZ=JSURZ+1
900 ZR(JSURZ)=ZB
901 RMIR(JSURZ)=PAR(6+3*I)*FINV
902 RMAR(JSURZ)=PAR(7+3*I)*FINV
903**SG
904 RMAR(JSURZ)=RMAR(JSURZ)+.001
905*
906 160 CONTINUE
907*
908* Checking if all Inner Radii are 0. ==> 'Closed' Volume
909*
910* NRAD=NTVOL+1
911* DO 230 I=1,NRAD
912* IF(RMIR(I).GT.0.00001)GOTO 240
913* 230 CONTINUE
914* IVCLOS=1
915* 240 CONTINUE
916*
917* Size evaluation
918 IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN
919 NCGVOL=NCGVOL+NWREV*(NANG+1)*NTVOL
920 GOTO 999
921 ENDIF
922 IF(IPORLI.EQ.1)THEN
923 SRAGMN=10000.
924 RAINT1=10000.
925 ENDIF
926*
927 DO 220 IVOL=1,NTVOL
928 ISG=ISG+1
929 IVCLOS=1
930 IF((RMIR(IVOL).GT.0.00001).OR.(RMIR(IVOL+1).GT.
931 + 0.00001))IVCLOS=0
932 XZ(1,1)=RMIR(IVOL)
933 XZ(2,1)=ZR(IVOL)
934 XZ(1,2)=RMAR(IVOL)
935 XZ(2,2)=ZR(IVOL)
936 XZ(1,3)=RMAR(IVOL+1)
937 XZ(2,3)=ZR(IVOL+1)
938 XZ(1,4)=RMIR(IVOL+1)
939 XZ(2,4)=ZR(IVOL+1)
940 ZR(IVOL+1)=ZR(IVOL+1)+.001
941 ICPOIN=JCGOBJ+1
942* Creating object
943**SG
944 CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN))
945 DO 170 J=1,3
946 T(J,1)=GRMAT(3*J-2,NLEVEL)
947 T(J,2)=GRMAT(3*J-1,NLEVEL)
948 T(J,3)=GRMAT(3*J,NLEVEL)
949 170 CONTINUE
950 CALL CGRIFL(T,Q(ICPOIN))
951 CGERR=Q(ICPOIN)
952 IF(CGERR.LE.0)THEN
953 CALL GDCGER(CGERR)
954 IF(KCGST.EQ.-2) GOTO 999
955 IF(KCGST.EQ.-3) THEN
956 KCGST=0
957 WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL)
958 CALL GMAIL(0,0)
959 WRITE(CHMAIL,10400)(PAR(I),I=1,4)
960 CALL GMAIL(0,0)
961 DO 180 J=1,NZ
962 ZPR=PAR(5+(J-1)*3)
963 RMIPR=PAR(6+(J-1)*3)
964 RMAPR=PAR(7+(J-1)*3)
965 WRITE(CHMAIL,10600)J,ZPR,RMIPR,RMAPR
966 CALL GMAIL(0,0)
967 180 CONTINUE
968 GOTO 999
969 ENDIF
970 ENDIF
971 CALL CGCEV(1,Q(ICPOIN))
972 DO 190 J=1,3
973 T(J,1)=GRMAT(3*J-2,NLEVEL)
974 T(J,2)=GRMAT(3*J-1,NLEVEL)
975 T(J,3)=GRMAT(3*J,NLEVEL)
976 190 CONTINUE
977 CALL CGAFFI(T,Q(ICPOIN))
978 XV=GTRAN(1,NLEVEL)
979 YV=GTRAN(2,NLEVEL)
980 ZV=GTRAN(3,NLEVEL)
981 CALL CGSHIF(XV,YV,ZV,Q(ICPOIN))
982***SG
983* Shifting object
984 IF(KSHIFT.GT.0)THEN
985 CALL GDSHIF(IVOLNA,ICPOIN)
986 ENDIF
987*
988 IF(GBOOM.NE.0)THEN
989 CALL GDBOMB(ICPOIN,ISHAPE)
990 IF(ITSTCU.EQ.0)GOTO 220
991 ENDIF
992*
993*
994* Hidden Volume Removal:
995* Computing closed volumes visibility and skipping
996* the unvisible ones; a great increase in speed
997* and a great reduction in n. of words used are obtained
998* in this way.
999*
1000 CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX)
1001 IF(ISUBLI.EQ.1)THEN
1002 AA1=RRMIN(1)-S1
1003 AA2=RRMIN(2)-S2
1004 AA3=RRMIN(3)-S3
1005 BB1=RRMAX(1)-SS1
1006 BB2=RRMAX(2)-SS2
1007 BB3=RRMAX(3)-SS3
1008 IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND.
1009 + BB1.LT.-0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN
1010 AMARMA(IVOL) =MIN(RMAR(IVOL),RMAR(IVOL+1))
1011 AMARMA(IVOL+1)=MAX(RMAR(IVOL),RMAR(IVOL+1))
1012 AMIRMA(IVOL) =MIN(RMIR(IVOL),RMIR(IVOL+1))
1013 AMIRMA(IVOL+1)=MAX(RMIR(IVOL),RMIR(IVOL+1))
1014 RMAX1=AMARMA(IVOL)
1015 RMAX2=AMARMA(IVOL+1)
1016 RMIN1=AMIRMA(IVOL)
1017 RMIN2=AMIRMA(IVOL+1)
1018 IF(SRAGMX.NE.0.)THEN
1019 DO 200 ITER=1,IPORNT
1020 IF(RMAX1.EQ.PORMAR(ITER).OR.RMAX2.EQ.PORMAR(ITER))
1021 + GOTO 210
1022 IF(RMIN1.EQ.PORMIR(ITER).OR.RMIN2.EQ.PORMIR(ITER))
1023 + THEN
1024 IF(PORMIR(ITER).NE.0.)GOTO 210
1025 ENDIF
1026 200 CONTINUE
1027 ENDIF
1028 IF(ISCOP.EQ.1)THEN
1029 IF((AMARMA(IVOL+1).GE.SRAGMX.OR.AMARMA(IVOL) .GT.SRAG
1030 + MN))GOTO 210
1031 IF((AMIRMA(IVOL+1).LE.RAINT2.OR.AMIRMA(IVOL)
1032 + .LE.RAINT1).AND.(RAINT2.NE.0))GOTO 210
1033 ENDIF
1034 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
1035 ITSTCU=0
1036 NCGVOL=NCGVOL-NWPROD
1037 GOTO 220
1038 ENDIF
1039 ENDIF
1040 ENDIF
1041 IF(IPORLI.EQ.1)THEN
1042 IF(RRMIN(1).LT.S1)S1=RRMIN(1)
1043 IF(RRMIN(2).LT.S2)S2=RRMIN(2)
1044 IF(RRMIN(3).LT.S3)S3=RRMIN(3)
1045 IF(RRMAX(1).GT.SS1)SS1=RRMAX(1)
1046 IF(RRMAX(2).GT.SS2)SS2=RRMAX(2)
1047 IF(RRMAX(3).GT.SS3)SS3=RRMAX(3)
1048 IF(RMAR(IVOL).GT.SRAGMX)SRAGMX=RMAR(IVOL)
1049 IF(RMAR(IVOL).LT.SRAGMN)SRAGMN=RMAR(IVOL)
1050 IF(RMAR(IVOL+1).GT.SRAGMX)SRAGMX=RMAR(IVOL+1)
1051 IF(RMAR(IVOL+1).LT.SRAGMN)SRAGMN=RMAR(IVOL+1)
1052 IF(RMIR(IVOL).GT.RAINT2)RAINT2=RMIR(IVOL)
1053 IF(RMIR(IVOL).LT.RAINT1)RAINT1=RMIR(IVOL)
1054 IF(RMIR(IVOL+1).GT.RAINT2)RAINT2=RMIR(IVOL+1)
1055 IF(RMIR(IVOL+1).LT.RAINT1)RAINT1=RMIR(IVOL+1)
1056 PORMAR(IVOL)=RMAR(IVOL)
1057 PORMIR(IVOL)=RMIR(IVOL)
1058 IPORNT =NTVOL
1059 ENDIF
1060 210 CONTINUE
1061* Create clipping objects
1062 IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE)
1063* Perspective view
1064 IF (IPRJ.EQ.IPERS) THEN
1065 CALL CGPERS(Q(ICPOIN))
1066 ENDIF
1067* Inserting objects in Hide + Wire structures
1068 CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
1069***SG
1070 220 CONTINUE
1071 GOTO 999
1072*
1073 230 CONTINUE
1074C
1075C PCON ----> call CGZREV
1076C
1077 NTVOL=NZ-1
1078 ANG1=PHIMIN
1079 ANG2=PHIMAX
1080**SG
1081 AANG=ABS(ANG2-ANG1)
1082 AZLAT=AANG*APPROS
1083 ZLAT=AZLAT/360
1084 NANG=ZLAT
1085 IF(NANG.EQ.0)NANG=1
1086 AZ=ZLAT-NANG
1087 IF(AZ.GT..5)NANG=NANG+1
1088**SG
1089 AFINV=1./COS(PI/APPROS)
1090 FINV=ABS(AFINV)
1091 JSURZ=1
1092 ZR(1)=PAR(4)
1093 RMIR(1)=PAR(5)*FINV
1094 RMAR(1)=PAR(6)*FINV
1095*SG
1096 RMAR(1)=RMAR(1)+.1
1097*SG
1098 DO 240 I=1,NTVOL
1099* ZA=PAR(4+3*(I-1))
1100 ZB=PAR(4+3*I)
1101**SG
1102 ZB=ZB+.001
1103******** DIFZ=ABS(ZB-ZA)
1104******** IF(DIFZ.LT.0.001)GOTO 290
1105**SG
1106 JSURZ=JSURZ+1
1107 ZR(JSURZ)=ZB
1108 RMIR(JSURZ)=PAR(5+3*I)*FINV
1109 RMAR(JSURZ)=PAR(6+3*I)*FINV
1110**SG
1111 RMAR(JSURZ)=RMAR(JSURZ)+.1
1112*
1113 240 CONTINUE
1114*
1115* Checking if all Inner Radii are 0. ==> 'Closed' Volume
1116*
1117* NRAD=NTVOL+1
1118* DO 300 I=1,NRAD
1119* IF(RMIR(I).GT.0.00001)GOTO 310
1120* 300 CONTINUE
1121* IVCLOS=1
1122* 310 CONTINUE
1123*
1124*
1125* Size evaluation
1126 IF(IWORK.LE.2.AND.IVFUN.NE.0)THEN
1127 NCGVOL=NCGVOL+NWREV*(NANG+1)*NTVOL
1128 GOTO 999
1129 ENDIF
1130 IF(IPORLI.EQ.1)THEN
1131 SRAGMN=10000.
1132 RAINT1=10000.
1133 ENDIF
1134*
1135 DO 300 IVOL=1,NTVOL
1136 ISG=ISG+1
1137 IVCLOS=1
1138 IF((RMIR(IVOL).GT.0.00001).OR.(RMIR(IVOL+1).GT.
1139 + 0.00001))IVCLOS=0
1140 XZ(1,1)=RMIR(IVOL)
1141 XZ(2,1)=ZR(IVOL)
1142 XZ(1,2)=RMAR(IVOL)
1143 XZ(2,2)=ZR(IVOL)
1144 XZ(1,3)=RMAR(IVOL+1)
1145 XZ(2,3)=ZR(IVOL+1)
1146 XZ(1,4)=RMIR(IVOL+1)
1147 XZ(2,4)=ZR(IVOL+1)
1148 ZR(IVOL+1)=ZR(IVOL+1)+.1
1149 ICPOIN=JCGOBJ+1
1150* Creating object
1151**SG
1152 CALL CGZREV(XZ,ANG1,ANG2,NANG,4000,Q(ICPOIN))
1153 DO 250 J=1,3
1154 T(J,1)=GRMAT(3*J-2,NLEVEL)
1155 T(J,2)=GRMAT(3*J-1,NLEVEL)
1156 T(J,3)=GRMAT(3*J,NLEVEL)
1157 250 CONTINUE
1158 CALL CGRIFL(T,Q(ICPOIN))
1159 CALL CGCEV(-1,Q(ICPOIN))
1160 CGERR=Q(ICPOIN)
1161 IF(CGERR.LE.0)THEN
1162 CALL GDCGER(CGERR)
1163 IF(KCGST.EQ.-2) GOTO 999
1164 IF(KCGST.EQ.-3) THEN
1165 KCGST=0
1166 WRITE(CHMAIL,10000)ISHAPE,NAMES(NLEVEL)
1167 CALL GMAIL(0,0)
1168 WRITE(CHMAIL,10500)(PAR(I),I=1,3)
1169 CALL GMAIL(0,0)
1170 DO 260 J=1,NZ
1171 ZPR=PAR(4+(J-1)*3)
1172 RMIPR=PAR(5+(J-1)*3)
1173 RMAPR=PAR(6+(J-1)*3)
1174 WRITE(CHMAIL,10600)J,ZPR,RMIPR,RMAPR
1175 CALL GMAIL(0,0)
1176 260 CONTINUE
1177 GOTO 999
1178 ENDIF
1179 ENDIF
1180 CALL CGCEV(1,Q(ICPOIN))
1181 DO 270 J=1,3
1182 T(1,J)=GRMAT(3*J-2,NLEVEL)
1183 T(2,J)=GRMAT(3*J-1,NLEVEL)
1184 T(3,J)=GRMAT(3*J,NLEVEL)
1185 T(4,J)=0.
1186 270 CONTINUE
1187 CALL CGAFFI(T,Q(ICPOIN))
1188 XV=GTRAN(1,NLEVEL)
1189 YV=GTRAN(2,NLEVEL)
1190 ZV=GTRAN(3,NLEVEL)
1191 CALL CGSHIF(XV,YV,ZV,Q(ICPOIN))
1192*
1193***SG
1194* Shifting object
1195 IF(KSHIFT.GT.0)THEN
1196 CALL GDSHIF(IVOLNA,ICPOIN)
1197 ENDIF
1198*
1199 IF(GBOOM.NE.0)THEN
1200 CALL GDBOMB(ICPOIN,ISHAPE)
1201 IF(ITSTCU.EQ.0)GOTO 300
1202 ENDIF
1203*
1204*
1205* Hidden Volume Removal:
1206* Computing closed volumes visibility and skipping
1207* the unvisible ones; a great increase in speed
1208* and a great reduction in n. of words used are obtained
1209* in this way.
1210*
1211 CALL CGMNMX(Q(ICPOIN),RRMIN,RRMAX)
1212 IF(ISUBLI.EQ.1)THEN
1213 AA1=RRMIN(1)-S1
1214 AA2=RRMIN(2)-S2
1215 AA3=RRMIN(3)-S3
1216 BB1=RRMAX(1)-SS1
1217 BB2=RRMAX(2)-SS2
1218 BB3=RRMAX(3)-SS3
1219 IF(AA1.GT.0.001.AND.AA2.GT.0.001.AND.AA3.GT.0.001.AND.
1220 + BB1.LT.-0.001.AND.BB2.LT.-0.001.AND.BB3.LT.-0.001)THEN
1221 AMARMA(IVOL) =MIN(RMAR(IVOL),RMAR(IVOL+1))
1222 AMARMA(IVOL+1)=MAX(RMAR(IVOL),RMAR(IVOL+1))
1223 AMIRMA(IVOL) =MIN(RMIR(IVOL),RMIR(IVOL+1))
1224 AMIRMA(IVOL+1)=MAX(RMIR(IVOL),RMIR(IVOL+1))
1225 RMAX1=AMARMA(IVOL)
1226 RMAX2=AMARMA(IVOL+1)
1227 RMIN1=AMIRMA(IVOL)
1228 RMIN2=AMIRMA(IVOL+1)
1229 IF(SRAGMX.NE.0.)THEN
1230 DO 280 ITER=1,IPORNT
1231 IF(RMAX1.EQ.PORMAR(ITER).OR.RMAX2.EQ.PORMAR(ITER))
1232 + GOTO 290
1233 IF(RMIN1.EQ.PORMIR(ITER).OR.RMIN2.EQ.PORMIR(ITER))
1234 + THEN
1235 IF(PORMIR(ITER).NE.0)GOTO 290
1236 ENDIF
1237 280 CONTINUE
1238 ENDIF
1239 IF(ISCOP.EQ.1)THEN
1240 IF((AMARMA(IVOL+1).GE.SRAGMX.OR.AMARMA(IVOL) .GE.SRAG
1241 + MN))GOTO 290
1242 IF((AMIRMA(IVOL+1).LE.RAINT2.AND.AMIRMA(IVOL)
1243 + .LE.RAINT1).AND.(RAINT2.NE.0))GOTO 290
1244 ENDIF
1245 IF(IWORK.EQ.0.OR.IWORK.EQ.3)THEN
1246 NCGVOL=NCGVOL-NWPROD
1247 ITSTCU=0
1248 GOTO 300
1249 ENDIF
1250 ENDIF
1251 ENDIF
1252 IF(IPORLI.EQ.1)THEN
1253 IF(RRMIN(1).LT.S1)S1=RRMIN(1)
1254 IF(RRMIN(2).LT.S2)S2=RRMIN(2)
1255 IF(RRMIN(3).LT.S3)S3=RRMIN(3)
1256 IF(RRMAX(1).GT.SS1)SS1=RRMAX(1)
1257 IF(RRMAX(2).GT.SS2)SS2=RRMAX(2)
1258 IF(RRMAX(3).GT.SS3)SS3=RRMAX(3)
1259 IF(RMAR(IVOL).GT.SRAGMX)SRAGMX=RMAR(IVOL)
1260 IF(RMAR(IVOL).LT.SRAGMN)SRAGMN=RMAR(IVOL)
1261 IF(RMAR(IVOL+1).GT.SRAGMX)SRAGMX=RMAR(IVOL+1)
1262 IF(RMAR(IVOL+1).LT.SRAGMN)SRAGMN=RMAR(IVOL+1)
1263 IF(RMIR(IVOL).GT.RAINT2)RAINT2=RMIR(IVOL)
1264 IF(RMIR(IVOL).LT.RAINT1)RAINT1=RMIR(IVOL)
1265 IF(RMIR(IVOL+1).GT.RAINT2)RAINT2=RMIR(IVOL+1)
1266 IF(RMIR(IVOL+1).LT.RAINT1)RAINT1=RMIR(IVOL+1)
1267 PORMAR(IVOL)=RMAR(IVOL)
1268 PORMIR(IVOL)=RMIR(IVOL)
1269 IPORNT =NTVOL
1270 ENDIF
1271 290 CONTINUE
1272* Create clipping objects
1273 IF(ICUT.NE.0.OR.IHOLE.NE.0)CALL GDCGSL(IVOLNA,ISHAPE)
1274* Perspective view
1275 IF (IPRJ.EQ.IPERS) THEN
1276 CALL CGPERS(Q(ICPOIN))
1277 ENDIF
1278* Inserting object in Hide + Wire structures
1279 CALL GDCGHI(IWORK,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
1280 300 CONTINUE
1281 GOTO 999
1282*
1283***SG
1284*
128510000 FORMAT(' Check Parameters of Shape ',I3,' in volume ',A4)
128610100 FORMAT(' Warning >>> RMIN1 greater than RMAX1 for shape '
1287 + ,I3,' in volume ',A4)
128810200 FORMAT(' Warning >>> RMIN2 greater than RMAX2 for shape '
1289 + ,I3,' in volume ',A4)
129010300 FORMAT(' Warning >>> PHIMIN greater than PHIMAX for shape'
1291 + ,I3,' in volume ',A4)
1292*10400 FORMAT(' PGON with NPDV = ',I5,' in volume ',A4,' NPDV very
1293* + large . It must be < 30 . Volume will not be drawn. ')
129410400 FORMAT(' PHI1 = ',F8.3,' DPHI = ',F8.3,' NPDV = ',F8.1
1295 + ,' NZ = ',F8.1)
129610500 FORMAT(' PHI1 = ',F8.3,' DPHI = ',F8.3,' NZ = ',F8.1)
129710600 FORMAT(' J = ',I5,' Z = ',F8.3,' RMIN = ',F8.3
1298 + ,' RMAX = ',F8.3)
1299*10800 FORMAT(' Please, increase size of Zebra store by ',I10,
1300* + ' words')
1301*
1302***SG
1303 999 END