NASA World Wind

gov.nasa.worldwind.render
Class SurfaceIcon

java.lang.Object
  extended by gov.nasa.worldwind.avlist.AVListImpl
      extended by gov.nasa.worldwind.WWObjectImpl
          extended by gov.nasa.worldwind.render.AbstractSurfaceObject
              extended by gov.nasa.worldwind.render.AbstractSurfaceRenderable
                  extended by gov.nasa.worldwind.render.SurfaceIcon
All Implemented Interfaces:
AVList, MessageListener, Movable, OrderedRenderable, PreRenderable, Renderable, SurfaceObject, WWObject, PropertyChangeListener, EventListener
Direct Known Subclasses:
SurfaceIcons

public class SurfaceIcon
extends AbstractSurfaceRenderable
implements Movable

Renders an icon image over the terrain surface.


Nested Class Summary
protected static class SurfaceIcon.SectorInfo
           
 
Nested classes/interfaces inherited from class gov.nasa.worldwind.render.AbstractSurfaceObject
AbstractSurfaceObject.CacheEntry, AbstractSurfaceObject.SurfaceObjectStateKey
 
Field Summary
protected  int imageHeight
           
protected  int imageWidth
           
protected  WWTexture texture
           
 
Fields inherited from class gov.nasa.worldwind.render.AbstractSurfaceObject
delegateOwner, drawBoundingSectors, enableBatchPicking, extentCache, lastModifiedTime, nextUniqueId, pickLayer, pickSupport, pickTileBuilder, pickTiles, uniqueId, visible
 
Constructor Summary
SurfaceIcon(Object imageSource)
           
SurfaceIcon(Object imageSource, LatLon location)
           
 
Method Summary
protected  void applyDrawColor(DrawContext dc)
           
protected  void applyDrawTransform(DrawContext dc, SurfaceTileDrawContext sdc, LatLon location, double drawScale)
           
protected  void beginDraw(DrawContext dc)
           
protected  void clearCaches()
          Clears this SurfaceObject's internal extent cache.
protected  Rectangle2D.Double computeDrawDimension(double pixelSize)
           
protected  Rectangle2D.Double computeDrawDimension(DrawContext dc, LatLon location)
           
protected  Angle computeDrawHeading(DrawContext dc)
           
protected  double computeDrawScale(DrawContext dc, SurfaceTileDrawContext sdc, LatLon location)
           
protected  List<Sector> computeSectors(DrawContext dc)
           
 void drawGeographic(DrawContext dc, SurfaceTileDrawContext sdc)
          Causes the SurfaceObject to render itself to the specified region in geographic coordinates.
protected  void drawIcon(DrawContext dc, SurfaceTileDrawContext sdc)
           
protected  void endDraw(DrawContext dc)
           
 Color getColor()
          Get the Color the source image is combined with.
 Extent getExtent(DrawContext dc)
          Returns the surface object's enclosing volume as an Extent in model coordinates, given a specified DrawContext.
 Angle getHeading()
          Get the current heading Angle, clockwise from North or null.
 Object getImageSource()
          Get the source for the icon image.
 LatLon getLocation()
          Get the icon reference location on the globe.
 Vec4 getLocationOffset()
          Get the icon displacement in pixels relative to the reference location.
 double getMaxSize()
          Get the maximum size in meter the icon image is allowed to be enlarged to once applied to the terrain surface.
 double getMinSize()
          Get the minimum size in meter the icon image is allowed to be reduced to once applied to the terrain surface.
 Position getReferencePosition()
          A position associated with the object that indicates its aggregate geographic position.
 double getScale()
          Get the current scaling factor applied to the source image.
 List<Sector> getSectors(DrawContext dc)
          Returns a List of Sector instances that bound the surface object on the specified DrawContext.
 Object getStateKey(DrawContext dc)
          Returns an object that uniquely identifies the surface object's state on the specified draw context.
protected  WWTexture getTexture()
           
protected  boolean isMaintainAppearance()
           
 boolean isMaintainSize()
          Determines whether the icon constantly maintains it's apparent size.
 boolean isUseMipMaps()
          Returns whether the icon will apply mip-map filtering to it's source image.
 void move(Position delta)
          Shift the shape over the globe's surface while maintaining its original azimuth, its orientation relative to North.
 void moveTo(Position position)
          Move the shape over the globe's surface while maintaining its original azimuth, its orientation relative to North.
protected  void onPropertyChanged()
           
 void setColor(Color color)
          Set the Color the source image will be combined with - default to white.
 void setHeading(Angle heading)
          Set the heading Angle, clockwise from North.
 void setImageSource(Object imageSource)
          Set the source for the icon image.
 void setLocation(LatLon location)
          Set the icon reference location on the globe.
 void setLocationOffset(Vec4 locationOffset)
          Set the icon displacement in pixels relative to the reference location.
 void setMaintainSize(boolean state)
          Sets whether the icon constantly maintains it's apparent size.
 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.
 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.
 void setScale(double scale)
          Set the scaling factor to apply to the source image.
 void setUseMipMaps(boolean useMipMaps)
          Sets whether the icon will apply mip-map filtering to it's source image.
 
Methods inherited from class gov.nasa.worldwind.render.AbstractSurfaceRenderable
applyNonPremultipliedAlphaColor, applyPremultipliedAlphaColor, computeDrawPixelSize, computeDrawPoint, computeHemisphereOffset, computeNormalizedSectors, computePixelSizeAtLocation, computeRotatedSectorBounds, getOpacity, getViewHeading, setOpacity
 
