Viewing contents of file '../idllib/contrib/windt/symbols.pro'
;+
; NAME:
;
; SYMBOLS
;
; PURPOSE:
;
; Create custom plotting symbols
;
; CALLING SEQUENCE:
;
; SYMBOLS,SYMBOL_NUMBER,SCALE
;
; INPUTS:
; SYMBOL_NUMBER:
;
; 1 = open circle
; 2 = filled circle
; 3 = arrow pointing right
; 4 = arrow pointing left
; 5 = arrow pointing up
; 6 = arrow pointing down
; 7 = arrow pointing up and left (45 degrees)
; 8 = arrow pointing down and left
; 9 = arrow pointing down and right.
; 10 = arrow pointing up and right.
; 11 through 18 are bold versions of 3 through 10
; 19 = horizontal line
; 20 = box
; 21 = diamond
; 22 = triangle
; 30 = filled box
; 31 = filled diamond
; 32 = filled triangle
;
; SCALE - size of symbols.
;
; KEYWORD PARAMETERS:
;
; COLOR - color of symbols
;
; SIDE EFFECTS:
;
; The desired symbol is stored in the user buffer and
; will be plotted if !P.PSYM = 8.
;
; MODIFICATION HISTORY:
;
; Jeff Bennett, U of Colorado, 198?
;-
pro symbols,nsym,scale,color=col
on_error,2
fill = 0
case 1 of
(nsym le 2): begin ;circles
;for large scales increase number of points for res.
if scale ge 4 then a = findgen(25) else $
a = findgen(13)
a = a * (3.14159 / 6.) ;(0 - 12 or 24) pi/6
xarr = cos(a)
yarr = sin(a)
if nsym eq 2 then fill = 1
end
((nsym ge 3)*(nsym le 18)): begin ;arrow heads
xarr = fltarr(5)
yarr = xarr
xarr(1) = 10.
xarr(2) = 6.
yarr(2) = 2.
;nsyms greater than 10 should be filled arrows
if nsym gt 10 then begin
xarr(3) = 6.
xarr(4) = 10.
yarr(3) = -2.
fill = 1
endif else begin
xarr(3) = 10.
xarr(4) = 6.
yarr(4) = -2.
endelse
case 1 of
(nsym eq 3): dummy = 0b
(nsym eq 4): xarr = -1.*xarr
((nsym eq 11)+(nsym eq 12)): begin
xarr = extrac(xarr,0,11)
yarr = extrac(yarr,0,11)
yarr(6) = 0.5
xarr(7) = 6
yarr(7) = 0.5
xarr(8) = 6
yarr(8) = -0.5
yarr(9) = -0.5
if nsym eq 12 then begin
rotation,xarr,yarr,180,nx,ny
xarr = nx
yarr = ny
endif
end
((nsym eq 5)+(nsym eq 13)): begin
temp = xarr
xarr = yarr
yarr = temp
end
((nsym eq 6)+(nsym eq 14)): begin
temp = -1.*xarr
xarr = yarr
yarr = temp
end
((nsym ge 7)*(nsym le 10) + $
(nsym ge 15)*(nsym le 18)): begin
case 1 of
((nsym eq 7)+(nsym eq 15)): deg = 45
((nsym eq 8)+(nsym eq 16)): deg = 135
((nsym eq 9)+(nsym eq 17)): deg = 225
((nsym eq 10)+(nsym eq 18)): deg = 315
endcase
rotation,xarr,yarr,deg,nx,ny
xarr = nx
yarr = ny
end ;end nsym ge 7
endcase
end ;nsym between 3 and 18
((nsym eq 20)+(nsym eq 21)+(nsym eq 30)+(nsym eq 31)): begin
xarr = fltarr(5) + 3
yarr = xarr
xarr(1) = -3.
xarr(2) = -3.
yarr(2) = -3.
yarr(3) = -3.
if (nsym eq 21)+(nsym eq 31) then begin
rotation,xarr,yarr,45,nx,ny
nx = 0.70 * nx ;shrink the x direction
xarr = nx
yarr = ny
endif
if nsym ge 30 then fill = 1
end ;nsym 20,21,30,31
((nsym eq 22)+(nsym eq 32)): begin ;side length 6, 0 at centroid
yarr = fltarr(4) - 6./4.
xarr = fltarr(4) - 6./2.
xarr(1) = 6./2.
xarr(2) = 0.
yarr(2) = 6.*sqrt(3.)/2. - 6./4.
if nsym eq 32 then fill = 1
end
else: begin
xarr = fltarr(2) + 1
yarr = xarr * 0.
xarr(1) = -1.
end
endcase
;
xarr = xarr * scale
yarr = yarr * scale
;
;set symbol buffer
if keyword_set(col) then usersym,xarr,yarr,fill=fill,color=col else $
usersym,xarr,yarr,fill=fill
;
return
end