5 * Revision 1.1.1.1 1995/10/24 10:19:45 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.32 by S.Giani
12 SUBROUTINE CGVTEF(IFACE,XYZ,IVIS)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 16.08.88 *
19 * Function: Test edge against face *
21 * References: CGHPLA, CGVTIN *
23 * Input: IFACE(*) - face *
24 * XYZ(3,*) - nodes coordinates *
26 * Output: IVIS = -1 for unvisible edge *
30 ************************************************************************
31 #include "geant321/cgdelt.inc"
32 #include "geant321/cgcedg.inc"
45 * C O M P U T E A L L I N T E R S E C T I O N POINTS
50 TY1 = ABC(1,2)*XYZ(1,N1) + ABC(2,2)*XYZ(2,N1) + ABC(3,2)
51 TY2 = ABC(1,2)*XYZ(1,N2) + ABC(2,2)*XYZ(2,N2) + ABC(3,2)
52 IF (ABS(TY1) .LE. ERROR) TY1 = 0.
53 IF (ABS(TY2) .LE. ERROR) TY2 = 0.
54 IF (TY1*TY2) 110,120,140
55 110 TX1 = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
56 TX2 = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
57 T1 = (TX1*TY2-TX2*TY1) / (TY2-TY1)
60 120 IF (TY2 .NE. 0.) GOTO 121
61 IF (TY1 .NE. 0.) GOTO 122
62 TTT(1,JT+1) = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
64 TTT(1,JT+2) = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
66 IF (TTT(1,JT+1) .LT. TMIN) TMIN = TTT(1,JT+1)
67 IF (TTT(1,JT+1) .GT. TMAX) TMAX = TTT(1,JT+1)
68 IF (TTT(1,JT+2) .LT. TMIN) TMIN = TTT(1,JT+1)
69 IF (TTT(1,JT+2) .GT. TMAX) TMAX = TTT(1,JT+1)
71 121 T1 = ABC(1,1)*XYZ(1,N1) + ABC(2,1)*XYZ(2,N1) + ABC(3,1)
72 IF (TY2 .LT. 0.) T2=-1.
73 IF (TY2 .GT. 0.) T2= 1.
75 122 T1 = ABC(1,1)*XYZ(1,N2) + ABC(2,1)*XYZ(2,N2) + ABC(3,1)
76 IF (TY1 .LT. 0.) T2=-1
77 IF (TY1 .GT. 0.) T2= 1
82 IF (TTT(1,JT) .LT. TMIN) TMIN = TTT(1,JT)
83 IF (TTT(1,JT) .GT. TMAX) TMAX = TTT(1,JT)
85 * C H E C K I F F A C E O U T O F E D G E
86 IF (JT .EQ. 0) GOTO 999
87 IF (TMIN.GE.1.-TDEL .OR. TMAX.LE.0.+TDEL) GOTO 999
88 * C O M P U T E F A C E P L A N E
89 * C H E C K I F E D G E B E F O R E P L A N E
90 CALL CGHPLA(IFACE,XYZ,ABCD)
91 DA = ABCD(1)*AA(1)+ABCD(2)*AA(2)+ABCD(3)*AA(3)+ABCD(4)
92 DB = ABCD(1)*BB(1)+ABCD(2)*BB(2)+ABCD(3)*BB(3)+ABCD(4)
93 IF (DA.GE.-2.*EESCR .AND. DB.GE.-2.*EESCR) GOTO 999
94 IF (DA.LE.0. .AND. DB.LE.0.) GOTO 150
96 IF (DA.GE.0. .AND. TMAX.LE.T0+TDEL) GOTO 999
97 IF (DB.GE.0. .AND. TMIN.GE.T0-TDEL) GOTO 999
98 * S O R T I N T E R S E C T I O N P O I N T S
99 IF (JT .EQ. 1) GOTO 400
102 IF (TTT(1,J+1) .GE. TTT(1,J)) GOTO 300
105 TTT(1,J+1) = TTT(1,J)
106 TTT(2,J+1) = TTT(2,J)
113 IF (TTT(2,I-1) .EQ. -2.) GOTO 310
115 ******* 02-FEB-1990 **** R.N.
116 IF(.0001.LT.ABS(TTT(1,I)-TTT(1,I-1)))GOTO 310
117 ******* 02-FEB-1990 **** R.N.
119 IF (TTT(1,I) .NE. TTT(1,I-1)) GOTO 310
120 IF (TTT(2,I) .EQ. TTT(2,I-1)) GOTO 305
121 IF (TTT(2,I) .EQ. 0.) GOTO 305
122 IF (TTT(2,I-1) .EQ. 0.) GOTO 305
131 IF (TTT(2,I) .EQ. -2.) GOTO 320
136 IF (JT .EQ. 0) GOTO 999
140 IF (DA .GT. 0.) T1 = T0
141 IF (DB .GT. 0.) T2 = T0
143 IF (TTT(1,I+1) .LE. T1) GOTO 500
144 IF (TTT(1,I) .GE. T2) GOTO 999
147 IF (TMIN .LT. T1) TMIN = T1
148 IF (TMAX .GT. T2) TMAX = T2
149 IF (TMAX-TMIN.LE.TDEL) GOTO 500
150 CALL CGVTIN(TMIN,TMAX,IVIS)
151 IF (IVIS .LT. 0) GOTO 999