airspacelayer.java

来自「world wind java sdk 源码」· Java 代码 · 共 350 行

JAVA
350
字号
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.layers;import gov.nasa.worldwind.render.*;import gov.nasa.worldwind.render.airspaces.Airspace;import gov.nasa.worldwind.render.airspaces.AirspaceRenderer;import gov.nasa.worldwind.util.Logging;import gov.nasa.worldwind.geom.Vec4;/** * The <code>Airspace</code> class manages a collection of {@link gov.nasa.worldwind.render.airspaces.Airspace} objects * for rendering and picking. <code>AirspaceLayer</code> delegates to its internal * {@link gov.nasa.worldwind.render.airspaces.AirspaceRenderer} for rendering and picking operations. * * @author dcollins * @version $Id: AirspaceLayer.java 10903 2009-05-06 07:15:47Z dcollins $ * @see gov.nasa.worldwind.render.airspaces.Airspace * @see gov.nasa.worldwind.render.airspaces.AirspaceRenderer */public class AirspaceLayer extends AbstractLayer{    private final java.util.Collection<Airspace> airspaces = new java.util.concurrent.ConcurrentLinkedQueue<Airspace>();    private Iterable<Airspace> airspacesOverride;    private AirspaceRenderer airspaceRenderer = new AirspaceRenderer();    /**     * Creates a new <code>Airspace</code> with an empty collection of Airspaces.     */    public AirspaceLayer()    {    }    /**     * Adds the specified <code>airspace</code> to this layer's internal collection.     * If this layer's internal collection has been overriden with a call to {@link #setAirspaces},     * this will throw an exception.     *     * @param airspace Airspace to add.     * @throws IllegalArgumentException If <code>airspace</code> is null.     * @throws IllegalStateException If a custom Iterable has been specified by a call to <code>setAirspaces</code>.     */    public void addAirspace(Airspace airspace)    {        if (airspace == null)        {            String msg = "nullValue.AirspaceIsNull";            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        if (this.airspacesOverride != null)        {            String msg = Logging.getMessage("generic.LayerIsUsingCustomIterable");            Logging.logger().severe(msg);            throw new IllegalStateException(msg);        }        this.airspaces.add(airspace);    }    /**     * Adds the contents of the specified <code>airspaces</code> to this layer's internal collection.     * If this layer's internal collection has been overriden with a call to {@link #setAirspaces},     * this will throw an exception.     *     * @param airspaces Airspaces to add.     * @throws IllegalArgumentException If <code>airspaces</code> is null.     * @throws IllegalStateException If a custom Iterable has been specified by a call to <code>setAirspaces</code>.     */    public void addAirspaces(Iterable<Airspace> airspaces)    {        if (airspaces == null)        {            String msg = Logging.getMessage("nullValue.IterableIsNull");            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        if (this.airspacesOverride != null)        {            String msg = Logging.getMessage("generic.LayerIsUsingCustomIterable");            Logging.logger().severe(msg);            throw new IllegalStateException(msg);        }        for (Airspace airspace : airspaces)        {            // Internal list of airspaces does not accept null values.            if (airspace != null)                this.airspaces.add(airspace);        }    }    /**     * Removes the specified <code>airspace</code> from this layer's internal collection, if it exists.     * If this layer's internal collection has been overriden with a call to {@link #setAirspaces},     * this will throw an exception.     *     * @param airspace Airspace to remove.     * @throws IllegalArgumentException If <code>airspace</code> is null.     * @throws IllegalStateException If a custom Iterable has been specified by a call to <code>setAirspaces</code>.     */    public void removeAirspace(Airspace airspace)    {        if (airspace == null)        {            String msg = "nullValue.AirspaceIsNull";            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        if (this.airspacesOverride != null)        {            String msg = Logging.getMessage("generic.LayerIsUsingCustomIterable");            Logging.logger().severe(msg);            throw new IllegalStateException(msg);        }        this.airspaces.remove(airspace);    }    /**     * Clears the contents of this layer's internal Airspace collection.     * If this layer's internal collection has been overriden with a call to {@link #setAirspaces},     * this will throw an exception.     *     * @throws IllegalStateException If a custom Iterable has been specified by a call to <code>setAirspaces</code>.     */    public void removeAllAirspaces()    {        if (this.airspacesOverride != null)        {            String msg = Logging.getMessage("generic.LayerIsUsingCustomIterable");            Logging.logger().severe(msg);            throw new IllegalStateException(msg);        }        clearAirspaces();    }    private void clearAirspaces()    {        if (this.airspaces != null && this.airspaces.size() > 0)            this.airspaces.clear();    }    /**     * Returns the Iterable of Airspaces currently in use by this layer.     * If the caller has specified a custom Iterable via {@link #setAirspaces}, this will returns a reference     * to that Iterable. If the caller passed <code>setAirspaces</code> a null parameter,     * or if <code>setAirspaces</code> has not been called, this returns a view of this layer's internal     * collection of Airspaces.     *     * @return Iterable of currently active Airspaces.     */    public Iterable<Airspace> getAirspaces()    {        if (this.airspacesOverride != null)        {            return this.airspacesOverride;        }        else        {            // Return an unmodifiable reference to the internal list of airspaces.            // This prevents callers from changing this list and invalidating any invariants we have established.            return java.util.Collections.unmodifiableCollection(this.airspaces);        }    }    /**     * Returns the Iterable of currently active Airspaces.     * If the caller has specified a custom Iterable via {@link #setAirspaces}, this will returns a reference     * to that Iterable. If the caller passed <code>setAirspaces</code> a null parameter,     * or if <code>setAirspaces</code> has not been called, this returns a view of this layer's internal     * collection of Airspaces.     *     * @return Iterable of currently active Airspaces.     */    private Iterable<Airspace> getActiveAirspaces()    {        if (this.airspacesOverride != null)        {            return this.airspacesOverride;        }        else        {            return this.airspaces;        }    }    /**     * Overrides the collection of currently active Airspaces with the specified <code>airspaceIterable</code>.     * This layer will maintain a reference to <code>airspaceIterable</code> strictly for picking and rendering.     * This layer will not modify the Iterable reference. However, this will clear     * the internal collection of Airspaces, and will prevent any modification to its contents via     * <code>addAirspace, addAirspaces, or removeAirspaces</code>.     *     * If the specified <code>airspaceIterable</code> is null, this layer will revert to maintaining its internal     * collection.     *     * @param airspaceIterable Iterable to use instead of this layer's internal collection, or null to use this     *                     layer's internal collection.     */    public void setAirspaces(Iterable<Airspace> airspaceIterable)    {        this.airspacesOverride = airspaceIterable;        // Clear the internal collection of Airspaces.        clearAirspaces();    }    public boolean isEnableAntialiasing()    {        return this.airspaceRenderer.isEnableAntialiasing();    }    public void setEnableAntialiasing(boolean enable)    {        this.airspaceRenderer.setEnableAntialiasing(enable);    }    public boolean isEnableBlending()    {        return this.airspaceRenderer.isEnableBlending();    }    public void setEnableBlending(boolean enable)    {        this.airspaceRenderer.setEnableBlending(enable);    }    public boolean isEnableDepthOffset()    {        return this.airspaceRenderer.isEnableDepthOffset();    }    public void setEnableDepthOffset(boolean enable)    {        this.airspaceRenderer.setEnableDepthOffset(enable);    }    public boolean isEnableLighting()    {        return this.airspaceRenderer.isEnableLighting();    }    public void setEnableLighting(boolean enable)    {        this.airspaceRenderer.setEnableLighting(enable);    }    public boolean isDrawExtents()    {        return this.airspaceRenderer.isDrawExtents();    }    public void setDrawExtents(boolean draw)    {        this.airspaceRenderer.setDrawExtents(draw);    }    public boolean isDrawWireframe()    {        return this.airspaceRenderer.isDrawWireframe();    }    public void setDrawWireframe(boolean draw)    {        this.airspaceRenderer.setDrawWireframe(draw);    }    public Material getLightMaterial()    {        return this.airspaceRenderer.getLightMaterial();    }    public void setLightMaterial(Material material)    {        if (material == null)        {            String message = Logging.getMessage("nullValue.MaterialIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        this.airspaceRenderer.setLightMaterial(material);    }    public Vec4 getLightDirection()    {        return this.airspaceRenderer.getLightDirection();    }    public void setLightDirection(Vec4 direction)    {        if (direction == null)        {            String message = Logging.getMessage("nullValue.DirectionIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }                this.airspaceRenderer.setLightDirection(direction);    }    public double getDepthOffsetFactor()    {        return this.airspaceRenderer.getDepthOffsetFactor();    }    public void setDepthOffsetFactor(double factor)    {        this.airspaceRenderer.setDepthOffsetFactor(factor);    }    public double getDepthOffsetUnits()    {        return this.airspaceRenderer.getDepthOffsetUnits();    }    public void setDepthOffsetUnits(double units)    {        this.airspaceRenderer.setDepthOffsetUnits(units);    }    protected AirspaceRenderer getRenderer()    {        return this.airspaceRenderer;    }    @Override    protected void doPick(DrawContext dc, java.awt.Point pickPoint)    {        this.airspaceRenderer.pickOrdered(dc, getActiveAirspaces(), pickPoint, this);    }    @Override    protected void doRender(DrawContext dc)    {        this.airspaceRenderer.renderOrdered(dc, getActiveAirspaces());    }    @Override    public String toString()    {        return Logging.getMessage("layers.AirspaceLayer.Name");    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?