Viewing contents of file '../idllib/ssw/allpro/arrow2.pro'
pro arrow2,x0,y0,angle,length,head=head,angle=qangle,		$
	thick=thick,hthick=hthick,color=color,hsize=hsize,	$
	solid=solid,data=data,normalized=norm,device=device,	$
	tv2=tv2,qstop=qstop
;+
; NAME:
;   arrow2
; PURPOSE:
;   Wrapper routine for IDL user library ARROW routine.
;
;   arrow2 works with tv2 to provide easier PostScript placement.
;
; CALLING SEQUENCE:
;   arrow2, x0, y0, x1, y1                         ; Provide head & tail coordinates
;   arrow2, x0, y0, angle, length, /angle          ; x0,y0 = arrow's tail
;   arrow2, x0, y0, angle, length, /angle, /head   ; x0,y0 = arrow's head
;   arrow2, x0, y0, angle, length, /angle, /tv2    ; Assume tv2,/init has been 
;                                                    previously called (see below).
; INPUTS:
;   x0, y0	- Defines the tail of the arrow, or if /head is set, the
;		  head of the arrow.
;   x1, y1	- Defines the head of the arrow, or if /head is set, the
;		  the tail.
;
;   angle	- if /angle is set, is the angle in degrees, counter 
;                 clockwise.  0.0 points to the right.
;   length	- If /angle is set, is the length of the arrow in device, 
;                 data or normalized coordinates.
;
; OPTIONAL INPUT PARAMETERS:
;   /angle	- If set, 3rd and 4th parameters are the angle and length
;		  of the arrow, respectively.
;   /head	- To change x0, y0 to define the head of the arrow.
;
;   HSIZE, COLOR, HTHICK, THICK, SOLID are the same as in ARROW
;
;    DATA 	- if set, implies that coordinates are in data coords.
;    NORMALIZED - if set, coordinates are specified in normalized coords.
;    DEVICE	- if set, coordinates are specified in device coords.
;
;    /tv2	- if set, assumes tv2,/init, xsiz_pix, ysiz_pix has
;		  be previously called.  In this case, /data, /norm and
;		  and /dev will have no effect, since /dev will be assumed for
;		  X-output and the pseudo window pixel coordinates will be 
;                 assumed for PostScript output.  
;
; COMMON BLOCKS:
;  tv2_blk (which is created by tv2,/init).
;
; METHOD:
;  arrow2 requires the PostScript plotting size to be set by a previous call
;  to tv2/init,xsiz_pix,ysiz_pix (see the document header of tv2 for more 
;  information), which stores various parameters in common.
;
; See also the following routines:    
;		tv2, ocontour, draw_grid (sxt_grid), plots2
;
; MODIFICATION HISTORY:
;  23-Jan-1996, J. R. Lemen (LPARL), Written.
;-

common tv2_blk, xsiz_pix, ysiz_pix, xsiz_inch, ysiz_inch, ppinch

if not keyword_set(qangle) then begin 		; Provided x1 and y1 coordinates
  x1 = angle & y1 = length 
endif else begin				; Provided with angle and length
  qlength = length * ([1,-1])(keyword_set(head))
  x1 = x0 + qlength * cos(angle*!pi/180)
  y1 = y0 + qlength * sin(angle*!pi/180)
endelse

if not keyword_set(head) then begin		; x0 and y0 is the tail
  xx1 = x1 & yy1 = y1 & xx0 = x0 & yy0 = y0
endif else begin				; Swap ends if /head is set.
  xx1 = x0 & yy1 = y0 & xx0 = x1 & yy0 = y1
endelse

if keyword_set(tv2) then begin			; /tv2 - always use device coordinates
  norm0=0 & data0=0 & device0=1

  if !d.name eq 'PS' then begin			; Convert to pseudo pixel 
    xx0 = xx0 / float(xsiz_pix) * !d.x_size	;- coordinates for PostScript
    xx1 = xx1 / float(xsiz_pix) * !d.x_size	;- output.
    yy0 = yy0 / float(ysiz_pix) * !d.y_size
    yy1 = yy1 / float(ysiz_pix) * !d.y_size
  endif
    
endif else begin				; Not /tv2, simply pass to arrow
  norm0   = keyword_set(norm)
  data0   = keyword_set(data)
  device0 = keyword_set(device)
endelse

arrow,xx0,yy0,xx1,yy1,thick=thick,hthick=hthick,solid=solid,	$
      color=color,hsize=hsize,norm=norm0,data=data0,device=device0

if keyword_set(qstop) then stop
end