You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							174 lines
						
					
					
						
							5.9 KiB
						
					
					
				
			
		
		
	
	
							174 lines
						
					
					
						
							5.9 KiB
						
					
					
				C Copyright(C) 1999-2020 National Technology & Engineering Solutions
 | 
						|
C of Sandia, LLC (NTESS).  Under the terms of Contract DE-NA0003525 with
 | 
						|
C NTESS, the U.S. Government retains certain rights in this software.
 | 
						|
C
 | 
						|
C See packages/seacas/LICENSE for details
 | 
						|
 | 
						|
C=======================================================================
 | 
						|
      SUBROUTINE GRAPAR (XYSAME, WVIEW, DVIEW,
 | 
						|
     &   WXALAB, WYALAB, WXAEND, WYAEND, WXATIC, WYATIC)
 | 
						|
C=======================================================================
 | 
						|
 | 
						|
C   --*** GRAPAR *** (GRPLIB) Determine axes parameters
 | 
						|
C   --   Written by Amy Gilkey - revised 02/20/87
 | 
						|
C   --
 | 
						|
C   --GRAPAR sets up the axes parameters.  It determines "good" numbers
 | 
						|
C   --for the axes numbers and sets the exponent and number of digits.
 | 
						|
C   --It also sets the axis number and label number sizes.
 | 
						|
C   --
 | 
						|
C   --Parameters:
 | 
						|
C   --   XYSAME - IN - true iff the X and Y axis have the same scale;
 | 
						|
C   --      i.e., they are the same type although the values may differ
 | 
						|
C   --   WVIEW - IN - the window corners (left, right, bottom, top)
 | 
						|
C   --      in window (user) coordinates
 | 
						|
C   --   DVIEW - IN - the window corners (left, right, bottom, top)
 | 
						|
C   --      in device coordinates
 | 
						|
C   --   WXALAB, WYALAB - OUT - the starting tick-mark of the X and Y axis
 | 
						|
C   --   WXAEND, WXAEND - OUT - the ending tick-mark of the X and Y axis
 | 
						|
C   --   WXATIC, WYATIC - IN/OUT - the X and Y axis tick-mark interval;
 | 
						|
C   --      set only if equal zero or invalid
 | 
						|
 | 
						|
C   --Routines Called:
 | 
						|
C   --   PLTGTG - (PLTLIB) Get graph parameter (see PLTSTG)
 | 
						|
C   --   PLTSTG - (PLTLIB) Set graph parameter
 | 
						|
C   --      1, 2 = (KXORIG, KYORIG) X, Y axis origin location
 | 
						|
C   --      3, 4 = (KXLENG, KYLENG) X, Y axis length
 | 
						|
C   --      11 = (KSCALE) axes parameters (see documentation)
 | 
						|
C   --      22, 47 = (KXNUMS, KYNUMS) X, Y axis number size
 | 
						|
C   --      23, 48 = (KXLABS, KYLABS) X, Y axis label size
 | 
						|
C   --   PLTGTT - (PLTLIB) Get text parameter
 | 
						|
C   --      2 = (KSCHSZ) software character size
 | 
						|
