5 * Revision 1.1.1.1 1995/10/24 10:20:20 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.26 by S.Giani
12 SUBROUTINE GDCGHI(IMOD,NOBJ,NWWS,LSTEP,ISG,NTVOL,ISHAPE)
14 C. ******************************************************************
16 C. * This routine allows : *
18 C. * - Slicing by a plane if some cut has been set, *
19 C. * - Clipping by any kind of volume if one or more *
20 C. * clipping volumes have been defined *
21 C. * - to Insert the CG Objects into the Hidden Structure *
22 C. * - to convert the CG Objects in Wire Objects *
24 C. * Input Parameters: *
26 C. * IMOD: Number for indicating the task to be perfor- *
27 C. * med. See GDCGOB subroutine *
28 C. * NOBJ: Counter for CG objects *
29 C. * NWWS: Size of Wire Structure *
30 C. * LSTEP: N. of bodies forming each CG volume *
31 C. * ISG : i-th body forming a Pcon or Pgon *
32 C. * NTVOL: N. of bodies forming each Pcon or Pgon *
33 C. * ISHAPE:Shape of CG object *
36 C. * ==>Called by : GDCGOB *
38 C. * Authors : J.Salt, S.Giani *
39 C. ******************************************************************
42 #include "geant321/gcbank.inc"
43 #include "geant321/gcgobj.inc"
44 #include "geant321/gcunit.inc"
45 #include "geant321/gchiln.inc"
46 #include "geant321/gcspee.inc"
47 #include "geant321/gcmutr.inc"
48 SAVE NFIRST, NSHA, IOLDNS
53 * Slicing or clipping Actions
60 IF(ISHAPE.EQ.11.OR.ISHAPE.EQ.12)ICGP=ICGP+1
64 ELSE IF(IMOD.EQ.4)THEN
66 CALL CGSLIC(Q(ICPOIN),ABCD,LENGHT,Q(IZPOIN))
68 ELSE IF(IMOD.EQ.5)THEN
74 WRITE(CHMAIL,10000)IMOD
78 ** IF(IVFUN.EQ.0)GOTO 999
81 * Inserting CG object in the Hidden Structure
87 IF(ISHAPE.EQ.29.OR.ISHAPE.EQ.99)ICPOIN=ISPOIN
88 IF(IMOD.EQ.4.OR.IMOD.EQ.5)ICPOIN=IZPOIN
90 * Evaluate size of Hide Structure after all volumes
91 * If it's too big, go back to GDRAW
92 * If it's ok, build the Wire Structure
94 CALL CGHINS(Q(ICPOIN),Q(IHPOIN),ISHAPE)
102 IF(ISHAPE.EQ.11.OR.ISHAPE.EQ.12)THEN
103 IF(ISG.EQ.NTVOL)NNN=NNN+LSTEP-1
105 IF(NNN.EQ.NCLAS2)THEN
112 * Building Up the Wiring structure.
116 IF(IST.GE.IQ(JCOUNT-1))THEN
122 IQ(IMCOUN+IST)=IQ(IMCOUN+IST-1)+NSHA
124 IQ(JCOUNT+IST)=IQ(JCOUNT+IST-1)+NTCUR
125 IF(IFCG.EQ.4.AND.ILCG.EQ.4)THEN
126 IQ(JCOUNT+4)=IQ(JCOUNT+4)-8000+1
128 IQ(IMCOUN+4)=IQ(IMCOUN+4)-8000+1
131 IF(IFCG.EQ.3.AND.ILCG.EQ.3)THEN
132 IQ(JCOUNT+3)=IQ(JCOUNT+3)-4000+1
134 IQ(IMCOUN+3)=IQ(IMCOUN+3)-4000+1
138 MMPOIN=IMPOIN+IQ(IMCOUN+IST)
140 IWPOIN=JCG+IQ(JCOUNT+IST)
142 IF(ISHAPE.EQ.29.OR.ISHAPE.EQ.99) ICPOIN=JCGOBJ+8000
143 IF(IMOD.EQ.4.OR.IMOD.EQ.5) ICPOIN=JCGOBJ+20000
145 * Evaluate size of Wire structure after all volumes
146 * If it's too big, go back to GDRAW
150 CALL CGWIRE(Q(ICPOIN),NTRCG,-1,NWWS,Q(IWPOIN),ISHAPE,IQ(MMPOIN))
152 CALL CGWIRE(Q(ICPOIN),NTRCG,-1,NWWS,Q(IWPOIN),ISHAPE,0)
161 IF(ISHAPE.EQ.11.OR.ISHAPE.EQ.12)THEN
162 IF(ISG.EQ.NTVOL)NNN=NNN+LSTEP-1
164 IF(NNN.EQ.NCLAS2)THEN
172 IF(LLEP.NE.1)NSHACU=IQ(MMPOIN)
175 IF(LLEP.NE.1)IOLDNS=NSHACU
178 IF(LLEP.NE.1)NSHA=IQ(MMPOIN)
180 IF(LLEP.NE.1)NTNEX=NTNEX+NSHA
183 IF(LLEP.NE.1)NSHA=IOLDNS
184 IF(IFCG.EQ.4.AND.ILCG.EQ.4)THEN
185 IQ(JCOUNT+4)=IQ(JCOUNT+4)-8000+1
187 IQ(IMCOUN+4)=IQ(IMCOUN+4)-8000+1
190 IF(IFCG.EQ.3.AND.ILCG.EQ.3)THEN
191 IQ(JCOUNT+3)=IQ(JCOUNT+3)-4000+1
193 IQ(IMCOUN+3)=IQ(IMCOUN+3)-4000+1
200 10000 FORMAT(' IMOD = ',I5,' is not defined ')
201 10001 FORMAT(' *** GDCGHI *** : Please, increase size of',
202 + ' the Zebra store; the drawing',
203 + ' will not be completed.')
204 10002 FORMAT(' *** GDCGHI *** : The memory size is not enough;',
205 + ' the program is going on evaluating the number of',