# Extended IDL Help

This page was created by the IDL library routine `mk_html_help`. For more information on this routine, refer to the IDL Online Help Navigator or type:

         ? mk_html_help

at the IDL command line prompt.

Last modified: Sun Jan 04 10:33:38 2009.

# List of Routines

- ANGLETOOL
- ANGLETOOL::ADDTOEVENTSTRUCTURE
- ANGLETOOL::CALCULATEBOUNDARYBOX
- ANGLETOOL::CLEANUP
- ANGLETOOL::CONTROLPANEL
- ANGLETOOL::COPYPARAMETERS
- ANGLETOOL::CREATENEWOBJECT
- ANGLETOOL::DRAW
- ANGLETOOL::DRAWSELECTIONBOX
- ANGLETOOL::EVENTHANDLER
- ANGLETOOL::GETPROPERTY
- ANGLETOOL::INIT
- ANGLETOOL::INTERACTIONEVENTS
- ANGLETOOL::MOVE
- ANGLETOOL::OUTLINE
- ANGLETOOL::SELECT
- ANGLETOOL::SELECTVERTEX
- ANGLETOOL::SETPROPERTY
- ANGLETOOL::UPDATE_MODEMAP
- ARROW::CALCULATEBOUNDARYBOX
- ARROW::CLEANUP
- ARROW::CONTROLPANEL
- ARROW::CREATENEWOBJECT
- ARROW::DRAW
- ARROW::DRAWSELECTIONBOX
- ARROW::EVENTHANDLER
- ARROW::GETPROPERTY
- ARROW::INIT
- ARROW::INTERACTIONEVENTS
- ARROW::MOVE
- ARROW::SETPROPERTY
- ARROW__DEFINE
- BOX::ADDTOEVENTSTRUCTURE
- BOX::CALCULATEBOUNDARYBOX
- BOX::CLEANUP
- BOX::CONTROLPANEL
- BOX::CREATENEWOBJECT
- BOX::DRAW
- BOX::DRAWSELECTIONBOX
- BOX::EVENTHANDLER
- BOX::GETPROPERTY
- BOX::INIT
- BOX::INTERACTIONEVENTS[1]
- BOX::INTERACTIONEVENTS[2]
- BOX::MOVE
- BOX::SELECTMODE
- BOX::SETPROPERTY
- BOX::UPDATE_MODEMAP
- BOX__DEFINE
- CATCOLORBAR
- CATCOLORBAR::CALCULATEBOUNDARYBOX
- CATCOLORBAR::CLEANUP
- CATCOLORBAR::CONTROLPANEL
- CATCOLORBAR::CREATENEWOBJECT
- CATCOLORBAR::DRAW
- CATCOLORBAR::DRAWSELECTIONBOX
- CATCOLORBAR::EVENTHANDLER
- CATCOLORBAR::GETPROPERTY
- CATCOLORBAR::INIT
- CATCOLORBAR::INTERACTIONEVENTS
- CATCOLORBAR::MESSAGEHANDLER
- CATCOLORBAR::MOVE
- CATCOLORBAR::SELECT
- CATCOLORBAR::SELECTMODE
- CATCOLORBAR::SETPROPERTY
- CATCOLORBAR::UPDATE_MODEMAP
- CATGRAPHICSCMDTOOL::CLEANUP
- CATGRAPHICSCMDTOOL::DRAW
- CATGRAPHICSCMDTOOL::GETPROPERTY
- CATGRAPHICSCMDTOOL::INIT
- CATGRAPHICSCMDTOOL::LOADCOMMAND
- CATGRAPHICSCMDTOOL::PIXEL_TO_VALUE
- CATGRAPHICSCMDTOOL::REDO
- CATGRAPHICSCMDTOOL::SETPROPERTY
- CATGRAPHICSCMDTOOL::UNDO
- CATGRAPHICSCMDTOOL__DEFINE
- CONTRASTBOX::ACCEPTBOX
- CONTRASTBOX::CANCELBOX
- CONTRASTBOX::CLEANUP
- CONTRASTBOX::DRAW
- CONTRASTBOX::INIT
- CONTRASTBOX::REFRESHPIXMAP
- CONTRASTBOX::RESTOREDISPLAY
- CONTRASTBOX::SETDISPLAY
- CONTRASTBOX__DEFINE
- ELLIPSE::ADDTOEVENTSTRUCTURE
- ELLIPSE::CALCULATEBOUNDARYBOX
- ELLIPSE::CLEANUP
- ELLIPSE::CONTROLPANEL
- ELLIPSE::CREATENEWOBJECT
- ELLIPSE::DRAW
- ELLIPSE::DRAWSELECTIONBOX
- ELLIPSE::EVENTHANDLER
- ELLIPSE::GETPROPERTY
- ELLIPSE::INIT
- ELLIPSE::INTERACTIONEVENTS
- ELLIPSE::MOVE
- ELLIPSE::SELECT
- ELLIPSE::SELECTMODE
- ELLIPSE::SETPROPERTY
- ELLIPSE::UPDATE_MODEMAP
- ELLIPSE_ROI::ACCEPTROI
- ELLIPSE_ROI::CANCELROI
- ELLIPSE_ROI::CLEANUP
- ELLIPSE_ROI::DRAW
- ELLIPSE_ROI::EVENT_HANDLER
- ELLIPSE_ROI::GETPROPERTY
- ELLIPSE_ROI::INIT
- ELLIPSE_ROI::RESTOREDISPLAY
- ELLIPSE_ROI::SETDISPLAY
- ELLIPSE_ROI::SETPROPERTY
- ELLIPSE_ROI__DEFINE
- ELLIPSE__DEFINE
- FREEHAND_ROI::ACCEPTROI
- FREEHAND_ROI::CANCELROI
- FREEHAND_ROI::CLEANUP
- FREEHAND_ROI::DRAW
- FREEHAND_ROI::EVENT_HANDLER
- FREEHAND_ROI::GETPROPERTY
- FREEHAND_ROI::INIT
- FREEHAND_ROI::RESTOREDISPLAY
- FREEHAND_ROI::SETDISPLAY
- FREEHAND_ROI::SETPROPERTY
- FREEHAND_ROI__DEFINE
- IMGAXES::CLEANUP
- IMGAXES::CONTROLPANEL
- IMGAXES::DRAW
- IMGAXES::EVENTHANDLER
- IMGAXES::GETPROPERTY
- IMGAXES::INIT
- IMGAXES::SETPROPERTY
- IMGAXES__DEFINE
- MAP_GRIDE__DEFINE
- MAP_OUTLINE__DEFINE
- MEASUREINTERACTION::CLEANUP
- MEASUREINTERACTION::CONTROLPANEL
- MEASUREINTERACTION::DRAW
- MEASUREINTERACTION::EVENT_HANDLER
- MEASUREINTERACTION::GETPROPERTY
- MEASUREINTERACTION::INIT
- MEASUREINTERACTION::RESTOREDISPLAY
- MEASUREINTERACTION::SETDISPLAY
- MEASUREINTERACTION::SETPROPERTY
- MEASUREINTERACTION__DEFINE
- MOVEABLEBOX::ACCEPTBOX
- MOVEABLEBOX::CANCELBOX
- MOVEABLEBOX::CLEANUP
- MOVEABLEBOX::DRAW
- MOVEABLEBOX::EVENT_HANDLER
- MOVEABLEBOX::GETMODE
- MOVEABLEBOX::GETPROPERTY
- MOVEABLEBOX::INIT
- MOVEABLEBOX::RESTOREDISPLAY
- MOVEABLEBOX::SETDISPLAY
- MOVEABLEBOX::SETPROPERTY
- MOVEABLEBOX::UPDATE_MODEMAP
- MOVEABLEBOX__DEFINE
- POLYGON::ADDTOEVENTSTRUCTURE
- POLYGON::CALCULATEBOUNDARYBOX
- POLYGON::CLEANUP
- POLYGON::CONTROLPANEL
- POLYGON::CREATENEWOBJECT
- POLYGON::DRAW
- POLYGON::DRAWSELECTIONBOX
- POLYGON::EVENTHANDLER
- POLYGON::GETPROPERTY
- POLYGON::INIT
- POLYGON::INITIALIZE
- POLYGON::INTERACTIONEVENTS
- POLYGON::MOVE
- POLYGON::SELECT
- POLYGON::SELECTVERTEX
- POLYGON::SETPROPERTY
- POLYGON::UPDATE_MODEMAP
- POLYGON_ROI::ACCEPTROI
- POLYGON_ROI::CLEANUP
- POLYGON_ROI::EVENT_HANDLER
- POLYGON_ROI::RESTOREDISPLAY
- POLYGON_ROI__DEFINE
- POLYGON__DEFINE
- RUBBERBANDBOX::ACCEPTROI
- RUBBERBANDBOX::CANCELROI
- RUBBERBANDBOX::CLEANUP
- RUBBERBANDBOX::DRAW
- RUBBERBANDBOX::EVENT_HANDLER
- RUBBERBANDBOX::GETPROPERTY
- RUBBERBANDBOX::INIT
- RUBBERBANDBOX::SETPROPERTY
- RUBBERBANDBOX__DEFINE
- RULER::CALCULATEBOUNDARYBOX
- RULER::CLEANUP
- RULER::CONTROLPANEL
- RULER::DRAW
- RULER::EVENT_HANDLER
- RULER::GETPROPERTY
- RULER::INIT
- RULER::SETPROPERTY
- RULER__DEFINE
- SELECTABLEGROUP::CALCULATEBOUNDARYBOX
- SELECTABLEGROUP::CLEANUP
- SELECTABLEGROUP::DRAW
- SELECTABLEGROUP::GETPROPERTY
- SELECTABLEGROUP::INIT
- SELECTABLEGROUP::MOVE
- SELECTABLEGROUP::SELECT
- SELECTABLEGROUP::SETPROPERTY
- SELECTABLEGROUP::UPGROUP
- SELECTABLEGROUP__DEFINE
- SELECTABLEOBJECT::ADDTOEVENTSTRUCTURE
- SELECTABLEOBJECT::CALCULATEBOUNDARYBOX
- SELECTABLEOBJECT::CLEANUP
- SELECTABLEOBJECT::COPYPARAMETERS
- SELECTABLEOBJECT::DRAW
- SELECTABLEOBJECT::DRAWSELECTIONBOX
- SELECTABLEOBJECT::EVENTHANDLER
- SELECTABLEOBJECT::GETPROPERTY
- SELECTABLEOBJECT::INIT
- SELECTABLEOBJECT::INITIALIZE
- SELECTABLEOBJECT::MOVE[1]
- SELECTABLEOBJECT::MOVE[2]
- SELECTABLEOBJECT::OUTLINE
- SELECTABLEOBJECT::SELECT
- SELECTABLEOBJECT::SELECTPANEL
- SELECTABLEOBJECT::SETGROUP
- SELECTABLEOBJECT::SETPROPERTY
- SELECTABLEOBJECT__DEFINE
- TAPEMEANSURE::COPYPARAMETERS
- TAPEMEASURE::ADDTOEVENTSTRUCTURE
- TAPEMEASURE::CALCULATEBOUNDARYBOX
- TAPEMEASURE::CLEANUP
- TAPEMEASURE::CONTROLPANEL
- TAPEMEASURE::CREATENEWOBJECT
- TAPEMEASURE::DRAW
- TAPEMEASURE::DRAWSELECTIONBOX
- TAPEMEASURE::EVENTHANDLER
- TAPEMEASURE::GETPROPERTY
- TAPEMEASURE::INIT
- TAPEMEASURE::INTERACTIONEVENTS
- TAPEMEASURE::MOVE
- TAPEMEASURE::OUTLINE
- TAPEMEASURE::SETPROPERTY
- TAPEMEASURE__DEFINE
- TEXTLINE::CALCULATEBOUNDARYBOX
- TEXTLINE::CLEANUP
- TEXTLINE::CONTROLPANEL
- TEXTLINE::CREATENEWOBJECT
- TEXTLINE::DRAW
- TEXTLINE::DRAWSELECTIONBOX
- TEXTLINE::EVENTHANDLER
- TEXTLINE::GETDATA
- TEXTLINE::GETPROPERTY
- TEXTLINE::INIT
- TEXTLINE::INTERACTIONEVENTS
- TEXTLINE::MOVE
- TEXTLINE::SETPROPERTY
- TEXTLINE__DEFINE

# Routine Descriptions

## ANGLETOOL

