In article <1JUN199412170641@ariel.lerc.nasa.gov> uuvince@ariel.lerc.nasa.gov (Vince Scullin) writes:
> From: uuvince@ariel.lerc.nasa.gov (Vince Scullin)
> Subject: Need more symbols for WAVE plots
> Date: 1 Jun 1994 12:17 EST
> I am running PV~WAVE version 4.0 on a Sun workstation. The users I am trying
> to support are accustomed to graphics packages with 50 or more plot symbols to
> choose from. WAVE offers them 7 built-in symbols and 1 custom symbol, and even
> some of the built-in symbols are pretty lousy. Since this has been a long
> standing problem that Precision Visuals (now Visual Numerics) has never done
> anything about, I assume there must be some clever users out there who have
> developed polished work-arounds. I would be grateful for any suggestions or
> WAVE code to help me get an expanded set of usable plot symbols.
> ------------------------------------------------------------ ------------------
> | Vince Scullin | Never attribute to malice that |
> | Scientific Data Applications Branch | which can be adequately explained |
> | NASA Lewis Research Center | by ignorance. |
> | Cleveland, Ohio 44135 uuvince@ariel.lerc.nasa.gov (Vince Scullin) |
> ------------------------------------------------------------ ------------------
I'm not sure if you'd call this a 'polished' workaround, but it does work.
What follows is some IDL code that loads some useful symbols into the user
defined symbol. It should all work for PV~WAVE, with the possible exception
of the _EXTRA keyword. Let me know what happens. Also, if anyone has
suggestions for new symbols, please let me know.
;+
; NAME: UserSymbol
; PURPOSE: Make neat little user defined symbols
; CATEGORY: Plotting/Graphics
;
; CALLING SEQUENCE: UserSymbol,symbol_name
;
; INPUTS:
; Symbol_name a string containing the name of the desired symbol.
; Some possible options are Square,Triangle,Circle,
; Hexagon,BigX,Clover,Spiral,Star...
;
; KEYWORD PARAMETERS:
; SIZE Symbol size (default=1)
; LIST using LIST=Some_variable will return the vector
; of available symbol names in Some_variable
; HELP returns this documentation header
;
; and also the keywords which apply to USERSYM
; THICK Line thickness (default=1)
; FILL Fill symbol? (default=0=no)
; COLOR Symbol color
;
; SIDE EFFECTS: Calls USERSYM to load the new symbol
;
; MODIFICATION HISTORY: Brian Jackel August 10 1992
;- University of Western Ontario
pro USERSYMBOL,symbol_name,SIZE=size,LIST=list,HELP=help,_EXTRA= _extra
ON_ERROR,2
IF KEYWORD_SET(HELP) THEN BEGIN
doc_library,'USERSYMBOL'
return
ENDIF
symbol_list= ['DIAMOND','PENTAGON','CLOVER','PACMAN','SPIRAL','BIGX']
symbol_list= [symbol_list,'CIRCLE','SQUARE','TRIANGLE','STAR','HEXAGON']
IF KEYWORD_SET(LIST) THEN BEGIN
LIST= symbol_list
return ;return a list of the available symbols
ENDIF
IF not KEYWORD_SET(SIZE) THEN size=1.0
symbol= STRUPCASE( STRCOMPRESS(symbol_name,/REMOVE_ALL) )
CASE symbol OF
'DIAMOND': BEGIN
x= size* [0.0,0.8,0.0,-0.8,0.0]
y= size* [1.2,0.0,-1.2,0.0,1.2]
END
'PENTAGON':BEGIN
theta= findgen(6)/5 * 360.0 * !dtor
x= 1.0 *size* sin(theta)
y= 1.0 *size* cos(theta)
END
'CLOVER': BEGIN
theta= findgen(41)/40.0 * 360.0 * !dtor
r= ABS(1.0 *size* sin(2.0*theta))
x= r * sin(theta)
y= r * cos(theta)
END
'PACMAN': BEGIN
theta= (- findgen(41)/50.0*360.0 + 35.0 )*!dtor
x= [0.0, 1.0 *size* sin(theta), 0.0]
y= [0.0, 1.0 *size* cos(theta) ,0.0]
END
'SPIRAL': BEGIN
theta= findgen(41)/40.0 * 720.0 * !dtor
r= 1.0 *size* theta / MAX(theta)
x= r * sin(theta)
y= r * cos(theta)
END
'BIGX': BEGIN
x= 0.34 *size* [0,2,3,3,1, 3, 3, 2, 0,-2,-3,-3,-1,-3,-3,-2,0]
y= 0.34 *size* [1,3,3,2,0,-2,-3,-3,-1,-3,-3,-2, 0, 2, 3, 3,1]
END
'CIRCLE': BEGIN
n= 17.0
theta= findgen(n)/(n-1.0) * 360.0 * !dtor
x= 1.0 *size* sin(theta)
y= 1.0 *size* cos(theta)
END
'SQUARE': BEGIN
theta= (findgen(5)/4.0 * 360.0 + 45.0 )*!dtor
x= 1.0 *size* sin(theta)
y= 1.0 *size* cos(theta)
END
'TRIANGLE':BEGIN
theta= [0,120,240,360]*!dtor
x= 1.0 *size* sin(theta)
y= 1.0 *size* cos(theta)
END
'STAR': BEGIN
theta= [0,36, 72,108, 144,180, 216,252, 288,324,0]*!dtor
r= [1.0,0.5, 1.0,0.5, 1.0,0.5, 1.0,0.5, 1.0,0.5,1.0]
x= r *size* sin(theta)
y= r *size* cos(theta)
END
'HEXAGON': BEGIN
theta= [0,60,120,180,240,300,360]*!dtor
x= 1.0 *size* sin(theta)
y= 1.0 *size* cos(theta)
END
ELSE: BEGIN
MESSAGE,'Unrecognized symbol name, searching for match',/INFORMATIONAL
hits= STRPOS( symbol_list, symbol )
w= WHERE(hits NE -1)
IF (w(0) NE -1) THEN BEGIN ;at least one substring match, use
hit_names= symbol_list(w(0))
FOR i=1,n_elements(w)-1 DO hit_names= hit_names + $
' ' + symbol_list(w(i))
MESSAGE,'...possible matches: '+hit_names,/INFORMATIONAL
MESSAGE,'...will use the first (or only) one',/INFORMATIONAL
symbol_name= symbol_list(w(0)) ;recursion to help us out
SET_USERSYM,symbol_name,COLOR=color,FILL=fill,THICK=thick
ENDIF ELSE BEGIN
MESSAGE,'...no quick match. Try SET_USERSYM,LIST=list',/INFORMATIONAL
ENDELSE
return ;either with a guessed symbol, or a list of them
END
ENDCASE
USERSYM,x,y,_EXTRA=_extra
return
END
|