gliderimagelayer.java

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

JAVA
169
字号
/*Copyright (C) 2001, 2008 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.applications.glider;import gov.nasa.worldwind.layers.*;import gov.nasa.worldwind.render.*;import java.awt.image.*;import java.beans.*;import java.io.IOException;import java.util.*;/** * Internal class to realize and control image and region drawing. * * @author tag * @version $Id: GliderImageLayer.java 9226 2009-03-06 03:42:35Z tgaskins $ */public class GliderImageLayer extends AbstractLayer{    public static final String GLIDER_IMAGE = "gov.nasa.worldwind.glider.Image";    protected GliderImage image;    protected SurfaceImageLayer imageLayer = new SurfaceImageLayer();    protected RenderableLayer regionLayer = new RenderableLayer();    protected ImageListener imageListener = new ImageListener();    public void dispose()    {        this.image.removePropertyChangeListener(this.imageListener);        this.imageLayer.dispose();        this.regionLayer.dispose();    }    public void setImage(GliderImage image) throws IOException    {        if (image.getImageSource() instanceof String)            ((SurfaceImageLayer) this.getImageLayer()).addImage((String) image.getImageSource(), image.getCorners());        else if (image.getImageSource() instanceof BufferedImage)            ((SurfaceImageLayer) this.getImageLayer()).addImage(image.getName(), (BufferedImage) image.getImageSource(),                image.getSector());        else            throw new IllegalArgumentException("Unsupported image source type");        this.setOpacity(image.opacity);        if (image != this.image)            image.addPropertyChangeListener(this.imageListener);        this.regionLayer.removeAllRenderables();        if (image.getRegionsOfInterest() != null)            this.regionLayer.addRenderables(makePolylines(image.getRegionsOfInterest(), image.getAltitude()));        this.firePropertyChange(GliderImageLayer.GLIDER_IMAGE, this.image, this.image = image);    }    public String getName()    {        return this.image.getName();    }    protected Layer getImageLayer()    {        return this.imageLayer;    }    protected void doRender(DrawContext dc)    {        // dummy method; rendering is performed by image and region layers    }    @Override    public void render(DrawContext dc)    {        if (!this.isEnabled())            return;        this.imageLayer.render(dc);        this.regionLayer.render(dc);    }    @Override    public void doPreRender(DrawContext dc)    {        this.imageLayer.preRender(dc);        this.regionLayer.preRender(dc);    }    protected class ImageListener implements PropertyChangeListener    {        @SuppressWarnings({"StringEquality"})        public void propertyChange(PropertyChangeEvent evt)        {            if (evt.getSource() != GliderImageLayer.this.image && evt.getPropagationId() != GliderImageLayer.this.image)                return;            if (evt.getPropertyName() == GliderImage.GLIDER_IMAGE_SOURCE)            {                imageLayer.removeImage(((GliderImage) evt.getSource()).getName());                if (evt.getNewValue() != null)                {                    try                    {                        GliderImageLayer.this.setImage((GliderImage) evt.getNewValue());                    }                    catch (IOException e)                    {                        e.printStackTrace();                    }                }                // Cause owner to repaint                evt.setPropagationId(GliderImageLayer.this);                GliderImageLayer.this.firePropertyChange(evt);            }            else if (evt.getPropertyName() == GliderImage.GLIDER_IMAGE_OPACITY)            {                if (evt.getNewValue() == null)                    return;                GliderImageLayer.this.imageLayer.setOpacity(((GliderImage) evt.getNewValue()).getOpacity());                // Cause owner to repaint                evt.setPropagationId(GliderImageLayer.this);                GliderImageLayer.this.firePropertyChange(evt);            }            else if (evt.getPropertyName() == GliderRegionOfInterest.GLIDER_REGION_OF_INTEREST                || evt.getPropertyName() == GliderImage.GLIDER_REGIONS_OF_INTEREST)            {                GliderImageLayer.this.regionLayer.removeAllRenderables();                GliderRegionOfInterest.RegionSet regions = (GliderRegionOfInterest.RegionSet) evt.getNewValue();                if (regions != null)                {                    GliderImageLayer.this.regionLayer.addRenderables(makePolylines(regions,                        GliderImageLayer.this.image.getAltitude()));                }                // Cause owner to repaint                evt.setPropagationId(GliderImageLayer.this);                GliderImageLayer.this.firePropertyChange(evt);            }        }    }    protected static List<Renderable> makePolylines(GliderRegionOfInterest.RegionSet regions, double altitude)    {        ArrayList<Renderable> polylines = new ArrayList<Renderable>(regions.regions.size());        for (GliderRegionOfInterest region : regions.regions)        {            Polyline p = new Polyline(region.getLocations(), altitude);            p.setClosed(true);            p.setColor(region.getColor());            p.setFollowTerrain(true);            polylines.add(p);        }        return polylines;    }}

⌨️ 快捷键说明

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