public class AnalyticSurface extends Object implements Renderable, PreRenderable
Sector at a
 specified base altitude in meters. The number of grid locations is defined by the AnalyticSurface's dimensions. The
 default dimensions are (10, 10). Callers specify the dimensions by using one of the constructors
 accepting width and height, or by invoking setDimensions(int, int). Each grid
 point has the following set of attributes: setValues(Iterable) with an Iterable of AnalyticSurface.GridPointAttributes. Grid points are assigned attributes from this iterable staring at the upper left hand corner,
 and proceeding in row-first order across the grid. The iterable should contain at least width * height
 values, where width and height are the AnalyticSurface's grid dimensions. If the caller does not specify any
 GridPointAttributes, or the caller specified iterable contains too few values, the unassigned grid points are given
 default attributes: the default scalar value is 0, and the default color is Color.BLACK.
 
 | Altitude Mode | Grid Point Altitude | 
|---|---|
| WorldWind.ABSOLUTE (default) | surface altitude + (vertical scale * scalar value from GridPointAttributes) | 
| WorldWind.RELATIVE_TO_GROUND | terrain height at grid point + surface altitude + (vertical scale * scalar value from GridPointAttributes) | 
| WorldWind.CLAMP_TO_GROUND | terrain height at grid point | 
| Modifier and Type | Class and Description | 
|---|---|
| protected static class  | AnalyticSurface.AnalyticSurfaceObject | 
| protected static class  | AnalyticSurface.ClampToGroundSurface | 
| static interface  | AnalyticSurface.GridPointAttributesGridPointAttributes defines the properties associated with a single grid point of an AnalyticSurface. | 
| protected static class  | AnalyticSurface.OrderedSurface | 
| protected static class  | AnalyticSurface.RenderInfo | 
| protected static class  | AnalyticSurface.ShadowSurface | 
| Modifier and Type | Field and Description | 
|---|---|
| protected double | altitude | 
| protected int | altitudeMode | 
| protected AnalyticSurface.AnalyticSurfaceObject | clampToGroundSurface | 
| protected Layer | clientLayer | 
| protected static double | DEFAULT_ALTITUDE | 
| protected static int | DEFAULT_ALTITUDE_MODEThe default altitude mode. | 
| protected static Color | DEFAULT_COLOR | 
| protected static int | DEFAULT_DIMENSION | 
| protected static AnalyticSurface.GridPointAttributes | DEFAULT_GRID_POINT_ATTRIBUTES | 
| protected static double | DEFAULT_VALUE | 
| protected boolean | expired | 
| protected double[] | extremeValues | 
| protected Object | globeStateKey | 
| protected int | height | 
| protected Object | pickObject | 
| protected PickSupport | pickSupport | 
| protected Vec4 | referencePoint | 
| protected Position | referencePos | 
| protected long | regenTime | 
| protected static long | RELATIVE_TO_GROUND_REGEN_PERIODThe time period between surface regeneration when altitude mode is relative-to-ground. | 
| protected Sector | sector | 
| protected AnalyticSurface.AnalyticSurfaceObject | shadowSurface | 
| protected AnalyticSurfaceAttributes | surfaceAttributes | 
| protected AnalyticSurface.RenderInfo | surfaceRenderInfo | 
| protected boolean | updateFailed | 
| protected Iterable<? extends AnalyticSurface.GridPointAttributes> | values | 
| protected double | verticalScale | 
| protected boolean | visible | 
| protected int | width | 
| Constructor and Description | 
|---|
| AnalyticSurface()Constructs a new AnalyticSurface with the default Sector  Sector.EMPTY_SECTOR, the default altitude of 0
 meters, default dimensions of(10, 10), and defaultAnalyticSurface.GridPointAttributes. | 
| AnalyticSurface(int width,
               int height)Constructs a new AnalyticSurface with the specified grid dimensions. | 
| AnalyticSurface(Sector sector,
               double altitude)Constructs a new AnalyticSurface with the specified  Sectorand base altitude in meters. | 