[Next Routine] [List of Routines]

     NAME:
           ANGLETOOL

     PURPOSE:

           The purpose of this routine is to create a selectable object for measuring angles
           in a graphics window. This tool is used in an interaction. See the medical
           image tab in the Catalyst example application for an example of its use.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           newObject = Obj_New("ANGLETOOL", ...)
           drawObject -> Add, newObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { ANGLETOOL, $
                 angle: 0.0, $                 ; The current angle of the tool.
                 arrowhead_size: 0L, $         ; The size of the arrowheads used with the tool.
                 clockwise: 0L, $              ; If set, positive angle is in clockwise direction.
                 insertedObject: Obj_New(), $  ; A reference to the new object created in the CreateNewObject method. (Ignored in CLEANUP.)
                 layerObject: Obj_New(), $     ; An optional CATLAYER object for holding the inserted selectable object.
                 linestyle: 0L, $              ; The linestyle of the selectable object.
                 modemap: Obj_New(), $         ; A pixmap for calculating "mode", or which vertex to move.
                 moveVertex: 0L, $             ; The vertex index of the vertex we are moving.
                 npoints: 0L, $                ; The  number of points currently in the triangle.
                 pointsPixID: Obj_New(), $     ; A pixmap for storing polygon points.
                 radians: 0L, $                ; If set, angle is in radians, not degrees.
                 statusbar: Obj_New(), $       ; If valid, motion events are reported to this object.
                 textcolor: "", $              ; The name of the color for the textual annotation.
                 text:Obj_New(), $             ; A TEXTLINE object for displaying AngleTool annotation.
                 thickness: 0.0, $             ; The thickness of the line drawing the selectable object.
                 sx: 0L, $                     ; The static X location.
                 sy: 0L, $                     ; The static Y location.
                 xpts: Ptr_New(), $            ; The three X points of the triangle.
                 ypts: Ptr_New(), $            ; The three Y points of the triangle.
                 INHERITS SELECTABLEOBJECT $
               }

     MESSAGES:

       ANGLETOOL_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE keyword
                            is NOT set.

     EVENT_STRUCTURE:

           This object will add the following fields to the event structure created by an interaction.
           The fields are defined as:

           ANGLE:      The current angle of the Angle Tool.

           CLOCKWISE:  A flag that if positive indicates the positive angle direction is in the clockwise direction.

           RADIANS:    A flag that if positive indicates the angle is specified in radians rather than degress.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, July 13, 2005.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::ADDTOEVENTSTRUCTURE

     PURPOSE:

           This method receives an event structure, which it can add information to before being sent
           to some other event handler. Normally, this method is called by an INTERACTION object of
           some kind.

     SYNTAX:

           theObject -> AddToEventStructure, event

     ARGUMENTS:

           event:      The event structure that will be added to.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a boundary box about the selectable object
           itself. The boundary box (self.box) is always stored in normalized coordinates.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::CLEANUP

     PURPOSE:

           This is the ANGLETOOL object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the selectable object.

     SYNTAX:

           boxObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::COPYPARAMETERS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::COPYPARAMETERS

     PURPOSE:

           This method returns the lower-left corner of the bounary box
           in the DESTINATION keyword, and the number of columns and rows
           in the boundary box in the EXTENT keyword, all in window or pixel
           coordinates. It's purpose is to return a section of a pixmap, for
           example, so that only that section can be copied.

     SYNTAX:

           theObject -> CopyParameters, drawid, DESTINATION=destination, EXTENT=extent

     ARGUMENTS:

           drawID:         The identifier of a draw widget object whose extent will
                           provide the size of the window for calculating device coordinates.
                           This parameter is required.

     KEYWORDS:

           DESTINATION:    A two-element array containing the lower-left corner
                           of the boundary box in device coordinates. An output keyword.

           EXTENT:         A two-element array containing the number of columns and
                           rows in the boundary box in device coordinates. An output keyword.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains a layer object, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap containers.

     SYNTAX:

           theObject -> CreateNewObject, drawID

     ARGUMENTS:

           drawID:    The draw widget which will contain the newly created object. Required unless
                      you are calling this method simply to make a copy of the current object.

           pixmapID:  The pixmap which will contain the newly created object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new box object that gets created. If the
                      method is called with just this keyword and no other arguments, the method
                      functions as a object COPY.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::DRAW

     PURPOSE:

           This method draws the selectable object in the current graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           STATUSBAR_ONLY:   If this keyword is set, and there is a valid statusbar object
                             to update, the angle is sent to the statusbar and not displayed
                             in the display window.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the selectable object.

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the selectable object in. By default, the color of
                     the selectable object (self.color).

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain ANGLETOOL properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ANGLE:          The angle of the current Angletool object.

         ARROWHEAD_SIZE: The size of the arrowhead in device coordiates. By default 1/50th of the width of
                         the display window (!D.X_Size/50.0).

         CLOCKWISE:      Set to 1 if positive angles in the clockwise direction. To 0 for counterclockwise
                         positive direction.

         HEIGHT:         The height of the polygon boundary box in normalized coordinates.

         INSERTEDOBJECT: The new object that is inserted in the CreateNewObject method.

         LAYER:          The annotation layer associated with this object.

         LINESTYLE:      The type of linestyle required. See PLOT documentation for details.

         NPOINTS:        The number of points in the polygon.

         RADIANS:        Set to 1 if the angle to be reported in radians. Set to 0 for degrees.

         STATUSBAR:      The statusbar object for reporting motion events.

         TEXTCOLOR:      The color of the object's annotation text. By default, the same as the COLOR.

         THICKNESS:      The current thickness of the polygon.

         WIDTH:          The width of the polygon boundary polygon in normalized coordinates.

         XPTS:           The X locations of points making up the polygon.

         YPTS:           The Y locations of points making up the polygon.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::INIT

     PURPOSE:

           This is the ANGLETOOL object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         ANGLE:          The angle. Usually calculated and not set. Used here to create to Angletool objects.

         ARROWHEAD_SIZE: The size of the arrowhead in device coordiates. By default 1/50th of the width of
                         the display window (!D.X_Size/50.0).

         CLOCKWISE:      Normally postitive angles are calculated in a counter-clockwise direction. Setting
                         this keyword causes the positive direction to be calculated in a clockwise direction.

         RADIANS:        Normally the angle is reported in degrees (-180 to 180). Setting this keyword
                         to 1 causes the angle to be reported in radians.

         STATUSBAR:      Set this keyword equal to an object reference of an object with a SETPROPERTY
                         method and a TEXT keyword. The angle will be sent to the statusbar object
                         during the draw motion event handling. If a statusbar is used, the angle will
                         NOT be displayed in the display window.

         LAYER:          A CATLAYER object for holding other objects. Used here only when there is an UP
                         event in INSERT mode. At that time a copy of this object is made and inserted
                         the layer object and this is then inserted into the DrawWidget and/or Pixmap object.

         LINESTYLE:      The linestyle used to draw the selectable object.

         TEXTCOLOR:      The color of the object's annotation text. By default, the same as the COLOR.

         THICKNESS:      Set this to the thickness of the selectable object. By default, 1.0.

         XPTS:           The three X points making up the triangle. The middle point is the apex of the
                         triangle. Expressed in data coordinates.

         YPTS:           The three Y points making up the triangle. The middle point is the apex of the
                         triangle. Expressed in data coordinates.

         _EXTRA:         Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from an interaction object of some type. The interaction
           may pre-process events, or send them directly here. You are required to have the
           following modes: SELECT, INSERT, and DRAW. Other modes are optional and are left
           to the programmer to interpret.

           SELECT:   All SELECT mode events are passed to the selectable object for initialization
                     of the object, as needed. If no initialization is necessary, return immediately.

           DRAW:     DRAW mode events are transitory. The object disappears as soon as the drawing of
                     the object is complete and an ACCEPT event is sent to the responsible event handler.

           INSERT:   INSERT mode events result in a new selectable object being created and inserted into
                     the object hierarchy. These objects can be selected and manipulated by other "modes"
                     of your choosing. Include the appropriate modes here.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the Interaction
                         object.

     KEYWORDS:

         INTERACTION:    The object reference to a Interaction object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::MOVE

     PURPOSE:

           This method moves the selectable object in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::OUTLINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::OUTLINE

     PURPOSE:

           This method returns a box in normalized coordinates that contains the selectable object
           and all of its parts (labels, text, etc). It is similar to the boundary box of the
           selectable object and, in fact, is often just the boundary box. Like the boundary box,
           the last element in the 2x5 array is the same as the first element.

     SYNTAX:

           outline = theObject -> Outline()

     ARGUMENTS:

         None.

     KEYWORDS:

     RETURN_VALUE:

         outline:    A 2x5 array containing the XY point pairs in normalized coordinates of a rectangle
                     big enough to contain all the parts of the object.

         None.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the bounding box of the object.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::SELECTVERTEX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::SELECTVERTEX

     PURPOSE:

           This method selects a particular vertex for movement.

     SYNTAX:

           theObject -> SelectVertex, x, y

     ARGUMENTS:

           X:          The X location of the selection.

           Y:          The Y location of the selection.

     KEYWORDS:

           DrawID:     A window object that contains the polygon. Required for converting to
                       the proper device coodinate system.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::SETPROPERTY

     PURPOSE:

           This method allows the user to set the ANGLETOOL object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         Usually the same keywords that can be set in the INIT method.

         ANGLE:          The angle. Usually calculated and not set. Used here to create to Angletool objects.

         ARROWHEAD_SIZE: The size of the arrowhead in device coordiates. By default 1/50th of the width of
                         the display window (!D.X_Size/50.0).

         CLOCKWISE:      Normally postitive angles are calculated in a counter-clockwise direction. Setting
                         this keyword causes the positive direction to be calculated in a clockwise direction.

         LAYER:          A CATLAYER object for holding other objects. Used here only when there is an UP
                         event in INSERT mode. At that time a copy of this object is made and inserted
                         the layer object and this is then inserted into the DrawWidget and/or Pixmap object.

         LINESTYLE:      The linestyle used to draw the selectable object.

         RADIANS:        Normally the angle is reported in degrees (-180 to 180). Setting this keyword
                         to 1 causes the angle to be reported in radians.

         STATUSBAR:      Set this keyword equal to an object reference of an object with a SETPROPERTY
                         method and a TEXT keyword. The angle will be sent to the statusbar object
                         during the draw motion event handling.

         TEXTCOLOR:      The color of the object's annotation text. By default, the same as the COLOR.

         THICKNESS:      Set this to the thickness of the selectable object. By default, 1.0.

         XPTS:           The three X points making up the triangle. The middle point is the apex of the
                         triangle. Expressed in data coordinates.

         YPTS:           The three Y points making up the triangle. The middle point is the apex of the
                         triangle. Expressed in data coordinates.

         _EXTRA:       Any keyword appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ANGLETOOL::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ANGLETOOL::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\angletool__define.pro)

## ARROW::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a box about the arrow.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::CLEANUP

     PURPOSE:

           This is the ARROW object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the ARROW object.

     SYNTAX:

           arrowObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains an annotation layer, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap container.

     SYNTAX:

           theObject -> CreateNewObject, drawID, pixmapID

     ARGUMENTS:

           drawID:    The draw widget which will contain the new arrow object. Required in normal operation.

           pixmapID:  The pixmap which will contain the new arrow object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new arrow object that gets created.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::DRAW

     PURPOSE:

           This method draws the arrow in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the arrow

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the arrow.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain ARROW properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ARROWHEAD:   Which arrowheads should be drawn? The current state.

         HEADSIZE:    The size of the arrow head in pixel units. But default, !D.X_Size/50.

         HEIGHT:      The height of the arrow boundary box in normalized coordinates.

         LAYER:       The annotation layer associated with this object.

         LENGTH:      The length of the arrow in data coordinates.

         LINESTYLE:   The type of linestyle required. See PLOT documentation for details.

         ROTATION:    The current rotation of the arrow (in degrees).

         THICKNESS:   The current thickness of the arrow.

         WIDTH:       The width of the arrow boundary box in normalized coordinates.

         X1:          The X location of one end of the arrow.

         Y1:          The Y location of one end of the arrow.

         X2:          The X location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

         Y2:          The Y location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

         _REF_EXTRA:  Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::INIT

     PURPOSE:

           This is the ARROW object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         ARROWHEAD:    Set this keyword to 0 to draw no arrowheads on the line. Set to 1 (the default)
                       to draw a single arrowhead at (x2,y2). Set to 2 to draw a double-headed arrow. Set
                       to 3 to draw a single arrowhead at (x1,y1).

         HEADSIZE:     The size of the arrow head in pixel units. But default, !D.X_Size/50. If set
                       to -1, the headsize is calculated at DRAW time. This is preferred for resizeable
                       graphics windows and PostScript output.

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The linestyle of the arrow. By default, 1.0 (solid).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of one end of the arrow.

         Y1:           The Y location of one end of the arrow.

         X2:           The X location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

         Y2:           The Y location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from the SelectableInteraction object based on the "mode"
           of the SelectableInteraction object. The SelectableInteraction object can process "SELECT"
           and "MOVE" mode events. All other mode events are sent here for processing by a SELECTABLEOBJECT.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the SelectableInteraction
                         interaction.

     KEYWORDS:

         INTERACTION:    The object reference to a SELECTABLEINTERACTION object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::MOVE

     PURPOSE:

           This method moves the arrow in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW::SETPROPERTY

     PURPOSE:

           This method allows the user to set the ARROW object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ARROWHEAD:    Set this keyword to 0 to draw no arrowheads on the line. Set to 1 (the default)
                       to draw a single arrowhead at (x2,y2). Set to 2 to draw a double-headed arrow. Set
                       to 3 to draw a single arrowhead at (x1,y1).

         HEADSIZE:     The size of the arrow head in pixel units. But default, !D.X_Size/50.

         LAYER:        The annotation layer for the object.

         LINESTYLE:    The type of linestyle required. See PLOT documentation for details.

         NOMESSAGE:    Set this keyword to suppress any messaging as a result of going through the
                       SetProperty method. Messaging is essential for PropertySheet widget capability,
                       but causes too many draw methods on occasion. This will prevent going through DRAW
                       methods needlessly.

         NOREFRESH:    Set this keyword if immediate refreshing of the object on the display is not required.

         ROTATION:     Set this keyword to the value of the final rotation (in degrees).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of one end of the arrow.

         Y1:           The Y location of one end of the arrow.

         X2:           The X location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

         Y2:           The Y location of the other end of the arrow. (Arrowhead here if ARROWHEAD=1.)

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## ARROW__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ARROW__DEFINE

     PURPOSE:

           The purpose of this routine is to provide an arrow that can be displayed
           in a direct graphics draw widget. The coordinate system of the Arrow
           object is either passed to it (a CatCoord object) or is a normalized
           coordinate system by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           arrowObject = Obj_New("ARROW", X1=0.5, Y1=0.5, X2=0.75, Y2=0.75)
           drawObject -> Add, arrowObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { ARROW, $
                 arrowhead: 0L, $            ; A flag to indicate which arrow heads should be drawn.
                 headsize: 0L, $             ; The arrow head size in pixels. By default !D.X_Size / 50.
                 layerObject: Obj_New(), $   ; A CATLAYER object for holding the annotation.
                 linestyle: 0L, $            ; The linestyle the arrow is drawn in.
                 midx: 0.0, $                ; The midpoint of the arrow in X.
                 midy: 0.0, $                ; The midpoint of the arrow in Y.
                 moveend: 0L, $              ; Indicates which end of arrow (1 or 2) you are moving.
                 orientation: 0.0, $         ; The orientation of the arrow
                 thickness: 0.0, $           ; The thickness of the arrow.
                 x1: 0.0, $                  ; The X location for one end of the arrow.
                 y1: 0.0, $                  ; The Y location for one end of the arrow.
                 x2: 0.0, $                  ; The X location for the other end of the arrow.
                 y2: 0.0, $                  ; The Y location for the other end of the arrow.
                 sx: 0L, $                   ; The static end of a moving arrow.
                 sy: 0L, $                   ; The static end of a moving arrow.
                 INHERITS SelectableObject $
               }

     MESSAGES:

       ARROW_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                        keyword is NOT set.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\arrow__define.pro)

## BOX::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::ADDTOEVENTSTRUCTURE

     PURPOSE:

           This method receives an event structure, which it can add information to before being sent
           to some other event handler. Normally, this method is called by an INTERACTION object of
           some kind.

     SYNTAX:

           theObject -> AddToEventStructure, event

     ARGUMENTS:

           event:      The event structure that will be added to.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a boundary box about the box itself. The boundary box
           (self.box) is always stored in normalized coordinates.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::CLEANUP

     PURPOSE:

           This is the BOX object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the BOX object.

     SYNTAX:

           boxObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains a layer object, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap containers.

     SYNTAX:

           theObject -> CreateNewObject, drawID

     ARGUMENTS:

           drawID:    The draw widget which will contain the newly created object. Required in normal operation.

           pixmapID:  The pixmap which will contain the newly created object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new box object that gets created. If the
                      method is called with just this keyword and no other arguments, the method
                      functions as a object COPY.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::DRAW

     PURPOSE:

           This method draws the box in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the box

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the box.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain BOX properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA:   If set, indicates that the ellipse is clipped to the data coordinate range.

         HEIGHT:         The height of the box boundary box in normalized coordinates.

         INSERTEDOBJECT: The new object that is inserted in the CreateNewObject method.

         LAYER:          The annotation layer associated with this object.

         LINESTYLE:      The type of linestyle required. See PLOT documentation for details.

         LENGTH:         The length of the box in data coordinates.

         THICKNESS:      The current thickness of the box.

         WIDTH:          The width of the box boundary box in normalized coordinates.

         X1:             The X location of lower-left corner of the box.

         Y1:             The Y location of lower-left corner of the box.

         X2:             The X location of upper-right corner of the box.

         Y2:             The Y location of upper-right corner of the box.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::INIT

     PURPOSE:

           This is the BOX object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA: The box is draw with PLOTS, which normally does NOT clip to
                       the data range. Set this keyword to put clipping into effect for
                       drawing the box.

         LAYER:        A CATLAYER object for holding other objects. Used here only when there is an UP
                       event in INSERT mode. At that time a copy of this object is made and inserted
                       the layer object and this is then inserted into the DrawWidget and/or Pixmap object.

         LINESTYLE:    The linestyle of the box. By default, 1.0 (solid).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of one corner of the box in data coordinates.

         Y1:           The Y location of one corner of the box in data coordinates.

         X2:           The X location of the corner end of the box in data coordinates.

         Y2:           The Y location of the corner end of the box in data coordinates.

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::INTERACTIONEVENTS[1]

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from an interaction object of some type. The interaction
           may pre-process events, or send them directly here.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the Interaction
                         object.

     KEYWORDS:

         INTERACTION:    The object reference to a Interaction object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::INTERACTIONEVENTS[2]

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from an interaction object of some type. The interaction
           may pre-process events, or send them directly here.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the Interaction
                         object.

     KEYWORDS:

         INTERACTION:    The object reference to a Interaction object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## BOX::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::MOVE

     PURPOSE:

           This method moves the box in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::SELECTMODE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::SELECTMODE

     PURPOSE:

           This method selects the movement mode based on which which handle is closest
           to the selection point. The selection point is a location in a draw widget in
           device coordinates.

     SYNTAX:

           theObject -> SelectMode, x, y

     ARGUMENTS:

           X:          The X location of the selection.

           Y:          The Y location of the selection.

     KEYWORDS:

           DrawID:     A window object that contains the box. Required for converting to
                       the proper device coodinate system.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::SETPROPERTY

     PURPOSE:

           This method allows the user to set the BOX object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA: The ellipse is draw with PLOTS, which normally does NOT clip to
                       the data range. Set this keyword to put clipping into effect for
                       drawing the ellipse.

         DRAW:         If this keyword is set, the DRAW method will be called at the end of the SetProperty method.

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The type of linestyle required. See PLOT documentation for details.

         NOMESSAGE:    Set this keyword to suppress any messaging as a result of going through the
                       SetProperty method. Messaging is essential for PropertySheet widget capability,
                       but causes too many draw methods on occasion. This will prevent going through DRAW
                       methods needlessly.

         NOREFRESH:    Set this keyword if immediate refreshing of the object on the display is not required.

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of lower-left corner of the box.

         Y1:           The Y location of lower-left corner of the box.

         X2:           The X location of upper-right corner of the box.

         Y2:           The Y location of upper-right corner of the box.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## BOX__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           BOX__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a rectangle or box that can be displayed
           in a direct graphics draw widget. The coordinate system of the Box
           object is either passed to it (a CatCoord object) or is a normalized
           coordinate system by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           boxObject = Obj_New("BOX", X1=0.5, Y1=0.5, X2=0.75, Y2=0.75)
           drawObject -> Add, boxObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { BOX, $
                 clip_to_data: 0B, $         ; Flag that if set will allow clipping to data range in DRAW method.
                 layerObject: Obj_New(), $   ; A CATLAYER object for holding the annotation.
                 linestyle: 0L, $            ; The line style of the box.
                 midx: 0.0, $                ; The midpoint of the box in X.
                 midy: 0.0, $                ; The midpoint of the box in Y.
                 modemap: Obj_New(), $       ; A pixmap for calculating "mode".
                 moveend: 0L, $              ; Indicates which end of box you are moving.
                 thickness: 0.0, $           ; The thickness of the box.
                 x1: 0.0, $                  ; The X location for lower-left corner of the box.
                 y1: 0.0, $                  ; The Y location for lower-left corner of the box.
                 x2: 0.0, $                  ; The X location for upper-right corner of the box.
                 y2: 0.0, $                  ; The Y location for upper-right corner of the box.
                 sx: 0L, $                   ; The static X location.
                 sy: 0L, $                   ; The static Y location.
                 INHERITS SelectableObject $
               }

     MESSAGES:

       BOX_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                      keyword is NOT set.

     EVENT_STRUCTURE:

           This object will add the following fields to the event structure created by an interaction.
           The fields are defined as:

           BOUNDARY_BOX:     A 2x5 element array in normalized coordinates giving the boundary box of
                             the object.

           XPTS:             A two element array giving the X values of the lower-left and upper-right
                             corners of the box in data coordinates.

           YPTS:             A two element array giving the Y values of the lower-left and upper-right
                             corners of the box in data coordinates.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\box__define.pro)

