5 * Revision 1.1.1.1 1995/10/24 10:20:21 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.26 by S.Giani
12 SUBROUTINE GDCGSL(IVOLNA,ISHAPE)
14 C. ******************************************************************
16 C. * This routine allows computes the coefficients of the *
17 C. * cut plane and the limits and array of the clipping *
18 C. * volumes (boxes, cones, tubes, spheres). *
20 C. * ==>Called by : GDRAW *
22 C. * Authors : J.Salt ; S.Giani *
23 C. ******************************************************************
25 #include "geant321/gcdraw.inc"
26 #include "geant321/gcunit.inc"
27 #include "geant321/gconsp.inc"
28 #include "geant321/gcgobj.inc"
33 #include "geant321/gcspee.inc"
34 #include "geant321/gcbank.inc"
35 #include "geant321/gcnum.inc"
36 #include "geant321/gcvolu.inc"
37 #include "geant321/gchiln.inc"
38 #include "geant321/gcmutr.inc"
39 #include "geant321/pawc.inc"
41 DIMENSION TMIN(3),TMAX(3),XZ(2,4)
44 CALL UCTOH('PERS',IPERS,4,4)
47 * Clipping Volumes Creation
49 * Look for volume to be clipped
54 CALL UHTOC(IVOLNA,4,NACA,4)
57 IWILDC=INDEX(GNNVV(III),'*')
59 CALL UCTOH(GNNVV(III),INV,4,4)
60 ELSEIF(IWILDC.EQ.1.AND.JJJ.LT.2) THEN
62 ELSEIF(GNNVV(III)(1:IWILDC-1).EQ.
63 + NACA(1:IWILDC-1)) THEN
68 * If you find it, compute number of times it's to be clipped
69 * and set parameters of relative clipping shapes
77 IF(GNASH(III).EQ.'BOX ')THEN
78 DBX=GXMAX(III)-GXMIN(III)
79 DBY=GYMAX(III)-GYMIN(III)
80 DBZ=GZMAX(III)-GZMIN(III)
84 CALL CGBRIK(DBX,DBY,DBZ,300,Q(ICLIP2))
85 CALL CGCEV(-1,Q(ICLIP2))
86 CALL CGCEV(-1,Q(ICLIP2))
87 CALL CGSHIF(GXMIN(III),GYMIN(III),GZMIN(III),
89 CALL CGMNMX(Q(ICLIP2),TMIN,TMAX)
91 IF (IPRJ.EQ.IPERS) THEN
92 CALL CGPERS(Q(ICLIP2))
96 CALL CGBRIK(DBX,DBY,DBZ,300,Q(ICLIP1))
97 CALL CGCEV(-1,Q(ICLIP1))
98 CALL CGCEV(-1,Q(ICLIP1))
99 CALL CGSHIF(GXMIN(III),GYMIN(III),GZMIN(III),
101 CALL CGMNMX(Q(ICLIP1),TMIN,TMAX)
103 IF (IPRJ.EQ.IPERS) THEN
104 CALL CGPERS(Q(ICLIP1))
107 ELSE IF (GNASH(III).EQ.'TUBE') THEN
126 CALL CGZREV(XZ,ANG1,ANG2,NANG,16000,Q(ICLIP2))
127 CALL CGCEV(-1,Q(ICLIP2))
128 CALL CGCEV(-1,Q(ICLIP2))
132 CALL CGSHIF(S1,S2,S3,Q(ICLIP2))
133 CALL CGMNMX(Q(ICLIP2),TMIN,TMAX)
135 IF (IPRJ.EQ.IPERS) THEN
136 CALL CGPERS(Q(ICLIP2))
139 CALL CGZREV(XZ,ANG1,ANG2,NANG,16000,Q(ICLIP1))
140 CALL CGCEV(-1,Q(ICLIP1))
141 CALL CGCEV(-1,Q(ICLIP1))
145 CALL CGSHIF(S1,S2,S3,Q(ICLIP1))
146 CALL CGMNMX(Q(ICLIP1),TMIN,TMAX)
148 IF (IPRJ.EQ.IPERS) THEN
149 CALL CGPERS(Q(ICLIP1))
152 ELSE IF (GNASH(III).EQ.'SPHE') THEN
158 CALL CGSPHE(R,NLAT,NLON,16000,Q(ICLIP2))
159 CALL CGCEV(-1,Q(ICLIP2))
160 CALL CGCEV(-1,Q(ICLIP2))
164 CALL CGSHIF(S1,S2,S3,Q(ICLIP2))
165 CALL CGMNMX(Q(ICLIP2),TMIN,TMAX)
167 IF (IPRJ.EQ.IPERS) THEN
168 CALL CGPERS(Q(ICLIP2))
171 CALL CGSPHE(R,NLAT,NLON,16000,Q(ICLIP1))
172 CALL CGCEV(-1,Q(ICLIP1))
173 CALL CGCEV(-1,Q(ICLIP1))
177 CALL CGSHIF(S1,S2,S3,Q(ICLIP1))
178 CALL CGMNMX(Q(ICLIP1),TMIN,TMAX)
180 IF (IPRJ.EQ.IPERS) THEN
181 CALL CGPERS(Q(ICLIP1))
184 ELSE IF (GNASH(III).EQ.'CONE') THEN
202 CALL CGZREV(XZ,ANG1,ANG2,NANG,16000,Q(ICLIP2))
203 CALL CGCEV(-1,Q(ICLIP2))
204 CALL CGCEV(-1,Q(ICLIP2))
208 CALL CGSHIF(S1,S2,S3,Q(ICLIP2))
209 CALL CGMNMX(Q(ICLIP2),TMIN,TMAX)
211 IF (IPRJ.EQ.IPERS) THEN
212 CALL CGPERS(Q(ICLIP2))
215 CALL CGZREV(XZ,ANG1,ANG2,NANG,16000,Q(ICLIP1))
216 CALL CGCEV(-1,Q(ICLIP1))
217 CALL CGCEV(-1,Q(ICLIP1))
221 CALL CGSHIF(S1,S2,S3,Q(ICLIP1))
222 CALL CGMNMX(Q(ICLIP1),TMIN,TMAX)
224 IF (IPRJ.EQ.IPERS) THEN
225 CALL CGPERS(Q(ICLIP1))
231 * IF(KCGST.EQ.-2)GO TO 999
232 * IF(KCGST.EQ.-3)THEN
233 * WRITE(CHMAIL,10100)
239 * Compute scope for each clipping volume
249 CLIPMI(KKKJ)=TMIN(KJ)
250 CLIPMA(KKKJ)=TMAX(KJ)
256 * If volume is not to be clipped
275 IF(BMIN(J).EQ.CLIPMI(J).AND.BMAX(J).EQ.CLIPMA(J))THEN
288 * Slicing with a plane
290 IF(ICUT.EQ.0) GO TO 999
294 ELSE IF(ICUT.EQ.2)THEN
297 ELSE IF(ICUT.EQ.3)THEN
307 ABCD(1)=SIN(ATH)*COS(APH)
308 ABCD(2)=SIN(ATH)*SIN(APH)
314 10000 FORMAT(' CUT Index not implemented')
315 *10100 FORMAT(' Check Clipping Box Parameters ')
316 10100 FORMAT(' Please, reset CVOL mode. ')