| AnalyticSurface(Sector sector,
               double altitude,
               int width,
               int height)Constructs a new AnalyticSurface with the specified  Sector, base altitude in meters, and grid dimensions. | 
| AnalyticSurface(Sector sector,
               double altitude,
               int width,
               int height,
               Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)Constructs a new AnalyticSurface with the specified  Sector, base altitude in meters, grid dimensions, and
 iterable of GridPointAttributes. | 
| Modifier and Type | Method and Description | 
|---|---|
| protected void | beginDrawing(DrawContext dc) | 
| protected void | bind(DrawContext dc) | 
| static double[] | computeExtremeValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)Returns the minimum and maximum values in the specified iterable of  AnalyticSurface.GridPointAttributes. | 
| static double[] | computeExtremeValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable,
                    double missingDataSignal)Returns the minimum and maximum values in the specified iterable of  AnalyticSurface.GridPointAttributes. | 
| protected Vec4 | computeSurfacePoint(DrawContext dc,
                   Angle lat,
                   Angle lon,
                   double value) | 
| protected AnalyticSurface.AnalyticSurfaceObject | createClampToGroundSurface() | 
| static AnalyticSurface.GridPointAttributes | createColorGradientAttributes(double value,
                             double minValue,
                             double maxValue,
                             double minHue,
                             double maxHue)Returns a new instance of  AnalyticSurface.GridPointAttributeswith a Color computed from the specified value and value
 range. | 
| static Iterable<? extends AnalyticSurface.GridPointAttributes> | createColorGradientValues(BufferWrapper values,
                         double missingDataSignal,
                         double minValue,
                         double maxValue,
                         double minHue,
                         double maxHue)Returns a new iterable populated with  AnalyticSurface.GridPointAttributescomputed by invokingcreateColorGradientAttributes(double, double, double, double, double)for each double value in the speicfiedBufferWrapper. | 
| static Iterable<? extends AnalyticSurface.GridPointAttributes> | createDefaultValues(int count)Returns a new iterable populated with the default  AnalyticSurface.GridPointAttributes. | 
| static AnalyticSurface.GridPointAttributes | createGridPointAttributes(double value,
                         Color color)Returns a new instance of  AnalyticSurface.GridPointAttributeswith the specified value and color. | 
| protected AnalyticSurface.AnalyticSurfaceObject | createShadowSurface() | 
| protected void | doDrawOrderedRenderable(DrawContext dc) | 
| protected void | doUpdate(DrawContext dc) | 
| protected void | drawInterior(DrawContext dc) | 
| protected void | drawOrderedRenderable(DrawContext dc) | 
| protected void | drawOutline(DrawContext dc) | 
| protected void | drawSurfaceObjects(DrawContext dc) | 
| protected void | endDrawing(DrawContext dc) | 
| double | getAltitude()Returns this surface's base altitude, in meters. | 
| int | getAltitudeMode()Returns the surface's altitude mode, one of  WorldWind.CLAMP_TO_GROUND,WorldWind.RELATIVE_TO_GROUND, orWorldWind.ABSOLUTE. | 
| Layer | getClientLayer()Returns the layer associated with this surface during picking. | 
| int[] | getDimensions()Returns the number of horizontal and vertical points composing this surface as an array with two values. | 
| Extent | getExtent(DrawContext dc)Returns this surface's extent in model coordinates. | 
| Object | getPickObject()Returns the object which is associated with this surface during picking. | 
| Sector | getSector()Returns the  Sectordefining the geographic boundary of this surface. | 
| AnalyticSurfaceAttributes | getSurfaceAttributes()Returns a copy of the rendering attributes associated with this surface. | 
| Iterable<? extends AnalyticSurface.GridPointAttributes> | getValues()Returns the surface's iterable of  AnalyticSurface.GridPointAttributes. | 
| double | getVerticalScale()Returns the scale applied to the value at each grid point. | 
| protected boolean | intersectsFrustum(DrawContext dc)Test if this AnalyticSurface intersects the specified draw context's frustum. | 
| protected boolean | isExpired(DrawContext dc) | 
| boolean | isVisible()Returns true if the surface is visible in the scene, and false otherwise. | 
| protected void | makeOrderedRenderable(DrawContext dc) | 
| void | preRender(DrawContext dc) | 
| protected void | preRenderSurfaceObjects(DrawContext dc) | 
| void | render(DrawContext dc)Causes this  Renderableto render itself using the provided draw context. | 
| void | setAltitude(double altitude)Sets this surface's base altitude, in meters. | 
| void | setAltitudeMode(int altitudeMode)Specifies the surface's altitude mode, one of  WorldWind.CLAMP_TO_GROUND,WorldWind.RELATIVE_TO_GROUND, orWorldWind.ABSOLUTE. | 
| void | setClientLayer(Layer layer)Sets the layer associated with this surface during picking. | 
| void | setDimensions(int width,
             int height)Sets the number of horizontal and vertical points composing this surface. | 