## CATCOLORBAR

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR

     PURPOSE:

           The purpose of this routine is to implement a colorbar object as a selectable object.
           The colors for the color bar can be passed into the program as a COLORTOOL object
           with the COLOR_OBJECT keyword. A gray-scale color table with 256 colors is loaded
           by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           newObject = Obj_New("CATCOLORBAR", ...)
           drawObject -> Add, newObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CATCOLORBAR, $
                 bar: Obj_New(), $            ; The colorbar image.
                 charsize: 0.0, $             ; The character size of the annotation.
                 divisions: 0L, $             ; The number of major tick marks.
                 extra: Ptr_New(), $          ; Placeholder for extra keywords.
                 font: 0L, $                  ; The font to use for annotations.
                 format: "", $                ; The annotation formating.
                 layerObject: Obj_New(), $    ; An optional CATLAYER object for holding the inserted selectable object.
                 minor: 0L, $                 ; The number of minor tick marks.
                 ncolors: 0L, $               ; The number of colors in the colorbar.
                 range: FltArr(2), $          ; The range of values displayed on the colorbar.
                 right: 0L, $                 ; The flag for text on RIGHT of vertical colorbars.
                 thickness: 0.0, $            ; The thickness of the selectable object.
                 ticklen: 0.0, $              ; The length of the tick marks.
                 tickv: Ptr_New(), $          ; Values for the tick marks.
                 title: "", $                 ; The title string for the colorbar.
                 top: 0L, $                   ; The flag for text on TOP of horizontal colorbars.
                 vertical: 0L, $              ; The flag for a vertical colorbar.
                 INHERITS SELECTABLEOBJECT $
               }

     MESSAGES:

       CATCOLORBAR_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE keyword
                              is NOT set.

     MODIFICATION_HISTORY:

        Written by: David W. Fanning, April 17, 2005.
        Added automatic True-Type fonts for PostScript output, if Hershey fonts would otherwise
             be selected. 1 August 2006. DWF.
        Added MATCHPARENT keyword to INIT method. 2 August 2006. DWF.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method is here for completeness. The boundary box is actually
           calculated at the end of the DRAW method.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::CLEANUP

     PURPOSE:

           This is the CATCOLORBAR object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the selectable object.

     SYNTAX:

           boxObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains a layer object, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap containers.

     SYNTAX:

           theObject -> CreateNewObject, drawID

     ARGUMENTS:

           drawID:    The draw widget which will contain the newly created object. Required in normal operation.

           pixmapID:  The pixmap which will contain the newly created object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new box object that gets created. If the
                      method is called with just this keyword and no other arguments, the method
                      functions as a object COPY.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::DRAW

     PURPOSE:

           This method draws the box in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the colorbar object

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the text.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain CATCOLORBAR properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      The character size of the color bar annotations.

         COLOR:         The name of the color to use for drawing the borders and annotations
                        of the colorbar.
    ;
         CTINDEX:       The color table index number currently used in the colorbar.

         DIVISIONS:     The number of divisions to divide the bar into.

         FONT:          The type of font used for annotation. Hershey: 0, Hardware:1, True-Type: 2.

         FORMAT:        The format of the bar annotations.

         LAYER:         A CATLAYER object for holding other objects.

         MINOR:         The number of minor tick divisions.

         NCOLORS:       This is the number of colors in the color bar.

         POSITION:      A four-element array of normalized coordinates in the same
                        form as the POSITION keyword on a plot.

         RANGE:         A two-element vector of the form [min, max].

         RIGHT:         Set if the title is on the right of the colorbar.

         THICKNESS:     Set this to the thickness of the line around the colorbar. By default, 1.0.

         TICKNAMES:     A string array of names or values for the tick marks.

         TITLE:         A string used as the title of the colorbar. Set to "" by default.

         TOP:           Set if the title is on the top of the colorbar.

         VERTICAL:      Set if the colorbar is vertical rather than horizontal.

         _REF_EXTRA:    Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::INIT

     PURPOSE:

           This is the CATCOLORBAR object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      The character size of the color bar annotations. Default is 1.0.

         COLOR:         The name of the color to use for drawing the borders and annotations
                        of the colorbar. By default, "white".

         COLOR_OBJECT:  Use this keyword to load a color object for setting up colors
                        for data display.

         CTINDEX:       The color table index number of the colors to load. Used only if a
                        COLOR_OBJECT is not passed in. Set to 0 (gray-scale) by default.

         DIVISIONS:     The number of divisions to divide the bar into. There will
                        be (divisions + 1) annotations. The default is 6.

         FONT:          Sets the font of the annotation. Hershey: 0, Hardware:1, True-Type: 2.

         FORMAT:        The format of the bar annotations. Default is '(I5)'.

         INVERTCOLORS:  Setting this keyword inverts the colors in the color bar.

         LAYER:         A CATLAYER object for holding other objects. Used here only when there is an UP
                        event in INSERT mode. At that time a copy of this object is made and inserted
                        the layer object and this is then inserted into the DrawWidget and/or Pixmap object.

         MATCHPARENT:   If this keyword is set, and the parent of the CATCOLORBAR is a CATIMAGE, then
                        the position of the colorbar will be matched to the actual position of the image
                        in the window.

         MINOR:         The number of minor tick divisions. Default is 2.

         NCOLORS:       This is the number of colors in the color bar.

         NOINTERP:      Normally the colors are interpolated in the colorbar. Setting this
                        keyword will ensure the colors are replicated by nearest neighbor sampling.

         POSITION:      A four-element array of normalized coordinates in the same
                        form as the POSITION keyword on a plot. Default is
                        [0.88, 0.10, 0.95, 0.90] for a vertical bar and
                        [0.10, 0.88, 0.90, 0.95] for a horizontal bar.
    ;
         RANGE:         A two-element vector of the form [min, max]. Provides an
                        alternative way of setting the MINRANGE and MAXRANGE keywords.

         RIGHT:         This puts the labels on the right-hand side of a vertical
                        color bar. It applies only to vertical color bars.

         THICKNESS:     Set this to the thickness of the line around the colorbar. By default, 1.0.

         TICKNAMES:     A string array of names or values for the tick marks.

         TITLE:         A string used as the title of the colorbar. Set to "" by default.

         TOP:           This puts the labels on top of the bar rather than under it.
                        The keyword only applies if a horizontal color bar is rendered.

         VERTICAL:      Setting this keyword give a vertical color bar. The default
                        is a horizontal color bar.

         _EXTRA:        Any keywords appropriate for the SELECTABLEOBJECT INIT method or the PLOT
                        procedure for drawing the box around the colorbar image.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from an interaction object of some type. The interaction
           may pre-process events, or send them directly here. You are required to have the
           following modes: SELECT, INSERT, and DRAW. Other modes are optional and are left
           to the programmer to interpret.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the Interaction
                         object.

     KEYWORDS:

         INTERACTION:    The object reference to a Interaction object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::MESSAGEHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::MESSAGEHANDLER

     PURPOSE:

           This method responds to "messages" sent from other objects. It is called
           automatically by other objects. To receive messages, it is necessary to
           "register" with the messaging object.

     SYNTAX:

           None. Called by other objects.

     ARGUMENTS:

           TITLE:  The message title. This is the "name" of the message indicated when
                   the object registered for messages with the messaging object.

     KEYWORDS:

           DATA:   Information from the SENDER that may be relevant in processing the message.
                   Typically, an anonymous structure variable, although it could be anything at all.

           SENDER: An output keyword. This is the object reference of the object that is sending
                   the message.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::MOVE

     PURPOSE:

           This method moves the selectable object in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the bounding box.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::SELECTMODE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::SELECTMODE

     PURPOSE:

           This method selects the movement mode based on which which handle is closest
           to the selection point. The selection point is a location in a draw widget in
           device coordinates.

     SYNTAX:

           theObject -> SelectMode, x, y

     ARGUMENTS:

           X:          The X location of the selection.

           Y:          The Y location of the selection.

     KEYWORDS:

           DrawID:     A window object that contains the box. Required for converting to
                       the proper device coodinate system.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::SETPROPERTY

     PURPOSE:

           This method allows the user to set the CATCOLORBAR object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      The character size of the color bar annotations. Default is 1.0.

         COLOR:         The name of the color to use for drawing the borders and annotations
                        of the colorbar. By default, "white".

         COLOR_OBJECT:  Use this keyword to load a color object for setting up colors
                        for data display.

         CTINDEX:       The color table index number of the colors to load. Used only if a
                        COLOR_OBJECT is not passed in. Set to 0 (gray-scale) by default.

         DIVISIONS:     The number of divisions to divide the bar into. There will
                        be (divisions + 1) annotations. The default is 6.

         DRAW:          Set this keyword if you wish to call the DRAW method on SetProperty completion.

         FONT:          Sets the font of the annotation. Hershey: 0, Hardware:1, True-Type: 2.

         FORMAT:        The format of the bar annotations. Default is '(I5)'.

         INVERTCOLORS:  Setting this keyword inverts the colors in the color bar.

         LAYER:         A CATLAYER object for holding other objects. Used here only when there is an UP
                        event in INSERT mode. At that time a copy of this object is made and inserted
                        the layer object and this is then inserted into the DrawWidget and/or Pixmap object.

         MINOR:         The number of minor tick divisions. Default is 2.

         NCOLORS:       This is the number of colors in the color bar.

         NOINTERP:      Normally the colors are interpolated in the colorbar. Setting this
                        keyword will ensure the colors are replicated by nearest neighbor sampling.

         NOMESSAGE:     Set this keyword to suppress normal message sending.

         POSITION:      A four-element array of normalized coordinates in the same
                        form as the POSITION keyword on a plot. Default is
                        [0.88, 0.10, 0.95, 0.90] for a vertical bar and
                        [0.10, 0.88, 0.90, 0.95] for a horizontal bar.
    ;
         RANGE:         A two-element vector of the form [min, max]. Provides an
                        alternative way of setting the MINRANGE and MAXRANGE keywords.

         RIGHT:         This puts the labels on the right-hand side of a vertical
                        color bar. It applies only to vertical color bars.

         THICKNESS:     Set this to the thickness of the line around the colorbar. By default, 1.0.

         TICKNAMES:     A string array of names or values for the tick marks.

         TITLE:         A string used as the title of the colorbar. Set to "" by default.

         TOP:           This puts the labels on top of the bar rather than under it.
                        The keyword only applies if a horizontal color bar is rendered.

         VERTICAL:      Setting this keyword give a vertical color bar. The default
                        is a horizontal color bar.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATCOLORBAR::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATCOLORBAR::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\catcolorbar__define.pro)

## CATGRAPHICSCMDTOOL::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::CLEANUP

     PURPOSE:

           This is the CATGRAPHICSCMDTOOL object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

           _EXTRA:  Any keyword appropriate for the "TOOLATOM::Cleanup" method.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::DRAW

     PURPOSE:

           This method draws or executes the graphics command.
    ;
     SYNTAX:

           thisObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::GETPROPERTY

     PURPOSE:

           This method enables the getting of the CATGRAPHICSCMDTOOL object class
           properties.

     SYNTAX:

           aGraphicsCmd -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CAT_COLOR_OBJECT: A colortool object subclassed from COLORTOOL. Sets up the color table for
                           the graphics command.

         CAT_COORD_OBJECT: A coordinates object subclassed from CATCOORD. The coordinates object is
                           automatically updated *after* the DRAW method is completed, which keeps
                           the data coordinate system up to date for subsequent interaction with
                           the graphics output.

         COMMAND:          The current graphics command.

         KEYWORDS:         The keywords associated with the graphics command.

         NPARAMS:          The number of parameters associated with the graphics command.

         P1:               The data associated with the first positional parameter of the graphics command.

         P2:               The data associated with the second positional parameter of the graphics command.

         P3:               The data associated with the third positional parameter of the graphics command.

         _EXTRA:           Any keywords appropriate for the superclass SetProperty methods.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::INIT

     PURPOSE:

           This is the CATGRAPHICSCMDTOOL object class initialization method.

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

           Command:      This is the name of the graphics "command" that is to be executed.
                         It should be a string. For example, "Surface" or "Contour".

           P1:           This is the first positional parameter of the graphics command.

           P2:           This is the second positional parameter of the graphics command.

           P3:           This is the third positional parameter of the graphics command.

     KEYWORDS:

           AUTO_DESTROY: This object keeps track of the number of parents it has (reference counting). When
                         this value changes from 1 to 0, the object will be destroyed unless Auto_Destroy
                         has been set to zero. (Input)

           CAT_COLOR_OBJECT: A colortool object subclassed from COLORTOOL. Sets up the color table for
                         the graphics command.

           CAT_COORD_OBJECT: A coordinates object subclassed from CATCOORD. The coordinates object is
                         automatically updated *after* the DRAW method is completed, which keeps
                         the data coordinate system up to date for subsequent interaction with
                         the graphics output.

           DECOMPOSED:   Set this keyword to 0 to turn color decomposition OFF before executing
                         the graphics command. Default is color decomposition ON (this is also
                         known as "true-color mode".)

           EVENT_OBJECT: This is an object reference to an object that will receive the
                         event from a specific widget event. It is the equivalent (in
                         object terms) of specifying an EVENT_PRO or EVENT_FUNC keyword.
                         In other words, it is a way of deflected an event from the EVENTHANDLER
                         method of the object widget that generated the event to the EVENTHANDLER
                         method of the object specified with this keyword.

           EXCLUSIVE_EVENT_OBJECT: If this keyword is set to a vaid object, events are passed directly
                         and only to this object, ignoring the other event objects. To disable this
                         set this keyword to be a NULL object or zero. This keyword is designed for
                         situations where an object wishes to hog the events for a limited period.

           INDEXED:      If set, the contents of this container will remain at the same index(ie:
                         indices will not automatically be re-used.

           MEMORY_MANAGEMENT: Setting this keyword to zero disables automatic memory management for
                         this container. This means that child objects will not realize that they
                         are children of this container.

           NAME:         The "name" of the object. Used to keep track of the object in the code.
                         You can "GET" an object by its name, for example.  Any string is acceptible. (Input)

           NO_COPY:      Set this keyword to transfer the UVALUE without copying.

           NOCACHE:      Set this keyword to indicate that the input data should not be cached
                         or stored in the storage location.

           PARENT:       A parent container object. Must be subclassed from IDL_CONTAINER. The object
                         will be added to its parent container. (Input)

           POSITION:     This object's position in the parent container. See the IDL_CONTAINER
                         documentation. (Input)

           REPORTLEVEL:  The reporting level for the atom. This is honored only if the reporting
                         level for the atom is higher than the reporting level in the !Smart system
                         variable. It is used primarily for debugging purposes. Values between 0 and 2. (Input)

           TARGET:       Set this keyword to an object reference for the target object. The tool is
                         applied to the data in this target.

           UVALUE:       A user-value pointer. Can be used to store any IDL variable type.

           _EXTRA:       Any keywords appropriate for the graphics command.

      NOTES:

          Note that it is possible to run into ambiguous keyword problems when loading a graphics command
          with the INIT method. For example, if the graphics command you are loading contains any of the
          keywords listed above, then the keyword will be misinterpreted, since the keyword will be applied
          to object properties and not to the graphics command per se. (The POSITION keyword is an obvious
          conflict with many graphics commands.) Rather than prevent you from trying, I've decided to do
          what I can with what I am given. But if you find this unsuccessful, then you can just create the
          object with "object" type keywords, and load the graphics command with the unambiguous LOADCOMMAND
          method.

          It is *always* safer to create the object, and *then* load the command with the LOADCOMMAND method.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::LOADCOMMAND

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::LoadCommand

     PURPOSE:

           This method allows the user to load a command into the object.

     SYNTAX:

           aGraphicsCmd -> LoadCommand, 'command', p1, p2, p3

     ARGUMENTS:

           Command:      This is the name of the graphics "command" that is to be executed.
                         It should be a string. For example, "Surface" or "Contour".

           P1:           This is the first positional parameter of the graphics command.

           P2:           This is the second positional parameter of the graphics command.

           P3:           This is the third positional parameter of the graphics command.

     KEYWORDS:

         DRAW:          Set this keyword to immediately call the Draw method when the command is loaded.

         _EXTRA:        Any keywords appropriate for command may be used.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::PIXEL_TO_VALUE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::PIXEL_TO_VALUE

     PURPOSE:

           This method calculates the data value underneath a pixel location
           in the display window. To be accurate, the window that contains the image
           MUST BE the current graphics window or you MUST PASS the window number in
           with the WINDOWINDEX keyword.

     SYNTAX:

           data_value = aGraphicsCmd -> Pixel_to_Value(x, y)

     RETURN_VALUE:

           data_value:  A two element array of the x and y points converted to data coordinates.

     ARGUMENTS:

           X:           The x location in the display window (pixel coordinates).

           Y:           The y location in the display window (pixel coordinates).

     INPUT_KEYWORDS:

           WINDOWINDEX: The window index number of the window containing the image object. Set
                        to !D.Window by default.

     OUTPUT_KEYWORDS:

           INSIDE:      This keyword is set to 1 if the (x,y) value is inside the rectangle formed
                        by [!X.Crange[0], !Y.Crange[0], !X.Crange[1], !Y.Crange[1]]. Otherwise, it
                        is set to 0.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::REDO

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::REDO

     PURPOSE:

           This method attempts to redo the previous command operation.
    ;
     SYNTAX:

           thisObject -> REDO

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::SETPROPERTY

     PURPOSE:

           This method enables the setting of the CATGRAPHICSCMDTOOL object class
           properties.

     SYNTAX:

           aGraphicsCmd -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CAT_COLOR_OBJECT: A colortool object subclassed from COLORTOOL. Sets up the color table for
                           the graphics command.

         CAT_COORD_OBJECT: A coordinates object subclassed from CATCOORD. The coordinates object is
                           automatically updated *after* the DRAW method is completed, which keeps
                           the data coordinate system up to date for subsequent interaction with
                           the graphics output.

         _EXTRA:           Any keywords appropriate for the superclass SetProperty methods.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL::UNDO

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL::UNDO

     PURPOSE:

           This method attempts to undo the previous command operation by restoring
           the cached graphics window. If the window is no longer available, or there
           is no cache, the method fails silently.
    ;
     SYNTAX:

           thisObject -> UNDO

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CATGRAPHICSCMDTOOL__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CATGRAPHICSCMDTOOL__DEFINE

     PURPOSE:

           The purpose of this routine is to implement any IDL graphics command
           procedure as a tool object, giving the command the ability to be undone. Any
           graphics command can be used as long as it requires no more than three
           positional parameters. Any number of keywords are supported.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           aTool = Obj_New("CATGRAPHICSCMDTOOL", command, p1, p2, p2, Keyword=keyword)

     SUPERCLASSES:

           CATTOOL
           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CATGRAPHICSCMDTOOL, $  ; The CATGRAPHICSCMDTOOL object class.
                 INHERITS CATTOOL, $    ; Inherits the CATTOOL object class.
                 _command: "", $        ; The IDL graphics command.
                 _coords: Obj_New(), $  ; A CATCOORD coordinates object.
                 _colors: Obj_New(), $  ; A COLORTOOL color object.
                 _decomposed: 0L, $     ; The color decomposition state for the command.
                 _p1: Ptr_New(), $      ; The first positional parameter of the command.
                 _p2: Ptr_New(), $      ; The second positional parameter of the command.
                 _p3: Ptr_New(), $      ; The third positional parameter of the command.
                 _nparams: 0L, $        ; The number of parameters used in the call.
                 _keywords: Ptr_New(),  ; A structure of keywords used with the command.
               }

     MODIFICATION_HISTORY:

           Written by: David Fanning, April 24, 2003.

