;+ ; NAME: ; iXYOUTS ; ; PURPOSE: ; ; This program is meant to be an iTools version of the IDL direct graphics ; program XYOUTS. In other words, it is a way to add strings to a current ; iTool. ; ; AUTHOR: ; ; FANNING SOFTWARE CONSULTING ; David W. Fanning, Ph.D. ; 1645 Sheely Drive ; Fort Collins, CO 80526 USA ; Phone: 970-221-0438 ; E-mail: david@idlcoyote.com ; Coyote's Guide to IDL Programming: http://www.idlcoyote.com/ ; ; CATEGORY: ; ; Graphics ; ; CALLING SEQUENCE: ; ; iXYOUTS, theString ; ; ARGUMENTS: ; ; theString: The string that will be added to the iTool. ; ; KEYWORDS: ; ; Any keyword supported by IDLgrTEXT will be passed along to ; the string. Because I want you to see *something* I will ; tentitively define the following keywords with these ; default values. You can overwrite any of these defaults ; by defining your own keywords. ; ; ALIGNMENT: 0.0 ; Center the string about the location. ; FONT_SIZE: 12 ; 12-point font. ; LOCATION: [0.0, 0.0, 1.0] ; In the center of the unzoomed iTool. ; ; In addition, you can use the following ID keyword to select the idenifier ; of a particular iTool. (This is usually obtained from the iTool when it ; is created: iPlot, findgen(11), IDENTIFIER=id) ; ; ID: The identifier of an iTool when the text string is to be displayed. ; If not used, the current iTool is used. ; ; OUTPUTS: ; ; None. ; ; EXAMPLE: ; ; ; First, create an iTool of some kind. ; IDL> iPlot, findgen(11) ; ; ; Add a string. ; IDL> iXYOUTS, 'This is a string' ; ; ; Add a left-justified red string in 24-point type. ; IDL> iXYOUTS, 'This is red string', ALIGNMENT=0, COLOR=[255,0,0], FONT_SIZE=24, LOCATION=[-1.25, -0.75, 1.0] ; ; RESTRICTIONS: ; ; The default view when a iTool starts up and there has been no magification ; or other manipulation appears to go from -1.4 to 1.4 in X units, from -1.0 to 1.0 ; units in Y, and from 1.0 to -1.0 units in Z. I put the default position in the ; very center of this viewplane rectangle, at [0,0,1.0], but there is no guarantee you ; will actually see the string with this or any other position you use. We are working with ; object graphics objects, after all! The text can be selected and moved to position it more ; exactly. Also, the text is being put into the view in an ONGLASS mode, unless you change ; this with keywords. ; ; DEPENDENCIES: ; ; Requires ERROR_MESSAGE from the Coyote Library: ; ; http://www.idlcoyote.com/programs/error_message.pro ; ; MODIFICATION HISTORY: ; ; Written by: David W. Fanning, 31 August 2007, from suggestions made ; by Mike Galloy and Ken Bowman on the IDL newsgroup. ; It is reported to me that this program no longer works in IDL 8. Since this was ; written for the last "new" graphics system and we are on to the next "new" graphics ; system (or is it the one after that?), I've just decided to retire the darn thing ; and not worry about it anymore. 7 March 2013. DWF. ;- ; ;******************************************************************************************; ; Copyright (c) 2008, by Fanning Software Consulting, Inc. ; ; All rights reserved. ; ; ; ; Redistribution and use in source and binary forms, with or without ; ; modification, are permitted provided that the following conditions are met: ; ; ; ; * Redistributions of source code must retain the above copyright ; ; notice, this list of conditions and the following disclaimer. ; ; * Redistributions in binary form must reproduce the above copyright ; ; notice, this list of conditions and the following disclaimer in the ; ; documentation and/or other materials provided with the distribution. ; ; * Neither the name of Fanning Software Consulting, Inc. nor the names of its ; ; contributors may be used to endorse or promote products derived from this ; ; software without specific prior written permission. ; ; ; ; THIS SOFTWARE IS PROVIDED BY FANNING SOFTWARE CONSULTING, INC. ''AS IS'' AND ANY ; ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ; ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT ; ; SHALL FANNING SOFTWARE CONSULTING, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, ; ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ; ; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ; ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ; ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ; ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ; ;******************************************************************************************; PRO iXYOUTS, theString, ID=id, _EXTRA=extra ; Error handling. Catch, theError IF theError NE 0 THEN BEGIN Catch, /Cancel void = Error_Message() RETURN ENDIF ; Did the user pass a string? IF N_Elements(theString) EQ 0 THEN Message, 'Must pass a string to add to iTool.' IF Size(theString, /TNAME) NE 'STRING' THEN Message, 'Input argument must be a string.' theString = theString[0] ; No arrays. ; Did the user specify an iTool? IF Keyword_Set(id) EQ 0 THEN BEGIN id = ITGETCURRENT(TOOL=theTool) ENDIF ELSE BEGIN theSystem = _IDLitSys_GetSystem() theTool = theSystem -> GetByIdentifier(id) ENDELSE ; Is the tool valid? IF Obj_Valid(theTool) EQ 0 THEN Message, 'Cannot find a valid iTool to add the string to.' ; Get the annotation layer for the tool. We will add the string to this layer. idAnnotate = theTool -> FindIdentifiers('*/ANNOTATION LAYER') theAnnotation = theTool -> GetByIdentifier(idAnnotate) theAnnotation -> Add, Obj_New('IDLitVisText', _STRING = theString, $ ALIGNMENT = 0.5, $ FONT_SIZE = 12, $ LOCATION = [0.0, 0.0, 1.0], $ _EXTRA=extra) END