| protected void | setExpired(boolean expired) | 
| void | setPickObject(Object pickObject)Sets the object associated with this surface during picking. | 
| void | setSector(Sector sector)Sets this surface's geographic boundary, as a  Sector. | 
| void | setSurfaceAttributes(AnalyticSurfaceAttributes attributes)Sets the rendering attributes associated with this surface. | 
| void | setValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)Sets this surface's iterable of  AnalyticSurface.GridPointAttributes. | 
| void | setVerticalScale(double scale)Sets the scale applied to the value at each grid point. | 
| void | setVisible(boolean visible)Sets whether or not the surface is visible in the scene. | 
| protected void | update(DrawContext dc) | 
| protected void | updateNextSurfacePoint(DrawContext dc,
                      Angle lat,
                      Angle lon,
                      AnalyticSurface.GridPointAttributes attr,
                      AnalyticSurface.RenderInfo outRenderInfo) | 
| protected void | updateSurfaceNormals(AnalyticSurface.RenderInfo outRenderInfo) | 
| protected void | updateSurfacePoints(DrawContext dc,
                   AnalyticSurface.RenderInfo outRenderInfo) | 
protected double altitude
protected int altitudeMode
protected AnalyticSurface.AnalyticSurfaceObject clampToGroundSurface
protected Layer clientLayer
protected static final double DEFAULT_ALTITUDE
protected static final int DEFAULT_ALTITUDE_MODE
protected static final Color DEFAULT_COLOR
protected static final int DEFAULT_DIMENSION
protected static final AnalyticSurface.GridPointAttributes DEFAULT_GRID_POINT_ATTRIBUTES
protected static final double DEFAULT_VALUE
protected boolean expired
protected double[] extremeValues
protected Object globeStateKey
protected int height
protected Object pickObject
protected final PickSupport pickSupport
protected Vec4 referencePoint
protected Position referencePos
protected long regenTime
protected static final long RELATIVE_TO_GROUND_REGEN_PERIOD
protected Sector sector
protected AnalyticSurface.AnalyticSurfaceObject shadowSurface
protected AnalyticSurfaceAttributes surfaceAttributes
protected AnalyticSurface.RenderInfo surfaceRenderInfo
protected boolean updateFailed
protected Iterable<? extends AnalyticSurface.GridPointAttributes> values
protected double verticalScale
protected boolean visible
protected int width
public AnalyticSurface()
Sector.EMPTY_SECTOR, the default altitude of 0
 meters, default dimensions of (10, 10), and default AnalyticSurface.GridPointAttributes.public AnalyticSurface(int width,
                       int height)
Sector.EMPTY_SECTOR, the default altitude of 0 meters, and default AnalyticSurface.GridPointAttributes.width - the surface grid width, in number of grid points.height - the surface grid height, in number of grid points.IllegalArgumentException - if the sector is null.public AnalyticSurface(Sector sector, double altitude)
Sector and base altitude in meters. The new
 AnalyticSurface has default dimensions of (10, 10), and default AnalyticSurface.GridPointAttributes.sector - the Sector which defines the surface's geographic region.altitude - the base altitude to place the surface at, in meters.IllegalArgumentException - if the sector is null.public AnalyticSurface(Sector sector, double altitude, int width, int height)