(See C:\temp\catalyst\source\graphics\catgraphicscmdtool__define.pro)

## CONTRASTBOX::ACCEPTBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::ACCEPTBOX

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptBox, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::CANCELBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::CANCELBOX

     PURPOSE:

           This method cancels the box on the display and allows the user to start over
     SYNTAX:

           theObject -> CancelBox, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::CLEANUP

     PURPOSE:

           This is the CONTRASTBOX object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::DRAW

     PURPOSE:

           This method draws the interaction in the display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::INIT

     PURPOSE:

           This is the CONTRASTBOX object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:   The draw widget object that you will be taking over events from.

     KEYWORDS:

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::REFRESHPIXMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::REFRESHPIXMAP

     PURPOSE:

           This method refreshes the pixmap (the original display might have changed in some way) and
           (optionally) calls the DRAW method.

     SYNTAX:

           theObject -> RefreshPixmap

     ARGUMENTS:

           None.

     KEYWORDS:

           DRAW:       If this keyword is set, the DRAW method is called..

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::RESTOREDISPLAY

     PURPOSE:

           This method ...

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX::SETDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX::SETDISPLAY

     PURPOSE:

           This method ...

     SYNTAX:

           theObject -> SetDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## CONTRASTBOX__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           CONTRASTBOX__DEFINE

     PURPOSE:

           A contrastbox object is a moveable, rubberband-type box interaction
           in which only the portion of the window inside the box is shown in
           full color. The portion of the window outside the box is shown in
           muted colors. The colors are muted by reducing the saturation by 50%.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("CONTRASTBOX")

     SUPERCLASSES:

           MOVEABLEBOX
           RUBBERBANDBOX
           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { CONTRASTBOX, $
                 contrastID: Obj_New(), $          ; The contrast window.
                 INHERITS MOVEABLEBOX $
               }

     MESSAGES:

           None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='RUBBERBANDBOX_EVENT', $
                      NAME: self._name, BOX:self.box, XPTS:FLTARR(5), YPTS:FLATARR(5) }

           In which the XPTS and YPTS fields contain the X and Y locations of the box in a form
           suitable for drawing the ROI on the display with PLOTS. The BOX, XPTS, and YPTS are
           converted to the coordinate system of the draw widget associated with the interaction
           before being placed in the event structure.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 October 2004.

(See C:\temp\catalyst\source\graphics\contrastbox__define.pro)

## ELLIPSE::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::ADDTOEVENTSTRUCTURE

     PURPOSE:

           This method receives an event structure, which it can add information to before being sent
           to some other event handler. Normally, this method is called by an INTERACTION object of
           some kind.

     SYNTAX:

           theObject -> AddToEventStructure, event

     ARGUMENTS:

           event:      The event structure that will be added to.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a boundary ellipse about the ellipse itself.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::CLEANUP

     PURPOSE:

           This is the ELLIPSE object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the ELLIPSE object.

     SYNTAX:

           ellipseObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains an annotation layer, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap container.

     SYNTAX:

           theObject -> CreateNewObject, drawID, pixmapID

     ARGUMENTS:

           drawID:    The draw widget which will contain the new arrow object. Required in normal operation.

           pixmapID:  The pixmap which will contain the new arrow object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new arrow object that gets created.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::DRAW

     PURPOSE:

           This method draws the ellipse in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary ellipse of the ellipse

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the ellipse in. By default, the color of the ellipse.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain ELLIPSE properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA:   If set, indicates that the ellipse is clipped to the data coordinate range.

         HEIGHT:         The height of the ellipse boundary ellipse in normalized coordinates.

         INSERTEDOBJECT: The new object that is inserted in the CreateNewObject method.

         LAYER:          The annotation layer associated with this object.

         LINESTYLE:      The type of linestyle required. See PLOT documentation for details.

         ROTATION:       The rotation in degrees counterclockwise of the X axis.

         THICKNESS:      The current thickness of the ellipse.

         WIDTH:          The width of the ellipse boundary ellipse in normalized coordinates.

         XCENTER:        The X coordinate of the center of the ellipse.

         XRADIUS:        The axis radius in the X direction.

         YCENTER:        The Y coordinate of the center of the ellipse.

         YRADIUS:        The axis radius in the Y direction.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::INIT

     PURPOSE:

           This is the ELLIPSE object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA: The ellipse is draw with PLOTS, which normally does NOT clip to
                       the data range. Set this keyword to put clipping into effect for
                       drawing the ellipse.

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The linestyle of the ellipse. By default, 1.0 (solid).

         NPOINTS:      The number of points used to draw the ellipse. By default, 120.

         ROTATION:     The rotation in degrees counterclockwise of the X axis.

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         XCENTER:      The X coordinate of the center of the ellipse.

         XRADIUS:      The axis radius in the X direction.

         YCENTER:      The Y coordinate of the center of the ellipse.

         YRADIUS:      The axis radius in the Y direction.

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from the SelectableInteraction object based on the "mode"
           of the SelectableInteraction object. The SelectableInteraction object can process "SELECT"
           and "MOVE" mode events. All other mode events are sent here for processing by a SELECTABLEOBJECT.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the SelectableInteraction
                         interaction.

     KEYWORDS:

         INTERACTION:    The object reference to a SELECTABLEINTERACTION object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::MOVE

     PURPOSE:

           This method moves the ellipse in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the bounding box of the ellipse.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::SELECTMODE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::SELECTMODE

     PURPOSE:

           This method selects the movement mode based on which which handle is closest
           to the selection point. The selection point is a location in a draw widget in
           device coordinates.

     SYNTAX:

           theObject -> SelectMode, x, y

     ARGUMENTS:

           X:          The X location of the selection.

           Y:          The Y location of the selection.

     KEYWORDS:

           DrawID:     A window object that contains the ellipse. Required for converting to
                       the proper device coodinate system.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::SETPROPERTY

     PURPOSE:

           This method allows the user to set the ELLIPSE object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CLIP_TO_DATA: The ellipse is draw with PLOTS, which normally does NOT clip to
                       the data range. Set this keyword to put clipping into effect for
                       drawing the ellipse.

         LAYER:        The annotation layer for the object.

         LINESTYLE:    The type of linestyle required. See PLOT documentation for details.

         NOMESSAGE:    Set this keyword to suppress any messaging as a result of going through the
                       SetProperty method. Messaging is essential for PropertySheet widget capability,
                       but causes too many draw methods on occasion. This will prevent going through DRAW
                       methods needlessly.

         NOREFRESH:    Set this keyword if immediate refreshing of the object on the display is not required.

         ROTATION:     The rotation in degrees counterclockwise of the X axis.

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         XCENTER:      The X coordinate of the center of the ellipse.

         XRADIUS:      The axis radius in the X direction.

         YCENTER:      The Y coordinate of the center of the ellipse.

         YRADIUS:      The axis radius in the Y direction.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## ELLIPSE_ROI::ACCEPTROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::ACCEPTROI

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::CANCELROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::CANCELROI

     PURPOSE:

           This method cancels the box on the display and allows the user to start over
     SYNTAX:

           theObject -> CancelROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::CLEANUP

     PURPOSE:

           This is the ELLIPSE_ROI object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::DRAW

     PURPOSE:

           This method draws the interaction in the display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            ELLIPSE_ROI::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the ELLIPSE_ROI object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain ELLIPSE_ROI properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         DEVICE:       Set this keyword if you want the X and Y points (see XPTS and YPTS) returned
                       in device coordinates. Otherwise, they are returned in the coordinate system
                       of the display window (if there is one).

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. By default, 2.

         XPTS:         The X points in the ROI. Returned in coordinate system of the display window, if possible.

         YPTS:         The Y points in the ROI. Returned in coordinate system of the display window, if possible.

         _REF_EXTRA:   Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::INIT

     PURPOSE:

           This is the ELLIPSE_ROI object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:   The draw widget object that you will be taking over events from.

     KEYWORDS:

         COUNT:        The number of points used to draw the ellipse. By default, 120.

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. By default, 2.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::RESTOREDISPLAY

     PURPOSE:

           This method overrides the INTERACTION RestoreDisplay method by also destroying
           the buffer pixmap.

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::SETDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::SETDISPLAY

     PURPOSE:

           This method overrides the INTERACTION SetDisplay method by adding
           a pixmap widget for buffering output.

     SYNTAX:

           theObject -> SetDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI::SETPROPERTY

     PURPOSE:

           This method allows the user to set the ELLIPSE_ROI object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         _EXTRA:       Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE_ROI__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE_ROI__DEFINE

     PURPOSE:

           The purpose of this routine is to provide an ellipse ROI interaction.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("ELLIPSE_ROI")

     SUPERCLASSES:

           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { ELLIPSE_ROI, $
                 xpts: Ptr_New(), $        ; The X points in the ROI.
                 ypts: Ptr_New(), $        ; The X points in the ROI.
                 count: 0L, $              ; The number of points in the ROI.
                 bufferID: Obj_New(), $    ; A pixmap buffer for smooth graphics display.
                 INHERITS INTERACTION $
               }

     MESSAGES:

       None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='ELLIPSE_ROI_EVENT', $
                      NAME: self._name, XPTS:FLTARR(), YPTS:FLATARR(), COUNT:0L }

           In which the XPTS and YPTS fields contain the X and Y locations of the polygon in a form
           suitable for drawing the ROI on the display with PLOTS. The COUNT field contains the number
           of points in the XPTS and YPTS vectors. The XPTS and YPTS are converted to the coordinate
           system of the draw widget associated with the interaction before being placed in the event structure.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, December 27, 2004.

(See C:\temp\catalyst\source\graphics\ellipse_roi__define.pro)

## ELLIPSE__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           ELLIPSE__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a circle or ellipse that can be displayed
           in a direct graphics draw widget. The coordinate system of the Ellipse
           object is either passed to it (a CatCoord object) or is a normalized
           coordinate system by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           ellipseObject = Obj_New("ELLIPSE", X1=0.5, Y1=0.5, X2=0.75, Y2=0.75)
           drawObject -> Add, ellipseObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { ELLIPSE, $
                 clip_to_data: 0B, $         ; Flag that if set will allow clipping to data range in DRAW method.
                 insertedObject: Obj_New(), $; The new object created in the CreateNewObject method. (Ignored in CLEANUP.)
                 linestyle: 0L, $            ; The line style of the ellipse.
                 layerObject: Obj_New(), $   ; A CATLAYER object for holding the annotation.
                 modemap: Obj_New(), $       ; A pixmap for calculating "mode".
                 moveend: 0L, $              ; Indicates which end of ellipse you are moving.
                 npoints: 0L, $              ; The number of points used to draw the ellipse. 120 by default.
                 rotation: 0.0, $            ; The rotation of the x axis of the ellipse.
                 sx: 0L, $                   ; The static X location.
                 sy: 0L, $                   ; The static Y location.
                 thickness: 0.0, $           ; The thickness of the ellipse.
                 xcenter: 0.0, $             ; The midpoint of the ellipse in X.
                 ycenter: 0.0, $             ; The midpoint of the ellipse in Y.
                 xradius: 0.0, $             ; The radius of the X axis.
                 yradius: 0.0, $             ; The radius of the Y axis.
                 INHERITS SelectableObject $
               }

     MESSAGES:

       ELLIPSE_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                          keyword is NOT set.

     EVENT_STRUCTURE:

           This object will add the following fields to the event structure created by an interaction.
           The fields are defined as:

           BOUNDARY_BOX:     A 2x5 element array in normalized coordinates giving the boundary box of
                             the object.

           XPTS:             An array of X points in data coordinates descriping an ellipse.

           YPTS:             An array of Y points in data coordinates descriping an ellipse.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\ellipse__define.pro)

## FREEHAND_ROI::ACCEPTROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::ACCEPTROI

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::CANCELROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::CANCELROI

     PURPOSE:

           This method cancels the box on the display and allows the user to start over
     SYNTAX:

           theObject -> CancelROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::CLEANUP

     PURPOSE:

           This is the FREEHAND_ROI object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::DRAW

     PURPOSE:

           This method draws the interaction in the display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            FREEHAND_ROI::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the FREEHAND_ROI object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain FREEHAND_ROI properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         DEVICE:       Set this keyword if you want the X and Y points (see XPTS and YPTS) returned
                       in device coordinates. Otherwise, they are returned in the coordinate system
                       of the display window (if there is one).

         LAYER:        The annotation layer associated with this object.

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         XPTS:         The X points in the ROI.

         YPTS:         The Y points in the ROI.

         _REF_EXTRA:   Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::INIT

     PURPOSE:

           This is the FREEHAND_ROI object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:   The draw widget object that you will be taking over events from.

     KEYWORDS:

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::RESTOREDISPLAY

     PURPOSE:

           This method overrides the INTERACTION RestoreDisplay method by also destroying
           the buffer pixmap.

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::SETDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::SETDISPLAY

     PURPOSE:

           This method overrides the INTERACTION SetDisplay method by adding
           a pixmap widget for buffering output.

     SYNTAX:

           theObject -> SetDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI::SETPROPERTY

     PURPOSE:

           This method allows the user to set the FREEHAND_ROI object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         LAYER:        The annotation layer for the object.

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         _EXTRA:       Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## FREEHAND_ROI__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           FREEHAND_ROI__DEFINE

     PURPOSE:

           The purpose of this routine is to create a freehand ROI drawing
           interaction. When the interaction is in place, the user can
           draw a freehand polygon ROI in the display window.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("FREEHAND_ROI")

     SUPERCLASSES:

           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { FREEHAND_ROI, $
                 xpts: Ptr_New(), $        ; The X points in the ROI.
                 ypts: Ptr_New(), $        ; The X points in the ROI.
                 count: 0L, $              ; The number of points in the ROI.
                 bufferID: Obj_New(), $    ; A pixmap buffer for smooth graphics display.
                 thick: 0.0, $             ; The thickness of the line used to draw ROI.
                 linestyle: 0L, $          ; The line style of the line used to draw ROI.
                 INHERITS INTERACTION $
               }

     MESSAGES:

       None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='FREEHAND_ROI_EVENT', $
                      NAME: self._name, XPTS:FLTARR(), YPTS:FLATARR(), COUNT:0L }

           In which the XPTS and YPTS fields contain the X and Y locations of the polygon in a form
           suitable for drawing the ROI on the display with PLOTS. The COUNT field contains the number
           of points in the XPTS and YPTS vectors. The XPTS and YPTS are converted to the coordinate
           system of the draw widget associated with the interaction before being placed in the event structure.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, February 6, 2004.

