5 * Revision 1.1.1.1 1995/10/24 10:19:43 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
12 SUBROUTINE CGFVIS(NT,FACE,IVIS,ISHAPE)
13 ************************************************************************
16 * Authors: E. Chernyaev, S. Giani Date: 01.08.89 *
19 * Function: Transfer face to screen coordinates *
20 * and find face min-max and face visibility *
24 * Input: NT - number of transformation to screen coordinates *
27 * Output: IVIS - visibility flag *
28 * 1 - if visible face *
33 ************************************************************************
34 #include "geant321/cgcfac.inc"
35 #include "geant321/cggpar.inc"
36 #include "geant321/cgdelt.inc"
37 #include "geant321/cgctra.inc"
38 #include "geant321/gcspee.inc"
40 DIMENSION ACCMI1(6),ACCMI2(6),ACCMI3(6),
41 + ACCMA1(6),ACCMA2(6),ACCMA3(6)
44 #if !defined(CERNLIB_SINGLE)
45 DOUBLE PRECISION T(4,3),A,B,C,S
47 #if defined(CERNLIB_SINGLE)
54 T(I,J) = TSCRN(I,J,NT)
59 ** HIDDEN FACE REMOVAL
60 * Computing face scope and skipping if it's 'covered': this
61 * can allow a great increase in speed and a great reduction
62 * in number of memory words used.
64 IF(ISHAPE.LE.4.OR.ISHAPE.EQ.10)THEN
67 SRFMI1 = FACE(J+KCGX1)
68 SRFMI2 = FACE(J+KCGY1)
69 SRFMI3 = FACE(J+KCGZ1)
70 SRFMA1 = FACE(J+KCGX1)
71 SRFMA2 = FACE(J+KCGY1)
72 SRFMA3 = FACE(J+KCGZ1)
75 SRFMI1 = MIN(SRFMI1,FACE(J+KCGX1),FACE(J+KCGX2))
76 SRFMI2 = MIN(SRFMI2,FACE(J+KCGY1),FACE(J+KCGY2))
77 SRFMI3 = MIN(SRFMI3,FACE(J+KCGZ1),FACE(J+KCGZ2))
78 SRFMA1 = MAX(SRFMA1,FACE(J+KCGX1),FACE(J+KCGX2))
79 SRFMA2 = MAX(SRFMA2,FACE(J+KCGY1),FACE(J+KCGY2))
80 SRFMA3 = MAX(SRFMA3,FACE(J+KCGZ1),FACE(J+KCGZ2))
90 ELSEIF(ISUBLI.EQ.1)THEN
91 IF(NTIM.EQ.1.OR.NTIM.EQ.2)THEN
92 IF(SRFMI3.LT.ACCMI3(NTIM).AND.SRFMA3
93 + .LT.ACCMA3(NTIM))GOTO 999
94 ELSEIF(NTIM.EQ.3.OR.NTIM.EQ.5)THEN
95 IF(SRFMI2.LT.ACCMI2(NTIM).AND.SRFMA2
96 + .LT.ACCMA2(NTIM))GOTO 999
97 ELSEIF(NTIM.EQ.4.OR.NTIM.EQ.6)THEN
98 IF(SRFMI1.LT.ACCMI1(NTIM).AND.SRFMA1
99 + .LT.ACCMA1(NTIM))GOTO 999
106 C = (T(2,1)*T(3,2) - T(3,1)*T(2,2))*FACE(KCGAA) +
107 + (T(3,1)*T(1,2) - T(1,1)*T(3,2))*FACE(KCGBB) +
108 + (T(1,1)*T(2,2) - T(2,1)*T(1,2))*FACE(KCGCC)
109 IF (C .LE. 0.) GOTO 999
110 B = (T(2,3)*T(3,1) - T(3,3)*T(2,1))*FACE(KCGAA) +
111 + (T(3,3)*T(1,1) - T(1,3)*T(3,1))*FACE(KCGBB) +
112 + (T(1,3)*T(2,1) - T(2,3)*T(1,1))*FACE(KCGCC)
113 A = (T(2,2)*T(3,3) - T(3,2)*T(2,3))*FACE(KCGAA) +
114 + (T(3,2)*T(1,3) - T(1,2)*T(3,3))*FACE(KCGBB) +
115 + (T(1,2)*T(2,3) - T(2,2)*T(1,3))*FACE(KCGCC)
116 S = 1./SQRT(A*A+B*B+C*C)
121 F1(KCGAF) = FACE(KCGAF)
122 F1(KCGNE) = FACE(KCGNE)
127 F1(KCGNE) = FACE(KCGNE)
129 ** T R A S F E R P O I N T C O O R D I N A T E S
132 IF (LCGFAC+NEDGE*LCGEDG .GT. LABC)
133 + PRINT *, ' Problem in CGFVIS: no space'
139 F1(J+KCGAE) = FACE(J+KCGAE)
143 F1(J+KCGX1) = T(1,1)*X + T(2,1)*Y + T(3,1)*Z + T(4,1)
144 F1(J+KCGY1) = T(1,2)*X + T(2,2)*Y + T(3,2)*Z + T(4,2)
145 F1(J+KCGZ1) = T(1,3)*X + T(2,3)*Y + T(3,3)*Z + T(4,3)
149 F1(J+KCGX2) = T(1,1)*X + T(2,1)*Y + T(3,1)*Z + T(4,1)
150 F1(J+KCGY2) = T(1,2)*X + T(2,2)*Y + T(3,2)*Z + T(4,2)
151 F1(J+KCGZ2) = T(1,3)*X + T(2,3)*Y + T(3,3)*Z + T(4,3)
152 XGRAV = XGRAV + F1(J+KCGX1) + F1(J+KCGX2)
153 YGRAV = YGRAV + F1(J+KCGY1) + F1(J+KCGY2)
154 ZGRAV = ZGRAV + F1(J+KCGZ1) + F1(J+KCGZ2)
157 XFACT = 1./(2.*NEDGE)
158 XGRAV = XGRAV * XFACT
159 YGRAV = YGRAV * XFACT
160 ZGRAV = ZGRAV * XFACT
161 AABCD(4) =-(AABCD(1)*XGRAV + AABCD(2)*YGRAV + AABCD(3)*ZGRAV)
163 ** F I N D F A C E M I N - M A X
166 RFMIN(1) = F1(J+KCGX1)
167 RFMIN(2) = F1(J+KCGY1)
168 RFMIN(3) = F1(J+KCGZ1)
169 RFMAX(1) = F1(J+KCGX1)
170 RFMAX(2) = F1(J+KCGY1)
171 RFMAX(3) = F1(J+KCGZ1)
173 RFMIN(1) = MIN(RFMIN(1),F1(J+KCGX1),F1(J+KCGX2))
174 RFMIN(2) = MIN(RFMIN(2),F1(J+KCGY1),F1(J+KCGY2))
175 RFMIN(3) = MIN(RFMIN(3),F1(J+KCGZ1),F1(J+KCGZ2))
176 RFMAX(1) = MAX(RFMAX(1),F1(J+KCGX1),F1(J+KCGX2))
177 RFMAX(2) = MAX(RFMAX(2),F1(J+KCGY1),F1(J+KCGY2))
178 RFMAX(3) = MAX(RFMAX(3),F1(J+KCGZ1),F1(J+KCGZ2))
189 ** C O M P U T E F A C E V I S I B L E A R E A
195 S = S + F1(J+KCGX1)*F1(J+KCGY2) - F1(J+KCGX2)*F1(J+KCGY1)
196 DL = ABS(F1(J+KCGX2)-F1(J+KCGX1)) + ABS(F1(J+KCGY2)-F1(J+
198 IF (DLMAX .LT. DL) DLMAX = DL
201 IF (DLMAX .LT. EESCR) GOTO 999
202 IF (S .GT. DLMAX*EESCR) IVIS = 1