]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1995/10/24 10:20:19 cernlib | |
6 | * Geant | |
7 | * | |
8 | * | |
9 | #include "geant321/pilot.h" | |
10 | #if defined(CERNLIB_CG) | |
11 | *CMZ : 3.21/02 29/03/94 15.41.25 by S.Giani | |
12 | *-- Author : | |
13 | SUBROUTINE GD16V(IWOFFS,SHADE) | |
14 | ************************************************************************ | |
15 | * * | |
16 | * Name: GD16V * | |
17 | * Author: S.Giani Date: 18.07.91 * | |
18 | * Revised: 1992 * | |
19 | * * | |
20 | * Function: Vizualisation of WIRE-object * | |
21 | * Search and construction of faces' visible portions * | |
22 | * Surface filling for WIRE-object * | |
23 | * Two scan line algorithms * | |
24 | * Surface shading * | |
25 | * * | |
26 | * References: CGVHED * | |
27 | * * | |
28 | * Input: Q(JCG+IWOFFS+*) - WIRE-object * | |
29 | * Q(JCG+*) - HIDE-structure * | |
30 | * * | |
31 | * Output: none * | |
32 | * * | |
33 | * Errors: none * | |
34 | * * | |
35 | ************************************************************************ | |
36 | #include "geant321/gcbank.inc" | |
37 | #include "geant321/gcunit.inc" | |
38 | #include "geant321/cggpar.inc" | |
39 | #include "geant321/cghpar.inc" | |
40 | #include "geant321/cgdelt.inc" | |
41 | #include "geant321/cgctra.inc" | |
42 | #include "geant321/cgcedg.inc" | |
43 | #include "geant321/gcdraw.inc" | |
44 | #include "geant321/gcflag.inc" | |
45 | #include "geant321/gcspee.inc" | |
46 | #include "geant321/gconst.inc" | |
47 | #include "geant321/gchiln.inc" | |
48 | * | |
49 | INTEGER SHADE(*) | |
50 | REAL P1(3),P2(3),AX(2),AY(2) | |
51 | *SG | |
52 | DIMENSION ISCFAC(500),SCXYZ(3,500),COSDIR(4) | |
53 | DIMENSION CX(500),CY(500),CZ(500) | |
54 | DIMENSION TESTX(2),TESTY(2) | |
55 | DIMENSION VVX(500),VVY(500) | |
56 | * | |
57 | DIMENSION AROT(4,4),ZROT(4,4),CXROT(500),CYROT(500),CZROT(500) | |
58 | DIMENSION PXINT(50),PZINT(50),XPINT(50),YPINT(50),ZPINT(50),RRR(4) | |
59 | *SG | |
60 | LLEP=ABS(LEP) | |
61 | ***** CALL IGSET('SYNC',1.) | |
62 | IF (Q(JCG+IWOFFS+KCGSIZ) .LE. 0.) THEN | |
63 | WRITE(CHMAIL,10000) | |
64 | GOTO 400 | |
65 | ENDIF | |
66 | IF (Q(JCG+KHSIZE) .LE. LHHEAD) THEN | |
67 | WRITE(CHMAIL,10100) | |
68 | GOTO 400 | |
69 | ENDIF | |
70 | *SG | |
71 | LINBUF=0 | |
72 | DO 10 IJ=1,2 | |
73 | TESTX(IJ)=20. | |
74 | TESTY(IJ)=20. | |
75 | 10 CONTINUE | |
76 | LINFIL=IBITS(LINATT,13,3) | |
77 | IF(LINFIL.NE.0)CALL GDRAWV(TESTX,TESTY,-1) | |
78 | IJKLMN=0 | |
79 | IACTUN=0 | |
80 | LPARZ=0 | |
81 | LFULL=0 | |
82 | IN=0 | |
83 | KKK=0 | |
84 | LMN=0 | |
85 | NSI=0 | |
86 | IGEN=0 | |
87 | *SG | |
88 | NT = Q(JCG+KHNT) | |
89 | IF (NT.LE.0 .OR. NT.GT.NTMAX) GOTO 400 | |
90 | NEDGE = Q(JCG+IWOFFS+KCGNF) | |
91 | * IF(NEDGE.EQ.0)GOTO 49 | |
92 | JXYZ1 = Q(JCG+KHJXYZ) | |
93 | JFA = Q(JCG+KHJFA) | |
94 | JPFA = Q(JCG+KHJPFA) | |
95 | JDFA = Q(JCG+KHJDFA) | |
96 | JTRE = Q(JCG+KHJTRE) | |
97 | JSTA = Q(JCG+KHJSTA) | |
98 | JALE = Q(JCG+KHJALE) | |
99 | JARI = Q(JCG+KHJARI) | |
100 | NFACE = Q(JCG+KHNFAC) | |
101 | DO 230 NE=1,NEDGE | |
102 | IF(LINFIL.NE.0)THEN | |
103 | IF(LLEP.NE.1)THEN | |
104 | DO 180 MMM=2,SHADE(1) | |
105 | IF(NE.EQ.(SHADE(MMM)+1).AND.NE.NE.1)THEN | |
106 | *** IF((LFULL+LPARZ).EQ.0)GOTO 260 | |
107 | CALL CGFAC2(CX,CY,CZ,LMN) | |
108 | ISCFAC(1)=LMN*.5 | |
109 | DO 20 I=2,LMN+1 | |
110 | ISCFAC(I)=I-1 | |
111 | SCXYZ(1,I-1)=CX(I-1) | |
112 | SCXYZ(2,I-1)=CY(I-1) | |
113 | SCXYZ(3,I-1)=CZ(I-1) | |
114 | 20 CONTINUE | |
115 | CALL CGHPLA(ISCFAC,SCXYZ,COSDIR) | |
116 | XCOSX=(SIN(GTHETA*DEGRAD))*(COS(GPHI*DEGRAD)) | |
117 | YCOSY=(SIN(GTHETA*DEGRAD))*(SIN(GPHI*DEGRAD)) | |
118 | ZCOSZ=COS(GTHETA*DEGRAD) | |
119 | PROSCA=(COSDIR(1)*XCOSX)+(COSDIR(2)*YCOSY)+ | |
120 | + (COSDIR(3)*ZCOSZ) | |
121 | PROSCB=(2.*(PROSCA**2))-1. | |
122 | APROSC=PROSCB | |
123 | * IF(APROSC.LT.-1.)PRINT *,'GT1' | |
124 | IF(LFULL.EQ.(IJKLMN/2).AND. | |
125 | + (LINFIL.EQ.2.OR.LINFIL.EQ.3))THEN | |
126 | CALL CGFACO(VVX,VVY,IJKLMN,LFULL,APROSC) | |
127 | ELSE | |
128 | IF(ISWIT(10).EQ.100)THEN | |
129 | PNX=COSDIR(1) | |
130 | PNY=COSDIR(2) | |
131 | PNZ=COSDIR(3) | |
132 | APNZ=ABS(1.-PNZ) | |
133 | IF(APNZ.LT..0001)THEN | |
134 | AROT(1,1)=1. | |
135 | AROT(1,2)=0. | |
136 | AROT(1,3)=0. | |
137 | AROT(2,1)=0. | |
138 | AROT(2,2)=1. | |
139 | ELSE | |
140 | AROT(1,1)=PNX*PNZ/SQRT(PNX**2+PNY**2) | |
141 | AROT(1,2)=PNY*PNZ/SQRT(PNX**2+PNY**2) | |
142 | AROT(1,3)=-SQRT(PNX**2+PNY**2) | |
143 | AROT(2,1)=-PNY/SQRT(PNX**2+PNY**2) | |
144 | AROT(2,2)=PNX/SQRT(PNX**2+PNY**2) | |
145 | ENDIF | |
146 | AROT(2,3)=0. | |
147 | AROT(3,1)=PNX | |
148 | AROT(3,2)=PNY | |
149 | AROT(3,3)=PNZ | |
150 | ELSE | |
151 | DO 40 IHH=1,3 | |
152 | DO 30 JHH=1,4 | |
153 | AROT(IHH,JHH)=TSCRN(JHH,IHH,NT) | |
154 | 30 CONTINUE | |
155 | 40 CONTINUE | |
156 | AROT(4,1)=0. | |
157 | AROT(4,2)=0. | |
158 | AROT(4,3)=0. | |
159 | AROT(4,4)=1. | |
160 | ENDIF | |
161 | IF(ISWIT(10).EQ.100)THEN | |
162 | ZROT(1,1)=AROT(1,1) | |
163 | ZROT(2,1)=AROT(1,2) | |
164 | ZROT(3,1)=AROT(1,3) | |
165 | ZROT(1,2)=AROT(2,1) | |
166 | ZROT(2,2)=AROT(2,2) | |
167 | ZROT(3,2)=AROT(2,3) | |
168 | ZROT(1,3)=AROT(3,1) | |
169 | ZROT(2,3)=AROT(3,2) | |
170 | ZROT(3,3)=AROT(3,3) | |
171 | ELSE | |
172 | DO 60 IHH=1,4 | |
173 | DO 50 JHH=1,4 | |
174 | ZROT(IHH,JHH)=AROT(IHH,JHH) | |
175 | 50 CONTINUE | |
176 | 60 CONTINUE | |
177 | CALL RINV(4,ZROT,4,RRR,IFAIL) | |
178 | ENDIF | |
179 | YROTMI=100000. | |
180 | YROTMA=-100000. | |
181 | DO 70 M=1,LMN | |
182 | IF(ISWIT(10).EQ.100)THEN | |
183 | CXROT(M)=AROT(1,1)*CX(M)+ AROT(1,2)*CY(M) | |
184 | + +AROT(1,3)*CZ(M) | |
185 | CYROT(M)=AROT(2,1)*CX(M)+ AROT(2,2)*CY(M) | |
186 | + +AROT(2,3)*CZ(M) | |
187 | CZROT(M)=AROT(3,1)*CX(M)+ AROT(3,2)*CY(M) | |
188 | + +AROT(3,3)*CZ(M) | |
189 | ELSE | |
190 | CXROT(M)=AROT(1,4)+AROT(1,1)*CX(M)+ | |
191 | + AROT(1,2)*CY(M)+AROT(1,3)*CZ(M) | |
192 | CYROT(M)=AROT(2,4)+AROT(2,1)*CX(M)+ | |
193 | + AROT(2,2)*CY(M)+AROT(2,3)*CZ(M) | |
194 | CZROT(M)=AROT(3,4)+AROT(3,1)*CX(M)+ | |
195 | + AROT(3,2)*CY(M)+AROT(3,3)*CZ(M) | |
196 | ENDIF | |
197 | IF(CYROT(M).LT.YROTMI)YROTMI=CYROT(M) | |
198 | IF(CYROT(M).GT.YROTMA)YROTMA=CYROT(M) | |
199 | 70 CONTINUE | |
200 | IF(LINFIL.EQ.1)THEN | |
201 | RINULI=.01 | |
202 | ELSEIF(LINFIL.EQ.2)THEN | |
203 | RINULI=.1 | |
204 | ELSEIF(LINFIL.EQ.3)THEN | |
205 | RINULI=.05 | |
206 | ELSEIF(LINFIL.EQ.4)THEN | |
207 | RINULI=.05 | |
208 | ELSEIF(LINFIL.EQ.5)THEN | |
209 | RINULI=.02 | |
210 | ELSEIF(LINFIL.EQ.6)THEN | |
211 | RINULI=.01 | |
212 | ELSEIF(LINFIL.EQ.7)THEN | |
213 | RINULI=.005 | |
214 | ENDIF | |
215 | NYROTM=(YROTMA-YROTMI)/RINULI | |
216 | YROTST=YROTMI | |
217 | DO 170 MM=1,NYROTM-1 | |
218 | YROTST=YROTST+RINULI | |
219 | JFK=0 | |
220 | DO 80 MMI=1,LMN-1,2 | |
221 | IF(CXROT(MMI).EQ.CXROT(MMI+1))THEN | |
222 | IF(MIN(CYROT(MMI),CYROT(MMI+1)).LT. | |
223 | + YROTST.AND.MAX(CYROT(MMI),CYROT(MMI+1) | |
224 | + ) .GT.YROTST)THEN | |
225 | JFK=JFK+1 | |
226 | PXINT(JFK)=CXROT(MMI) | |
227 | IF(CZROT(MMI).EQ.CZROT(MMI+1))THEN | |
228 | PZINT(JFK)=CZROT(MMI) | |
229 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1)) | |
230 | + THEN | |
231 | AAAZ=(CYROT(MMI)-CYROT(MMI+1))/ | |
232 | + (CZROT(MMI)-CZROT(MMI+1)) | |
233 | BBBZ=(CZROT(MMI)*CYROT(MMI+1)- | |
234 | + CYROT(MMI)*CZROT(MMI+1))/ (CZROT(MM | |
235 | + I)-CZROT(MMI+1)) | |
236 | PZINT(JFK)=(YROTST-BBBZ)/AAAZ | |
237 | ENDIF | |
238 | ENDIF | |
239 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1))THEN | |
240 | IF(MIN(CYROT(MMI),CYROT(MMI+1)).LT. | |
241 | + YROTST.AND.MAX(CYROT(MMI),CYROT(MMI+1) | |
242 | + ) .GT.YROTST)THEN | |
243 | AAA=(CYROT(MMI)-CYROT(MMI+1))/ | |
244 | + (CXROT(MMI)-CXROT(MMI+1)) | |
245 | BBB=(CXROT(MMI)*CYROT(MMI+1)- | |
246 | + CYROT(MMI)*CXROT(MMI+1))/ (CXROT(MM | |
247 | + I)-CXROT(MMI+1)) | |
248 | JFK=JFK+1 | |
249 | PXINT(JFK)=(YROTST-BBB)/AAA | |
250 | IF(CZROT(MMI).EQ.CZROT(MMI+1))THEN | |
251 | PZINT(JFK)=CZROT(MMI) | |
252 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1)) | |
253 | + THEN | |
254 | AAAZ=(CYROT(MMI)-CYROT(MMI+1))/ | |
255 | + (CZROT(MMI)-CZROT(MMI+1)) | |
256 | BBBZ=(CZROT(MMI)*CYROT(MMI+1)- | |
257 | + CYROT(MMI)*CZROT(MMI+1))/ (CZROT(MM | |
258 | + I)-CZROT(MMI+1)) | |
259 | PZINT(JFK)=(YROTST-BBBZ)/AAAZ | |
260 | ENDIF | |
261 | ENDIF | |
262 | ENDIF | |
263 | 80 CONTINUE | |
264 | DO 100 JM=1,JFK-1 | |
265 | DO 90 KM=JM+1,JFK | |
266 | IF(PXINT(JM).LT.PXINT(KM))THEN | |
267 | TMPM=PXINT(JM) | |
268 | TMPZ=PZINT(JM) | |
269 | PXINT(JM)=PXINT(KM) | |
270 | PZINT(JM)=PZINT(KM) | |
271 | PXINT(KM)=TMPM | |
272 | PZINT(KM)=TMPZ | |
273 | ENDIF | |
274 | 90 CONTINUE | |
275 | 100 CONTINUE | |
276 | RJFK=JFK*.5 | |
277 | IRJFK=RJFK | |
278 | * IF((RJFK-IRJFK).GT..1)PRINT *,'Odd !' | |
279 | DO 110 MR=1,JFK | |
280 | IF(ISWIT(10).EQ.100)THEN | |
281 | XPINT(MR)=ZROT(1,1)*PXINT(MR)+ ZROT(1, | |
282 | + 2)*YROTST+ZROT(1,3)*CZROT(1) | |
283 | YPINT(MR)=ZROT(2,1)*PXINT(MR)+ ZROT(2, | |
284 | + 2)*YROTST+ZROT(2,3)*CZROT(1) | |
285 | ZPINT(MR)=ZROT(3,1)*PXINT(MR)+ ZROT(3, | |
286 | + 2)*YROTST+ZROT(3,3)*CZROT(1) | |
287 | ELSE | |
288 | XPINT(MR)=ZROT(1,4)+ZROT(1,1)* | |
289 | + PXINT(MR)+ ZROT(1,2)*YROTST+ZROT(1,3)* | |
290 | + PZINT(MR) | |
291 | YPINT(MR)=ZROT(2,4)+ZROT(2,1)* | |
292 | + PXINT(MR)+ ZROT(2,2)*YROTST+ZROT(2,3)* | |
293 | + PZINT(MR) | |
294 | ZPINT(MR)=ZROT(3,4)+ZROT(3,1)* | |
295 | + PXINT(MR)+ ZROT(3,2)*YROTST+ZROT(3,3)* | |
296 | + PZINT(MR) | |
297 | ENDIF | |
298 | 110 CONTINUE | |
299 | IF(LINFIL.GT.1)THEN | |
300 | LINCOL=IBITS(LINATT,16,8) | |
301 | CALL GDSHAD(LINCOL,APROSC) | |
302 | ENDIF | |
303 | DO 160 MZ=1,JFK,2 | |
304 | P1(1)=XPINT(MZ) | |
305 | P1(2)=YPINT(MZ) | |
306 | P1(3)=ZPINT(MZ) | |
307 | P2(1)=XPINT(MZ+1) | |
308 | P2(2)=YPINT(MZ+1) | |
309 | P2(3)=ZPINT(MZ+1) | |
310 | CALL CGVEDG(NT,P1,P2,IVIS) | |
311 | IF (IVIS .LT. 0) GOTO 150 | |
312 | IF (NFACE .EQ. 0) GOTO 140 | |
313 | CALL CGVHED( Q(JCG+JXYZ1),IQ(JCG+JFA), | |
314 | + IQ(JCG+JPFA), Q(JCG+ JDFA),IQ(JCG+JTRE), | |
315 | + IQ(JCG+JSTA), Q(JCG+JALE),Q(JCG+JARI)) | |
316 | * D R A W E D G E | |
317 | IF (NPART) 150,140,120 | |
318 | 120 DO 130 I=1,NPART+1 | |
319 | IF (I .EQ. 1) T1 = 0. | |
320 | IF (I .NE. 1) T1 = TEND(I-1) | |
321 | IF (I .NE. NPART+1) T2 = TSTRT(I) | |
322 | IF (I .EQ. NPART+1) T2 = 1. | |
323 | IF (T2-T1 .LT. TDEL) GOTO 130 | |
324 | AX(1) = XA + T1*XDELT | |
325 | AY(1) = YA + T1*YDELT | |
326 | AX(2) = XA + T2*XDELT | |
327 | AY(2) = YA + T2*YDELT | |
328 | IF(LINFIL.GT.1.AND.IDVIEW.NE.0)THEN | |
329 | LLLINA=LINATT | |
330 | CALL MVBITS(LINCOL,0,8,LINATT,16) | |
331 | CALL GDRAWV(AX,AY,2) | |
332 | LINATT=LLLINA | |
333 | ELSE | |
334 | CALL GDRAWV(AX,AY,2) | |
335 | ENDIF | |
336 | 130 CONTINUE | |
337 | GOTO 150 | |
338 | * L I N E I S F U L L Y V I S I B L E | |
339 | 140 CONTINUE | |
340 | AX(1) = AA(1) | |
341 | AY(1) = AA(2) | |
342 | AX(2) = BB(1) | |
343 | AY(2) = BB(2) | |
344 | IF(LINFIL.GT.1.AND.IDVIEW.NE.0)THEN | |
345 | LLLINA=LINATT | |
346 | CALL MVBITS(LINCOL,0,8,LINATT,16) | |
347 | CALL GDRAWV(AX,AY,2) | |
348 | LINATT=LLLINA | |
349 | ELSE | |
350 | CALL GDRAWV(AX,AY,2) | |
351 | ENDIF | |
352 | 150 CONTINUE | |
353 | 160 CONTINUE | |
354 | 170 CONTINUE | |
355 | ENDIF | |
356 | * Resetting counters for next face | |
357 | IJKLMN=0 | |
358 | LPARZ=0 | |
359 | LFULL=0 | |
360 | IN=0 | |
361 | KKK=0 | |
362 | LMN=0 | |
363 | NSI=0 | |
364 | IGEN=0 | |
365 | GOTO 190 | |
366 | ENDIF | |
367 | 180 CONTINUE | |
368 | ENDIF | |
369 | ENDIF | |
370 | 190 CONTINUE | |
371 | J = LCGHEA + (NE-1)*LCGEDG | |
372 | * IEA = Q(JCG+IWOFFS+J+KCGAE) | |
373 | P1(1) = Q(JCG+IWOFFS+J+KCGX1) | |
374 | P1(2) = Q(JCG+IWOFFS+J+KCGY1) | |
375 | P1(3) = Q(JCG+IWOFFS+J+KCGZ1) | |
376 | P2(1) = Q(JCG+IWOFFS+J+KCGX2) | |
377 | P2(2) = Q(JCG+IWOFFS+J+KCGY2) | |
378 | P2(3) = Q(JCG+IWOFFS+J+KCGZ2) | |
379 | IF(LINFIL.NE.0)THEN | |
380 | LMN=LMN+1 | |
381 | * IF(LMN.GE.500)THEN | |
382 | * PRINT *,LMN,'=LMN' | |
383 | * ENDIF | |
384 | CX(LMN)=P1(1) | |
385 | CY(LMN)=P1(2) | |
386 | CZ(LMN)=P1(3) | |
387 | LMN=LMN+1 | |
388 | * IF(LMN.GE.500)THEN | |
389 | * PRINT *,LMN,'=LMN' | |
390 | * ENDIF | |
391 | CX(LMN)=P2(1) | |
392 | CY(LMN)=P2(2) | |
393 | CZ(LMN)=P2(3) | |
394 | ENDIF | |
395 | CALL CGVEDG(NT,P1,P2,IVIS) | |
396 | IF(LINFIL.NE.0)THEN | |
397 | IJKLMN=IJKLMN+1 | |
398 | * IF(IJKLMN.GE.500)THEN | |
399 | * PRINT *,IJKLMN,'=IJKLMN' | |
400 | * ENDIF | |
401 | VVX(IJKLMN)=AA(1) | |
402 | VVY(IJKLMN)=AA(2) | |
403 | IJKLMN=IJKLMN+1 | |
404 | * IF(IJKLMN.GE.500)THEN | |
405 | * PRINT *,IJKLMN,'=IJKLMN' | |
406 | * ENDIF | |
407 | VVX(IJKLMN)=BB(1) | |
408 | VVY(IJKLMN)=BB(2) | |
409 | ENDIF | |
410 | IF (IVIS .LT. 0) GOTO 230 | |
411 | IF (NFACE .EQ. 0) GOTO 220 | |
412 | CALL CGVHED( Q(JCG+JXYZ1),IQ(JCG+JFA),IQ(JCG+JPFA), Q(JCG+ | |
413 | + JDFA),IQ(JCG+JTRE),IQ(JCG+JSTA), Q(JCG+JALE),Q(JCG+JARI)) | |
414 | * D R A W E D G E | |
415 | IF (NPART) 230,220,200 | |
416 | 200 DO 210 I=1,NPART+1 | |
417 | IF (I .EQ. 1) T1 = 0. | |
418 | IF (I .NE. 1) T1 = TEND(I-1) | |
419 | IF (I .NE. NPART+1) T2 = TSTRT(I) | |
420 | IF (I .EQ. NPART+1) T2 = 1. | |
421 | IF (T2-T1 .LT. TDEL) GOTO 210 | |
422 | AX(1) = XA + T1*XDELT | |
423 | AY(1) = YA + T1*YDELT | |
424 | AX(2) = XA + T2*XDELT | |
425 | AY(2) = YA + T2*YDELT | |
426 | IF(LINFIL.NE.0)THEN | |
427 | LTY=IBITS(LINATT,10,3) | |
428 | CALL MVBITS(6,0,3,LINATT,10) | |
429 | *** IOLEP=LEP | |
430 | *** LEP=11 | |
431 | CALL GDRAWV(AX,AY,2) | |
432 | *** LEP=IOLEP | |
433 | CALL MVBITS(LTY,0,3,LINATT,10) | |
434 | ELSE | |
435 | CALL GDRAWV(AX,AY,2) | |
436 | ENDIF | |
437 | 210 CONTINUE | |
438 | LPARZ=LPARZ+1 | |
439 | GOTO 230 | |
440 | * L I N E I S F U L L Y V I S I B L E | |
441 | 220 CONTINUE | |
442 | AX(1) = AA(1) | |
443 | AY(1) = AA(2) | |
444 | AX(2) = BB(1) | |
445 | AY(2) = BB(2) | |
446 | IF(LINFIL.NE.0)THEN | |
447 | LTY=IBITS(LINATT,10,3) | |
448 | CALL MVBITS(6,0,3,LINATT,10) | |
449 | *** IOLEP=LEP | |
450 | *** LEP=11 | |
451 | CALL GDRAWV(AX,AY,2) | |
452 | *** LEP=IOLEP | |
453 | CALL MVBITS(LTY,0,3,LINATT,10) | |
454 | ELSE | |
455 | CALL GDRAWV(AX,AY,2) | |
456 | ENDIF | |
457 | LFULL=LFULL+1 | |
458 | 230 CONTINUE | |
459 | *SG | |
460 | IF(LINFIL.NE.0)THEN | |
461 | *** IF((LFULL+LPARZ).EQ.0)GOTO 555 | |
462 | CALL CGFAC2(CX,CY,CZ,LMN) | |
463 | ISCFAC(1)=LMN*.5 | |
464 | DO 240 I=2,LMN+1 | |
465 | ISCFAC(I)=I-1 | |
466 | SCXYZ(1,I-1)=CX(I-1) | |
467 | SCXYZ(2,I-1)=CY(I-1) | |
468 | SCXYZ(3,I-1)=CZ(I-1) | |
469 | 240 CONTINUE | |
470 | CALL CGHPLA(ISCFAC,SCXYZ,COSDIR) | |
471 | XCOSX=(SIN(GTHETA*DEGRAD))*(COS(GPHI*DEGRAD)) | |
472 | YCOSY=(SIN(GTHETA*DEGRAD))*(SIN(GPHI*DEGRAD)) | |
473 | ZCOSZ=COS(GTHETA*DEGRAD) | |
474 | PROSCA=(COSDIR(1)*XCOSX)+(COSDIR(2)*YCOSY)+ (COSDIR(3)*ZCOSZ) | |
475 | PROSCB=(2.*(PROSCA**2))-1. | |
476 | APROSC=PROSCB | |
477 | * IF(APROSC.GT.1)PRINT *,'GT1' | |
478 | IF(LFULL.EQ.IJKLMN/2.AND. | |
479 | + (LINFIL.EQ.2.OR.LINFIL.EQ.3))THEN | |
480 | CALL CGFACO(VVX,VVY,IJKLMN,LFULL,APROSC) | |
481 | ELSE | |
482 | IF(ISWIT(10).EQ.100)THEN | |
483 | PNX=COSDIR(1) | |
484 | PNY=COSDIR(2) | |
485 | PNZ=COSDIR(3) | |
486 | APNZ=ABS(1.-PNZ) | |
487 | IF(APNZ.LT..0001)THEN | |
488 | AROT(1,1)=1. | |
489 | AROT(1,2)=0. | |
490 | AROT(1,3)=0. | |
491 | AROT(2,1)=0. | |
492 | AROT(2,2)=1. | |
493 | ELSE | |
494 | AROT(1,1)=PNX*PNZ/SQRT(PNX**2+PNY**2) | |
495 | AROT(1,2)=PNY*PNZ/SQRT(PNX**2+PNY**2) | |
496 | AROT(1,3)=-SQRT(PNX**2+PNY**2) | |
497 | AROT(2,1)=-PNY/SQRT(PNX**2+PNY**2) | |
498 | AROT(2,2)=PNX/SQRT(PNX**2+PNY**2) | |
499 | ENDIF | |
500 | AROT(2,3)=0. | |
501 | AROT(3,1)=PNX | |
502 | AROT(3,2)=PNY | |
503 | AROT(3,3)=PNZ | |
504 | ELSE | |
505 | DO 260 IHH=1,3 | |
506 | DO 250 JHH=1,4 | |
507 | AROT(IHH,JHH)=TSCRN(JHH,IHH,NT) | |
508 | 250 CONTINUE | |
509 | 260 CONTINUE | |
510 | AROT(4,1)=0. | |
511 | AROT(4,2)=0. | |
512 | AROT(4,3)=0. | |
513 | AROT(4,4)=1. | |
514 | ENDIF | |
515 | IF(ISWIT(10).EQ.100)THEN | |
516 | ZROT(1,1)=AROT(1,1) | |
517 | ZROT(2,1)=AROT(1,2) | |
518 | ZROT(3,1)=AROT(1,3) | |
519 | ZROT(1,2)=AROT(2,1) | |
520 | ZROT(2,2)=AROT(2,2) | |
521 | ZROT(3,2)=AROT(2,3) | |
522 | ZROT(1,3)=AROT(3,1) | |
523 | ZROT(2,3)=AROT(3,2) | |
524 | ZROT(3,3)=AROT(3,3) | |
525 | ELSE | |
526 | DO 280 IHH=1,4 | |
527 | DO 270 JHH=1,4 | |
528 | ZROT(IHH,JHH)=AROT(IHH,JHH) | |
529 | 270 CONTINUE | |
530 | 280 CONTINUE | |
531 | CALL RINV(4,ZROT,4,RRR,IFAIL) | |
532 | ENDIF | |
533 | YROTMI=100000. | |
534 | YROTMA=-100000. | |
535 | DO 290 M=1,LMN | |
536 | IF(ISWIT(10).EQ.100)THEN | |
537 | CXROT(M)=AROT(1,1)*CX(M)+ AROT(1,2)*CY(M)+AROT(1,3)* | |
538 | + CZ(M) | |
539 | CYROT(M)=AROT(2,1)*CX(M)+ AROT(2,2)*CY(M)+AROT(2,3)* | |
540 | + CZ(M) | |
541 | CZROT(M)=AROT(3,1)*CX(M)+ AROT(3,2)*CY(M)+AROT(3,3)* | |
542 | + CZ(M) | |
543 | ELSE | |
544 | CXROT(M)=AROT(1,4)+AROT(1,1)*CX(M)+ AROT(1,2)*CY(M)+ | |
545 | + AROT(1,3)*CZ(M) | |
546 | CYROT(M)=AROT(2,4)+AROT(2,1)*CX(M)+ AROT(2,2)*CY(M)+ | |
547 | + AROT(2,3)*CZ(M) | |
548 | CZROT(M)=AROT(3,4)+AROT(3,1)*CX(M)+ AROT(3,2)*CY(M)+ | |
549 | + AROT(3,3)*CZ(M) | |
550 | ENDIF | |
551 | IF(CYROT(M).LT.YROTMI)YROTMI=CYROT(M) | |
552 | IF(CYROT(M).GT.YROTMA)YROTMA=CYROT(M) | |
553 | 290 CONTINUE | |
554 | IF(LINFIL.EQ.1)THEN | |
555 | RINULI=.01 | |
556 | ELSEIF(LINFIL.EQ.2)THEN | |
557 | RINULI=.1 | |
558 | ELSEIF(LINFIL.EQ.3)THEN | |
559 | RINULI=.05 | |
560 | ELSEIF(LINFIL.EQ.4)THEN | |
561 | RINULI=.05 | |
562 | ELSEIF(LINFIL.EQ.5)THEN | |
563 | RINULI=.02 | |
564 | ELSEIF(LINFIL.EQ.6)THEN | |
565 | RINULI=.01 | |
566 | ELSEIF(LINFIL.EQ.7)THEN | |
567 | RINULI=.005 | |
568 | ENDIF | |
569 | NYROTM=(YROTMA-YROTMI)/RINULI | |
570 | YROTST=YROTMI | |
571 | DO 390 MM=1,NYROTM-1 | |
572 | YROTST=YROTST+RINULI | |
573 | JFK=0 | |
574 | DO 300 MMI=1,LMN-1,2 | |
575 | IF(CXROT(MMI).EQ.CXROT(MMI+1))THEN | |
576 | IF(MIN(CYROT(MMI),CYROT(MMI+1)).LT. YROTST.AND.MAX | |
577 | + (CYROT(MMI),CYROT(MMI+1)) .GT.YROTST)THEN | |
578 | JFK=JFK+1 | |
579 | PXINT(JFK)=CXROT(MMI) | |
580 | IF(CZROT(MMI).EQ.CZROT(MMI+1))THEN | |
581 | PZINT(JFK)=CZROT(MMI) | |
582 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1))THEN | |
583 | AAAZ=(CYROT(MMI)-CYROT(MMI+1))/ (CZROT(MMI)- | |
584 | + CZROT(MMI+1)) | |
585 | BBBZ=(CZROT(MMI)*CYROT(MMI+1)- CYROT(MMI)* | |
586 | + CZROT(MMI+1))/ (CZROT(MMI)-CZROT(MMI+1)) | |
587 | PZINT(JFK)=(YROTST-BBBZ)/AAAZ | |
588 | ENDIF | |
589 | ENDIF | |
590 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1))THEN | |
591 | IF(MIN(CYROT(MMI),CYROT(MMI+1)).LT. YROTST.AND.MAX | |
592 | + (CYROT(MMI),CYROT(MMI+1)) .GT.YROTST)THEN | |
593 | AAA=(CYROT(MMI)-CYROT(MMI+1))/ (CXROT(MMI)- | |
594 | + CXROT(MMI+1)) | |
595 | BBB=(CXROT(MMI)*CYROT(MMI+1)- CYROT(MMI)* | |
596 | + CXROT(MMI+1))/ (CXROT(MMI)-CXROT(MMI+1)) | |
597 | JFK=JFK+1 | |
598 | PXINT(JFK)=(YROTST-BBB)/AAA | |
599 | IF(CZROT(MMI).EQ.CZROT(MMI+1))THEN | |
600 | PZINT(JFK)=CZROT(MMI) | |
601 | ELSEIF(CYROT(MMI).NE.CYROT(MMI+1))THEN | |
602 | AAAZ=(CYROT(MMI)-CYROT(MMI+1))/ (CZROT(MMI)- | |
603 | + CZROT(MMI+1)) | |
604 | BBBZ=(CZROT(MMI)*CYROT(MMI+1)- CYROT(MMI)* | |
605 | + CZROT(MMI+1))/ (CZROT(MMI)-CZROT(MMI+1)) | |
606 | PZINT(JFK)=(YROTST-BBBZ)/AAAZ | |
607 | ENDIF | |
608 | ENDIF | |
609 | ENDIF | |
610 | 300 CONTINUE | |
611 | DO 320 JM=1,JFK-1 | |
612 | DO 310 KM=JM+1,JFK | |
613 | IF(PXINT(JM).LT.PXINT(KM))THEN | |
614 | TMPM=PXINT(JM) | |
615 | TMPZ=PZINT(JM) | |
616 | PXINT(JM)=PXINT(KM) | |
617 | PZINT(JM)=PZINT(KM) | |
618 | PXINT(KM)=TMPM | |
619 | PZINT(KM)=TMPZ | |
620 | ENDIF | |
621 | 310 CONTINUE | |
622 | 320 CONTINUE | |
623 | RJFK=JFK*.5 | |
624 | IRJFK=RJFK | |
625 | * IF((RJFK-IRJFK).GT..1)PRINT *,'Odd !' | |
626 | DO 330 MR=1,JFK | |
627 | IF(ISWIT(10).EQ.100)THEN | |
628 | XPINT(MR)=ZROT(1,1)*PXINT(MR)+ ZROT(1,2)*YROTST+ | |
629 | + ZROT(1,3)*CZROT(1) | |
630 | YPINT(MR)=ZROT(2,1)*PXINT(MR)+ ZROT(2,2)*YROTST+ | |
631 | + ZROT(2,3)*CZROT(1) | |
632 | ZPINT(MR)=ZROT(3,1)*PXINT(MR)+ ZROT(3,2)*YROTST+ | |
633 | + ZROT(3,3)*CZROT(1) | |
634 | ELSE | |
635 | XPINT(MR)=ZROT(1,4)+ZROT(1,1)*PXINT(MR)+ ZROT(1,2) | |
636 | + *YROTST+ZROT(1,3)*PZINT(MR) | |
637 | YPINT(MR)=ZROT(2,4)+ZROT(2,1)*PXINT(MR)+ ZROT(2,2) | |
638 | + *YROTST+ZROT(2,3)*PZINT(MR) | |
639 | ZPINT(MR)=ZROT(3,4)+ZROT(3,1)*PXINT(MR)+ ZROT(3,2) | |
640 | + *YROTST+ZROT(3,3)*PZINT(MR) | |
641 | ENDIF | |
642 | 330 CONTINUE | |
643 | IF(LINFIL.GT.1)THEN | |
644 | LINCOL=IBITS(LINATT,16,8) | |
645 | CALL GDSHAD(LINCOL,APROSC) | |
646 | ENDIF | |
647 | DO 380 MZ=1,JFK,2 | |
648 | P1(1)=XPINT(MZ) | |
649 | P1(2)=YPINT(MZ) | |
650 | P1(3)=ZPINT(MZ) | |
651 | P2(1)=XPINT(MZ+1) | |
652 | P2(2)=YPINT(MZ+1) | |
653 | P2(3)=ZPINT(MZ+1) | |
654 | CALL CGVEDG(NT,P1,P2,IVIS) | |
655 | IF (IVIS .LT. 0) GOTO 370 | |
656 | IF (NFACE .EQ. 0) GOTO 360 | |
657 | CALL CGVHED( Q(JCG+JXYZ1),IQ(JCG+JFA),IQ(JCG+JPFA), | |
658 | + Q(JCG+ JDFA),IQ(JCG+JTRE),IQ(JCG+JSTA), Q(JCG+JALE), | |
659 | + Q(JCG+JARI)) | |
660 | * D R A W E D G E | |
661 | IF (NPART) 370 ,360 ,340 | |
662 | 340 DO 350 I=1,NPART+1 | |
663 | IF (I .EQ. 1) T1 = 0. | |
664 | IF (I .NE. 1) T1 = TEND(I-1) | |
665 | IF (I .NE. NPART+1) T2 = TSTRT(I) | |
666 | IF (I .EQ. NPART+1) T2 = 1. | |
667 | IF (T2-T1 .LT. TDEL) GOTO 350 | |
668 | AX(1) = XA + T1*XDELT | |
669 | AY(1) = YA + T1*YDELT | |
670 | AX(2) = XA + T2*XDELT | |
671 | AY(2) = YA + T2*YDELT | |
672 | IF(LINFIL.GT.1.AND.IDVIEW.NE.0)THEN | |
673 | LLLINA=LINATT | |
674 | CALL MVBITS(LINCOL,0,8,LINATT,16) | |
675 | CALL GDRAWV(AX,AY,2) | |
676 | LINATT=LLLINA | |
677 | ELSE | |
678 | CALL GDRAWV(AX,AY,2) | |
679 | ENDIF | |
680 | 350 CONTINUE | |
681 | GOTO 370 | |
682 | * L I N E I S F U L L Y V I S I B L E | |
683 | 360 CONTINUE | |
684 | AX(1) = AA(1) | |
685 | AY(1) = AA(2) | |
686 | AX(2) = BB(1) | |
687 | AY(2) = BB(2) | |
688 | IF(LINFIL.GT.1.AND.IDVIEW.NE.0)THEN | |
689 | LLLINA=LINATT | |
690 | CALL MVBITS(LINCOL,0,8,LINATT,16) | |
691 | CALL GDRAWV(AX,AY,2) | |
692 | LINATT=LLLINA | |
693 | ELSE | |
694 | CALL GDRAWV(AX,AY,2) | |
695 | ENDIF | |
696 | 370 CONTINUE | |
697 | 380 CONTINUE | |
698 | 390 CONTINUE | |
699 | ENDIF | |
700 | ENDIF | |
701 | *** IOLEP=LEP | |
702 | *** LEP=11 | |
703 | IF(LINFIL.NE.0)THEN | |
704 | LTY=IBITS(LINATT,10,3) | |
705 | CALL MVBITS(6,0,3,LINATT,10) | |
706 | CALL GDRAWV(TESTX,TESTY,0) | |
707 | CALL MVBITS(LTY,0,3,LINATT,10) | |
708 | *** LEP=IOLEP | |
709 | ENDIF | |
710 | *SG | |
711 | 400 RETURN | |
712 | * | |
713 | 10000 FORMAT(' First word of WIRE less or equal 0 ') | |
714 | 10100 FORMAT(' N. of words of Hidden Structure less or equal 18 ') | |
715 | * | |
716 | END | |
717 | #endif |