(See C:\temp\catalyst\source\graphics\freehand_roi__define.pro)

## IMGAXES::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::CLEANUP

     PURPOSE:

           This is the IMGAXES object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the IMGAXES object.

     SYNTAX:

           axisObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::DRAW

     PURPOSE:

           Draw the axes.

     SYNTAX:

           theAxes -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::GETPROPERTY

     PURPOSE:

           This method enables the getting of the IMGAXES object class
           properties.

     SYNTAX:

           aIMGAXES -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      The character size to display the axes.

         COLOR:         The name of a color to use for the axes (e.g., "yellow").

         COORD_OBJECT:  The coordinate object (usually of the parent) stored here for access.

         BOUNDARY_BOX:  The boundary box that holds the axes.

         FONT:          The font used to draw the axes. Note that the value returned here is one more than
                        the value used to define the FONT in the INIT method. That is, if you have Hershey
                        fonts selected, this keyword will return 0, not the expected -1. This is to accomodate
                        the property sheet widget properties, used in the Control Panel.

         POSITION:      The position in the window in normalized coordinates [x0, y0, x1, y1].

         MAX_XRANGE:    This is the same as xrange[1]. It is used exclusively by the Control Panel in setting properties.

         MAX_YRANGE:    This is the same as yrange[1]. It is used exclusively by the Control Panel in setting properties.

         MIN_XRANGE:    This is the same as xrange[0]. It is used exclusively by the Control Panel in setting properties.

         MIN_YRANGE:    This is the same as yrange[0]. It is used exclusively by the Control Panel in setting properties.

         TICKDIR:       The tick direction.

         TITLE:         The current title for the axes.

         VISIBLE:       The current setting of the "draw visible" flag.

         XCHARSIZE:     The current X axis character size.

         XRANGE:        The X axis range.

         XTICKLEN:      The X tick length.

         XTICKFORMAT:   The format to be used for the X axis annotation.

         XTITLE:        The X axis title.

         YCHARSIZE:     The current Y axis character size.

         YRANGE:        The Y axis range.

         YTICKLEN:      The Y tick length.

         YTICKFORMAT:   The format to be used for the Y axis annotation.

         YTITLE:        The Y axis title.

         _REF_EXTRA:    Extra keywords for the superclass GETPROPERTY methods.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::INIT

     PURPOSE:

           This is the IMGAXES object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      Set this keyword to the overall character size to display the axes.

         COLOR:         Set this keyword to the name of a color to use for the axes (e.g., "yellow").

         COORD_OBJECT:  A coordinate object. This is really a storage location for a coordinate object
                        from a parent. When the X range or Y range changes in the SetProperty method,
                        the coordinate object stored here is changed appropriately. This is usually
                        required if the axis properties are to be changed with its Control Panel.

         FONT:          Set this keyword to use Hershey fonts (0), hardware fonts (1), or true-type fonts (2).

         VISIBLE:       If set to 0, axes will be turned off (not drawn). If set to 1 (the default), they
                        will be drawn.

         POSITION:      The position in the window in normalized coordinates [x0, y0, x1, y1].

         TICKDIR:       The tick direction. A value of 0 (the default) indicates ticks point outside the
                        image. A value of 1 indicates the ticks point inside the image.

         TITLE:         A string that will be the title of the axis. Place over the top axis.

         XCHARSIZE:     The character size for the X axis characters.

         XRANGE:        Set this keyword to the X axis range.

         XTICKFORMAT:   Set this keyword to the format to be used for the X axis annotation.

         XTICKLEN:      The length of the X tick marks, in normalized units. By default, 0.015.

         XTITLE:        The title or label for the X axis

         YCHARSIZE:     The character size for the X axis characters.

         YRANGE:        Set this keyword to the Y axis range.

         YTICKFORMAT:   Set this keyword to the format to be used for the Y axis annotation.

         YTICKLEN:      The length of the X tick marks, in normalized units. By default, 0.015.

         YTITLE:        The title or label for the Y axis

         _EXTRA:        Extra keywords for the superclass INIT methods.

     NOTES:

        The image objects will automatically update the IMGAXES object position when the image is
        drawn if the IMGAXES object has a name of "IMGAXES*" where the "*" can be anything you like.
        This is the default name given to this object, so it is perhaps best NOT to name the object
        unless there is good reason to do so. Appending the letters "IMGAXES" to your name will
        prevent problems.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES::SETPROPERTY

     PURPOSE:

           This method enables the setting of the IMGAXES object class
           properties.

     SYNTAX:

           aIMGAXES -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:      Set this keyword to the character size to display the axes.

         COLOR:         Set this keyword to the name of a color to use for the axes (e.g., "yellow").

         COORD_OBJECT:  A coordinate object. This is really a storage location for a coordinate object
                        from a parent. When the X range or Y range changes in the SetProperty method,
                        the coordinate object stored here is changed appropriately. This is usually
                        required if the axis properties are to be changed with its Control Panel.

         FONT:          Set this keyword to use Hershey fonts (0), hardware fonts (1), or true-type fonts (2).
                        Note that the values are *different* from the values used in the INIT method. This is
                        because this keyword is being used with the ENUMLIST property in property sheets. Sorry,
                        it can't be helped. To avoid problems, set the FONT property through the Control Panel.

         TICKDIR:       The direction of the ticks. 0 is outward, 1 is inward.

         TITLE:         A string that will be the title of the axis. Place over the top axis.

         VISIBLE:       Set this keyword to 1 to turn axes drawing VISIBLE, set to 0 to turn OFF.

         XCHARSIZE:     The character size for the X axis characters.

         XRANGE:        Set this keyword to the X axis range.

         XTICKFORMAT:   Set this keyword to the format to be used for the X axis annotation.

         XTICKLEN:      The length of the X ticks.

         XTITLE:        The title or label for the X axis

         YCHARSIZE:     The character size for the X axis characters.

         YRANGE:        Set this keyword to the Y axis range.

         YTICKFORMAT:   Set this keyword to the format to be used for the Y axis annotation.

         YTICKLEN:      The length of the Y ticks.

         YTITLE:        The title or label for the Y axis

         _EXTRA:        Extra keywords for the superclass SETPROPERY methods.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## IMGAXES__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           IMGAXES__DEFINE

     PURPOSE:

           The purpose of this routine is to display axes on an image object.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theAxes = Obj_New("IMGAXES")
           imageObj -> Add, theAxes

     SUPERCLASSES:

           CATATOM
           CATCONTAINER
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { IMGAXES, $                ; The object class name.
                 INHERITS CATATOM, $
                 box: DblArr(2,5), $       ; The boundary box for the axes.
                 charsize: 0.0, $          ; The character size.
                 color: "" , $             ; The axes color.
                 coords: Obj_New(), $      ; A coordinate object.
                 font: 0L, $               ; The font to use. (Like !P.Font.)
                 position: FltArr(4), $    ; The normalized position in the window for drawing axes.
                 tickdir: 0B, $            ; The tick direction.
                 title: "", $              ; A title for the axis.
                 visible: 0L, $            ; A flag that indicats the axes should be drawn.
                 xrange:FltArr(2), $       ; The X axis range.
                 xcharsize: 0.0, $         ; The X axis character size.
                 xtickformat: "", $        ; The format for the X axis.
                 xticklen: 0.0, $          ; The X tick length.
                 xtitle: "", $             ; The title or label for the X axis.
                 ycharsize: 0.0, $         ; The Y axis character size.
                 ytickformat: "", $        ; The format for the Y axis.
                 yticklen: 0.0,            ; The Y tick length.
                 yrange:FltArr(2), $       ; The Y axis range.
                 ytitle: "" $              ; The title or label for the Y axis.
               }

     NOTES:

        The image objects will automatically update the IMGAXES object position when the image is
        drawn if the IMGAXES object has a name of "IMGAXES*" where the "*" can be anything you like.
        This is the default name given to this object, so it is perhaps best NOT to name the object
        unless there is good reason to do so. Appending the letters "IMGAXES" to your name will
        prevent problems.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, July 17, 2003.
           Removed SCR_XSIZE call on PropertySheet widgets. 12 October 2004. DWF.
           Changed ON keyword to VISIBLE for Catalyst consistency. 7 July 2005. DWF.
           Added boundary box calculations at end of DRAW method. 7 July 2005. DWF.
           Added automatic True-Type fonts for PostScript output, if Hershey fonts would otherwise
             be selected. 1 August 2006. DWF.
           Added the ability to specify tick length and direction. 12 Oct 2008. DWF.

(See C:\temp\catalyst\source\graphics\imgaxes__define.pro)

## MAP_GRIDE__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MAP_GRIDE__DEFINE

     PURPOSE:

           This object is a wrapper for the MAP_GRID routine in IDL. It provides a simple
           way to allow map grids on images which use a MAPCOORD object to set up the map
           projection space. A map coordinate space must be in effect at the time the
           Draw method of this object is used.

     AUTHOR:

           FANNING SOFTWARE CONSULTING
           David Fanning, Ph.D.
           1645 Sheely Drive
           Fort Collins, CO 80526 USA
           Phone: 970-221-0438
           E-mail: davidf@dfanning.com
           Coyote's Guide to IDL Programming: http://www.dfanning.com

     CATEGORY:

           Graphics

     CALLING SEQUENCE:

           gridObject = Obj_New('Map_Grid')
           Map_Set, /CYLINDRICAL
           gridObject -> Draw

     AUGUMENTS:

           parent:        The parent object.

     KEYWORDS:

      All of the following INIT keywords can be set and obtained using the SETPROPERTY and GETPROPERTY methods.

          BOX_AXES:        Set this keyword to draw a box-style axes around the map.

          CHARSIZE:        Set this keyword to the size of characters used for the labels. Default is 1.0.

          CLIP_TEXT:       Set this keyword to a zero value to turn off clipping of text labels.
                           By default, text labels are clipped. This keyword is ignored if the
                           BOX_AXES keyword is set.

          COLOR:           The name of the color to draw the grid lines in. Default: "charcoal".

          FILL_HORIZON:    Set this keyword to fill the current map horizon.

          HORIZON:         Set this keyword to draw the current map horizon.

          INCREMENT:       Set this keyword to the spacing between the graticle points.

          LABEL:           Set this keyword to an integer, n, that labels every n parallels and meridians.
                           For example, LABEL=3 will label every 3rd line. Default is 1.

          LATALIGN:        This keyword controls the alignment of the text baseline for latitude
                           labels. A value of 0.0 left justifies the label, 1.0 right justifies
                           it, and 0.5 centers it. This keyword is ignored if the BOX_AXES keyword is set.

          LATDEL:          Set this keyword equal to the spacing (in degrees) between parallels of
                           latitude in the grid. If this keyword is not set, a suitable value is
                           determined from the current map projection.

          LATLAB:          The longitude at which to place latitude labels. The default is the center
                           longitude on the map. This keyword is ignored if the BOX_AXES keyword is set.

          LATNAMES:        Set this keyword equal to an array specifying the names to be used for the
                           latitude labels. By default, this array is automatically generated in units
                           of degrees. The LATNAMES array can be either type string or any single numeric
                           type, but should not be of mixed type.When LATNAMES is specified, the LATS
                           keyword must also be specified.

          LATS:            Set this keyword equal to a one or more element vector of latitudes for which
                           lines will be drawn (and optionally labeled). If LATS is omitted, appropriate
                           latitudes will be generated based on the value of the (optional) LATDEL keyword.
                           If LATS is set to a single value, that latitude and a series of automatically
                           generated latitudes will be drawn (and optionally labeled).

          LINESTYLE:       Set this keyword to the type of linestyle desired. See Graphics Keywords in
                           the on-line help for additional information.

          LONALIGN:        This keyword controls the alignment of the text baseline for longitude
                           labels. A value of 0.0 left justifies the label, 1.0 right justifies
                           it, and 0.5 centers it. This keyword is ignored if the BOX_AXES keyword is set.

          LONDEL:          Set this keyword equal to the spacing (in degrees) between parallels of
                           longitude in the grid. If this keyword is not set, a suitable value is
                           determined from the current map projection.

          LONTLAB:         The latitude at which to place longitude labels. The default is the center
                           latitude on the map. This keyword is ignored if the BOX_AXES keyword is set.

          LONNAMES:        Set this keyword equal to an array specifying the names to be used for the
                           longitude labels. By default, this array is automatically generated in units
                           of degrees. The LONNAMES array can be either type string or any single numeric
                           type, but should not be of mixed type.When LONNAMES is specified, the LONS
                           keyword must also be specified.

          LONS:            Set this keyword equal to a one or more element vector of longitudes for which
                           lines will be drawn (and optionally labeled). If LONS is omitted, appropriate
                           longitudes will be generated based on the value of the (optional) LONDEL keyword.
                           If LONS is set to a single value, that longitudes and a series of automatically
                           generated longitudes will be drawn (and optionally labeled).

          MAP_STRUCTURE:   A map projection structure (e.g., from MAP_PROJ_INIT) that allows the
                           the coordinate conversion from Cartisian coordinates (otherwise known as
                           UV coordinates) to longitude/latitude coordinates and visa versa.

     DEPENDENCIES:

           The following programs (at least) are required from the Coyote Library:

                         http://www.dfanning.com/programs/error_message.pro
                         http://www.dfanning.com/programs/fsc_color.pro

     MODIFICATION HISTORY:

           Written by David W. Fanning, 3 January 2009.

(See C:\temp\catalyst\source\graphics\map_grid__define.pro)