Methods inherited from class gov.nasa.worldwind.render.AbstractSurfaceObject
buildPickRepresentation, computeExtent, computeExtent, createPickedObject, createPickTileBuilder, drawBoundingSectors, drawOrderedRenderable, drawPickRepresentation, getDelegateOwner, getDistanceFromEye, getUniqueId, intersectsFrustum, intersectsPickFrustum, intersectsVisibleSector, isDrawBoundingSectors, isEnableBatchPicking, isVisible, makeOrderedPreRenderable, makeOrderedRenderable, nextUniqueId, pick, pickBatched, pickOrderedRenderable, preRender, render, setDelegateOwner, setDrawBoundingSectors, setEnableBatchPicking, setVisible, updateModifiedTime
 
Methods inherited from class gov.nasa.worldwind.WWObjectImpl
onMessage, propertyChange
 
Methods inherited from class gov.nasa.worldwind.avlist.AVListImpl
addPropertyChangeListener, addPropertyChangeListener, clearList, copy, firePropertyChange, firePropertyChange, getBooleanValue, getBooleanValue, getChangeSupport, getDoubleValue, getDoubleValue, getEntries, getIntegerValue, getIntegerValue, getLongValue, getLongValue, getRestorableStateForAVPair, getStringValue, getStringValue, getStringValue, getValue, getValues, hasKey, removeKey, removePropertyChangeListener, removePropertyChangeListener, setValue, setValues
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface gov.nasa.worldwind.avlist.AVList
addPropertyChangeListener, addPropertyChangeListener, clearList, copy, firePropertyChange, firePropertyChange, getEntries, getStringValue, getValue, getValues, hasKey, removeKey, removePropertyChangeListener, removePropertyChangeListener, setValue, setValues
 

Field Detail

imageHeight

protected int imageHeight

imageWidth

protected int imageWidth

texture

protected WWTexture texture
Constructor Detail

SurfaceIcon

public SurfaceIcon(Object imageSource)

SurfaceIcon

public SurfaceIcon(Object imageSource,
                   LatLon location)
Method Detail

applyDrawColor

protected void applyDrawColor(DrawContext dc)

applyDrawTransform

protected void applyDrawTransform(DrawContext dc,
                                  SurfaceTileDrawContext sdc,
                                  LatLon location,
                                  double drawScale)

beginDraw

protected void beginDraw(DrawContext dc)

clearCaches

protected void clearCaches()
Description copied from class: AbstractSurfaceObject
Clears this SurfaceObject's internal extent cache.

Overrides:
clearCaches in class AbstractSurfaceObject

computeDrawDimension

protected Rectangle2D.Double computeDrawDimension(double pixelSize)

computeDrawDimension

protected Rectangle2D.Double computeDrawDimension(DrawContext dc,
                                                  LatLon location)

computeDrawHeading

protected Angle computeDrawHeading(DrawContext dc)

computeDrawScale

protected double computeDrawScale(DrawContext dc,
                                  SurfaceTileDrawContext sdc,
                                  LatLon location)

computeSectors

protected List<Sector> computeSectors(DrawContext dc)

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.

drawIcon

protected void drawIcon(DrawContext dc,
                        SurfaceTileDrawContext sdc)

endDraw

protected void endDraw(DrawContext dc)

getColor

public Color getColor()
Get the Color the source image is combined with.

Returns:
the Color the source image is combined with.

getExtent

public Extent getExtent(DrawContext dc)
Description copied from class: AbstractSurfaceObject
Returns the surface object's enclosing volume as an Extent in model coordinates, given a specified DrawContext.

Specified by:
getExtent in interface SurfaceObject
Overrides:
getExtent in class AbstractSurfaceObject
Parameters:
dc - the current draw context.
Returns:
the surface object's Extent in model coordinates.

getHeading

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

Returns:
the current heading Angle, clockwise from North or null.

getImageSource

public 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.

getLocation

public LatLon getLocation()
Get the icon reference location on the globe.

Returns:
the icon reference location on the globe.

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.

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.

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.

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.

getScale

public double getScale()
Get the current scaling factor applied to the source image.

Returns:
the current scaling factor applied to the source image.

getSectors

public List<Sector> getSectors(DrawContext dc)
Description copied from interface: SurfaceObject
Returns a List of Sector instances that bound the surface object on the specified DrawContext.

Specified by:
getSectors in interface SurfaceObject
Parameters:
dc - the DrawContext the surface object is related to.
Returns:
the surface object's bounding Sectors.

getStateKey

public Object getStateKey(DrawContext dc)
Returns an object that uniquely identifies the surface object's state on the specified draw context. This object is guaranteed to be globally unique; an equality test with a state key from another 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 SurfaceObject
Overrides:
getStateKey in class AbstractSurfaceObject
Parameters:
dc - the draw context the state key relates to.
Returns:
an object representing surface object's current state.
See Also:
getHeading(), isMaintainSize()

getTexture

protected WWTexture getTexture()

isMaintainAppearance

protected boolean isMaintainAppearance()

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.

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.

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.

onPropertyChanged

protected void onPropertyChanged()

setColor

public void setColor(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:
IllegalArgumentException - if color is 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.

setImageSource

public void setImageSource(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:
IllegalArgumentException - if imageSource is null.

setLocation

public void setLocation(LatLon location)
Set the icon reference location on the globe.

Parameters:
location - the icon reference location on the globe.
Throws:
IllegalArgumentException - if location is null.

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.

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.

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.

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.

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:
IllegalArgumentException - if scale is zero or negative.

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.

NASA World Wind