Sector, base altitude in meters, and grid dimensions.
 The new AnalyticSurface has the default AnalyticSurface.GridPointAttributes.sector - the Sector which defines the surface's geographic region.altitude - the base altitude to place the surface at, in meters.width - the surface grid width, in number of grid points.height - the surface grid height, in number of grid points.IllegalArgumentException - if the sector is null, if the width is less than 1, or if the height is less
                                  than 1.public AnalyticSurface(Sector sector, double altitude, int width, int height, Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)
Sector, base altitude in meters, grid dimensions, and
 iterable of GridPointAttributes. The iterable should contain at least with * height non-null
 GridPointAttributes.sector - the Sector which defines the surface's geographic region.altitude - the base altitude to place the surface at, in meters.width - the surface grid width, in number of grid points.height - the surface grid height, in number of grid points.iterable - the attributes associated with each grid point.IllegalArgumentException - if the sector is null, if the width is less than 1, if the height is less than
                                  1, or if the iterable is null.protected void beginDrawing(DrawContext dc)
protected void bind(DrawContext dc)
public static double[] computeExtremeValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)
AnalyticSurface.GridPointAttributes. Values
 equivalent to Double.NaN are ignored. This returns null if the buffer is empty or contains only NaN
 values.iterable - the GridPointAttributes to search for the minimum and maximum value.IllegalArgumentException - if the iterable is null.public static double[] computeExtremeValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable, double missingDataSignal)
AnalyticSurface.GridPointAttributes. Values
 equivalent to the specified missingDataSignal are ignored. This returns null if the iterable is
 empty or contains only missing values.iterable - the GridPointAttributes to search for the minimum and maximum value.missingDataSignal - the number indicating a specific value to ignore.IllegalArgumentException - if the iterable is null.protected Vec4 computeSurfacePoint(DrawContext dc, Angle lat, Angle lon, double value)
protected AnalyticSurface.AnalyticSurfaceObject createClampToGroundSurface()
public static AnalyticSurface.GridPointAttributes createColorGradientAttributes(double value, double minValue, double maxValue, double minHue, double maxHue)
AnalyticSurface.GridPointAttributes with a Color computed from the specified value and value
 range. The color's RGB components are computed by mapping value's relative position in the range [minValue,
 maxValue] to the range of color hues [minHue, maxHue]. The color's Alpha component is
 computed by mapping the values's relative position in the range [minValue, minValue + (maxValue - minValue)
 / 10] to the range [0, 1]. This has the effect of interpolating hue and alpha based on the
 grid point value.value - the new GridPointAttributes' value.minValue - the minimum value.maxValue - the maximum value.minHue - the mimimum color hue, corresponding to the minimum value.maxHue - the maximum color hue, corresponding to the maximum value.public static Iterable<? extends AnalyticSurface.GridPointAttributes> createColorGradientValues(BufferWrapper values, double missingDataSignal, double minValue, double maxValue, double minHue, double maxHue)
AnalyticSurface.GridPointAttributes computed by invoking createColorGradientAttributes(double, double, double, double, double) for each double value in the speicfied
 BufferWrapper. Values equivalent to the specified missingDataSignal are replaced with the
 specified minValue.values - the buffer of values.missingDataSignal - the number indicating a specific value to ignore.minValue - the minimum value.maxValue - the maximum value.minHue - the mimimum color hue, corresponding to the minimum value.maxHue - the maximum color hue, corresponding to the maximum value.public static Iterable<? extends AnalyticSurface.GridPointAttributes> createDefaultValues(int count)
AnalyticSurface.GridPointAttributes. The default GridPointAttributes
 have a value of 0, and the color Color.BLACK.count - the desired number of GridPointAttributes to return.count default GridPointAttributes.public static AnalyticSurface.GridPointAttributes createGridPointAttributes(double value, Color color)