C   --   GRAEXP - (GRPLIB) Set axis exponent
 | 
						|
 | 
						|
      PARAMETER (KLFT=1, KRGT=2, KBOT=3, KTOP=4)
 | 
						|
 | 
						|
      PARAMETER (KSCHSZ=2)
 | 
						|
      PARAMETER (KXORIG=1, KYORIG=2, KXLENG=3, KYLENG=4, KSCALE=11)
 | 
						|
      PARAMETER (KXNUMS=22, KXLABS=23, KYNUMS=47, KYLABS=48)
 | 
						|
 | 
						|
      LOGICAL XYSAME
 | 
						|
      REAL WVIEW(KTOP), DVIEW(KTOP)
 | 
						|
      REAL WXALAB, WYALAB
 | 
						|
      REAL WXAEND, WYAEND
 | 
						|
      REAL WXATIC, WYATIC
 | 
						|
 | 
						|
      LOGICAL LDUM, PLTGTG, PLTSTG, PLTGTT
 | 
						|
      LOGICAL NUMBX, NUMBY
 | 
						|
      CHARACTER*8 NSTR
 | 
						|
      REAL BUF(4)
 | 
						|
 | 
						|
      WXAMIN = WVIEW(KLFT)
 | 
						|
      WXAMAX = WVIEW(KRGT)
 | 
						|
      WYAMIN = WVIEW(KBOT)
 | 
						|
      WYAMAX = WVIEW(KTOP)
 | 
						|
 | 
						|
      DXALEN = DVIEW(KRGT) - DVIEW(KLFT)
 | 
						|
      DYALEN = DVIEW(KTOP) - DVIEW(KBOT)
 | 
						|
      WXALEN = ABS (WXAMAX - WXAMIN)
 | 
						|
      WYALEN = ABS (WYAMAX - WYAMIN)
 | 
						|
 | 
						|
C   --Set tick-interval
 | 
						|
 | 
						|
      TICFAC = (1.00 / 12) * 2
 | 
						|
C      --TICFAC is divided by the axis length to get the length of 2 times
 | 
						|
C      --a "nice" tick interval (in device coordinates); a "nice" tick interval
 | 
						|
C      --is 12 ticks across the screen (horizontally)
 | 
						|
 | 
						|
      IF (WXATIC .NE. 0.0) THEN
 | 
						|
         XN = WXALEN / WXATIC
 | 
						|
         IF ((XN .LT. 1) .OR. (XN .GT. 20)) WXATIC = 0.0
 | 
						|
      END IF
 | 
						|
      IF (WXATIC .EQ. 0.0) THEN
 | 
						|
         XTIC = WXALEN * (TICFAC / DXALEN)
 | 
						|
         WRITE (NSTR, 10000) XTIC
 | 
						|
         READ (NSTR, 10000) WXATIC
 | 
						|
         WXATIC = .5 * WXATIC
 | 
						|
      END IF
 | 
						|
 | 
						|
      IF (WYATIC .NE. 0.0) THEN
 | 
						|
         XN = WYALEN / WYATIC
 | 
						|
         IF ((XN .LT. 1) .OR. (XN .GT. 20)) WYATIC = 0.0
 | 
						|
      END IF
 | 
						|
      IF (WYATIC .EQ. 0.0) THEN
 | 
						|
         YTIC = WYALEN * (TICFAC / DYALEN)
 | 
						|
         WRITE (NSTR, 10000) YTIC
 | 
						|
         READ (NSTR, 10000) WYATIC
 | 
						|
         WYATIC = .5 * WYATIC
 | 
						|
      END IF
 | 
						|
 | 
						|
      IF (XYSAME) THEN
 | 
						|
         IF (WXATIC .LT. WYATIC) THEN
 | 
						|
            WXATIC = WYATIC
 | 
						|
         ELSE
 | 
						|
            WYATIC = WXATIC
 | 
						|
         END IF
 | 
						|
      END IF
 | 
						|
 | 
						|
C   --Set axes starting and ending tick-marks
 | 
						|
 | 
						|
      WXALAB = WXATIC * AINT (WXAMIN/WXATIC)
 | 
						|
      IF (WXALAB .LT. WXAMIN) WXALAB = WXALAB + WXATIC
 | 
						|
      WXAEND = WXALAB + WXATIC * AINT ((WXAMAX-WXAMIN) / WXATIC)
 | 
						|
      IF (WXAEND .GT. WXAMAX) WXAEND = WXAEND - WXATIC
 | 
						|
 | 
						|
      WYALAB = WYATIC * AINT (WYAMIN/WYATIC)
 | 
						|
      IF (WYALAB .LT. WYAMIN) WYALAB = WYALAB + WYATIC
 | 
						|
      WYAEND = WYALAB + WYATIC * AINT ((WYAMAX-WYAMIN) / WYATIC)
 | 
						|
      IF (WYAEND .GT. WYAMAX) WYAEND = WYAEND - WYATIC
 | 
						|
 | 
						|
