Class SurfaceIcon

    • Field Detail

      • imageWidth

        protected int imageWidth
      • imageHeight

        protected int imageHeight
      • dragEnabled

        protected boolean dragEnabled
    • Constructor Detail

      • SurfaceIcon

        public SurfaceIcon​(java.lang.Object imageSource)
      • SurfaceIcon

        public SurfaceIcon​(java.lang.Object imageSource,
                           LatLon location)
    • Method Detail

      • getLocation

        public LatLon getLocation()
        Get the icon reference location on the globe.
        Returns:
        the icon reference location on the globe.
      • setLocation

        public void setLocation​(LatLon location)
        Set the icon reference location on the globe.
        Parameters:
        location - the icon reference location on the globe.
        Throws:
        java.lang.IllegalArgumentException - if location is null.
      • getLocationOffset

        public Vec4 getLocationOffset()
        Get the icon displacement in pixels relative to the reference location. Can be null.

        When null the icon will be drawn with it's image center on top of it's reference location - see setLocation(LatLon). Otherwise the icon will be shifted of a distance equivalent to the number of pixels specified as x and y offset values. Positive values will move the icon to the right for x and up for y. Negative values will have the opposite effect.

        Returns:
        the icon displacement in pixels relative to the reference location.
      • setLocationOffset

        public void setLocationOffset​(Vec4 locationOffset)
        Set the icon displacement in pixels relative to the reference location. Can be null.

        When null the icon will be drawn with it's image center on top of it's refence location - see setLocation(LatLon). Otherwise the icon will be shifted of a distance equivalent to the number of pixels specified as x and y offset values. Positive values will move the icon to the right for x and up for y. Negative values will have the opposite effect.

        Parameters:
        locationOffset - the icon displacement in pixels relative to the reference location.
      • getImageSource

        public java.lang.Object getImageSource()
        Get the source for the icon image. Can be a file path to a local image or a BufferedImage reference.
        Returns:
        the source for the icon image.
      • setImageSource

        public void setImageSource​(java.lang.Object imageSource)
        Set the source for the icon image. Can be a file path to a local image or a BufferedImage reference.
        Parameters:
        imageSource - the source for the icon image.
        Throws:
        java.lang.IllegalArgumentException - if imageSource is null.
      • isUseMipMaps

        public boolean isUseMipMaps()
        Returns whether the icon will apply mip-map filtering to it's source image. If true the icon image is drawn using mip-maps. If false the icon is drawn without mip-maps, resulting in aliasing if the icon image is drawn smaller than it's native size in pixels.
        Returns:
        true if the icon image is drawn with mip-map filtering; false otherwise.
      • setUseMipMaps

        public void setUseMipMaps​(boolean useMipMaps)
        Sets whether the icon will apply mip-map filtering to it's source image. If true the icon image is drawn using mip-maps. If false the icon is drawn without mip-maps, resulting in aliasing if the icon image is drawn smaller than it's native size in pixels.
        Parameters:
        useMipMaps - true if the icon image should be drawn with mip-map filtering; false otherwise.
      • getScale

        public double getScale()
        Get the current scaling factor applied to the source image.
        Returns:
        the current scaling factor applied to the source image.
      • setScale

        public void setScale​(double scale)
        Set the scaling factor to apply to the source image. A value of 1 will produce no change, a value greater then 1 will enlarge the image and a value smaller then 1 will reduce it.
        Parameters:
        scale - the scaling factor to apply to the source image.
        Throws:
        java.lang.IllegalArgumentException - if scale is zero or negative.
      • getHeading

        public Angle getHeading()
        Get the current heading Angle, clockwise from North or null.
        Returns:
        the current heading Angle, clockwise from North or null.
      • setHeading

        public void setHeading​(Angle heading)
        Set the heading Angle, clockwise from North. Setting this value to null will have the icon follow the view heading so as to always face the eye. The icon will rotate around it's reference location.
        Parameters:
        heading - the heading Angle, clockwise from North or null.
      • isMaintainSize

        public boolean isMaintainSize()
        Determines whether the icon constantly maintains it's apparent size. If true the icon is constantly redrawn at the proper size depending on it's distance from the eye. If false the icon will be drawn only once per level of the underlying tile pyramid. Thus it's apparent size will vary up to twice it's 'normal' dimension in between levels.
        Returns:
        true if the icon constantly maintains it's apparent size.
      • setMaintainSize

        public void setMaintainSize​(boolean state)
        Sets whether the icon constantly maintains it's apparent size. If true the icon is constantly redrawn at the proper size depending on it's distance from the eye. If false the icon will be drawn only once per level of the underlying tile pyramid. Thus it's apparent size will vary up to twice it's 'normal' dimension in between levels.
        Parameters:
        state - true if the icon should constantly maintains it's apparent size.
      • getMinSize

        public double getMinSize()
        Get the minimum size in meter the icon image is allowed to be reduced to once applied to the terrain surface. This limit applies to the source image largest dimension.

        The icon will try to maintain it's apparent size depending on it's distance from the eye and will extend over a rectangular area which largest dimension is bounded by the values provided with setMinSize(double) and setMaxSize(double).

        Returns:
        the minimum size of the icon in meter.
      • setMinSize

        public void setMinSize​(double sizeInMeter)
        Set the minimum size in meter the icon image is allowed to be reduced to once applied to the terrain surface. This limit applies to the source image largest dimension.

        The icon will try to maintain it's apparent size depending on it's distance from the eye and will extend over a rectangular area which largest dimension is bounded by the values provided with setMinSize(double) and setMaxSize(double).

        Parameters:
        sizeInMeter - the minimum size of the icon in meter.
      • getMaxSize

        public double getMaxSize()
        Get the maximum size in meter the icon image is allowed to be enlarged to once applied to the terrain surface. This limit applies to the source image largest dimension.

        The icon will try to maintain it's apparent size depending on it's distance from the eye and will extend over a rectangular area which largest dimension is bounded by the values provided with setMinSize(double) and setMaxSize(double).

        Returns:
        the maximum size of the icon in meter.
      • setMaxSize

        public void setMaxSize​(double sizeInMeter)
        Get the maximum size in meter the icon image is allowed to be enlarged to once applied to the terrain surface. This limit applies to the source image largest dimension.

        The icon will try to maintain it's apparent size depending on it's distance from the eye and will extend over a rectangular area which largest dimension is bounded by the values provided with setMinSize(double) and setMaxSize(double).

        Parameters:
        sizeInMeter - the maximum size of the icon in meter.
      • getColor

        public java.awt.Color getColor()
        Get the Color the source image is combined with.
        Returns:
        the Color the source image is combined with.
      • setColor

        public void setColor​(java.awt.Color color)
        Set the Color the source image will be combined with - default to white.

        A non white color will mostly affect the white portions from the original image. This is mostly useful to alter the appearance of 'colorless' icons - which mainly contain black, white and shades of gray.

        Parameters:
        color - the Color the source image will be combined with.
        Throws:
        java.lang.IllegalArgumentException - if color is null.
      • isMaintainAppearance

        protected boolean isMaintainAppearance()
      • getStateKey

        public java.lang.Object getStateKey​(DrawContext dc)
        Returns an object that uniquely identifies this renderable's state for the specified draw context.

        Callers can perform an equality test on two state keys using Object.equals(Object) in order to determine whether or not a renderable has changed. The returned object is guaranteed to be globally unique with respect to other SurfaceRenderable state keys; an equality test with a state key from another renderable always returns false.

        Overridden to return a unique state key if the icon is configured to always redraw. SurfaceIcon does not use a cached representation if it's heading is configured to follow the view, or if it's configured to maintain a constant screen size.

        Specified by:
        getStateKey in interface SurfaceRenderable
        Overrides:
        getStateKey in class AbstractSurfaceObject
        Parameters:
        dc - the draw context for which to determine this renderable's current state.
        Returns:
        an object representing this renderable's current state.
        See Also:
        getHeading(), isMaintainSize()
      • getSectors

        public java.util.List<Sector> getSectors​(DrawContext dc)
        Description copied from interface: SurfaceRenderable
        Returns a list of sectors indicating the geographic region that bounds this renderable for the specified draw context.

        The returned list typically contains one sector that bounds this renderable in geographic coordinates. When this renderable spans the anti-meridian - the +/- 180 degree meridian - the returned list contains two sectors, one on either side of the anti-meridian.

        Specified by:
        getSectors in interface SurfaceRenderable
        Parameters:
        dc - the draw context for which to determine this renderable's geographic bounds.
        Returns:
        a list of one or two sectors that bound this renderable.
      • drawGeographic

        public void drawGeographic​(DrawContext dc,
                                   SurfaceTileDrawContext sdc)
        Description copied from class: AbstractSurfaceObject
        Causes the SurfaceObject to render itself to the specified region in geographic coordinates. The specified viewport denotes the geographic region and its corresponding screen viewport.
        Specified by:
        drawGeographic in class AbstractSurfaceObject
        Parameters:
        dc - the current draw context.
        sdc - the context containing a geographic region and screen viewport corresponding to a surface tile.
      • computeSectors

        protected java.util.List<Sector> computeSectors​(DrawContext dc)
      • computeDrawDimension

        protected java.awt.geom.Rectangle2D.Double computeDrawDimension​(DrawContext dc,
                                                                        LatLon location)
      • computeDrawDimension

        protected java.awt.geom.Rectangle2D.Double computeDrawDimension​(double pixelSize)
      • beginDraw

        protected void beginDraw​(DrawContext dc)
      • applyDrawColor

        protected void applyDrawColor​(DrawContext dc)
      • getTexture

        protected WWTexture getTexture()
      • getReferencePosition

        public Position getReferencePosition()
        Description copied from interface: Movable
        A position associated with the object that indicates its aggregate geographic position. The chosen position varies among implementers of this interface. For objects defined by a list of positions, the reference position is typically the first position in the list. For symmetric objects the reference position is often the center of the object. In many cases the object's reference position may be explicitly specified by the application.
        Specified by:
        getReferencePosition in interface Movable
        Returns:
        the object's reference position, or null if no reference position is available.
      • move

        public void move​(Position delta)
        Description copied from interface: Movable
        Shift the shape over the globe's surface while maintaining its original azimuth, its orientation relative to North.
        Specified by:
        move in interface Movable
        Parameters:
        delta - the latitude and longitude to add to the shape's reference position.
      • moveTo

        public void moveTo​(Position position)
        Description copied from interface: Movable
        Move the shape over the globe's surface while maintaining its original azimuth, its orientation relative to North.
        Specified by:
        moveTo in interface Movable
        Parameters:
        position - the new position of the shape's reference position.
      • isDragEnabled

        public boolean isDragEnabled()
        Description copied from interface: Draggable
        Indicates whether the object is enabled for dragging.
        Specified by:
        isDragEnabled in interface Draggable
        Returns:
        true if the object is enabled, else false.
      • setDragEnabled

        public void setDragEnabled​(boolean enabled)
        Description copied from interface: Draggable
        Controls whether the object is enabled for dragging.
        Specified by:
        setDragEnabled in interface Draggable
        Parameters:
        enabled - true if the object is enabled, else false.
      • doDrag

        protected void doDrag​(DragContext dragContext)