AnalyticSurface.GridPointAttributes with the specified value and color.value - the new GridPointAttributes' value.color - the new GridPointAttributes' color.protected AnalyticSurface.AnalyticSurfaceObject createShadowSurface()
protected void doDrawOrderedRenderable(DrawContext dc)
protected void doUpdate(DrawContext dc)
protected void drawInterior(DrawContext dc)
protected void drawOrderedRenderable(DrawContext dc)
protected void drawOutline(DrawContext dc)
protected void drawSurfaceObjects(DrawContext dc)
protected void endDrawing(DrawContext dc)
public double getAltitude()
setAltitude(double)public int getAltitudeMode()
WorldWind.CLAMP_TO_GROUND, WorldWind.RELATIVE_TO_GROUND, or WorldWind.ABSOLUTE.setAltitudeMode(int)public Layer getClientLayer()
public int[] getDimensions()
public Extent getExtent(DrawContext dc)
dc - the current DrawContext.IllegalArgumentException - if the DrawContext is null.public Object getPickObject()
public Sector getSector()
Sector defining the geographic boundary of this surface.public AnalyticSurfaceAttributes getSurfaceAttributes()
setSurfaceAttributes(AnalyticSurfaceAttributes) with the modified attributes.public Iterable<? extends AnalyticSurface.GridPointAttributes> getValues()
AnalyticSurface.GridPointAttributes. See setValues(Iterable) for details on
 how this iterable is interpreted by AnalyticSurface.public double getVerticalScale()
protected boolean intersectsFrustum(DrawContext dc)
dc - the current draw context.protected boolean isExpired(DrawContext dc)
public boolean isVisible()
protected void makeOrderedRenderable(DrawContext dc)
public void preRender(DrawContext dc)
preRender in interface PreRenderabledc - protected void preRenderSurfaceObjects(DrawContext dc)
public void render(DrawContext dc)
Renderable to render itself using the provided draw context.render in interface Renderabledc - the DrawContext to be usedDrawContextpublic void setAltitude(double altitude)
altitude - the new base altitude, in meters.public void setAltitudeMode(int altitudeMode)
WorldWind.CLAMP_TO_GROUND, WorldWind.RELATIVE_TO_GROUND, or WorldWind.ABSOLUTE. The altitude
 mode WorldWind.CONSTANT is not supported and WorldWind.ABSOLUTE is used if specified. See the AnalyticSurface class documentation for
 information on how the altitude mode is interpreted.altitudeMode - the surface's altitude mode.public void setClientLayer(Layer layer)
layer - this surface's pick layer.public void setDimensions(int width,
                          int height)
width - the new grid width.height - the new grid height.IllegalArgumentException - if either width or heigth are less than 1.protected void setExpired(boolean expired)
public void setPickObject(Object pickObject)
pickObject - the object to associated with this surface during picking. A null value is permitted and
                   indicates that the surface itself will be the object returned during picking.public void setSector(Sector sector)
Sector.sector - this surface's new geographic boundary, as a Sector.IllegalArgumentException - if the sector is null.public void setSurfaceAttributes(AnalyticSurfaceAttributes attributes)
attributes - this surface's new rendering attributes.IllegalArgumentException - if attributes is null.public void setValues(Iterable<? extends AnalyticSurface.GridPointAttributes> iterable)
AnalyticSurface.GridPointAttributes. Grid points are assigned attributes from this
 iterable staring at the upper left hand corner, and proceeding in row-first order across the grid. The iterable
 should contain at least width * height values, where width and height are the AnalyticSurface's grid
 dimensions. If the iterable contains too few values, the unassigned grid points are given default attributes: the
 default scalar value is 0, and the default color is Color.BLACK.iterable - the new grid point attributes.IllegalArgumentException - if the iterable is null.public void setVerticalScale(double scale)
scale - the surface's vertical scale coefficient.public void setVisible(boolean visible)
visible - true to make the surface visible, and false to make it hidden.protected void update(DrawContext dc)
protected void updateNextSurfacePoint(DrawContext dc, Angle lat, Angle lon, AnalyticSurface.GridPointAttributes attr, AnalyticSurface.RenderInfo outRenderInfo)
protected void updateSurfaceNormals(AnalyticSurface.RenderInfo outRenderInfo)
protected void updateSurfacePoints(DrawContext dc, AnalyticSurface.RenderInfo outRenderInfo)