C   --Set axis numbering (exponent and number of decimal digits)
 | 
						|
 | 
						|
      LDUM = PLTGTG (KXNUMS, SZXNUM)
 | 
						|
      LDUM = PLTGTG (KYNUMS, SZYNUM)
 | 
						|
      NUMBX = (SZXNUM .GT. 0.0)
 | 
						|
      NUMBY = (SZYNUM .GT. 0.0)
 | 
						|
 | 
						|
      BUF(1) = WXALAB
 | 
						|
      BUF(2) = WXAEND
 | 
						|
      BUF(3) = WYALAB
 | 
						|
      BUF(4) = WYAEND
 | 
						|
 | 
						|
      IF (XYSAME .AND. NUMBX .AND. NUMBY) THEN
 | 
						|
         CALL GRAEXP (' ', 4, BUF, WXATIC)
 | 
						|
      ELSE
 | 
						|
         IF (NUMBX) THEN
 | 
						|
            CALL GRAEXP ('X', 2, BUF(1), WXATIC)
 | 
						|
         ELSE
 | 
						|
            CALL GRAEXP ('X', 0, BUF(1), WXATIC)
 | 
						|
         END IF
 | 
						|
         IF (NUMBY) THEN
 | 
						|
            CALL GRAEXP ('Y', 2, BUF(3), WYATIC)
 | 
						|
         ELSE
 | 
						|
            CALL GRAEXP ('Y', 0, BUF(3), WYATIC)
 | 
						|
         END IF
 | 
						|
      END IF
 | 
						|
 | 
						|
C   --Set up label/numbering size
 | 
						|
 | 
						|
      LDUM = PLTGTG (KXNUMS, SZNUM)
 | 
						|
      IF (SZNUM .LE. 0.0) LDUM = PLTGTG (KYNUMS, SZNUM)
 | 
						|
      LDUM = PLTGTG (KXLABS, SZLAB)
 | 
						|
      IF (SZLAB .LE. 0.0) LDUM = PLTGTG (KYLABS, SZLAB)
 | 
						|
 | 
						|
      IF ((SZNUM .GT. 0.0) .OR. (SZLAB .GT. 0.0)) THEN
 | 
						|
C      --The size of the label/numbering is determined by the character size
 | 
						|
C      --and the axis lengths
 | 
						|
         LDUM = PLTGTT (KSCHSZ, VCS)
 | 
						|
         R = VCS * 50.0 / (0.5 * (DXALEN + DYALEN))
 | 
						|
         SZNUM = SZNUM * R
 | 
						|
         SZLAB = SZLAB * R*(4.0/5.0)
 | 
						|
C         --Factor by 4/5 to make label and numbering the same size
 | 
						|
 | 
						|
         LDUM = PLTGTG (KXNUMS, X)
 | 
						|
         IF (X .GT. 0.0) LDUM = PLTSTG (KXNUMS, SZNUM)
 | 
						|
         LDUM = PLTGTG (KXLABS, X)
 | 
						|
         IF (X .GT. 0.0) LDUM = PLTSTG (KXLABS, SZLAB)
 | 
						|
         LDUM = PLTGTG (KYNUMS, X)
 | 
						|
         IF (X .GT. 0.0) LDUM = PLTSTG (KYNUMS, SZNUM)
 | 
						|
         LDUM = PLTGTG (KYLABS, X)
 | 
						|
         IF (X .GT. 0.0) LDUM = PLTSTG (KYLABS, SZLAB)
 | 
						|
      END IF
 | 
						|
 | 
						|
      RETURN
 | 
						|
10000  FORMAT (E8.1)
 | 
						|
      END
 | 
						|
 |