5 * Revision 1.1.1.1 1995/10/24 10:21:49 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 28/03/94 01.30.59 by S.Giani
14 C. ******************************************************************
16 C. * Drawing commands *
18 C. * Authors: R.Brun ********** *
19 C. * P.Zanarini ********** *
20 C. * S.Giani ********** *
22 C. ******************************************************************
24 #include "geant321/gcbank.inc"
25 #include "geant321/pawc.inc"
26 #include "geant321/gcunit.inc"
27 #include "geant321/gcdraw.inc"
28 #include "geant321/gcgobj.inc"
29 #include "geant321/gcmutr.inc"
30 #include "geant321/gcspee.inc"
31 #include "geant321/gccurs.inc"
32 #include "geant321/gchil2.inc"
33 #include "geant321/gcursb.inc"
34 #if defined(CERNLIB_USRJMP)
35 #include "geant321/gcjump.inc"
37 #include "geant321/gcvdma.inc"
38 #include "geant321/gcfdim.inc"
40 COMMON/QUEST/IQUEST(100)
42 DIMENSION NNAME(15),NNUMB(15),RVAL(2)
44 DIMENSION VX(4),VXX(4),VVX(4),XV(4),BX(4)
45 DIMENSION VY(4),VYY(4),VVY(4),YV(4),BY(4)
46 CHARACTER*4 NAME,CHNUMB,IDS,IVS,ICS,NNVV,NVNV,MOTH
47 CHARACTER*4 CHNRS,CHAX,YESNO,CENT
48 CHARACTER*4 NOPT,SAMP,KSAM,KLSA
53 CHARACTER*32 CHPATL,VNAME
56 C. ------------------------------------------------------------------
58 CALL KUPATL(CHPATL,NPAR)
60 IF (CHPATL.EQ.'BOX ') THEN
63 * It's now possible to clip different volumes by different SHAPES !
64 * Moreover, one can clip twice each volume by different SHAPES !
67 IF(NCVOLS.EQ.MULTRA)THEN
69 10000 FORMAT(' *** GXDRAW ***:',
70 + ' No more space to store MCVOL information.')
73 10100 FORMAT(' *** GXDRAW ***: Please reset MCVOL')
85 IF(XMIN.GE.XMAX.OR.YMIN.GE.YMAX.OR.ZMIN.GE.ZMAX)THEN
87 10200 FORMAT(' Wrong Box limits. Check values ')
100 IF(GXMIN(NCVOLS).GT.-99999.)IHOLE=1
101 * Resetting Mcvol mode
102 IF(GNNVV(NCVOLS).EQ.'.')THEN
115 ELSEIF (CHPATL.EQ.'TUBE')THEN
118 * It's now possible to clip different volumes by different SHAPES !
119 * Moreover, one can clip twice each volume by different SHAPES !
122 IF(NCVOLS.EQ.MULTRA)THEN
129 CALL KUGETC(NNVV,NCH)
145 IF(GXMIN(NCVOLS).GT.-99999.)IHOLE=1
146 *Resetting Mcvol mode
147 IF(GNNVV(NCVOLS).EQ.'.')THEN
161 ELSEIF (CHPATL.EQ.'CONE')THEN
164 * It's now possible to clip different volumes by different SHAPES !
165 * Moreover, one can clip twice each volume by different SHAPES !
168 IF(NCVOLS.EQ.MULTRA)THEN
175 CALL KUGETC(NNVV,NCH)
192 IF(GXMIN(NCVOLS).GT.-99999.)IHOLE=1
193 *Resetting Mcvol mode
194 IF(GNNVV(NCVOLS).EQ.'.')THEN
208 ELSEIF (CHPATL.EQ.'SPHE')THEN
211 * It's now possible to clip different volumes by different SHAPES !
212 * Moreover, one can clip twice each volume by different SHAPES !
215 IF(NCVOLS.EQ.MULTRA)THEN
222 CALL KUGETC(NNVV,NCH)
235 IF(GXMIN(NCVOLS).GT.-99999.)IHOLE=1
236 *Resetting Mcvol mode
237 IF(GNNVV(NCVOLS).EQ.'.')THEN
249 ELSEIF (CHPATL.EQ.'VALCUT') THEN
254 ELSEIF (CHPATL.EQ.'SPOT') THEN
259 CALL GLIGHT(XLPOS,YLPOS,ZLPOS,INTEN)
261 ELSEIF (CHPATL.EQ.'VAR5D') THEN
270 ELSEIF (CHPATL.EQ.'RANG5D') THEN
278 ELSEIF (CHPATL.EQ.'DRAW') THEN
279 CALL KUGETC(NAME,NCH)
295 CALL GDRAYT(NAME,GTHETL,GPHIL,GPSIL,GU0L,GV0L,GSCUL,GSCVL)
297 CALL GDRAW(NAME,GTHETL,GPHIL,GPSIL,GU0L,GV0L,GSCUL,GSCVL)
300 ELSEIF (CHPATL.EQ.'DVOLUME') THEN
303 IF (N.LT.0.OR.N.GT.15) GO TO 999
305 CALL KUGETC(CHTEXT,NCH)
307 CALL KUGETL(NAMNUM,NCH)
308 CALL UCTOH(NAMNUM,NNAME(I),4,4)
309 CALL KUGETL(CHNUMB,NCH)
310 CALL KICTON(CHNUMB,NNUMB(I),RVAL)
311 IF (IQUEST(1).NE.0) GO TO 999
314 CALL KUGETC(CHNRS,NCH)
316 IF (CHNRS.EQ.'DRS') NRS=1
324 60 CALL GDRVOL(N,NNAME,NNUMB,NRS,GTHETA,GPHI,GPSI,GU0,GV0,GSCU,
327 ELSEIF (CHPATL.EQ.'DCUT') THEN
329 CALL KUGETC(NAME,NCH)
330 CALL KUGETC(CHAX,NCH)
331 IF (CHAX.EQ.'X'.OR.CHAX.EQ.'1') THEN
333 ELSEIF (CHAX.EQ.'Y'.OR.CHAX.EQ.'2')THEN
335 ELSEIF (CHAX.EQ.'Z'.OR.CHAX.EQ.'3')THEN
343 CALL GDRAWC(NAME,IAX,CCUT,GU0,GV0,GSCU,GSCV)
345 ELSEIF (CHPATL.EQ.'DXCUT') THEN
346 CALL KUGETC(NAME,NCH)
356 CALL GDRAWX(NAME,CUTTHE,CUTPHI,CCUT,GTHETA,GPHI,GU0,GV0,GSCU,
362 * It's now possible to shift each volume into a more visible place !
364 ELSEIF(CHPATL.EQ.'SHIFT') THEN
365 IF(NSHIFT.EQ.0)KSHIFT=1
367 IF(NSHIFT.EQ.MULTRA)THEN
369 10300 FORMAT(' *** GXDRAW ***:',
370 + ' No more space to store SHIFT information.')
374 CALL KUGETC(NVNV,NCH)
382 * Resetting Shift mode
383 IF(GNVNV(NSHIFT).EQ.'.')THEN
394 * To make the detector 'explode'
396 ELSEIF(CHPATL.EQ.'BOMB')THEN
402 ELSEIF (CHPATL.EQ.'DTREE') THEN
406 CALL KUGETC(NAME,NCH)
407 CALL UHTOC(IQ(JVOLUM+1),4,MOMO,4)
417 IF(IWTY.GT.10.OR.IWTY.LT.1)JVSIM=1
418 IF (NAME.EQ.' ')NAME=MOMO
419 IF (NAME.NE.MOMO) THEN
421 CALL GDTREE(MOMO,0,110)
423 IQ(JFINAM+J)=IQ(JNAM1+J)
424 IQ(JFISCA+J)=IQ(JSCA1+J)
425 IQ(JFIMOT+J)=IQ(JMOT1+J)
431 CALL GDTR8(NAME,MOTH,IONL)
438 CALL GDTREE(NAME,0,110)
440 IQ(JFINAM+J)=IQ(JNAM1+J)
441 IQ(JFISCA+J)=IQ(JSCA1+J)
442 IQ(JFIMOT+J)=IQ(JMOT1+J)
445 CALL GDTREE(NAME,LEVMAX,ISELT)
448 CALL GDPLST(JVSIM,NAME,LEVMAX,KXXX)
450 ELSEIF (CHPATL.EQ.'DSPEC') THEN
451 CALL KUGETC(NAME,NCH)
454 ELSEIF (CHPATL.EQ.'D3DSPEC') THEN
455 CALL KUGETC(NAME,NCH)
462 CALL GSPE3D(NAME,TETA3,PHI3,PSI3,U03,V03,ZM3)
464 ELSEIF (CHPATL.EQ.'DFSPC') THEN
465 CALL KUGETC(NAME,NCH)
467 CALL KUGETC(YESNO,NCH)
468 IF (YESNO.EQ.'Y') ISORT=1
470 CALL KUGETC(MODE,NCH)
471 IF (MODE.EQ.'B') INTER=0
472 CALL GDFSPC(NAME,ISORT,INTER)
474 ELSEIF (CHPATL.EQ.'DTEXT') THEN
477 CALL KUGETS(CHTEXT,NCH)
481 CALL KUGETC(CENT,NCH)
482 IF (CENT.EQ.'LEFT'.OR.CENT.EQ.'-1') THEN
484 ELSEIF (CENT.EQ.'RIGHT'.OR.CENT.EQ.'1') THEN
489 CALL IGSET('TXFP',-60.)
491 IF(IWTY.GT.10.OR.IWTY.LT.1)CALL IGSET('TXFP',-61.)
492 CALL GDRAWT(X0,Y0,CHTEXT,SIZE,ANGLE,LWID,IOPT)
493 CALL IGSET('TXFP',2.)
495 ELSEIF (CHPATL.EQ.'DVECTOR') THEN
496 CALL KUGETV(VNAME,LPARX,LLL)
497 CALL KUGETV(VNAME,LPARY,LLL)
499 CALL GDRAWV(QQ(LPARX),QQ(LPARY),NP)
501 ELSEIF (CHPATL.EQ.'DSCALE') THEN
506 ELSEIF (CHPATL.EQ.'DAXIS') THEN
511 CALL GDAXIS(XX0,YY0,ZZ0,DDX)
513 ELSEIF (CHPATL.EQ.'DMAN') THEN
516 CALL KUGETC(MODE,NCH)
517 IF (MODE.EQ.'WM1') THEN
519 ELSE IF (MODE.EQ.'WM3') THEN
521 ELSE IF (MODE.EQ.'WM2') THEN
523 ELSE IF (MODE.EQ.'MAN') THEN
527 ELSEIF (CHPATL.EQ.'DHEAD') THEN
531 CALL KUGETS(CHTEXT,NCH)
533 CALL GDHEAD(ISELH,CHTEXT,CHRSIZ)
535 ELSEIF (CHPATL.EQ.'MEASURE') THEN
536 CALL IGLOC2(1,NT,U0,V0,U1,V1,ISTAT,'L')
537 IF (ISTAT.EQ.0) GO TO 999
538 UDIST=(U1-U0)/(GSCU*GZUA)
539 VDIST=(V1-V0)/(GSCV*GZVA)
540 DIST=SQRT(UDIST*UDIST+VDIST*VDIST)
541 WRITE (CHMAIL,'('' MEASURE : '',F9.4,'' CM'')') DIST
544 ELSEIF (CHPATL.EQ.'MOVE') THEN
546 IF(IWTY.LE.10.AND.IWTY.GE.1)THEN
549 CALL KUGETC(NAME,NCH)
550 CALL KUGETC(NOPT,NCH)
591 ***** CALL IGSET('DRMD',2.)
604 CALL IGSET('TXCI',AITXCO)
605 CALL IGSET('TXFP',-60.)
606 CALL GDRAWT(2.,.2,'THETA',.7,0.,4,0)
607 CALL GDRAWT(6.,.2,'PHI',.7,0.,4,0)
608 CALL GDRAWT(10.,.2,'TRASL',.7,0.,4,0)
609 CALL GDRAWT(14.,.2,'ZOOM',.7,0.,4,0)
610 CALL GDRAWT(18.,.2,'OFF',.7,0.,4,0)
611 CALL IGSET('TXFP',2.)
619 CALL IGBOX(0.,20.,20.,1.)
620 CALL GDRAW(NAME,GTHETA,GPHI,GPSI,GU0,GV0,GSCU,GSCV)
621 IOPTS = INDEX(NOPT,'S')+INDEX(NOPT,'s')
622 IOPTT = INDEX(NOPT,'T')+INDEX(NOPT,'t')
623 IOPTH = INDEX(NOPT,'H')+INDEX(NOPT,'h')
624 IF(IOPTT.NE.0) CALL GDXYZ(0)
625 IF(IOPTH.NE.0) CALL GDHITS('*','*',0,0,.2)
632 CALL IGQWK(1,'MXDS',RVAL)
637 IF(ISTAT.EQ.2.AND.IOPTT.NE.0) CALL GKXYZ(-.25)
638 IF(ISTAT.EQ.2.AND.IOPTH.NE.0) CALL GKHITS('*','*',-.1)
639 CALL IRQLC(1,MO,ISTAT,NT,X2,Y2)
641 ***** CALL IGSET('DRMD',2.)
643 IF(X2.GT.0..AND.X2.LT.4..AND.Y2.LT.1.)NBAR=1
644 IF(X2.GT.4..AND.X2.LT.8..AND.Y2.LT.1.)NBAR=2
645 IF(X2.GT.8..AND.X2.LT.12..AND.Y2.LT.1.)NBAR=3
646 IF(X2.GT.12..AND.X2.LT.16..AND.Y2.LT.1.)NBAR=4
647 IF(X2.GT.16..AND.X2.LT.20..AND.Y2.LT.1.)THEN
648 CALL IGSET('DRMD',1.)
657 IF(ISTAT.EQ.0.OR.ISTAT.EQ.2)MO=2
658 * IF(YY22.LT..2)GOTO 177
660 ELSEIF(NBAR.EQ.2) THEN
664 IF(ISTAT.EQ.0.OR.ISTAT.EQ.2)MO=2
665 * IF(YY22.LT..2)GOTO 177
667 ELSEIF(NBAR.EQ.3) THEN
674 IF(ISTAT.EQ.0.OR.ISTAT.EQ.2)MO=2
675 * IF(YY22.LT..2.AND.XX22.LT..2)GOTO 177
678 ELSEIF(NBAR.EQ.4) THEN
682 IF(ISTAT.EQ.0.OR.ISTAT.EQ.2)MO=2
683 * IF(YY22.LT..2)GOTO 177
686 ***** CALL IGSET('DRMD',1.)
687 CALL IGPXMP(IPX,IXXX,IYYY1,'O')
689 IF(LCLC.NE.0)CALL IGBOX(0.,20.,20.,1.)
690 CALL GDRAW(NAME,GTHETA,GPHI,GPSI,GU0,GV0,GSCU,GSCV)
691 IF(IOPTT.NE.0) CALL GDXYZ(0)
692 IF(IOPTH.NE.0) CALL GDHITS('*','*',0,0,.2)
693 CALL IGPXMP(IPX,0,0,'CDR')
694 ** CALL GDRAW(NAME,SGT1,SGT2,SGT3,SGT4,SGT5,SGT6,SGT7)
696 * CALL GDHITS('*','*',0,-1,.4)
700 ELSEIF (CHPATL.EQ.'MOVE3D') THEN
701 CALL KUGETC(NAME,NCH)
710 CALL KUGETC(NOPT,NCH)
714 CALL GDRAW(NAME,GTHETA,GPHI,GPSI,GU0,GV0,GSCU,GSCV)
715 IOPTT = INDEX(NOPT,'T')+INDEX(NOPT,'t')
716 IOPTH = INDEX(NOPT,'H')+INDEX(NOPT,'h')
717 IF(IOPTT.NE.0) CALL GDXYZ(0)
718 IF(IOPTH.NE.0) CALL GDHITS('*','*',0,0,.2)
720 ELSEIF (CHPATL.EQ.'PERSP') THEN
721 CALL KUGETC(NAME,NCH)
723 CALL KUGETC(SAMP,NCH)
724 IF(DISTT.LT.100.)DISTT=100.
726 IF(SAMP(1:2).EQ.'ON')THEN
728 IF(IWTY.LE.10.AND.IWTY.GE.1)THEN
730 CALL IGQWK(1,'MXDS',RVAL)
734 CALL IRQLC(1,2,ISTAT,NT,X2,Y2)
735 IF(ISTAT.EQ.0)GOTO 130
739 CALL IGPXMP(IPX,IXXX,IYYY,'O')
740 CALL GDRAW(NAME,GTHETA,GPHI,GPSI,GU0,GV0,GSCU,GSCV)
741 CALL IGPXMP(IPX,0,0,'CDR')
747 ELSEIF (CHPATL.EQ.'LENS') THEN
750 IF(IWTY.LE.10.AND.IWTY.GE.1)THEN
752 IF(KNUM.EQ.1000)KNUM=MYISEL
753 CALL KUGETC(KSAM,NCH)
756 CALL GDLENS(KLLM,KLSA)
759 ELSEIF (CHPATL.EQ.'ZOOM') THEN
768 IF(ZZFU.EQ.0.)ZZFV=0.
769 IF(ZFU.EQ.0.OR.ZFV.EQ.0)GO TO 140
781 IF(IMODE.GT.1000)THEN
783 IF(IWTY.LE.10.AND.IWTY.GE.1)THEN
785 CALL GDXZOO(ISEL1,ZFU,ZFV,UZ0,VZ0,U0,V0)
788 ELSEIF(IMODE.EQ.1000)THEN
790 IF(IWTY.LE.10.AND.IWTY.GE.1)THEN
792 CALL GDXZOO(ISEL1,ZFU,ZFV,UZ0,VZ0,U0,V0)
799 CALL GDCURS(UZ0,VZ0,JCHAR)
800 IF (JCHAR.EQ.0) GO TO 999
802 ELSE IF(IMODE.EQ.1)THEN
804 CALL IGLOC2(1,NT,UZ1,VZ1,UZ2,VZ2,ISTAT,'R')
805 IF (ISTAT.EQ.0) GO TO 999
806 IF (UZ2-UZ1.EQ.0.) UZ2=UZ1+PLTRNX/200.
807 IF (VZ2-VZ1.EQ.0.) VZ2=VZ1+PLTRNY/200.
808 ZFU=PLTRNX/ABS(UZ2-UZ1)
809 ZFV=PLTRNY/ABS(VZ2-VZ1)
813 ELSE IF(IMODE.EQ.2)THEN
815 CALL GDCURS(UZ0,VZ0,JCHAR)
816 IF (JCHAR.EQ.0) GO TO 999
817 CALL GDCURS(U0,V0,JCHAR)
818 IF (JCHAR.EQ.0) GO TO 999
822 140 CALL GDZOOM(ZFU,ZFV,UZ0,VZ0,U0,V0)
825 ELSEIF (CHPATL.EQ.'DXYZ') THEN
829 ELSEIF (CHPATL.EQ.'KXYZ') THEN
833 ELSEIF (CHPATL.EQ.'DPART') THEN
838 CALL GDPART(IT,ISELP,SIZE)
840 ELSEIF (CHPATL.EQ.'DHITS') THEN
847 CALL GDHITS(IVS,ICS,IUTR,ISYMB,SSYMB)
849 ELSEIF (CHPATL.EQ.'KHITS') THEN
853 CALL GKHITS (IVS,ICS,EPSHIT)
855 ELSEIF (CHPATL.EQ.'DCHIT') THEN
870 CALL GDCHIT(IVS,ICS,IUTR,ISYMB,SIZMAX,KDHIT, HITMIN,HITMAX)
872 ELSEIF (CHPATL.EQ.'DUVIEW') THEN
877 #if !defined(CERNLIB_USRJMP)
878 CALL GUVIEW(IDS,IVS,ICS,IVIEW)
880 #if defined(CERNLIB_USRJMP)
881 CALL JUMPT4(JUVIEW,IDS,IVS,ICS,IVIEW)