All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.nasa.worldwind.util.combine.Combinable Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2014 United States Government as represented by the Administrator of the
 * National Aeronautics and Space Administration.
 * All Rights Reserved.
 */
package gov.nasa.worldwind.util.combine;

/**
 * Interface for shapes that can be combined into a complex set of contours by using boolean operations. Combinable
 * shapes implement the single method combine(CombineContext). This method is typically called by a controller that
 * operates on one or more combinable shapes and implements the boolean operation that is applied to those shapes, such
 * as {@link gov.nasa.worldwind.util.combine.ShapeCombiner}. When combine is called, the Combinable draws its contours
 * using the GLU tessellator attached to the provided CombineContext. When the CombineContext is in bounding sector
 * mode, the Combinable adds its geographic bounding sector to the CombineContext's bounding sector list.
 * 

*

Drawing Contours

Shapes are combined into a complex set of contours by drawing their individual contours * using the GLU tessellator attached to a CombineContext. A controller that implements the boolean operation configures * the CombineContext then calls combine on each shape. It is the responsibility of the controller to configure the GLU * tessellator and define the beginning and end of a polygon. Shapes define the contours and vertices that represent the * shape's geometry. Each vertex must be a 3-tuple in geographic coordinates ordered as (longitude, latitude, 0). The * winding order of each contour defines whether the contour is an exterior region or an interior region. * Counterclockwise contours define the outer boundaries, and clockwise contours define holes or inner boundaries. * Contours may be nested, but a nested contour must be oriented oppositely from the contour that contains it. *

*

Bounding Sector Mode

CombineContext may be configured in bounding sector mode by returning true from * isBoundingSectorMode(). When combine is called in this mode, a shape adds its geographic bounding sector to the * context by calling addBoundingSector(Sector). CombineContext assumes that each shape either contributes one bounding * sector or does not contribute anything. *

*

Example Implementation

*
 * public class CombinableSector implements Combinable
 * {
 *     protected Sector sector = Sector.fromDegrees(-10, 10, -10, 10);
 *
 *     public void combine(CombineContext cc)
 *     {
 *         if (cc.isBoundingSectorMode())
 *             this.combineBounds(cc);
 *         else
 *             this.combineContours(cc);
 *     }
 *
 *     protected void combineBounds(CombineContext cc)
 *     {
 *         cc.addBoundingSector(this.sector);
 *     }
 *
 *     protected void combineContours(CombineContext cc)
 *     {
 *         if (!cc.getSector().intersects(this.sector))
 *             return;  // the sector does not intersect the context's region of interest
 *
 *         this.doCombineContours(cc);
 *     }
 *
 *     protected void doCombineContours(CombineContext cc)
 *     {
 *         GLUtessellator tess = cc.getTessellator();
 *
 *         try
 *         {
 *             GLU.gluTessBeginContour(tess);
 *
 *             for (LatLon location : this.sector) // counter clockwise iteration of the sector's four corners
 *             {
 *                 double[] vertex = {location.longitude.degrees, location.latitude.degrees, 0};
 *                 GLU.gluTessVertex(tess, vertex, 0, vertex); // longitude,latitude,0 -> x,y,z
 *             }
 *         }
 *         finally
 *         {
 *             GLU.gluTessEndContour(tess);
 *         }
 *     }
 * }
 * 
* * @author dcollins * @version $Id: Combinable.java 2411 2014-10-30 21:27:00Z dcollins $ * @see gov.nasa.worldwind.util.combine.CombineContext * @see gov.nasa.worldwind.util.combine.ShapeCombiner */ public interface Combinable { /** * 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. * * @param cc the CombineContext to be used. * * @throws java.lang.IllegalArgumentException if the CombineContext is null. * @see gov.nasa.worldwind.util.combine.CombineContext */ void combine(CombineContext cc); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy