Class AbstractSurfaceShape

    • Field Detail

      • DEFAULT_INTERIOR_MATERIAL

        protected static final Material DEFAULT_INTERIOR_MATERIAL
        The default interior color.
      • DEFAULT_OUTLINE_MATERIAL

        protected static final Material DEFAULT_OUTLINE_MATERIAL
        The default outline color.
      • DEFAULT_HIGHLIGHT_MATERIAL

        protected static final Material DEFAULT_HIGHLIGHT_MATERIAL
        The default highlight color.
      • DEFAULT_PATH_TYPE

        protected static final java.lang.String DEFAULT_PATH_TYPE
        The default path type.
        See Also:
        Constant Field Values
      • DEFAULT_TEXELS_PER_EDGE_INTERVAL

        protected static final int DEFAULT_TEXELS_PER_EDGE_INTERVAL
        The default number of texels per shape edge interval.
        See Also:
        Constant Field Values
      • DEFAULT_MIN_EDGE_INTERVALS

        protected static final int DEFAULT_MIN_EDGE_INTERVALS
        The default minimum number of shape edge intervals.
        See Also:
        Constant Field Values
      • DEFAULT_MAX_EDGE_INTERVALS

        protected static final int DEFAULT_MAX_EDGE_INTERVALS
        The default maximum number of shape edge intervals.
        See Also:
        Constant Field Values
      • defaultAttrs

        protected static final ShapeAttributes defaultAttrs
        The attributes used if attributes are not specified.
      • highlighted

        protected boolean highlighted
      • dragEnabled

        protected boolean dragEnabled
      • pathType

        protected java.lang.String pathType
      • texelsPerEdgeInterval

        protected double texelsPerEdgeInterval
      • minEdgeIntervals

        protected int minEdgeIntervals
      • maxEdgeIntervals

        protected int maxEdgeIntervals
      • activeGeometry

        protected java.util.List<java.util.List<LatLon>> activeGeometry
      • activeOutlineGeometry

        protected java.util.List<java.util.List<LatLon>> activeOutlineGeometry
      • vertexBuffer

        protected static java.nio.FloatBuffer vertexBuffer
      • areaMeasurerLastModifiedTime

        protected long areaMeasurerLastModifiedTime
    • Constructor Detail

      • AbstractSurfaceShape

        public AbstractSurfaceShape()
        Constructs a new surface shape with the default attributes.
      • AbstractSurfaceShape

        public AbstractSurfaceShape​(ShapeAttributes normalAttrs)
        Constructs a new surface shape with the specified normal (as opposed to highlight) attributes. Modifying the attribute reference after calling this constructor causes this shape's appearance to change accordingly.
        Parameters:
        normalAttrs - the normal attributes. May be null, in which case default attributes are used.
      • AbstractSurfaceShape

        public AbstractSurfaceShape​(AbstractSurfaceShape source)
        Creates a shallow copy of the specified source shape.
        Parameters:
        source - the shape to copy.
    • Method Detail

      • getAttributes

        public ShapeAttributes getAttributes()
        Returns the surface shape's normal (as opposed to highlight) attributes. Modifying the contents of the returned reference causes this shape's appearance to change accordingly.
        Specified by:
        getAttributes in interface Attributable
        Specified by:
        getAttributes in interface SurfaceShape
        Returns:
        the surface shape's normal attributes. May be null.
      • setAttributes

        public void setAttributes​(ShapeAttributes normalAttrs)
        Specifies the surface shape's normal (as opposed to highlight) attributes. Modifying the attribute reference after calling setAttributes() causes this shape's appearance to change accordingly.
        Specified by:
        setAttributes in interface Attributable
        Specified by:
        setAttributes in interface SurfaceShape
        Parameters:
        normalAttrs - the normal attributes. May be null, in which case default attributes are used.
      • getHighlightAttributes

        public ShapeAttributes getHighlightAttributes()
        Returns the surface shape's highlight attributes. Modifying the contents of the returned reference causes this shape's appearance to change accordingly.
        Specified by:
        getHighlightAttributes in interface Attributable
        Specified by:
        getHighlightAttributes in interface SurfaceShape
        Returns:
        the surface shape's highlight attributes. May be null.
      • setHighlightAttributes

        public void setHighlightAttributes​(ShapeAttributes highlightAttrs)
        Specifies the surface shape's highlight attributes. Modifying the attribute reference after calling setHighlightAttributes() causes this shape's appearance to change accordingly.
        Specified by:
        setHighlightAttributes in interface Attributable
        Specified by:
        setHighlightAttributes in interface SurfaceShape
        Parameters:
        highlightAttrs - the highlight attributes. May be null, in which case default attributes are used.
      • getPathType

        public java.lang.String getPathType()
        Description copied from interface: SurfaceShape
        Returns the path type used to interpolate between locations on this SurfaceShape.
        Specified by:
        getPathType in interface SurfaceShape
        Returns:
        path interpolation type.
      • setPathType

        public void setPathType​(java.lang.String pathType)
        Description copied from interface: SurfaceShape
        Sets the path type used to interpolate between locations on this SurfaceShape. This should be one of
        • gov.nasa.worldwind.avlist.AVKey.GREAT_CIRCLE
        • gov.nasa.worldwind.avlist.AVKey.LINEAR
        • gov.nasa.worldwind.avlist.AVKey.LOXODROME
        • gov.nasa.worldwind.avlist.AVKey.RHUMB
        Specified by:
        setPathType in interface SurfaceShape
        Parameters:
        pathType - path interpolation type.
      • setTexelsPerEdgeInterval

        public void setTexelsPerEdgeInterval​(double texelsPerEdgeInterval)
        Description copied from interface: SurfaceShape
        Sets the number of texels per shape edge interval. This value controls how many interpolated intervals are added to each shape edge, depending on size of the original edge in texels. Each shape is responsible for defining what an edge is, though for most shapes it is defined as the edge between implicit or caller-specified shape locations. The number of interpolated intervals is limited by the values set in a call to SurfaceShape.setMinAndMaxEdgeIntervals(int, int).
        Specified by:
        setTexelsPerEdgeInterval in interface SurfaceShape
        Parameters:
        texelsPerEdgeInterval - the size, in texels, of each interpolated edge interval.
        See Also:
        SurfaceShape.setMinAndMaxEdgeIntervals(int, int)
      • setMinAndMaxEdgeIntervals

        public void setMinAndMaxEdgeIntervals​(int minEdgeIntervals,
                                              int maxEdgeIntervals)
        Description copied from interface: SurfaceShape
        Sets the minimum and maximum number of interpolated intervals that may be added to each shape edge. The minimum and maximum values may be 0, or any positive integer. Note that Setting either of minEdgeIntervals or maxEdgeIntervals too large may adversely impact surface shape rendering performance.
        Specified by:
        setMinAndMaxEdgeIntervals in interface SurfaceShape
        Parameters:
        minEdgeIntervals - the minimum number of interpolated edge intervals.
        maxEdgeIntervals - the maximum number of interpolated edge intervals.
        See Also:
        SurfaceShape.setTexelsPerEdgeInterval(double)
      • 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.

        The returned state key is constructed the SurfaceShape's unique ID, last modified time, and its active attributes. The returned state key has no dependency on the Globe. Subclasses that depend on the Globe should return a state key that include the globe's state key.

        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.
      • 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.
      • computeSectors

        protected java.util.List<Sector> computeSectors​(DrawContext dc)
        Computes the bounding sectors for the shape. There will be more than one if the shape crosses the date line, but does not enclose a pole.
        Parameters:
        dc - Current draw context.
        Returns:
        Bounding sectors for the shape.
      • computeSectors

        protected java.util.List<Sector> computeSectors​(Globe globe)
        Computes the bounding sectors for the shape. There will be more than one if the shape crosses the date line, but does not enclose a pole.
        Parameters:
        globe - Current globe.
        Returns:
        Bounding sectors for the shape.
      • isSectorEmpty

        protected static boolean isSectorEmpty​(Sector sector)
      • getExtent

        public Extent getExtent​(Globe globe,
                                double verticalExaggeration)
        Returns this SurfaceShape's enclosing volume as an Extent in model coordinates, given a specified Globe and vertical exaggeration (see SceneController.getVerticalExaggeration().
        Specified by:
        getExtent in interface ExtentHolder
        Parameters:
        globe - the Globe this SurfaceShape is related to.
        verticalExaggeration - the vertical exaggeration of the scene containing this SurfaceShape.
        Returns:
        this SurfaceShape's Extent in model coordinates.
        Throws:
        java.lang.IllegalArgumentException - if the Globe is null.
      • getRestorableState

        public java.lang.String getRestorableState()
        Description copied from interface: Restorable
        Returns an XML document string describing the object's state. This state can be restored later by calling restoreState and passing the XML document.
        Specified by:
        getRestorableState in interface Restorable
        Returns:
        an XML document string describing the object's state.
      • restoreState

        public void restoreState​(java.lang.String stateInXml)
        Description copied from interface: Restorable
        Restores the object's state to what is described in the specified XML document string.
        Specified by:
        restoreState in interface Restorable
        Parameters:
        stateInXml - an XML document string describing an object's state.
      • getArea

        public double getArea​(Globe globe)
        Description copied from interface: MeasurableArea
        Returns the object's area in square meters. If the object conforms to terrain, the area returned is the surface area of the terrain, including its hillsides and other undulations.
        Specified by:
        getArea in interface MeasurableArea
        Parameters:
        globe - The globe the object is related to.
        Returns:
        the object's area in square meters. Returns -1 if the object does not form an area due to an insufficient number of vertices or any other condition.
      • getArea

        public double getArea​(Globe globe,
                              boolean terrainConformant)
        Description copied from interface: SurfaceShape
        Returns the shapes's area in square meters. If terrainConformant is true, the area returned is the surface area of the terrain, including its hillsides and other undulations.
        Specified by:
        getArea in interface SurfaceShape
        Parameters:
        globe - the globe the shape is related to.
        terrainConformant - whether or not the returned area should treat the shape as conforming to the terrain.
        Returns:
        the shape's area in square meters. Returns -1 if the object does not form an area due to an insufficient number of vertices or any other condition.
      • getPerimeter

        public double getPerimeter​(Globe globe)
        Description copied from interface: MeasurableArea
        Returns the length of the object's perimeter in meters. If the object conforms to terrain, the perimeter is that along the terrain, including its hillsides and other undulations.
        Specified by:
        getPerimeter in interface MeasurableArea
        Parameters:
        globe - The globe the object is related to.
        Returns:
        the object's perimeter in meters. Returns -1 if the object does not form an area due to an insufficient number of vertices or any other condition.
      • getWidth

        public double getWidth​(Globe globe)
        Description copied from interface: MeasurableArea
        Returns the longitudinal length of the object in meters. The length is the distance from the object's west-most point to its east-most. If the object is terrain conforming then the
        Specified by:
        getWidth in interface MeasurableArea
        Parameters:
        globe - The globe the object is related to.
        Returns:
        the width of the object in meters.
      • getHeight

        public double getHeight​(Globe globe)
        Description copied from interface: MeasurableArea
        Returns the latitudanl length of the object in meters. The length is the distance from the objects south-most point to its east-most position.
        Specified by:
        getHeight in interface MeasurableArea
        Parameters:
        globe - The globe the object is related to.
        Returns:
        the height of the object in meters.
      • getLength

        public double getLength​(Globe globe)
        Description copied from interface: MeasurableLength
        Returns the object's length in meters. If the object conforms to terrain, the length is that along the terrain, including its hillsides and other undulations.
        Specified by:
        getLength in interface MeasurableLength
        Parameters:
        globe - The globe the object is related to.
        Returns:
        the object's length in meters.
      • move

        public void move​(Position position)
        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:
        position - 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.
      • moveTo

        public void moveTo​(Globe globe,
                           Position position)
        Description copied from interface: Movable2
        Move the shape over the globe's surface while maintaining its original azimuth, its orientation relative to North.
        Specified by:
        moveTo in interface Movable2
        Parameters:
        globe - the globe on which to move the shape.
        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)
      • combine

        public void combine​(CombineContext cc)
        Causes this Combinable to draw its contours using the GLU tessellator attached to the provided CombineContext. When the CombineContext is in bounding sector mode, this adds the Combinable's geographic bounding sector to the CombineContext's bounding sector list. See the interface documentation for more information.
        Specified by:
        combine in interface Combinable
        Parameters:
        cc - the CombineContext to be used.
        See Also:
        CombineContext
      • getReferencePosition

        public abstract 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
        Specified by:
        getReferencePosition in interface Movable2
        Returns:
        the object's reference position, or null if no reference position is available.
      • doMoveTo

        protected abstract void doMoveTo​(Position oldReferencePosition,
                                         Position newReferencePosition)
      • doMoveTo

        protected abstract void doMoveTo​(Globe globe,
                                         Position oldReferencePosition,
                                         Position newReferencePosition)
      • clearCaches

        protected void clearCaches()
        Clears this SurfaceObject's internal extent cache.

        Overridden to clear this SurfaceShape's internal sector and geometry caches.

        Overrides:
        clearCaches in class AbstractSurfaceObject
      • makeOrderedPreRenderable

        protected void makeOrderedPreRenderable​(DrawContext dc)
        Overridden to determine the shape's active attributes during preRendering, prior to building the shape's pickable representation and the SceneController's composite representation.
        Overrides:
        makeOrderedPreRenderable in class AbstractSurfaceObject
        Parameters:
        dc - the current draw context.
      • drawGeographic

        protected 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.
      • endDrawing

        protected void endDrawing​(DrawContext dc)
      • determineActiveAttributes

        protected void determineActiveAttributes()
        Determines which attributes -- normal, highlight or default -- to use each frame.
      • createActiveAttributes

        protected ShapeAttributes createActiveAttributes()
      • canContainPole

        protected boolean canContainPole()
        Indicates whether the shape is a closed polygon that can enclose a pole, or an open path that cannot. This makes a difference when computing the bounding sector for a shape. For example, consider the positions (-100, 85), (0, 80), (100, 80). If these positions are treated as a closed polygon (a triangle over the North Pole) then the bounding sector is 80 to 90 lat, -180 to 180 lon. But if they are treated as an open path (a line wrapping partway around the pole) then the bounding sector is 80 to 85 lat, -100 to 100 lon.
        Returns:
        True if the shape is a closed polygon that can contain a pole, or false if it is treated as an open path that cannot contain a pole.
      • containsPole

        protected java.lang.String containsPole​(java.lang.Iterable<? extends LatLon> locations)
        Determine if a list of geographic locations encloses either the North or South pole. The list is treated as a closed loop. (If the first and last positions are not equal the loop will be closed for purposes of this computation.)
        Parameters:
        locations - Locations to test.
        Returns:
        AVKey.NORTH if the North Pole is enclosed, AVKey.SOUTH if the South Pole is enclosed, or null if neither pole is enclosed. Always returns null if canContainPole() returns false.
      • cutAlongDateLine

        protected java.util.List<LatLon> cutAlongDateLine​(java.util.List<LatLon> locations,
                                                          java.lang.String pole,
                                                          Globe globe)
        Divide a list of locations that encloses a pole along the international date line. This method determines where the locations cross the date line, and inserts locations to the pole, and then back to the intersection position. This allows the shape to be "unrolled" when projected in a lat-lon projection.
        Parameters:
        locations - Locations to cut at date line. This list is not modified.
        pole - Pole contained by locations, either AVKey.NORTH or AVKey.SOUTH.
        globe - Current globe.
        Returns:
        New location list with locations added to correctly handle date line intersection.
      • repeatAroundDateline

        protected java.util.List<java.util.List<LatLon>> repeatAroundDateline​(java.util.List<LatLon> locations)
        Returns a list containing two copies of the specified list of locations crossing the dateline: one that extends across the -180 longitude boundary and one that extends across the +180 longitude boundary. If the list of locations does not cross the dateline this returns a list containing a copy of the original list.
        Parameters:
        locations - Locations to repeat. This is list not modified.
        Returns:
        A list containing two new location lists, one copy for either side of the date line.
      • getActiveGeometry

        protected java.util.List<java.util.List<LatLon>> getActiveGeometry()
      • drawLineStrip

        protected void drawLineStrip​(DrawContext dc,
                                     java.util.List<LatLon> locations)
      • getInteriorTexture

        protected WWTexture getInteriorTexture()
      • createGeometry

        protected abstract java.util.List<java.util.List<LatLon>> createGeometry​(Globe globe,
                                                                                 double edgeIntervalsPerDegree)
      • computeEdgeIntervalsPerDegree

        protected double computeEdgeIntervalsPerDegree​(SurfaceTileDrawContext sdc)
      • computeEdgeIntervalsPerDegree

        protected double computeEdgeIntervalsPerDegree​(double resolution)
      • combineContours

        protected void combineContours​(CombineContext cc)
      • doCombineContours

        protected void doCombineContours​(CombineContext cc)
      • doCombineContour

        protected void doCombineContour​(CombineContext cc,
                                        java.lang.Iterable<? extends LatLon> contour)
      • generateIntermediateLocations

        protected void generateIntermediateLocations​(java.lang.Iterable<? extends LatLon> iterable,
                                                     double edgeIntervalsPerDegree,
                                                     boolean makeClosedPath,
                                                     java.util.List<LatLon> locations)
      • addIntermediateLocations

        protected void addIntermediateLocations​(LatLon a,
                                                LatLon b,
                                                double edgeIntervalsPerDegree,
                                                java.util.List<LatLon> locations)
      • tessellateInterior

        protected java.lang.Integer tessellateInterior​(DrawContext dc)
      • doTessellateInterior

        protected java.lang.Integer doTessellateInterior​(DrawContext dc)
      • tessellateInteriorVertices

        protected java.lang.Integer tessellateInteriorVertices​(com.jogamp.opengl.glu.GLUtessellator tess)
      • handleUnsuccessfulInteriorTessellation

        protected void handleUnsuccessfulInteriorTessellation​(DrawContext dc)
      • pathTypeFromString

        protected java.lang.String pathTypeFromString​(java.lang.String s)
      • export

        public void export​(java.lang.String mimeType,
                           java.lang.Object output)
                    throws java.io.IOException,
                           java.lang.UnsupportedOperationException
        Export the Polygon. The output object will receive the exported data. The type of this object depends on the export format. The formats and object types supported by this class are:
         Format                                         Supported output object types
         ================================================================================
         KML (application/vnd.google-earth.kml+xml)     java.io.Writer
                                                        java.io.OutputStream
                                                        javax.xml.stream.XMLStreamWriter
         
        Parameters:
        mimeType - MIME type of desired export format.
        output - An object that will receive the exported data. The type of this object depends on the export format (see above).
        Throws:
        java.io.IOException - If an exception occurs writing to the output object.
        java.lang.UnsupportedOperationException - if the format is not supported by this object, or if the output argument is not of a supported type.
      • exportAsKML

        protected void exportAsKML​(java.lang.Object output)
                            throws java.io.IOException,
                                   javax.xml.stream.XMLStreamException
        Throws:
        java.io.IOException
        javax.xml.stream.XMLStreamException