Class TacticalGraphicLabel


  • public class TacticalGraphicLabel
    extends java.lang.Object
    A label drawn as part of a tactical graphic. The label is drawn at constant screen size. The label can include multiple lines of text, and can optionally be kept aligned with features on the globe. To align a label with the globe specify an orientationPosition for the label. The label will be drawn along a line connecting the label's position to the orientation position.
    • Field Detail

      • DEFAULT_FONT

        public static final java.awt.Font DEFAULT_FONT
        Default font.
      • DEFAULT_OFFSET

        public static final Offset DEFAULT_OFFSET
        Default offset. The default offset aligns the label horizontal with the text alignment position, and centers the label vertically. For example, if the text alignment is AVKey.LEFT, then the left edge of the text will be aligned with the geographic position, and the label will be centered vertically.
      • DEFAULT_INSETS

        public static final java.awt.Insets DEFAULT_INSETS
        Default insets around the label.
      • DEFAULT_INTERIOR_OPACITY

        public static final double DEFAULT_INTERIOR_OPACITY
        Default interior opacity.
        See Also:
        Constant Field Values
      • DEFAULT_TEXT_EFFECT

        public static final java.lang.String DEFAULT_TEXT_EFFECT
        Default text effect (shadow).
        See Also:
        Constant Field Values
      • lines

        protected java.lang.String[] lines
        Text split into separate lines.
      • position

        protected Position position
        The label's geographic position.
      • offset

        protected Offset offset
        Offset from the geographic position at which to draw the label.
      • textAlign

        protected java.lang.String textAlign
        Text alignment for multi-line labels.
      • orientationPosition

        protected Position orientationPosition
        The label is drawn along a line from the label position to the orientation position.
      • material

        protected Material material
        Material used to draw the label.
      • opacity

        protected double opacity
        Opacity of the text, as a value between 0 and 1.
      • interiorOpacity

        protected double interiorOpacity
      • font

        protected java.awt.Font font
        Font used to draw the label.
      • lineSpacing

        protected int lineSpacing
        Space (in pixels) between lines in a multi-line label.
      • insets

        protected java.awt.Insets insets
        Insets that separate the text from its frame. Only applies when the text interior is rendered.
      • drawInterior

        protected boolean drawInterior
        Indicates whether or not to draw the label interior.
      • enableBatchRendering

        protected boolean enableBatchRendering
        Indicates whether or not batch rendering is enabled.
      • enableBatchPicking

        protected boolean enableBatchPicking
        Indicates whether or not batch picking is enabled.
      • delegateOwner

        protected java.lang.Object delegateOwner
        Indicates an object that represents the label during picking.
      • frameTimeStamp

        protected long frameTimeStamp
      • bounds

        protected java.awt.geom.Rectangle2D bounds
        Size of the label.
      • lineBounds

        protected java.awt.geom.Rectangle2D[] lineBounds
        Cached bounds for each line of text.
      • BEogsh

        protected OGLStackHandler BEogsh
        Stack handler used for beginDrawing/endDrawing state.
      • pickSupport

        protected PickSupport pickSupport
        Support object used during picking.
      • pickLayer

        protected Layer pickLayer
        Active layer.
    • Constructor Detail

      • TacticalGraphicLabel

        public TacticalGraphicLabel()
        Create a new empty label.
      • TacticalGraphicLabel

        public TacticalGraphicLabel​(java.lang.String text)
        Create a new label.
        Parameters:
        text - Label text.
    • Method Detail

      • getText

        public java.lang.String getText()
        Indicates the text of this label.
        Returns:
        The label's text.
      • setText

        public void setText​(java.lang.String text)
        Specifies the text of this label. The text may include multiple lines, separated by newline characters.
        Parameters:
        text - New text.
      • getPosition

        public Position getPosition()
        Indicates the label's position. The label is drawn at an offset from this position.
        Returns:
        The label's geographic position.
        See Also:
        getOffset()
      • setPosition

        public void setPosition​(Position position)
        Indicates the label's geographic position. The label is drawn at an offset from this position.
        Parameters:
        position - New position.
        See Also:
        getOffset()
      • getTextAlign

        public java.lang.String getTextAlign()
        Indicates the current text alignment. Can be one of AVKey.LEFT (default), AVKey.CENTER or AVKey.RIGHT.
        Returns:
        the current text alignment.
      • setTextAlign

        public void setTextAlign​(java.lang.String textAlign)
        Specifies the text alignment. Can be one of AVKey.LEFT (default), AVKey.CENTER, or AVKey.RIGHT.
        Parameters:
        textAlign - New text alignment.
      • getOffset

        public Offset getOffset()
        Indicates the offset from the geographic position at which to draw the label. See setOffset for more information on how the offset is interpreted.
        Returns:
        The offset at which to draw the label.
      • setOffset

        public void setOffset​(Offset offset)
        Specifies the offset from the geographic position at which to draw the label. The default offset aligns the label horizontal with the text alignment position, and centers the label vertically. For example, if the text alignment is AVKey.LEFT., then the left edge of the text will be aligned with the geographic position, and the label will be centered vertically.

        When the text is rotated a horizontal offset moves the text along the orientation line, and a vertical offset moves the text perpendicular to the orientation line.

        Parameters:
        offset - The offset at which to draw the label.
      • getFont

        public java.awt.Font getFont()
        Indicates the font used to draw the label.
        Returns:
        The label's font.
      • setFont

        public void setFont​(java.awt.Font font)
        Specifies the font used to draw the label.
        Parameters:
        font - New font.
      • getLineSpacing

        public int getLineSpacing()
        Indicates the line spacing applied to multi-line labels.
        Returns:
        The space (in pixels) between lines of a multi-line label.
      • setLineSpacing

        public void setLineSpacing​(int lineSpacing)
        Specifies the line spacing applied to multi-line labels.
        Parameters:
        lineSpacing - New line spacing.
      • getMaterial

        public Material getMaterial()
        Indicates the material used to draw the label.
        Returns:
        The label's material.
      • setMaterial

        public void setMaterial​(Material material)
        Specifies the material used to draw the label.
        Parameters:
        material - New material.
      • isDrawInterior

        public boolean isDrawInterior()
        Indicates whether or not to draw a colored frame behind the label.
        Returns:
        true if the label's interior is drawn, otherwise false.
        See Also:
        setDrawInterior(boolean)
      • setDrawInterior

        public void setDrawInterior​(boolean drawInterior)
        Specifies whether or not to draw a colored frame behind the label.
        Parameters:
        drawInterior - true if the label's interior is drawn, otherwise false.
        See Also:
        isDrawInterior()
      • getOpacity

        public double getOpacity()
        Indicates the opacity of the text as a floating-point value in the range 0.0 to 1.0. A value of 1.0 specifies a completely opaque text, and 0.0 specifies a completely transparent text. Values in between specify a partially transparent text.
        Returns:
        the opacity of the text as a floating-point value from 0.0 to 1.0.
      • setOpacity

        public void setOpacity​(double opacity)
        Specifies the opacity of the text as a floating-point value in the range 0.0 to 1.0. A value of 1.0 specifies a completely opaque text, and 0.0 specifies a completely transparent text. Values in between specify a partially transparent text.
        Parameters:
        opacity - the opacity of text as a floating-point value from 0.0 to 1.0.
        Throws:
        java.lang.IllegalArgumentException - if opacity is less than 0.0 or greater than 1.0.
      • getInteriorOpacity

        public double getInteriorOpacity()
        Indicates the opacity of label's interior as a floating-point value in the range 0.0 to 1.0. A value of 1.0 specifies a completely opaque interior, and 0.0 specifies a completely transparent interior. Values in between specify a partially transparent interior.
        Returns:
        the opacity of the interior as a floating-point value from 0.0 to 1.0.
      • setInteriorOpacity

        public void setInteriorOpacity​(double interiorOpacity)
        Specifies the opacity of the label's interior as a floating-point value in the range 0.0 to 1.0. A value of 1.0 specifies a completely opaque interior, and 0.0 specifies a completely transparent interior. Values in between specify a partially transparent interior.
        Parameters:
        interiorOpacity - the opacity of label's interior as a floating-point value from 0.0 to 1.0.
        Throws:
        java.lang.IllegalArgumentException - if opacity is less than 0.0 or greater than 1.0.
      • getOrientationPosition

        public Position getOrientationPosition()
        Indicates the orientation position. The label oriented on a line drawn from the label's position to the orientation position.
        Returns:
        Position used to orient the label. May be null.
      • setOrientationPosition

        public void setOrientationPosition​(Position orientationPosition)
        Specifies the orientation position. The label is oriented on a line drawn from the label's position to the orientation position. If the orientation position is null then the label is drawn with no rotation.
        Parameters:
        orientationPosition - Draw label oriented toward this position.
      • getInsets

        public java.awt.Insets getInsets()
        Indicates the amount of space between the label's content and its frame, in pixels.
        Returns:
        the padding between the label's content and its frame, in pixels.
        See Also:
        setInsets(java.awt.Insets)
      • setInsets

        public void setInsets​(java.awt.Insets insets)
        Specifies the amount of space (in pixels) between the label's content and the edges of the label's frame.
        Parameters:
        insets - the desired padding between the label's content and its frame, in pixels.
        Throws:
        java.lang.IllegalArgumentException - if insets is null.
        See Also:
        getInsets()
      • setEffect

        public void setEffect​(java.lang.String effect)
        Specifies an effect used to decorate the text. Can be one of AVKey.TEXT_EFFECT_SHADOW (default), or AVKey.TEXT_EFFECT_NONE.
        Parameters:
        effect - the effect to use for text rendering
      • getDelegateOwner

        public java.lang.Object getDelegateOwner()
        Returns the delegate owner of this label. If non-null, the returned object replaces the label as the pickable object returned during picking. If null, the label itself is the pickable object returned during picking.
        Returns:
        the object used as the pickable object returned during picking, or null to indicate the the label is returned during picking.
      • setDelegateOwner

        public void setDelegateOwner​(java.lang.Object owner)
        Specifies the delegate owner of this label. If non-null, the delegate owner replaces the label as the pickable object returned during picking. If null, the label itself is the pickable object returned during picking.
        Parameters:
        owner - the object to use as the pickable object returned during picking, or null to return the label.
      • isEnableBatchPicking

        public boolean isEnableBatchPicking()
        Indicates whether batch picking is enabled.
        Returns:
        true if batch rendering is enabled, otherwise false.
        See Also:
        setEnableBatchPicking(boolean)
      • setEnableBatchPicking

        public void setEnableBatchPicking​(boolean enableBatchPicking)
        Specifies whether adjacent Labels in the ordered renderable list may be pick-tested together if they are contained in the same layer. This increases performance but allows only the top-most of the label to be reported in a SelectEvent even if several of the labels are at the pick position.

        Batch rendering (setEnableBatchRendering(boolean)) must be enabled in order for batch picking to occur.

        Parameters:
        enableBatchPicking - true to enable batch rendering, otherwise false.
      • isEnableBatchRendering

        public boolean isEnableBatchRendering()
        Indicates whether batch rendering is enabled.
        Returns:
        true if batch rendering is enabled, otherwise false.
        See Also:
        setEnableBatchRendering(boolean)
      • setEnableBatchRendering

        public void setEnableBatchRendering​(boolean enableBatchRendering)
        Specifies whether adjacent Labels in the ordered renderable list may be rendered together if they are contained in the same layer. This increases performance and there is seldom a reason to disable it.
        Parameters:
        enableBatchRendering - true to enable batch rendering, otherwise false.
      • getBounds

        public java.awt.Rectangle getBounds​(DrawContext dc)
        Get the label bounding Rectangle using OGL coordinates - bottom-left corner x and y relative to the WorldWindow bottom-left corner. If the label is rotated then the returned rectangle is the bounding rectangle of the rotated label.
        Parameters:
        dc - the current DrawContext.
        Returns:
        the label bounding Rectangle using OGL viewport coordinates.
        Throws:
        java.lang.IllegalArgumentException - if dc is null.
      • computeGeometryIfNeeded

        protected void computeGeometryIfNeeded​(DrawContext dc)
      • computeBoundsIfNeeded

        protected void computeBoundsIfNeeded​(DrawContext dc)
        Compute the bounds of the text, if necessary.
        Parameters:
        dc - the current DrawContext.
      • computeGeometry

        protected void computeGeometry​(DrawContext dc,
                                       TacticalGraphicLabel.OrderedLabel olbl)
        Compute the label's screen position from its geographic position.
        Parameters:
        dc - Current draw context.
        olbl - The ordered label to compute geometry for.
      • intersectsFrustum

        protected boolean intersectsFrustum​(DrawContext dc,
                                            TacticalGraphicLabel.OrderedLabel olbl)
        Determine if this label intersects the view or pick frustum.
        Parameters:
        dc - Current draw context.
        olbl - The ordered label to intersect.
        Returns:
        True if this label intersects the active frustum (view or pick). Otherwise false.
      • computeRotation

        protected Angle computeRotation​(Vec4 screenPoint,
                                        Vec4 orientationScreenPoint)
        Compute the amount of rotation to apply to a label in order to keep it oriented toward its orientation position.
        Parameters:
        screenPoint - Geographic position of the text, projected onto the screen.
        orientationScreenPoint - Orientation position, projected onto the screen.
        Returns:
        The rotation angle to apply when drawing the label.
      • render

        public void render​(DrawContext dc)
        Causes this Renderable to render itself using the provided draw context.
        Parameters:
        dc - the DrawContext to be used
        Throws:
        java.lang.IllegalArgumentException - if the draw context is null.
        See Also:
        DrawContext
      • makeOrderedRenderable

        protected void makeOrderedRenderable​(DrawContext dc)
        Draws the graphic as an ordered renderable.
        Parameters:
        dc - the current draw context.
      • drawOrderedRenderable

        protected void drawOrderedRenderable​(DrawContext dc,
                                             TacticalGraphicLabel.OrderedLabel olbl)
        Draws the graphic as an ordered renderable.
        Parameters:
        dc - the current draw context.
        olbl - The ordered label to draw.
      • doDrawOrderedRenderable

        protected void doDrawOrderedRenderable​(DrawContext dc,
                                               PickSupport pickSupport,
                                               TacticalGraphicLabel.OrderedLabel olbl)
        Draw this label during ordered rendering.
        Parameters:
        dc - Current draw context.
        pickSupport - Support object used during picking.
        olbl - The ordered label to draw.
      • beginDrawing

        protected void beginDrawing​(DrawContext dc)
        Establish the OpenGL state needed to draw text.
        Parameters:
        dc - the current draw context.
      • endDrawing

        protected void endDrawing​(DrawContext dc)
        Pop the state set in beginDrawing.
        Parameters:
        dc - the current draw context.
      • drawText

        protected void drawText​(DrawContext dc,
                                TextRenderer textRenderer,
                                TacticalGraphicLabel.OrderedLabel olbl)
        Draw the label's text. This method sets up the text renderer, and then calls doDrawText to actually draw the text.
        Parameters:
        dc - Current draw context.
        textRenderer - Text renderer.
        olbl - The ordered label to draw.
      • drawInterior

        protected void drawInterior​(DrawContext dc,
                                    TacticalGraphicLabel.OrderedLabel olbl)
        Render the label interior as a filled rectangle.
        Parameters:
        dc - Current draw context.
        olbl - The ordered label to draw.
      • doDrawText

        protected void doDrawText​(TextRenderer textRenderer,
                                  TacticalGraphicLabel.OrderedLabel olbl)
        Draw the label's text. This method assumes that the text renderer context has already been set up.
        Parameters:
        textRenderer - renderer to use.
        olbl - The ordered label to draw.
      • drawBatched

        protected void drawBatched​(DrawContext dc,
                                   TacticalGraphicLabel.OrderedLabel firstLabel)
        Draws this ordered renderable and all subsequent Label ordered renderables in the ordered renderable list. This method differs from drawBatchedText in that this method re-initializes the text renderer to draw the next label, while drawBatchedText re-uses the active text renderer context. That is, drawBatchedText attempts to draw as many labels as possible that share same text renderer configuration as this label, and this method attempts to draw as many labels as possible regardless of the text renderer configuration of the subsequent labels.
        Parameters:
        dc - the current draw context.
        firstLabel - the label drawn prior to calling this method.
      • drawBatchedText

        protected void drawBatchedText​(DrawContext dc,
                                       TextRenderer textRenderer,
                                       TacticalGraphicLabel.OrderedLabel firstLabel)
        Draws text for subsequent Label ordered renderables in the ordered renderable list. This method is called after the text renderer has been set up (after beginRendering has been called), so this method can only draw text for subsequent labels that use the same font and rotation as this label. This method differs from drawBatched in that this method reuses the active text renderer context to draw as many labels as possible without switching text renderer state.
        Parameters:
        dc - the current draw context.
        textRenderer - Text renderer used to draw the label.
        firstLabel - The first ordered renderable in the batch.
      • getPickedObject

        protected java.lang.Object getPickedObject()
        Indicates the object that represents this label during picking.
        Returns:
        If a delegate owner is set, returns the delegate owner. Otherwise returns this label.
      • computeTextExtent

        protected java.awt.Rectangle computeTextExtent​(int x,
                                                       int y,
                                                       TacticalGraphicLabel.OrderedLabel olbl)
        Determine the screen rectangle covered by a label. The input coordinate identifies either the top left, top center, or top right corner of the label, depending on the text alignment. If the label is rotated to align with features on the surface then the extent will be the smallest screen rectangle that completely encloses the rotated label.
        Parameters:
        x - X coordinate at which to draw the label.
        y - Y coordinate at which to draw the label.
        olbl - The ordered label to compute extents for.
        Returns:
        The rectangle, in OGL screen coordinates (origin at bottom left corner), that is covered by the label.
      • computeRotatedScreenExtent

        protected java.awt.Rectangle computeRotatedScreenExtent​(java.awt.Rectangle rect,
                                                                int x,
                                                                int y,
                                                                Angle rotation)
        Compute the bounding screen extent of a rotated rectangle.
        Parameters:
        rect - Rectangle to rotate.
        x - X coordinate of the rotation point.
        y - Y coordinate of the rotation point.
        rotation - Rotation angle.
        Returns:
        The smallest rectangle that completely contains rect when rotated by the specified angle.
      • computeBackgroundColor

        protected java.awt.Color computeBackgroundColor​(java.awt.Color color)
        Compute a contrasting background color to draw the label's outline.
        Parameters:
        color - Label color.
        Returns:
        A color that contrasts with color.