5 * Revision 1.2 1996/09/30 13:37:32 ravndal
6 * Backward compatibility for view banks
8 * Revision 1.1.1.1 1995/10/24 10:20:24 cernlib
12 #include "geant321/pilot.h"
13 *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
15 SUBROUTINE GDRAWP(U,V,NP)
17 C. ******************************************************************
19 C. * Draw the polyline described by U and V vectors, *
22 C. * Depending on IDVIEW it draws on screen (IDVIEW=0) *
23 C. * or stores in the current view bank (IDVIEW>0). *
25 C. * In LINATT (common GCDRAW) there is *
26 C. * a bit mask for the line attributes : *
28 C. * Bit 1- 7 = Used by view bank (LENGU) *
29 C. * Bit 8-10 = Line width *
30 C. * Bit 11-13 = Line style *
31 C. * Bit 14-16 = Fill area *
32 C. * Bit 17-24 = Line color *
34 C. * ==>Called by : GDRAWV *
35 C. * Author : P.Zanarini ; S.Giani 1992 ******** *
37 C. ******************************************************************
39 #include "geant321/gcbank.inc"
40 #include "geant321/gcdraw.inc"
41 #include "geant321/gcunit.inc"
42 #include "geant321/gcflag.inc"
43 #include "geant321/gcspee.inc"
51 C. ------------------------------------------------------------------
55 IF (IDVIEW.EQ.0.OR.IDVIEW.EQ.-175) GO TO 40
57 C Store on view bank IDVIEW
62 10 IF (IGU.LE.MAXGU) GO TO 20
64 C Push graphic unit banks
66 IF(MORGU.EQ.0)MORGU=100
67 MORPUS=MAX(MORGU,MAXGU/4)
69 CALL MZPUSH(IXCONS,JV,0,MORPUS,'I')
70 IF(IEOTRI.NE.0)GO TO 50
73 CALL MZPUSH(IXCONS,JV,0,MORPUS,'I')
74 IF(IEOTRI.NE.0)GO TO 50
79 20 IF ((IGS+NP).LE.MAXGS) GO TO 30
81 C Push graphic segment banks
83 IF(MORGS.EQ.0)MORGS=100
84 MORPUS=MAX(MORGS,MAXGS/4,NP)
86 CALL MZPUSH(IXCONS,JV,0,MORPUS,'I')
87 IF(IEOTRI.NE.0)GO TO 50
90 CALL MZPUSH(IXCONS,JV,0,MORPUS,'I')
91 IF(IEOTRI.NE.0)GO TO 50
110 CALL UCOPY(U,Q(JV4+IGS+1),NP)
111 CALL UCOPY(V,Q(JV5+IGS+1),NP)
114 C Bit 8-24 = Line attribute
117 CALL MVBITS(LINATT,0,24,ISUM,0)
118 IFIL=IBITS(ISUM,13,3)
120 CALL MVBITS(NP,0,7,ISUM,0)
122 CALL MVBITS(NP,0,10,ISUM,0)
130 C Draw vectors on screen
134 C Extract the new line attributes
136 LINCOL=IBITS(LINATT,16,8)
138 LINFIL=IBITS(LINATT,13,3)
139 IF(IDVIEW.NE.-175.OR.LINFIL.EQ.0)THEN
140 LINWID=IBITS(LINATT,7,3)
141 IF(LINWID.GT.1)LINWID=LINWID*2
144 IF(LINFIL.EQ.1)LINWID=2
145 IF(LINWID.GT.1)LINWID=LINWID*2
146 IF(ZZFV.GT.1.)LINWID=LINWID*ZZFV
148 LINSTY=IBITS(LINATT,10,3)
149 IF(LINSTY.EQ.7)LINSTY=1
150 IF(LINFIL.LE.1.OR.IDVIEW.EQ.-175.OR.ISPFLA.EQ.1)
153 CALL IGSET('LWID',WLINW)
155 C If NP=1 draw a marker
165 IF(IDVIEW.EQ.-175)THEN
166 IF(LINFIL.GT.0.AND.NP.GT.2.AND.LINSTY.NE.6)THEN
172 C If NP>1 draw a line with a given style
173 C and draw black edges both for HIDE OFF
174 C and SHAD options in case of FILL
176 CALL UCTOH('ON ',IFLH,4,4)
177 IF(IHIDEN.NE.IFLH.AND.LINFIL.GT.0)THEN
180 IF(LINSTY.EQ.6.AND.LINFIL.NE.0)THEN
184 CALL IGSET('LWID',3.)
185 IF(LINWID.GE.12)CALL IGSET('LWID',6.)
186 IF(LINWID.LE.4)CALL IGSET('LWID',1.)
188 IF(LLEP.LE.10.OR.LINFIL.EQ.0.OR.LINFLA.NE.1)THEN
189 IF (LINSTY.EQ.1) THEN
190 *** call write_dxf_pline(np,u,v,lincol,linwid,1)
193 ELSE IF (LINSTY.GT.1.AND.LINSTY.LE.4) THEN
205 50 WRITE (CHMAIL,10000)
208 10000 FORMAT (' *** GDRAWP ***: Memory overflow in pushing a bank')