## MAP_OUTLINE__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MAP_OUTLINE__DEFINE

     PURPOSE:

           This object is a wrapper for either MAP_CONTINENTS or MAP_GSHHS_SHORELINE.
           It provides a simple way to allow map overlays on images which use a MAPCOORD
           object to set up the map projection space. A map coordinate space must be in
           effect at the time the Draw method of this object is used. Map outlines can be
           provided from built-in IDL continental databases, or the GSHHS Shoreline
           data base can be used. (For information on the GSHHS Shoreline data base, see
           http://www.dfanning.com/map_tips/gshhs.html.)

     AUTHOR:

           FANNING SOFTWARE CONSULTING
           David Fanning, Ph.D.
           1645 Sheely Drive
           Fort Collins, CO 80526 USA
           Phone: 970-221-0438
           E-mail: davidf@dfanning.com
           Coyote's Guide to IDL Programming: http://www.dfanning.com

     CATEGORY:

           Graphics

     CALLING SEQUENCE:

           outlineObject = Obj_New('Map_Outline')
           Map_Set, /CYLINDRICAL
           outlineObject -> Draw

     AUGUMENTS:

           parent:        The parent object.

     COMMON KEYWORDS (used with either MAP_CONTINENTS of MAP_GSHHS_SHORELINE):

           COLOR:         The name of a color (used with FSC_COLOR) to draw the output in.

           FILL:          Set this keyword to create a filled polygon output, rather than an outline.

           HIRES:         If this keyword is set, the high resolution dataset supplied with IDL is used
                          with MAP_CONTINENTS. If this keyword is set, and the GSHHS keyword is set, and
                          the FILENAME keyword is NOT used, then the default filename is "gshhs_h.b". Note
                          that the high resolution dataset must be installed to be used.

           MAP_STRUCTURE: A !MAP type structure that contains map projection information. Normally, this
                          is obtained from MAP_PROJ_INIT and passed into this object. It is passed directly
                          to MAP_CONTINENTS or MAP_GSHHS_SHORELINE in the Draw method.

     MAP_CONTINENTS KEYWORDS (apply only if you are using MAP_CONTINENTS to draw outlines):

            COASTS:       Set this keyword if you want coasts to be drawn.

            CONTINENTS:   Set this keyword if you want continental outlines to be drawn. This will be
                          set automatically if COASTS, COUNTRIES, RIVERS, AND USA keywords are all set
                          to zero.

            LINESTYLE:    Set to the type of linestyle in drawing outlines. Set to 0 or solid lines by default.

            RIVERS:       Set this keyword if you wish to draw rivers.

            T3D:          Set this graphics keyword if you wish to draw outlines use the T3D transformation matrix.

            USA:          Set this keyword if you wish do draw United States state boundaries.

            ZVALUE:       Set this keyword to the ZVALUE where the outlines should be drawn. Set to 0 by default.

     MAP_GSHHS_SHORELINE KEYWORDS (apply only if you are using MAP_GSHHS_SHORELINE to draw outlines):

            FILENAME:     The root name of the GSHHS file to open. By default, "gshhs_l.b" unless the HIRES
                          keyword is selected, in which case it will be "gshhs_h.b". The GSHHS file must be
                          in a "resource" directory or in one of the directories on your IDL path.

            LAND_COLOR:   The name of a color to be used for "land". Used with filled polygons
                          (e.g., the FILL keyword). By default, 'INDIAN RED'.

            LEVEL:        The polygon LEVEL. All polygons less than or equal to this value
                          are drawn. 1-land, 2-lakes, 3-island in lake, 4-pond in island.
                          By default, 2 (land and lake outlines).

            MINAREA:      The minimum feature area. By default, 500 km^2. Polygons with areas less
                          than this are not drawn.

            OUTLINE:      Set this keyword to draw shorelines. Set by default if FILL=0.

            WATER_COLOR:  The name of the water color. By default, "SKY BLUE".

     DEPENDENCIES:

           The following programs (at least) are required from the Coyote Library:

                         http://www.dfanning.com/programs/error_message.pro
                         http://www.dfanning.com/programs/find_resource_file.pro
                         http://www.dfanning.com/programs/fsc_color.pro
                         http://www.dfanning.com/programs/map_gshhs_shoreline.pro

     MODIFICATION HISTORY:

           Written by David W. Fanning, 3 January 2009.

(See C:\temp\catalyst\source\graphics\map_outline__define.pro)

## MEASUREINTERACTION::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::CLEANUP

     PURPOSE:

           This is the MEASUREINTERACTION object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the object

     SYNTAX:

           imageObject -> ControlPanel, baseObj

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the "CONTROLPANEL::INIT" method.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::DRAW

     PURPOSE:

           This method draws the interaction in the display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            MEASUREINTERACTION::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the MEASUREINTERACTION object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain MEASUREINTERACTION properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         TAPE_OBJECT:        The current TapeMeasure object.

         LAYER:              The current annotation CATLAYER object.

         MODE:               The current "mode" of the object.

         PIXMAP:             The object reference to any pixmap widget that is created.

         SELECTEDOBJECTS:    Any objects currently selected.

         _REF_EXTRA:         Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::INIT

     PURPOSE:

           This is the MEASUREINTERACTION object class initialization method.

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:          The draw widget object that you will be taking over events from.

     KEYWORDS:

         COORD_OBJECT:        A coordinate object (CATCOORD) for establishing a coordinate system for the
                              interaction objects. If a coordinate object isn't provided, an attempt is made
                              to use the one provided by the drawObject. If still undefined, a default
                              coordinate object with XRange=[0,1] and YRange=[0,1] is created.

         TAPE_OBJECT:         Set this keyword to an object reference to a TAPEMEASURE object.

         LAYER:               An optional CATLAYER object for holding the annotation objects. If a layer object is
                              not provided, the annotations are placed directly in the drawObject container. Otherwise,
                              the annotations are placed in the CATLAYER object, and the CATLAYER object is placed in
                              the drawObject.

         _EXTRA:              Any keywords appropriate for the superclass INIT method or TAPE_OBJECT INIT method.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::RESTOREDISPLAY

     PURPOSE:

           This method restores the draw widget to its former state.

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::SETDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::SETDISPLAY

     PURPOSE:

           This method takes over event handling from the draw widget and
           sets up the object so that everything can be restored to the way
           it was when the interaction is finished.

     SYNTAX:

           theObject -> SetDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION::SETPROPERTY

     PURPOSE:

           This method allows the user to set the MEASUREINTERACTION object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         The following keywords set default properties for new objects created in this interaction.

         TAPE_OBJECT:        Set this keyword to an object reference to a TAPEMEASURE object.

         LAYER:              A CATLAYER object for holding the annotation objects. The old annotation layer
                             and everything it contains will be destroyed.

         MODE:               The current object mode.

         _EXTRA:             Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MEASUREINTERACTION__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MEASUREINTERACTION__DEFINE

     PURPOSE:

           The purpose of this routine is to provide an interaction for creating
           and manipulating TapeMeasure objects.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("MEASUREINTERACTION")

     SUPERCLASSES:

           INTERACTION
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { MEASUREINTERACTION, $
                 pixmap: Obj_New(), $             ; A pixmap for fast redraw.
                 mode: "", $                      ; The current mode. "SELECT", "WRITE", "MOVE", etc.
                 selectedObjects: Ptr_New(), $    ; The currently selected objects.
                 sx: 0L, $                        ; The static X location.
                 sy: 0L, $                        ; The static Y location.
                 tapeObject: Obj_New(), $         ; The default TapeMeasure object.
                 layerObject: Obj_New(), $        ; A layer object for holding selectable annotation objects.
                 INHERITS INTERACTION $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 9 August 2004.

(See C:\temp\catalyst\source\graphics\measureinteraction__define.pro)

## MOVEABLEBOX::ACCEPTBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::ACCEPTBOX

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptBox, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::CANCELBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::CANCELBOX

     PURPOSE:

           This method cancels the box on the display and allows the user to start over
     SYNTAX:

           theObject -> CancelBox, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::CLEANUP

     PURPOSE:

           This is the MOVEABLEBOX object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::DRAW

     PURPOSE:

           This method draws the interaction in the display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            MOVEABLEBOX::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the MOVEABLEBOX object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::GETMODE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::GETMODE

     PURPOSE:

           This method gets the current mode for the draw widget.

     SYNTAX:

           theMode = self -> GetMode(x, y)

     ARGUMENTS:

           x:    The x location for obtaining the mode.

           y:    The y location for obtaining the mode.

     KEYWORDS:

          SET;   If this keyword is set, the currentMode flag is set to this mode.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain MOVEABLEBOX properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::INIT

     PURPOSE:

           This is the MOVEABLEBOX object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:    The draw widget object that you will be taking over events from.

     KEYWORDS:

         BOX:           A four-element array containing the initial box coordinates in device
                        coordinates.

         HANDLE_COLOR:  The name of the color to draw the box handles in. By default, "sky blue".

         _EXTRA:        Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::RESTOREDISPLAY

     PURPOSE:

           This method ...

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::SETDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::SETDISPLAY

     PURPOSE:

           This method ...

     SYNTAX:

           theObject -> SetDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::SETPROPERTY

     PURPOSE:

           This method allows the user to set the MOVEABLEBOX object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         _EXTRA:       Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## MOVEABLEBOX__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           MOVEABLEBOX__DEFINE

     PURPOSE:

           Implements a rubberband-style box ROI that can be selected and moved
           about the window.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("MOVEABLEBOX")

     SUPERCLASSES:

           RUBBERBANDBOX
           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { MOVEABLEBOX, $
                 phi: FltArr(33), $             ; Coordinates of a circle.
                 handle_color: "", $            ; The color of the box handles.
                 modemap: Obj_New(), $          ; A pixmap for calculating "mode".
                 currentmode: 0L, $             ; The current mode.
                 sx: 0L, $                      ; The static X corner of the box.
                 sy: 0L, $                      ; The static Y corner of the box.
                 bufferID: Obj_New(), $         ; A buffer pixmap object for smooth graphics display.
                 INHERITS RUBBERBANDBOX $
               }

     MESSAGES:

       None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='RUBBERBANDBOX_EVENT', $
                      NAME: self._name, BOX:self.box, XPTS:FLTARR(5), YPTS:FLATARR(5) }

           In which the XPTS and YPTS fields contain the X and Y locations of the box in a form
           suitable for drawing the ROI on the display with PLOTS. The BOX, XPTS, and YPTS are
           converted to the coordinate system of the draw widget associated with the interaction
           before being placed in the event structure.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 October 2004.

(See C:\temp\catalyst\source\graphics\moveablebox__define.pro)

## POLYGON::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::ADDTOEVENTSTRUCTURE

     PURPOSE:

           This method receives an event structure, which it can add information to before being sent
           to some other event handler. Normally, this method is called by an INTERACTION object of
           some kind.

     SYNTAX:

           theObject -> AddToEventStructure, event

     ARGUMENTS:

           event:      The event structure that will be added to.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a boundary polygon about the polygon itself.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::CLEANUP

     PURPOSE:

           This is the POLYGON object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the POLYGON object.

     SYNTAX:

           polygonObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains an annotation layer, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap container.

     SYNTAX:

           theObject -> CreateNewObject, drawID, pixmapID

     ARGUMENTS:

           drawID:    The draw widget which will contain the new arrow object. Required in normal operation.

           pixmapID:  The pixmap which will contain the new arrow object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new arrow object that gets created.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::DRAW

     PURPOSE:

           This method draws the polygon in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary polygon of the polygon

     SYNTAX:

           theObject -> DrawSelectionPolygon

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the polygon in. By default, the color of the polygon.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain POLYGON properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         HEIGHT:         The height of the polygon boundary box in normalized coordinates.

         INSERTEDOBJECT: The new object that is inserted in the CreateNewObject method.

         LAYER:          The annotation layer associated with this object.

         LINESTYLE:      The type of linestyle required. See PLOT documentation for details.

         NPOINTS:        The number of points in the polygon.

         THICKNESS:      The current thickness of the polygon.

         WIDTH:          The width of the polygon boundary polygon in normalized coordinates.

         XPTS:           The X locations of points making up the polygon.

         YPTS:           The Y locations of points making up the polygon.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::INIT

     PURPOSE:

           This is the POLYGON object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The linestyle of the polygon. By default, 1.0 (solid).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         XPTS:         The X locations of the points of the polygon.

         YPTS:         The Y locations of the points of the polygon.

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::INITIALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::INITIALIZE

     PURPOSE:

           This method initializes the polygon object for drawing.

     SYNTAX:

           theObject -> Initialize

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from the SelectableInteraction object based on the "mode"
           of the SelectableInteraction object. The SelectableInteraction object can process "SELECT"
           and "MOVE" mode events. All other mode events are sent here for processing by a SELECTABLEOBJECT.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the SelectableInteraction
                         interaction.

     KEYWORDS:

         INTERACTION:    The object reference to a SELECTABLEINTERACTION object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::MOVE

     PURPOSE:

           This method moves the polygon in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the bounding box of the polygon.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::SELECTVERTEX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::SELECTVERTEX

     PURPOSE:

           This method selects a particular vertex for movement.

     SYNTAX:

           theObject -> SelectVertex, x, y

     ARGUMENTS:

           X:          The X location of the selection.

           Y:          The Y location of the selection.

     KEYWORDS:

           DrawID:     A window object that contains the polygon. Required for converting to
                       the proper device coodinate system.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::SETPROPERTY

     PURPOSE:

           This method allows the user to set the POLYGON object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         LAYER:        The annotation layer for the object.

         LINESTYLE:    The type of linestyle required. See PLOT documentation for details.

         NOMESSAGE:    Set this keyword to suppress any messaging as a result of going through the
                       SetProperty method. Messaging is essential for PropertySheet widget capability,
                       but causes too many draw methods on occasion. This will prevent going through DRAW
                       methods needlessly.

         NOREFRESH:    Set this keyword if immediate refreshing of the object on the display is not required.

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         XPTS:         The X locations of the points of the polygon.

         YPTS:         The Y locations of the points of the polygon.

        _EXTRA:        Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON::UPDATE_MODEMAP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON::UPDATE_MODEMAP

     PURPOSE:

           This method updates the modemap with the latest information.

     SYNTAX:

           self -> Update_Modemap

     ARGUMENTS:

           None.

     KEYWORDS:

          CLEAR:     If this keyword is set, the modemap is cleared of all information.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## POLYGON_ROI::ACCEPTROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON_ROI::ACCEPTROI

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon_roi__define.pro)

## POLYGON_ROI::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON_ROI::CLEANUP

     PURPOSE:

           This is the POLYGON_ROI object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\polygon_roi__define.pro)

## POLYGON_ROI::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            POLYGON_ROI::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the POLYGON_ROI object.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon_roi__define.pro)

## POLYGON_ROI::RESTOREDISPLAY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON_ROI::RESTOREDISPLAY

     PURPOSE:

           This method ...

     SYNTAX:

           theObject -> RestoreDisplay

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\polygon_roi__define.pro)

## POLYGON_ROI__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON_ROI__DEFINE

     PURPOSE:

           The purpose of this routine is to create a polygon ROI drawing
           interaction. When the interaction is in place, the user can
           draw a polygon ROI in the display window.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("POLYGON_ROI")

     SUPERCLASSES:

           FREEHAND_ROI
           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { POLYGON_ROI, $
                 pointsID: Obj_New(), $        ; A pixmap for the selected points.
                 INHERITS FREEHAND_ROI $
               }

     MESSAGES:

       None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='POLYGON_ROI_EVENT', $
                      NAME: self._name, XPTS:FLTARR(), YPTS:FLATARR(), COUNT:0L }

           In which the XPTS and YPTS fields contain the X and Y locations of the polygon in a form
           suitable for drawing the ROI on the display with PLOTS. The COUNT field contains the number
           of points in the XPTS and YPTS vectors. The XPTS and YPTS are converted to the coordinate
           system of the draw widget associated with the interaction before being placed in the event structure.

     MODIFICATION_HISTORY:

           Written by: David W. September 12, 2004.

(See C:\temp\catalyst\source\graphics\polygon_roi__define.pro)

## POLYGON__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           POLYGON__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a polygon that can be displayed
           in a direct graphics draw widget. The coordinate system of the Polygon
           object is either passed to it (a CatCoord object) or is a normalized
           coordinate system by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           polygonObject = Obj_New("POLYGON", XPTS, YPTS)
           drawObject -> Add, polygonObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { POLYGON, $
                 background: 0L, $           ; A flag to indicate if a background polygon is drawn.
                 bg_color: "", $             ; The background color.
                 color: "", $                ; The name of a color to draw polygon in.
                 linestyle: 0L, $            ; The line style of the polygon.
                 xpts: Ptr_New(), $          ; The X points making up the polygon.
                 ypts: Ptr_New(), $          ; The X points making up the polygon.
                 npoints: 0L, $              ; The number of points in the polygon
                 thickness: 0.0, $           ; The thickness of the polygon.
                 sx: 0L, $                   ; The static X location.
                 sy: 0L, $                   ; The static Y location.
                 INHERITS SelectableObject $
               }

     MESSAGES:

       POLYGON_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                          keyword is NOT set.

     EVENT_STRUCTURE:

           This object will add the following fields to the event structure created by an interaction.
           The fields are defined as:

           BOUNDARY_BOX:     A 2x5 element array in normalized coordinates giving the boundary box of
                             the object.

           XPTS:             An array of X points in data coordinates descriping a polygon.

           YPTS:             An array of Y points in data coordinates descriping a polygon.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\polygon__define.pro)

## RUBBERBANDBOX::ACCEPTROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::ACCEPTROI

     PURPOSE:

           This method accepts the box on the display and sends an event to the client.

     SYNTAX:

           theObject -> AcceptROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::CANCELROI

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::CANCELROI

     PURPOSE:

           This method cancels the box on the display and allows the user to start over.

     SYNTAX:

           theObject -> CancelROI, event

     ARGUMENTS:

           event:        The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::CLEANUP

     PURPOSE:

           This is the RUBBERBANDBOX object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::DRAW

     PURPOSE:

           This method may or may not be needed by your object, depending
           upon whether a graphical representation of the object is required.
           If you wish the DRAW method to automatically propogates down to any
           objects contained in this object's container, call the superclass DRAW
           method.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            RUBBERBANDBOX::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the RUBBERBANDBOX object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain RUBBERBANDBOX properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         BOX:            A four-elements array of the form [x1,y1,x2,y2] representing the two
                         diagonal corners of a box in the coordinate system of the window used
                         to draw the box.

         DEVICE:         If this keyword is set, the BOX coordinates are always returned in device coordinates.

         LINESTYLE:      The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:          The thickness of the line used to draw the ROI. Be default, 2.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::INIT

     PURPOSE:

           This is the RUBBERBANDBOX object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         drawObject:   The draw widget object that you will be taking over events from.

     KEYWORDS:

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX::SETPROPERTY

     PURPOSE:

           This method allows the user to set the RUBBERBANDBOX object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         LINESTYLE:    The line style index. Value from 0 to 5, as for PLOT command. Default, 0, solid line.

         THICK:        The thickness of the line used to draw the ROI. Be default, 2.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RUBBERBANDBOX__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RUBBERBANDBOX__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a rubberband-box ROI interaction.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("RUBBERBANDBOX")

     SUPERCLASSES:

           INTERACTION
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { RUBBERBANDBOX, $
                 box: FltArr(4), $            ; The corners of the box, once drawn.
                 INHERITS INTERACTION $
               }

     MESSAGES:

       None.

     EVENT_STRUCTURE:

           event = { ID:theObject, TOP:topObject, HANDLER:Obj_New(), EVENT_NAME='RUBBERBANDBOX_EVENT', $
                      NAME: self._name, BOX:self.box, XPTS:FLTARR(5), YPTS:FLATARR(5), $
                      ACTION:"" }

           In which the XPTS and YPTS fields contain the X and Y locations of the box in a form
           suitable for drawing the ROI on the display with PLOTS. The BOX, XPTS, and YPTS are
           converted to the coordinate system of the draw widget associated with the interaction
           before being placed in the event structure. The ACTION field value will be "ACCEPT"
           by default, unless the ASK_ON_UP keyword is set and the user choses "CANCEL".

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 October 2004.

(See C:\temp\catalyst\source\graphics\rubberbandbox__define.pro)

