comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Oops. UserSymbol, Take II
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Oops. UserSymbol, Take II [message #2197] Wed, 01 June 1994 22:31
Jackel is currently offline  Jackel
Messages: 30
Registered: April 1993
Member
Foolishly enough, I didn't check all the logic in the previous posting of
UserSymbol. It should have worked if a correct symbol name was entered, but
the part which matched partial names was broken. Sorry to all who had
trouble, and thanks to Dave Steele for pointing out the problem. This
version should work (knock on wood).


;+
; 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 if set, puts the list of available symbol names
; in the input parameter Symbol_Name
; HELP if set, 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
;
; EXAMPLE: UserSymbol,'BigX' ;to change to an X outline
; UserSymbol,list,/LIST ;to get a list of possible symbols
;
; MODIFICATION HISTORY: Brian Jackel August 10 1992
; University of Western Ontario
;
; Bjj June 2 1994 Fixed up the handling of no clear match.
;-
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
symbol_name= 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
USERSYMBOL,symbol_name,_EXTRA=_extra
ENDIF ELSE BEGIN
MESSAGE,'...no quick match. Try USERSYMBOL,list,/LIST',/INFORMATIONAL
ENDELSE
return ;either with a guessed symbol, or a list of them
END
ENDCASE

;User the library routine USERSYM to set up the symbol.
;
USERSYM,x,y,_EXTRA=_extra

return
END
[Message index]
 
Read Message
Previous Topic: Contouring binary data
Next Topic: Need more symbols for WAVE plots

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 21:14:07 PDT 2025

Total time taken to generate the page: 0.39881 seconds