1; docformat = 'rst' 2; 3; NAME: 4; cgSymCat 5; 6; PURPOSE: 7; This function provides a symbol catalog for specifying a number of plotting symbols. 8; 9;******************************************************************************************; 10; ; 11; Copyright (c) 20o6-2012, by Fanning Software Consulting, Inc. All rights reserved. ; 12; ; 13; Redistribution and use in source and binary forms, with or without ; 14; modification, are permitted provided that the following conditions are met: ; 15; ; 16; * Redistributions of source code must retain the above copyright ; 17; notice, this list of conditions and the following disclaimer. ; 18; * Redistributions in binary form must reproduce the above copyright ; 19; notice, this list of conditions and the following disclaimer in the ; 20; documentation and/or other materials provided with the distribution. ; 21; * Neither the name of Fanning Software Consulting, Inc. nor the names of its ; 22; contributors may be used to endorse or promote products derived from this ; 23; software without specific prior written permission. ; 24; ; 25; THIS SOFTWARE IS PROVIDED BY FANNING SOFTWARE CONSULTING, INC. ''AS IS'' AND ANY ; 26; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ; 27; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT ; 28; SHALL FANNING SOFTWARE CONSULTING, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, ; 29; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ; 30; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ; 31; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ; 32; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ; 33; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; 34; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ; 35;******************************************************************************************; 36; 37;+ 38; This function provides a symbol catalog for specifying a number of plotting symbols. 39; 40; :Categories: 41; Graphics 42; 43; :Params: 44; theInSymbol: in, required, type=varies 45; The number (or name) of the symbol you wish to use. Possible values are:: 46; 0 : No symbol. NONE 47; 1 : Plus sign. PLUSSIGN 48; 2 : Asterisk. ASTERISK 49; 3 : Dot (period). DOT 50; 4 : Open diamond. OPENDIAMOND 51; 5 : Open upward triangle. OPENUPTRIANGLE 52; 6 : Open square. OPENSQUARE 53; 7 : X. X 54; 8 : Defined by the user with USERSYM. USERSYM 55; 9 : Open circle. OPENCIRCLE 56; 10 : Histogram style plot. HISTOGRAM 57; 11 : Open downward triangle. OPENDOWNTRIANGLE 58; 12 : Open rightfacing triangle. OPENRIGHTTRIANGLE 59; 13 : Open leftfacing triangle. OPENLEFTTRIANGLE 60; 14 : Filled diamond. FILLEDDIAMOND 61; 15 : Filled square. FILLEDSQUARE 62; 16 : Filled circle. FILLEDCIRCLE 63; 17 : Filled upward triangle. FILLEDUPTRIANGLE 64; 18 : Filled downward triangle. FILLEDDOWNTRIANGLE 65; 19 : Filled rightfacing triangle. FILLEDRIGHTTRIANGLE 66; 20 : Filled leftfacing triangle. FILLEDLEFTTRIANGLE 67; 21 : Hourglass. HOURGLASS 68; 22 : Filled Hourglass. FILLEDHOURGLASS 69; 23 : Bowtie. BOWTIE 70; 24 : Filled bowtie. FILLEDBOWTIE 71; 25 : Standing Bar. STANDINGBAR 72; 26 : Filled Standing Bar. FILLEDSTANDINGBAR 73; 27 : Laying Bar. LAYINGBAR 74; 28 : Filled Laying Bar. FILLEDLAYINGBAR 75; 29 : Hat up. HATUP 76; 30 : Hat down. HATDOWN 77; 31 : Hat right. HATRIGHT 78; 32 : Hat down. HATDOWN 79; 33 : Big cross. BIGCROSS 80; 34 : Filled big cross. FILLEDBIGCROSS 81; 35 : Circle with plus. CIRCLEWITHPLUS 82; 36 : Circle with X. CIRCLEWITHX 83; 37 : Upper half circle. UPPERHALFCIRCLE 84; 38 : Filled upper half circle. FILLEDUPPERHALFCIRCLE 85; 39 : Lower half circle. LOWERHALFCIRCLE 86; 40 : Filled lower half circle. FILLEDLOWERHALFCIRCLE 87; 41 : Left half circle. LEFTHALFCIRCLE 88; 42 : Filled left half circle. FILLEDLEFTHALFCIRCLE 89; 43 : Right half circle. RIGHTHALFCIRCLE 90; 44 : Filled right half circle. FILLEDRIGHTHALFCIRCLE 91; 45 : Star. STAR 92; 46 : Filled star. FILLEDSTAR 93; 94; :Keywords: 95; color: in, optional, type=varies 96; Set this keyword to the color (color table index, 24-bit value, or color name) 97; of the color desired. 98; names: in, optional, type=boolean, default=0 99; If this keyword is set, the function returns the names of the symbols allowed. 100; The index number of the name is its symbol number. 101; thick: in, optional, type=float, default=1.0 102; Set this keyword to the thickness desired. Default is 1. 103; 104; :Examples: 105; 106; To use with normal IDL routines:: 107; Plot, findgen(11), PSYM=cgSymCat(theSymbol) 108; 109; To connect symbols with lines, use a negative value for the PSYM keyword:: 110; Plot, findgen(11), PSYM=-cgSymCat(theSymbol) 111; 112; To use with Coyote Library routines, you can call cgSymCat indirectly:: 113; cgPlot, findgne(11), PSYM=16, SYMCOLOR='dodger blue' 114; 115; :Author: 116; FANNING SOFTWARE CONSULTING:: 117; David W. Fanning 118; 1645 Sheely Drive 119; Fort Collins, CO 80526 USA 120; Phone: 970-221-0438 121; E-mail: david@idlcoyote.com 122; Coyote's Guide to IDL Programming: http://www.idlcoyote.com 123; 124; :History: 125; Change History:: 126; Written by David W. Fanning, 2 September 2006. Loosely based on the 127; program MC_SYMBOL introduced on the IDL newsgroup 1 September 2006, 128; and MPI_PLOTCONFIG__DEFINE from the Coyote Library. 129; Modified to allow PSYM=8 and PSYM=10 to have their normal meanings. This shifted 130; previous symbols by two values from their old meanings. For example, an hourglass 131; went from symbol number 19 to 21. 2 October 2006. DWF. 132; Whoops! Added two symbols but forgot to change limits to allow for them. 4 May 2007. DWF. 133; Added THICK keyword. 21 Aug 2007. DWF. 134; Added COLOR keyword and made THICK keyword apply to all symbols. 11 Nov 2008. DWF. 135; If you are using USERSYM, the "color" can get "stuck" on the last color used to draw 136; a symbol. To "unstick" the color, you have to call USERSYM without a color keyword 137; before calling it again with a color keyword. This is, without a doubt, the strangest 138; bug I've ever seen in IDL! 20 June 2012. DWF. 139; Changed the way I "unstick" the color from calling USERSYM to calling SYMCAT. This 140; avoids a problem in changing the symbol when SYMCAT is used (unnecessarily) to pass 141; a symbol into Coyote Graphics programs. 9 July 2012. DWF. 142; Added the ability (via Jack Saba) to ask for symbols by name. 17 July 2012. DWF. 143; Added the ability to ask for the color by name. 17 July 2012. DWF. 144; Renamed to cgSYMCAT from SYMCAT. 17 July 2012. DWF. 145; The previous problem with USERSYM colors "sticking" turned out to be a problem 146; with cgGraphicsKeywords, so I removed previous "fix". 18 July 2012. DWF. 147; Modified the program to allow a "negative" string to be used as the symbol name 148; (e.g., PSYM="-star"). 30 July 2012. DWF. 149; Modified to use 36 points in circle, rather than 72. 10 May 2013. DWF. 150; Fixed a problem with using parentheses, rather than square brackets. 15 Dec 2014. DWF. 151; 152; :Copyright: 153; Copyright (c) 2006-2014, Fanning Software Consulting, Inc. 154;- 155FUNCTION cgSymCat, theInSymbol, COLOR=color, NAMES=names, THICK=thick 156 157 On_Error, 2 158 159 IF Keyword_Set(names) THEN BEGIN 160 names = [ $ 161 'None', $ 162 'Plus Sign', $ 163 'Asterisk', $ 164 'Dot', $ 165 'Open Diamond', $ 166 'Open Up Triangle', $ 167 'Open Square', $ 168 'X', $ 169 'UserSym', $ 170 'Open Circle', $ 171 'Histogram', $ 172 'Open Down Triangle', $ 173 'Open Right Triangle', $ 174 'Open Left Triangle', $ 175 'Filled Diamond', $ 176 'Filled Square', $ 177 'Filled Circle', $ 178 'Filled Up Triangle', $ 179 'Filled Down Triangle', $ 180 'Filled Right Triangle', $ 181 'Filled Left Triangle', $ 182 'Hourglass', $ 183 'Filled Hourglass', $ 184 'Bowtie', $ 185 'Filled Bowtie', $ 186 'Standing Bar', $ 187 'Filled Standing Bar', $ 188 'Laying Bar', $ 189 'Filled Laying Bar', $ 190 'Hat Up', $ 191 'Hat Down', $ 192 'Hat Right', $ 193 'Hat Left', $ 194 'Big Cross', $ 195 'Filled Big Cross', $ 196 'Circle Plus', $ 197 'Circle X', $ 198 'Upper Half Circle', $ 199 'Fillled Upper Half Circle', $ 200 'Lower Half Circle', $ 201 'Filled Lower Half Circle', $ 202 'Left Half Circle', $ 203 'Filled Left Half Circle', $ 204 'Right Half Circle', $ 205 'Filled Right Half Circle', $ 206 'Star', $ 207 'Filled Star' ] 208 209 RETURN, names 210 ENDIF 211 212 ; Is the symbol input as a string? 213 IF ( SIZE(theInSymbol,/TNAME) EQ 'STRING' ) THEN BEGIN 214 215 ; Is the first character a minus sign? 216 IF (StrMid(theInSymbol,0,1) EQ "-") THEN BEGIN 217 aMinusString = 1 218 theInSymbol = StrMid(theInSymbol,1) 219 ENDIF 220 221 ; Aliases defined here. 222 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'OPENUPWARDTRIANGLE' THEN theInSymbol = 'OPENUPTRIANGLE' 223 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'OPENDOWNWARDTRIANGLE' THEN theInSymbol = 'OPENDOWNTRIANGLE' 224 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'OPENRIGHTWARDTRIANGLE' THEN theInSymbol = 'OPENRIGHTTRIANGLE' 225 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'OPENLEFTWARDTRIANGLE' THEN theInSymbol = 'OPENLEFTTRIANGLE' 226 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'FILLEDUPWARDTRIANGLE' THEN theInSymbol = 'FILLEDUPTRIANGLE' 227 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'FILLEDDOWNWARDTRIANGLE' THEN theInSymbol = 'FILLEDDOWNTRIANGLE' 228 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'FILLEDDOWNWARDTRIANGLE' THEN theInSymbol = 'FILLEDDOWNTRIANGLE' 229 IF StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) EQ 'FILLEDLEFTWARDTRIANGLE' THEN theInSymbol = 'FILLEDLEFTTRIANGLE' 230 231 CASE StrUpCase(StrCompress(theInSymbol, /REMOVE_ALL)) OF 232 '': theSymbol = 0 233 'NONE': theSymbol = 0 234 'PLUSSIGN': theSymbol = 1 235 'ASTERISK': theSymbol = 2 236 'DOT': theSymbol = 3 237 'OPENDIAMOND': theSymbol = 4 238 'OPENUPTRIANGLE': theSymbol = 5 239 'OPENSQUARE': theSymbol = 6 240 'X': theSymbol = 7 241 'USERSYM': theSymbol = 8 242 'OPENCIRCLE': theSymbol = 9 243 'HISTOGRAM': theSymbol = 10 244 'OPENDOWNTRIANGLE': theSymbol = 11 245 'OPENRIGHTTRIANGLE': theSymbol = 12 246 'OPENLEFTTRIANGLE': theSymbol = 13 247 'FILLEDDIAMOND': theSymbol = 14 248 'FILLEDSQUARE': theSymbol = 15 249 'FILLEDCIRCLE': theSymbol = 16 250 'FILLEDUPTRIANGLE': theSymbol = 17 251 'FILLEDDOWNTRIANGLE': theSymbol = 18 252 'FILLEDRIGHTTRIANGLE': theSymbol = 19 253 'FILLEDLEFTTRIANGLE': theSymbol = 20 254 'HOURGLASS': theSymbol = 21 255 'FILLEDHOURGLASS': theSymbol = 22 256 'BOWTIE': theSymbol = 23 257 'FILLEDBOWTIE': theSymbol = 24 258 'STANDINGBAR': theSymbol = 25 259 'FILLEDSTANDINGBAR': theSymbol = 26 260 'LAYINGBAR': theSymbol = 27 261 'FILLEDLAYINGBAR': theSymbol = 28 262 'HATUP': theSymbol = 29 263 'HATDOWN': theSymbol = 30 264 'HATRIGHT': theSymbol = 31 265 'HATLEFT': theSymbol = 32 266 'BIGCROSS': theSymbol = 33 267 'FILLEDBIGCROSS': theSymbol = 34 268 'CIRCLEPLUS': theSymbol = 35 269 'CIRCLEX': theSymbol = 36 270 'UPPERHALFCIRCLE': theSymbol = 37 271 'FILLEDUPPERHALFCIRCLE': theSymbol = 38 272 'LOWERHALFCIRCLE': theSymbol = 39 273 'FILLEDLOWERHALFCIRCLE': theSymbol = 40 274 'LEFTHALFCIRCLE': theSymbol = 41 275 'FILLEDLEFTHALFCIRCLE': theSymbol = 42 276 'RIGHTHALFCIRCLE': theSymbol = 43 277 'FILLEDRIGHTHALFCIRCLE': theSymbol = 44 278 'STAR': theSymbol = 45 279 'FILLEDSTAR': theSymbol = 46 280 ELSE: Message, 'Symbol not defined.' 281 ENDCASE 282 283 ENDIF ELSE theSymbol = theInSymbol[0] 284 285 ; Error checking. 286 IF N_Elements(theSymbol) EQ 0 THEN RETURN, 0 287 IF N_Elements(thick) EQ 0 THEN thick = (!P.Thick EQ 0) ? 1 : !P.Thick 288 IF (Abs(theSymbol) LT 0) OR (Abs(theSymbol) GT 46) THEN Message, 'Symbol number out of defined range.' 289 theFinalSymbol = Fix(Abs(theSymbol)) 290 291 ; Do you have a color? 292 IF N_Elements(color) NE 0 THEN BEGIN 293 294 ; Is color a string? 295 IF Size(color, /TNAME) EQ 'STRING' THEN thisColor = cgColor(color) ELSE thisColor = color 296 297 ENDIF 298 299 ; Define helper variables for creating circles. 300 phi = Findgen(36) * (!PI * 2 / 36.) 301 phi = [ phi, phi[0] ] 302 303 ; Use user defined symbol by default. 304 result = 8 305 306 CASE theFinalSymbol OF 307 308 0 : result = 0 ; No symbol. 309 1 : UserSym, [1, -1, 0, 0, 0], [0, 0, 0, -1, 1], THICK=thick, COLOR=thisColor ; Plus sign. 310 2 : result = 2 ; Asterisk. 311 3 : result = 3 ; Dot (period). 312 4 : UserSym, [ 0, 1, 0, -1, 0 ], [ 1, 0, -1, 0, 1 ], THICK=thick, COLOR=thisColor ; Open diamond. 313 5 : UserSym, [ -1, 0, 1, -1 ], [ -1, 1, -1, -1 ], THICK=thick, COLOR=thisColor ; Open upward triangle. 314 6 : UserSym, [ -1, 1, 1, -1, -1 ], [ 1, 1, -1, -1, 1 ], THICK=thick, COLOR=thisColor ; Open square. 315 7 : result = 7 ; X. 316 8 : ; User defined with USERSYM. 317 9 : UserSym, cos(phi), sin(phi), THICK=thick, COLOR=thisColor ; Open circle. 318 10 : result = 10 ; Histogram type plot. 319 11 : UserSYm, [ -1, 0, 1, -1 ], [ 1, -1, 1, 1 ], THICK=thick, COLOR=thisColor ; Open downward facing triangle 320 12 : UserSym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ], THICK=thick, COLOR=thisColor ; Open rightfacing triangle. 321 13 : UserSym, [ 1, -1, 1, 1 ], [1, 0, -1, 1 ], THICK=thick, COLOR=thisColor ; Open leftfacing triangle. 322 14 : UserSym, [ 0, 1, 0, -1, 0 ], [ 1, 0, -1, 0, 1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled diamond. 323 15 : UserSym, [ -1, 1, 1, -1, -1 ], [ 1, 1, -1, -1, 1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled square. 324 16 : UserSym, Cos(phi), Sin(phi), /Fill, THICK=thick, COLOR=thisColor ; Filled circle. 325 17 : UserSym, [ -1, 0, 1, -1 ], [ -1, 1, -1, -1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled upward triangle. 326 18 : UserSym, [ -1, 0, 1, -1 ], [ 1, -1, 1, 1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled downward triangle. 327 19 : UserSym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled rightfacing triangle. 328 20 : UserSym, [ 1, -1, 1, 1 ], [1, 0, -1, 1 ], /Fill, THICK=thick, COLOR=thisColor ; Filled leftfacing triangle. 329 21 : UserSym, [-1, 1,-1,1,-1], [-1,-1, 1,1,-1], THICK=thick, COLOR=thisColor ; Hourglass. 330 22 : UserSym, [-1, 1,-1,1,-1], [-1,-1, 1,1,-1], /Fill, THICK=thick, COLOR=thisColor ; Filled Hourglass. 331 23 : UserSym, [-1,-1, 1,1,-1], [-1, 1,-1,1,-1], THICK=thick, COLOR=thisColor ; Bowtie. 332 24 : UserSym, [-1,-1, 1,1,-1], [-1, 1,-1,1,-1], /Fill, THICK=thick, COLOR=thisColor ; Filled bowtie. 333 25 : UserSym, [-0.5,-0.5, 0.5, 0.5,-0.5], [-1, 1, 1,-1,-1], THICK=thick, COLOR=thisColor ; Standing Bar. 334 26 : UserSym, [-0.5,-0.5, 0.5, 0.5,-0.5], [-1, 1, 1,-1,-1], /Fill, THICK=thick, COLOR=thisColor ; Filled Standing Bar. 335 27 : UserSym, [-1,-1, 1, 1,-1], [-0.5, 0.5, 0.5,-0.5,-0.5], THICK=thick, COLOR=thisColor ; Laying Bar. 336 28 : UserSym, [-1,-1, 1, 1,-1], [-0.5, 0.5, 0.5,-0.5,-0.5], /Fill, THICK=thick, COLOR=thisColor ; Filled Laying Bar. 337 29 : UserSym, [-1, -0.5, -0.5, 0.5, 0.5, 1, -1], [-0.7, -0.7, 0.7, 0.7, -0.7, -0.7, -0.7], THICK=thick, COLOR=thisColor ; Hat up. 338 30 : UserSym, [-1, -0.5, -0.5, 0.5, 0.5, 1, -1], [0.7, 0.7, -0.7, -0.7, 0.7, 0.7, 0.7], THICK=thick, COLOR=thisColor ; Hat down. 339 31 : UserSym, [-0.7, -0.7, 0.7, 0.7, -0.7, -0.7, -0.7], [-1, -0.5, -0.5, 0.5, 0.5, 1, -1], THICK=thick, COLOR=thisColor ; Hat right. 340 32 : UserSym, [0.7, 0.7, -0.7, -0.7, 0.7, 0.7, 0.7], [-1, -0.5, -0.5, 0.5, 0.5, 1, -1], THICK=thick, COLOR=thisColor ; Hat down. 341 33 : UserSym, [1, 0.3, 0.3, -0.3, -0.3, -1, -1, -0.3, -0.3, 0.3, 0.3, 1, 1], $ 342 [0.3, 0.3, 1, 1, 0.3, 0.3, -0.3, -0.3, -1, -1, -0.3, -0.3, 0.3], THICK=thick, COLOR=thisColor ; Big cross. 343 34 : UserSym, [1, 0.3, 0.3, -0.3, -0.3, -1, -1, -0.3, -0.3, 0.3, 0.3, 1, 1], $ 344 [0.3, 0.3, 1, 1, 0.3, 0.3, -0.3, -0.3, -1, -1, -0.3, -0.3, 0.3], /Fill , THICK=thick, COLOR=thisColor ; Filled big cross. 345 35 : UserSym, [1,.866, .707, .500, 0,-.500,-.707,-.866,-1, $ 346 -.866,-.707,-.500, 0, .500, .707, .866, 1, -1, 0, 0, 0], $ 347 [0,.500, .707, .866, 1, .866, .707, .500, 0, $ 348 -.500,-.707,-.866,-1,-.866,-.707,-.500, 0, 0, 0, 1, -1], THICK=thick, COLOR=thisColor ; Circle with plus. 349 36 : UserSym, [1,.866, .707, .500, 0,-.500,-.707,-.866,-1, $ 350 -.866,-.707,-.500, 0, .500, .707, .866, 1, $ 351 .866,.707,-.707, 0, .707,-.707], $ 352 [0,.500, .707, .866, 1, .866, .707, .500, 0, $ 353 -.500,-.707,-.866,-1,-.866,-.707,-.500, 0, $ 354 .500,.707,-.707, 0,-.707, .707] , THICK=thick, COLOR=thisColor ; Circle with X. 355 37 : UserSym, [Cos(phi[0:18]), Cos(phi[0])], [Sin(phi[0:18]), Sin(phi[0])]-0.5, THICK=thick, COLOR=thisColor ; Upper half circle. 356 38 : UserSym, [Cos(phi[0:18]), Cos(phi[0])], [Sin(phi[0:18]), Sin(phi[0])]-0.5, /Fill, THICK=thick, COLOR=thisColor ; Filled upper half circle. 357 39 : UserSym, [Cos(phi[18:36]), Cos(phi[18])], [Sin(phi[18:36]), Sin(phi[18])]+0.5, THICK=thick, COLOR=thisColor ; Lower half circle. 358 40 : UserSym, [Cos(phi[18:36]), Cos(phi[18])], [Sin(phi[18:36]), Sin(phi[18])]+0.5, /Fill, THICK=thick, COLOR=thisColor ; Filled lower half circle. 359 41 : UserSym, [Cos(phi[9:27]), Cos(phi[9])]+0.5, [Sin(phi[9:27]), Sin(phi[9])], THICK=thick, COLOR=thisColor ; Left half circle. 360 42 : UserSym, [Cos(phi[9:27]), Cos(phi[9])]+0.5, [Sin(phi[9:27]), Sin(phi[9])], /Fill, THICK=thick, COLOR=thisColor ; Filled left half circle. 361 43 : UserSym, [Cos(phi[27:36]), Cos(phi[0:9]), Cos(phi[27])]-0.5, $ 362 [Sin(phi[27:36]), Sin(phi[0:9]), Sin(phi[27])], THICK=thick, COLOR=thisColor ; Right half circle. 363 44 : UserSym, [Cos(phi[27:36]), Cos(phi[0:9]), Cos(phi[27])]-0.5, $ 364 [Sin(phi[27:36]), Sin(phi[0:9]), Sin(phi[27])], /Fill, THICK=thick, COLOR=thisColor ; Filled right half circle. 365 45 : UserSym, [-1,-.33, 0,.33,1, .33, 0,-.33,-1], $ 366 [ 0, .33, 1,.33,0,-.33,-1,-.33, 0], THICK=thick, COLOR=thisColor ; Star. 367 46 : UserSym, [-1,-.33, 0,.33,1, .33, 0,-.33,-1], $ 368 [ 0, .33, 1,.33,0,-.33,-1,-.33, 0], /Fill, THICK=thick, COLOR=thisColor ; Filled star. 369 ELSE: Message, 'Cannot resolve the symbol. Please specify an integer between 0 and 46.' 370 ENDCASE 371 372 ; If this is a minus string, we have to modify the result and fix the input. 373 IF Keyword_Set(aMinusString) THEN BEGIN 374 result = -result 375 theInSymbol[0] = '-' + theInSymbol 376 ENDIF 377 378 RETURN, result 379END ;----------------------------------------------------------------------------------------------------------------------------- 380 381 382 383