## RULER::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a box about the ruler.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::CLEANUP

     PURPOSE:

           This is the RULER object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the RULER object. A
           control panel is a graphical user interface for setting object
           properties. If you create a control panel, the events are typically
           sent to the EVENTHANDLER method.

     SYNTAX:

           theObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window (i.e., a TOPLEVELBASE object).

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CatControlPanel::INIT method.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::DRAW

     PURPOSE:

           This method draws the ruler.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::EVENT_HANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
            RULER::EVENT_HANDLER

     PURPOSE:

            This method is the event handler for the RULER object. It will typically
            be used to respond to events from widget objects created in the CONTROLPANEL
            method.

     SYNTAX:

            This method is called automatically by the event handling mechanism.

     ARGUMENTS:

           event: The event structure as described in the IDL help files, except
                  that the ID, TOP and HANDLER tags will be object references.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain RULER properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:     The character size.

         LENGTH:       The absolute length of the ruler in the parent coordinate system.

         PARENT_COORD: The coordinate object used to specify distance. Obtained from the
                       parent object at DRAW time if not provided.

         MINOR:        The number of minor tick intervals.

         THICK:        The thickness of the ruler lines.

         FORMAT:       The character format.

         TICKLEN:      The tick length in normalized coordinates.

         TICKS:        The number of major tick intervals.

         TITLE:        The title of the ruler.

         VERTICAL:     The ruler is normally position horizontally, centered at (X,Y).
                       If this keyword is set, the ruler is position vertically
                       at (X,Y).

         X:            The ruler is centered at this X coordinate, expressed in
                       normalized coordinates.

         Y:            The ruler is centered at this Y coordinate, expressed in
                       normalized coordinates.

         _REF_EXTRA:   Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::INIT

     PURPOSE:

           This is the RULER object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:     The character size. By default, 1.0.

         FORMAT:       The character format. By default, '(I3)'.

         LENGTH:       The absolute length of the ruler in the parent coordinate system.
                       By default, 1.0.

         PARENT_COORD: The coordinate object used to specify distance. Obtained from the
                       parent object at DRAW time if not provided.

         MINOR:        The number of minor tick intervals. Set to 4 by default.

         THICK:        The thickness of the ruler lines. By default, 1.

         TICKLEN:      The tick length in normalized coordinates. By default, 0.025.

         TICKS:        The number of major tick intervals. By default, 1.

         TITLE:        The title of the ruler. By default, "Units".

         VERTICAL:     The ruler is normally position horizontally, centered at (X,Y).
                       If this keyword is set, the ruler is position vertically
                       at (X,Y).

         X:            The ruler is centered at this X coordinate, expressed in
                       normalized coordinates. By default, 0.5 for horizontal
                       rulers and 0.9 for vertical rulers. This is with respect
                       to the parent coordinate system.

         Y:            The ruler is centered at this Y coordinate, expressed in
                       normalized coordinates. By default, 0.1 for horizontal
                       rulers and 0.5 for vertical rulers. This is with respect
                       to the parent coordinate system.

         _EXTRA:       Any keywords appropriate for the superclass INIT method.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER::SETPROPERTY

     PURPOSE:

           This method allows the user to set the RULER object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         CHARSIZE:     The character size.

         DRAW:         Set this keyword to call the draw method for this object after
                       properties have been set.

         FORMAT:       The character format.

         LENGTH:       The absolute length of the ruler in the parent coordinate system.

         PARENT_COORD: The coordinate object used to specify distance. Obtained from the
                       parent object at DRAW time if not provided.

         MINOR:        The number of minor tick intervals.

         THICK:        The thickness of the ruler lines.

         TICKLEN:      The tick length in normalized coordinates.

         TICKS:        The number of major tick intervals.

         TITLE:        The title of the ruler.

         VERTICAL:     The ruler is normally position horizontally, centered at (X,Y).
                       If this keyword is set, the ruler is position vertically
                       at (X,Y).

         X:            The ruler is centered at this X coordinate, expressed in
                       normalized coordinates.

         Y:            The ruler is centered at this Y coordinate, expressed in
                       normalized coordinates.

         _EXTRA:       Any keywords appropriate for the superclass SetProperty method.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## RULER__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           RULER__DEFINE

     PURPOSE:

           The purpose of this routine is to create a simple ruler for display
           in the coordinate system of the underlying image. Users will define the
           length of the ruler (e.g., 5 cm) and the ruler will display
           this value on the image.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           theObject = Obj_New("RULER")

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { RULER, $
                 charsize: 0.0, $             ; The character size.
                 format: '', $                ; The character format.
                 length: 0.0, $               ; The absolute length of the ruler.
                 parent_coord: Obj_New(), $   ; The coordinate object of the parent.
                 minor: 0L, $                 ; The number of minor tick intervals.
                 thick: 0L, $                 ; The thickness of the ruler lines.
                 ticklen: 0.0, $              ; The tick length in normalized coordinates.
                 ticks: 0L, $                 ; The number of major tick intervals.
                 title: '', $                 ; The title of the ruler.
                 vertical: 0B, $              ; The vertical flag.
                 x: 0.0, $                    ; The normalized X coordinate of ruler center.
                 y: 0.0, $                    ; The normalized Y coordinate of ruler center.
                 INHERITS SELECTABLEOBJECT $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W Fanning, March 9, 2005.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## SELECTABLEGROUP::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the boundary box around the entire group of selectable objects.
           The box is always in normalized coordinates.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::CLEANUP

     PURPOSE:

           This is the SELECTABLEGROUP object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::DRAW

     PURPOSE:

           This method draws the box around the selectable objects.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, 'white'

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain SELECTABLEGROUP properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         MEMBERS:       The members of the group.

         _REF_EXTRA:    Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::INIT

     PURPOSE:

           This is the SELECTABLEGROUP object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         MEMBERS:       An object array of the members of the group.

         _EXTRA:        Any keywords appropriate for the CATDATAATOM INIT method.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::MOVE

     PURPOSE:

           This method moves the group of selectable objects in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:        The number of pixels to move in the X direction.

           Y:        The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:   If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:   A pixmap that can be supplied for fast re-draw.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the text bounding box.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::SETPROPERTY

     PURPOSE:

           This method allows the user to set the SELECTABLEGROUP object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         MEMBERS:       The members of the group.

         NOREFRESH:     Set this keyword if immediate refreshing of the object on the display is not required.

         VISIBLE:       Set this keyword to turn all the members of the group on or off.

         _EXTRA:        Any keywords appropriate for the superclass object.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP::UPGROUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP::UPGROUP

     PURPOSE:

           This method disassociates the grouped objects

     SYNTAX:

           selectedObject = Ungroup, ptrToMembers

     ARGUMENTS:

           ptrToMembers:   If present and a pointer, member objects are stored in this output variable.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEGROUP__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEGROUP__DEFINE

     PURPOSE:

           The purpose of this routine is to group members of a SelectableObject class together.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           textObject = Obj_New("SELECTABLEGROUP", theMembers)

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { SELECTABLEGROUP, $
                 theMembers: Ptr_New(), $  ; A pointer to the group members.
                 INHERITS SELECTABLEOBJECT $
               }

     MESSAGES:

       None.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 12 August 2004.

(See C:\temp\catalyst\source\graphics\selectablegroup__define.pro)

## SELECTABLEOBJECT::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::AddToEventStructure

     PURPOSE:

           This method calculates the boundary box around the selectable object. The box
           is always in normalized coordinates. This method should be overridden by subclassed
           objects. This method will need to be overridden in superclass objects.

     SYNTAX:

           theObject -> AddToEventStructure

     ARGUMENTS:

           theEvent:    The event structure to which you are to add object-specific information.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the boundary box around the selectable object. The box
           is always in normalized coordinates. This method should be overridden by subclassed
           objects.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::CLEANUP

     PURPOSE:

           This is the SELECTABLEOBJECT object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::COPYPARAMETERS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::COPYPARAMETERS

     PURPOSE:

           This method returns the lower-left corner of the bounary box
           in the DESTINATION keyword, and the number of columns and rows
           in the boundary box in the EXTENT keyword, all in window or pixel
           coordinates. It's purpose is to return a section of a pixmap, for
           example, so that only that section can be copied.

     SYNTAX:

           theObject -> CopyParameters, drawid, DESTINATION=destination, EXTENT=extent

     ARGUMENTS:

           drawID:         The identifier of a draw widget object whose extent will
                           provide the size of the window for calculating device coordinates.
                           This parameter is required.

     KEYWORDS:

           DESTINATION:    A two-element array containing the lower-left corner
                           of the boundary box in device coordinates. An output keyword.

           EXTENT:         A two-element array containing the number of columns and
                           rows in the boundary box in device coordinates. An output keyword.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::DRAW

     PURPOSE:

           This method draws the box around the selectable object.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the text

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the text.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain SELECTABLEOBJECT properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         BACKGROUND:       Set to 1 if drawing a background for the text.

         BG_COLOR:         The name of the background color.

         BOUNDARY_BOX:     The current boundary box for the text. A 2x5 double array.

         COLOR:            Set this keyword to the name of a color for the text. By default, "white".

         MEMBERSHIP_GROUP: The group this selectable object belongs to.

         SELECTABLE:       A flag that indicates if the object is selectable (1) or not (0).

         VISIBLE:          If text is visible, this keyword is set to 1. O otherwise.

         _REF_EXTRA:       Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::INIT

     PURPOSE:

           This is the SELECTABLEOBJECT object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         BACKGROUND:     Set this keyword to draw a background for the text.

         BG_COLOR:       The name of the background color. By default, "black".

         COLOR:          Set this keyword to the name of a color for the text. By default, "white".

         BOUNDARY_BOX:   The current boundary box for the text. A 2x5 double array.

         SELECTABLE:     Set this flag to 1 to make the object selectable (set by default). Set to 0
                         to make the object unselectable. In general, this keyword should not be used
                         by any object *except* a subclassed object.

         VISIBLE:        Set this keyword to 0 if you wish the object to be invisible. An
                         invisible object is not selectable, although the SELECTABLE flag is NOT set.

         _EXTRA:         Any keywords appropriate for the CATDATAATOM INIT method.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::INITIALIZE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::INITIALIZE

     PURPOSE:

           This method allows the user to initialize the object, if necessary. It is
           expected that user-defined objects will overwrite this object method.

     SYNTAX:

           theObject -> Initialize

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::MOVE[1]

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::MOVE

     PURPOSE:

           This method moves the selectable in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:        The number of pixels to move in the X direction.

           Y:        The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:   If this keyword is set, then no drawing of the object takes place.

           PIXMAP:   A pixmap that can be supplied for fast re-draw.

(See C:\temp\catalyst\source\graphics\ruler__define.pro)

## SELECTABLEOBJECT::MOVE[2]

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::MOVE

     PURPOSE:

           This method moves the selectable in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:        The number of pixels to move in the X direction.

           Y:        The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:   If this keyword is set, then no drawing of the object takes place.

           PIXMAP:   A pixmap that can be supplied for fast re-draw.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::OUTLINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::OUTLINE

     PURPOSE:

           This method returns a box in normalized coordinates that contains the selectable object
           and all of its parts (labels, text, etc). It is similar to the boundary box of the
           selectable object and, in fact, is often just the boundary box. Like the boundary box,
           the last element in the 2x5 array is the same as the first element.

     SYNTAX:

           outline = theObject -> Outline()

     ARGUMENTS:

         None.

     KEYWORDS:

     RETURN_VALUE:

         outline:    A 2x5 array containing the XY point pairs in normalized coordinates of a rectangle
                     big enough to contain all the parts of the object.

         None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::SELECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::SELECT

     PURPOSE:

           This method returns the object reference if the requested point is inside
           the bounding box.

     SYNTAX:

           selectedObject = theObject -> Select, x, y

     ARGUMENTS:

           X:   The X location of a point in device or window coordinates.

           Y:   The Y location of a point in device or window coordinates.

     KEYWORDS:

           SUCCESS:   Set to 1 if a selection is made. To 0 otherwise.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::SELECTPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::SELECTPANEL

     PURPOSE:

           Similar to a Control Panel, it gives context menu access to properties
           of selectable objects.

     SYNTAX:

           selectedObject = theObject -> SelectPanel, x, y, drawID

     ARGUMENTS:

           X:       The X location of a point in device or window coordinates.

           Y:       The Y location of a point in device or window coordinates.

           DRAWID:  The identifer of the draw widget object in which the selection is taking place.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::SETGROUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::SETGROUP

     PURPOSE:

           This method allows the user to set the group specified for this selectable object.
           An object can belong to a single group.

     SYNTAX:

           selectedObject = SetGroup, groupObject

     ARGUMENTS:

           groupObject:    The SELECTABLEGROUP object to which this selectable object belongs.
                           Set this to a null object (OBJ_NEW()) to remove the object from the group.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT::SETPROPERTY

     PURPOSE:

           This method allows the user to set the SELECTABLEOBJECT object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         BACKGROUND:     Set this keyword to draw a background for the text.

         BG_COLOR:       The name of the background color.

         BOUNDARY_BOX:   The current boundary box for the text. A 2x5 double array.

         BRING_TO_FRONT: Set this keyword to move this selectable object to the front of all selectable objects.

         COLOR:          Set this keyword to the name of a color for the text.

         DELETE:         Set this keyword if you wish to delete the object.

         MOVE_BACKWARD:  Set this keyword to move this selectable object to the back of all selectable objects.

         MOVE_FORWARD:   Set this keyword to move this selectable object to the front of all selectable objects.

         NOMESSAGE:      Set this keyword to suppress any messaging as a result of going through the
                         SetProperty method. Messaging is essential for PropertySheet widget capability,
                         but causes too many draw methods on occasion. This will prevent going through DRAW
                         methods needlessly. Defined here for capatibility with other selectable objects.
                         The value is NOT used!

         NOREFRESH:      Set this keyword if immediate refreshing of the object on the display is not required.

         SELECTABLE:     Set this keyword to 1 to make the object selectable, to 0 to make the object unselectable.

         SEND_TO_BACK:   Set this keyword to move this selectable object to the back of all selectable objects.

         SENDMESSAGE:    An output keyword that indicates if a message needs to be sent.

         VISIBLE:        Set this keyword to 1 (the default) to see text. To 0 to turn text drawing off. An
                         invisible object is not selectable, although the SELECTABLE flag is NOT set.

         _EXTRA:         Any keywords appropriate for the superclass object.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## SELECTABLEOBJECT__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           SELECTABLEOBJECT__DEFINE

     PURPOSE:

           The purpose of this routine is to implement a selectable object for user interaction.
           This is essentially an abstract class for selectable objects.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           textObject = Obj_New("SELECTABLEOBJECT")

     SUPERCLASSES:

           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { SELECTABLEOBJECT, $
                 background: 0L, $            ; A flag to indicate if a background box is drawn.
                 bg_color: "", $              ; The name of the background color.
                 box: DblArr(2,5), $          ; The box around the selectable object is ALWAYS in normal coordinates.
                 color: "", $                 ; The name of a color to draw the object in.
                 contextmenu: Obj_New(), $    ; A holder for a context menu object.
                 internalCoord : Obj_New(), $ ; A holder for an internal coordinate object.
                 mygroup: Obj_New(), $        ; A SELECTABLEGROUP object, of which this object is a member.
                 selectable: 0L, $            ; A flag to indicate the object is selectable.
                 visible: 0L, $               ; A flag to indicate if the object is visible (should be drawn).
                 INHERITS CatDataAtom $
               }

     MESSAGES:

            When a selectable object is deleted from the SetProperty method, the message
            OBJECT_DELETED is broadcast to interested parties just before the object is
            destroyed. The DATA field will be set to the object reference of the object
            just about to be destoyed.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 9 August 2004.

(See C:\temp\catalyst\source\graphics\selectableobject__define.pro)

## TAPEMEANSURE::COPYPARAMETERS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEANSURE::COPYPARAMETERS

     PURPOSE:

           This method returns the lower-left corner of the bounary box
           in the DESTINATION keyword, and the number of columns and rows
           in the boundary box in the EXTENT keyword, all in window or pixel
           coordinates. It's purpose is to return a section of a pixmap, for
           example, so that only that section can be copied.

     SYNTAX:

           theObject -> CopyParameters, drawid, DESTINATION=destination, EXTENT=extent

     ARGUMENTS:

           drawID:         The identifier of a draw widget object whose extent will
                           provide the size of the window for calculating device coordinates.
                           This parameter is required.

     KEYWORDS:

           DESTINATION:    A two-element array containing the lower-left corner
                           of the boundary box in device coordinates. An output keyword.

           EXTENT:         A two-element array containing the number of columns and
                           rows in the boundary box in device coordinates. An output keyword.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::ADDTOEVENTSTRUCTURE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::ADDTOEVENTSTRUCTURE

     PURPOSE:

           This method receives an event structure, which it can add information to before being sent
           to some other event handler. Normally, this method is called by an INTERACTION object of
           some kind.

     SYNTAX:

           theObject -> AddToEventStructure, event

     ARGUMENTS:

           event:      The event structure that will be added to.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a box about the tape measure.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::CLEANUP

     PURPOSE:

           This is the TAPEMEASURE object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the TAPEMEASURE object.

     SYNTAX:

           tapeMeasureObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains an annotation layer, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap container.

     SYNTAX:

           theObject -> CreateNewObject, drawID, pixmapID

     ARGUMENTS:

           drawID:    The draw widget which will contain the new tape measure object. Required in normal operation.

           pixmapID:  The pixmap which will contain the new tape measure object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new tape measure object that gets created.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::DRAW

     PURPOSE:

           This method draws the tape measure in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the tape measure

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the tape measure.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain TAPEMEASURE properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         FORMAT:      The current format for the measured length.

         HEADSIZE:    The size of the arrowhead in pixel units. But default, !D.X_Size/50.

         HEIGHT:      The height of the tape measure boundary box in normalized coordinates.

         INSERTEDOBJECT: The new object that is inserted in the CreateNewObject method.

         LABEL:       A TEXTLINE object for labelling the distance between the two points we are measuring.

         LAYER:       The annotation layer associated with this object.

         LENGTH:      The length of the tape measure in data coordinates.

         LINESTYLE:   The type of linestyle required. See PLOT documentation for details.

         ROTATION:    The current rotation of the tape measure (in degrees).

         THICKNESS:   The current thickness of the tape measure.

         WIDTH:       The width of the tape measure boundary box in normalized coordinates.

         X1:          The X location of one end of the tape measure.

         Y1:          The Y location of one end of the tape measure.

         X2:          The X location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         Y2:          The Y location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         UNITS:       The current unit string.

         _REF_EXTRA:  Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::INIT

     PURPOSE:

           This is the TAPEMEASURE object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         None.

     KEYWORDS:

         FORMAT:       The format for the length measurement. By default, '(F8.2)'.

         HEADSIZE:     The size of the tape measure head in pixel units. But default, !D.X_Size/50.

         LABEL:        A TEXTLINE object for labelling the distance between the two points we are measuring.

         LAYER:        A CATLAYER object for holding annotations.

         LINESTYLE:    The linestyle of the tape measure. By default, 1.0 (solid).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of one end of the tape measure.

         Y1:           The Y location of one end of the tape measure.

         X2:           The X location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         Y2:           The Y location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         UNITS:        A string that is appended to the length measurement when it is displayed. By default, "".

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from the SelectableInteraction object based on the "mode"
           of the SelectableInteraction object. The SelectableInteraction object can process "SELECT"
           and "MOVE" mode events. All other mode events are sent here for processing by a SELECTABLEOBJECT.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the SelectableInteraction
                         interaction.

     KEYWORDS:

         INTERACTION:    The object reference to a SELECTABLEINTERACTION object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::MOVE

     PURPOSE:

           This method moves the tape measure in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::OUTLINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::OUTLINE

     PURPOSE:

           This method returns a box in normalized coordinates that contains the selectable object
           and all of its parts (labels, text, etc). It is similar to the boundary box of the
           selectable object and, in fact, is often just the boundary box. Like the boundary box,
           the last element in the 2x5 array is the same as the first element.

     SYNTAX:

           outline = theObject -> Outline()

     ARGUMENTS:

         None.

     KEYWORDS:

     RETURN_VALUE:

         outline:    A 2x5 array containing the XY point pairs in normalized coordinates of a rectangle
                     big enough to contain all the parts of the object.

         None.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE::SETPROPERTY

     PURPOSE:

           This method allows the user to set the TAPEMEASURE object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         BACKGROUND:   Set this keyword to draw a background for the text.

         BG_COLOR:     The name of the background color.

         DRAW:         Set this keyword to immediate draw the object after properties are set.

         FORMAT:       The format of the measured length.

         HEADSIZE:     The size of the tape measure head in pixel units. But default, !D.X_Size/50.

         LABEL:        A TEXTLINE object for labelling the distance between the two points we are measuring.

         LAYER:        The annotation layer for the object.

         LENGTH:       The length of the tape measure in data coordinates. Calculated from (x1,y1).

         LINESTYLE:    The type of linestyle required. See PLOT documentation for details.

         NOMESSAGE:    Set this keyword to suppress any messaging as a result of going through the
                       SetProperty method. Messaging is essential for PropertySheet widget capability,
                       but causes too many draw methods on occasion. This will prevent going through DRAW
                       methods needlessly.

         NOREFRESH:    Set this keyword if immediate refreshing of the object on the display is not required.

         ROTATION:     Set this keyword to the value of the final rotation (in degrees).

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X1:           The X location of one end of the tape measure.

         Y1:           The Y location of one end of the tape measure.

         X2:           The X location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         Y2:           The Y location of the other end of the tape measure. (Arrowhead here if TAPEMEASUREHEAD=1.)

         UNITS:        A string, appended to the measured length when displayed.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TAPEMEASURE__DEFINE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TAPEMEASURE__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a tape measure that can be displayed
           in a direct graphics draw widget. Typically, the user drags a line between two
           points in an image and the distance is calculated using the coordinate system
           of the image (which is provided to the TapeMeasure.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           tapeMeasureObject = Obj_New("TAPEMEASURE", X1=0.5, Y1=0.5, X2=0.75, Y2=0.75)
           drawObject -> Add, tapeMeasureObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { TAPEMEASURE, $
                 format: "", $               ; The format of the measured length. Default: '(F8.2)'.
                 headsize: 0L, $             ; The tape measure head size in pixels. By default !D.X_Size / 50.
                 label: Obj_New(), $         ; A TextLine object for labeling the distance between two points.
                 layerObject: Obj_New(), $   ; A CATLAYER object for holding the annotation.
                 linestyle: 0L, $            ; The linestyle the tape measure is drawn in.
                 midx: 0.0, $                ; The midpoint of the tape measure in X.
                 midy: 0.0, $                ; The midpoint of the tape measure in Y.
                 moveend: 0L, $              ; Indicates which end of tape measure (1 or 2) you are moving.
                 orientation: 0.0, $         ; The orientation of the tape measure
                 thickness: 0.0, $           ; The thickness of the tape measure.
                 x1: 0.0, $                  ; The X location for one end of the tape measure.
                 y1: 0.0, $                  ; The Y location for one end of the tape measure.
                 x2: 0.0, $                  ; The X location for the other end of the tape measure.
                 y2: 0.0, $                  ; The Y location for the other end of the tape measure.
                 sx: 0L, $                   ; The static end of a moving tape measure.
                 sy: 0L, $                   ; The static end of a moving tape measure.
                 units: "", $                ; A string. Appended to length measurement when displaying. Null by default.
                 userCoord: Obj_New(), $     ; A coordinate system provided by the user.
                 INHERITS SelectableObject $
               }

     MESSAGES:

       TAPEMEASURE_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                        keyword is NOT set.

     EVENT_STRUCTURE:

           This object will add the following fields to the event structure created by an interaction.
           The fields are defined as:

           BOUNDARY_BOX:     A 2x5 element array in normalized coordinates giving the boundary box of
                             the object.

           LENGTH:           The current length of the tape measure in data coordinates.

           UNITS:            A string that is the units of the length. Appended to length, usually.

           XPTS:             A two element array giving the X endpoints of the line in data coordinates.

           YPTS:             A two element array giving the Y endpoints of the line in data coordinates.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\tapemeasure__define.pro)

## TEXTLINE::CALCULATEBOUNDARYBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::CALCULATEBOUNDARYBOX

     PURPOSE:

           This method calculates the extent of a box about the text.

     SYNTAX:

           theObject -> CalculateBoundaryBox

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::CLEANUP

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::CLEANUP

     PURPOSE:

           This is the TEXTLINE object class destructor method.

     SYNTAX:

           Called automatically when the object is destroyed.

     ARGUMENTS:

           None.

     KEYWORDS:

          None.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::CONTROLPANEL

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::CONTROLPANEL

     PURPOSE:

           This method creates a control panel for the TEXTLINE object.

     SYNTAX:

           textObject -> ControlPanel, baseObject

     ARGUMENTS:

           baseObject:    The object reference of a base widget for this control to
                          be added to. If not supplied, the control panel will be in a
                          self contained window.

     KEYWORDS:

           _EXTRA:       Any keywords appropriate for the CATCONTROLPANEL::INIT method.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::CREATENEWOBJECT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::CREATENEWOBJECT

     PURPOSE:

           This method creates a new object and adds it to both a draw widget and pixmap container.
           If the object contains an annotation layer, the new object is instead added to the layer,
           and the layer is added to the draw widget and pixmap container.

     SYNTAX:

           theObject -> CreateNewObject, drawID, pixmapID

     ARGUMENTS:

           drawID:    The draw widget which will contain the new arrow object. Required in normal operation.

           pixmapID:  The pixmap which will contain the new arrow object. Optional.

     KEYWORDS:

           NEWOBJECT: An output keyword containing the new arrow object that gets created.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::DRAW

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::DRAW

     PURPOSE:

           This method draws the line of text in the current direct graphics display window.

     SYNTAX:

           theObject -> Draw

     ARGUMENTS:

           None.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::DRAWSELECTIONBOX

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::DRAWSELECTIONBOX

     PURPOSE:

           This method draws a selection box around the boundary box of the text

     SYNTAX:

           theObject -> DrawSelectionBox

     ARGUMENTS:

           None.

     KEYWORDS:

           COLOR:    The name of a color to draw the box in. By default, the color of the text.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::EVENTHANDLER

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::EVENTHANDLER

     PURPOSE:

           This method is an event handler for the Control Panel.

     SYNTAX:

           Called automatically by the event handling system

     ARGUMENTS:

           event:  The event structure.

     KEYWORDS:

           None.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::GETDATA

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::GetData

     PURPOSE:

           This function method overrides the CATDATAATOM function of the same name, only
           so that a null result comes back with a null string rather than a -1.

     SYNTAX:

           data = imageObject -> GetData (Success=s)

     ARGUMENTS:

           None.

     KEYWORDS:

           SUCCESS: This flag shows whether the get has been successful or not.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::GETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::GETPROPERTY

     PURPOSE:

           This method allows the user to obtain TEXTLINE properties. Be sure
           you ALWAYS call the superclass GETPROPERTY method if you have extra
           keywords!

     SYNTAX:

           theObject -> GetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ALIGNMENT:   Set the keyword to 0.0 for left-aligned text, 0.5 (the default) for
                      centered text, and 1.0 for right-aligned text.

         CHARSIZE:    Set this keyword to the character size desired. By default, 1.0.

         FONT:        Set this to the type of font desired. Hershey: 0, Hardware: 1 (default), True-Type: 2.

         HEIGHT:      The height of the text boundary box in normalized coordinates.

         LAYER:       The annotation layer associated with this object.

         ORIENTATION: Set this keyword to the orientation of the font. By default, 0.0.

         TEXT:        A single line of text for the TextLine object.

         THICKNESS:   The current thickness of the text.

         WIDTH:       The width of the text boundary box in normalized coordinates.

         X:           The X location of the text for alignment purposes. By default, half the coordinate X range.

         Y:           The Y location of the text for alignment purposes. By default, half the coordinate Y range.

         _REF_EXTRA:     Any keywords appropriate for the superclass GetProperty method.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::INIT

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::INIT

     PURPOSE:

           This is the TEXTLINE object class initialization method

     SYNTAX:

           Called automatically when the object is created.

     ARGUMENTS:

         text:        The single line of text to display.

     KEYWORDS:

         ALIGNMENT:    Set the keyword to 0.0 for left-aligned text, 1.0 (the default) for
                       centered text, and 2.0 for right-aligned text.

         CHARSIZE:     Set this keyword to the character size desired. By default, 1.0.

         FONT:         Set this to the type of font desired. Hershey: 0, Hardware: 1 (default), True-Type: 2.

         LAYER:        A CATLAYER object for holding annotations.

         ORIENTATION:  Set this keyword to the orientation of the font. By default, 0.0.

         THICKNESS:    Set this to the thickness of the output. By default, 1.0.

         X:            The X location of the text for alignment purposes. By default, half the coordinate X range.

         Y:            The Y location of the text for alignment purposes. By default, half the coordinate Y range.

         _EXTRA:       Any keywords appropriate for the SELECTABLEOBJECT INIT method.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::INTERACTIONEVENTS

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::INTERACTIONEVENTS

     PURPOSE:

           This method accepts events from the SelectableInteraction object based on the "mode"
           of the SelectableInteraction object. The SelectableInteraction object can process "SELECT"
           and "MOVE" mode events. All other mode events are sent here for processing by a SELECTABLEOBJECT.

     SYNTAX:

           theObject -> INTERACTIONEVENTS

     ARGUMENTS:

         event:          The widget event that is generated by the draw widget and handled by the SelectableInteraction
                         interaction.

     KEYWORDS:

         INTERACTION:    The object reference to a SELECTABLEINTERACTION object that is receiving events.
                         This is a *required* parameter, but is written as a keyword for programming clarity.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::MOVE

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::MOVE

     PURPOSE:

           This method moves the text in a graphics window.

     SYNTAX:

           theObject -> Move, x, y

     ARGUMENTS:

           X:          The number of pixels to move in the X direction.

           Y:          The number of pixels to move in the Y direction.

     KEYWORDS:

           NODRAW:     If this keyword is set, only the coordinates are updated. No drawing occurs.

           PIXMAP:     Set this keyword to a pixmap that can be used to erase the previous
                       contents of the window.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE::SETPROPERTY

[Previous Routine] [Next Routine] [List of Routines]

     NAME:
           TEXTLINE::SETPROPERTY

     PURPOSE:

           This method allows the user to set the TEXTLINE object's properties. Be sure
           you ALWAYS call the superclass SETPROPERTY method if you have extra keywords!

     SYNTAX:

           theObject -> SetProperty ...

     ARGUMENTS:

         None.

     KEYWORDS:

         ALIGNMENT:      Set the keyword to 0.0 for left-aligned text, 1.0 (the default) for
                         centered text, and 2.0 for right-aligned text.

         CHARSIZE:       Set this keyword to the character size desired.

         FONT:           Set this to the type of font desired. Hershey: 0, Hardware: 1 (default), True-Type: 2.

         LAYER:          The annotation layer for the object.

         NOMESSAGE:      Set this keyword to suppress any messaging as a result of going through the
                         SetProperty method. Messaging is essential for PropertySheet widget capability,
                         but causes too many draw methods on occasion. This will prevent going through DRAW
                         methods needlessly.

         NOREFRESH:      Set this keyword if immediate refreshing of the object on the display is not required.

         ORIENTATION:    Set this keyword to the orientation of the font.

         TEXT:           A single line of text for the TextLine object.

         THICKNESS:      Set this to the thickness of the output.

         X:              The X location of the text for alignment purposes.

         Y:              The Y location of the text for alignment purposes.

(See C:\temp\catalyst\source\graphics\textline__define.pro)

## TEXTLINE__DEFINE

[Previous Routine] [List of Routines]

     NAME:
           TEXTLINE__DEFINE

     PURPOSE:

           The purpose of this routine is to provide a line of text that can
           be displayed in a direct graphics draw widget. As a subclassed
           CATDATAATOM, the text is the "data" and can be manipulated with
           the GetData and SetData methods. The coordinate system of the
           TextLine object is either passed to it (a CatCoord object) or is
           a normalized coordinate system by default.

     AUTHORS:

            FANNING SOFTWARE CONSULTING   BURRIDGE COMPUTING
            1645 Sheely Drive             18 The Green South
            Fort Collins                  Warborough, Oxon
            CO 80526 USA                  OX10 7DN, ENGLAND
            Phone: 970-221-0438           Phone: +44 (0)1865 858279
            E-mail: davidf@dfanning.com   E-mail: davidb@burridgecomputing.co.uk

     CATEGORY:

           Objects.

     SYNTAX:

           textObject = Obj_New("TEXTLINE", "This is a line of text")
           drawObject -> Add, textObject

     SUPERCLASSES:

           SELECTABLEOBJECT
           CATDATAATOM
           CATATOM
           CATCONTAINER IDLITCOMPONENT
           IDL_CONTAINER

     CLASS_STRUCTURE:

       class = { TEXTLINE, $
                 alignment: 0.0, $           ; The alignment of the text.
                 background: 0L, $           ; A flag to indicate if a background box is drawn.
                 bg_color: "", $             ; The background color.
                 charsize: 0.0, $            ; The character size.
                 color: "", $                ; The name of a color to draw text in.
                 font: 0L, $                 ; The font type (0-Hershey, 1-Hardware, 2-True-Type).
                 orientation: 0.0, $         ; The orientation of the text
                 thickness: 0.0, $           ; The CHARTHICK ness of the text.
                 x: 0.0, $                   ; The X location for drawing text.
                 y: 0.0, $                   ; The Y location for drawing text.
                 width: 0.0, $               ; The width of the text line. (Set when drawn.)
                 INHERITS SelectableObject $
               }
    ;
     MESSAGES:

       TEXTLINE_CHANGED:   This message is sent whenever SetProperty method is called and the NOMESSAGE
                           keyword is NOT set.

     NOTES_AND_RESTRICTIONS:

           If the font field is set to 0 (Hershey fonts) when drawn in PostScript output,
           the font type is switched to 1 (Hardware fonts).

           Rotation of text can only occur when the ALIGNMENT of the test is "centered". If you
           try to rotate the text, the alignment is changed. Hardware fonts cannot be rotated on
           the display.

     MODIFICATION_HISTORY:

           Written by: David W. Fanning, 25 Jan 2004.

(See C:\temp\catalyst\source\graphics\textline__define.pro)