⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 worldwindowglcanvas.java

📁 world wind java sdk 源码
💻 JAVA
字号:
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.awt;import gov.nasa.worldwind.*;import gov.nasa.worldwind.avlist.*;import gov.nasa.worldwind.cache.*;import gov.nasa.worldwind.event.*;import gov.nasa.worldwind.exception.WWRuntimeException;import gov.nasa.worldwind.geom.Position;import gov.nasa.worldwind.pick.PickedObjectList;import gov.nasa.worldwind.util.*;import gov.nasa.worldwind.View;import javax.media.opengl.*;import java.awt.*;import java.beans.*;import java.util.*;/** * <code>WorldWindowGLCanvas</code> is a heavyweight AWT component for displaying World Wind {@link Model}s (globe and * layers). It's a self-contained component intended to serve as an application's world window. rendering. * * @author Tom Gaskins * @version $Id: WorldWindowGLCanvas.java 9428 2009-03-17 07:05:09Z tgaskins $ */public class WorldWindowGLCanvas extends GLCanvas implements WorldWindow, PropertyChangeListener{    private static final GLCapabilities caps = new GLCapabilities();    static    {        caps.setAlphaBits(8);        caps.setRedBits(8);        caps.setGreenBits(8);        caps.setBlueBits(8);        caps.setDepthBits(24);    }    private final WorldWindowGLDrawable wwd; // WorldWindow interface delegates to wwd    /** Constructs a new <code>WorldWindowGLCanvas</code> window on the default graphics device. */    public WorldWindowGLCanvas()    {        super(caps);        try        {            this.wwd = ((WorldWindowGLDrawable) WorldWind.createConfigurationComponent(AVKey.WORLD_WINDOW_CLASS_NAME));            this.wwd.initDrawable(this);            this.wwd.initTextureCache(createTextureCache());            this.createView();            this.createDefaultInputHandler();            WorldWind.addPropertyChangeListener(WorldWind.SHUTDOWN_EVENT, this);        }        catch (Exception e)        {            String message = Logging.getMessage("Awt.WorldWindowGLSurface.UnabletoCreateWindow");            Logging.logger().severe(message);            throw new WWRuntimeException(message, e);        }    }    private static final long FALLBACK_TEXTURE_CACHE_SIZE = 60000000;    private static TextureCache createTextureCache()    {        long cacheSize = Configuration.getLongValue(AVKey.TEXTURE_CACHE_SIZE, FALLBACK_TEXTURE_CACHE_SIZE);        return new BasicTextureCache((long) (0.8 * cacheSize), cacheSize);    }    /**     * Constructs a new <code>WorldWindowGLCanvas</code> window on the default graphics device that will share graphics     * resources with another <code>WorldWindowGLCanvas</code> window. The other window, <code>sharewith</code>, may not     * be null     *     * @param shareWith a <code>WorldWindowGLCanvas</code> with which to share graphics resources.     *     * @throws NullPointerException if shareWith is null.     * @see GLCanvas#GLCanvas(GLCapabilities,GLCapabilitiesChooser,GLContext,GraphicsDevice)     */    public WorldWindowGLCanvas(WorldWindowGLCanvas shareWith)    {        super(caps, null, shareWith.getContext(), null);        try        {            this.wwd = ((WorldWindowGLDrawable) WorldWind.createConfigurationComponent(AVKey.WORLD_WINDOW_CLASS_NAME));            this.wwd.initDrawable(this);            this.wwd.initTextureCache(shareWith.getTextureCache());            this.createView();            this.createDefaultInputHandler();            WorldWind.addPropertyChangeListener(WorldWind.SHUTDOWN_EVENT, this);        }        catch (Exception e)        {            String message = Logging.getMessage("Awt.WorldWindowGLSurface.UnabletoCreateWindow");            Logging.logger().severe(message);            throw new WWRuntimeException(message, e);        }    }    /**     * Constructs a new <code>WorldWindowGLCanvas</code> window that will share graphics resources with another     * <code>WorldWindowGLCanvas</code> window. The new window is created on the specified graphics device. Neither     * <code> shareWith</code> or <code>device</code> may be null.     *     * @param shareWith a <code>WorldWindowGLCanvas</code> with which to share graphics resources.     * @param device    the <code>GraphicsDevice</code> on which to create the window.     *     * @throws NullPointerException     if <code>shareWith</code> is null.     * @throws IllegalArgumentException if <code>deevice</code> is null.     * @see GLCanvas#GLCanvas(GLCapabilities,GLCapabilitiesChooser,GLContext,GraphicsDevice)     */    public WorldWindowGLCanvas(WorldWindowGLCanvas shareWith, java.awt.GraphicsDevice device)    {        super(caps, null, shareWith.getContext(), device);        if (device == null)        {            String msg = Logging.getMessage("nullValue.DeviceIsNull");            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        try        {            this.wwd = ((WorldWindowGLDrawable) WorldWind.createConfigurationComponent(AVKey.WORLD_WINDOW_CLASS_NAME));            this.wwd.initDrawable(this);            this.wwd.initTextureCache(shareWith.getTextureCache());            this.createView();            this.createDefaultInputHandler();            WorldWind.addPropertyChangeListener(WorldWind.SHUTDOWN_EVENT, this);        }        catch (Exception e)        {            String message = Logging.getMessage("Awt.WorldWindowGLSurface.UnabletoCreateWindow");            Logging.logger().severe(message);            throw new WWRuntimeException(message, e);        }    }    public void propertyChange(PropertyChangeEvent evt)    {        //noinspection StringEquality        if (evt.getPropertyName() == WorldWind.SHUTDOWN_EVENT)            this.shutdown();    }    public void shutdown()    {        WorldWind.removePropertyChangeListener(WorldWind.SHUTDOWN_EVENT, this);        this.wwd.shutdown();    }    private void createView()    {        this.setView((View) WorldWind.createConfigurationComponent(AVKey.VIEW_CLASS_NAME));    }    private void createDefaultInputHandler()    {        this.setInputHandler((InputHandler) WorldWind.createConfigurationComponent(AVKey.INPUT_HANDLER_CLASS_NAME));    }    public InputHandler getInputHandler()    {        return this.wwd.getInputHandler();    }    public void setInputHandler(InputHandler inputHandler)    {        if (this.wwd.getInputHandler() != null)            this.wwd.getInputHandler().setEventSource(null); // remove this window as a source of events        this.wwd.setInputHandler(inputHandler != null ? inputHandler : new NoOpInputHandler());        if (inputHandler != null)            inputHandler.setEventSource(this);    }    public SceneController getSceneController()    {        return this.wwd.getSceneController();    }    public TextureCache getTextureCache()    {        return this.wwd.getTextureCache();    }    public void redraw()    {        this.repaint();    }    public void redrawNow()    {        this.wwd.redrawNow();    }    public void setModel(Model model)    {        // null models are permissible        this.wwd.setModel(model);    }    public Model getModel()    {        return this.wwd.getModel();    }    public void setView(View view)    {        // null views are permissible        if (view != null)            this.wwd.setView(view);    }    public View getView()    {        return this.wwd.getView();    }    public void setModelAndView(Model model, View view)    {   // null models/views are permissible        this.setModel(model);        this.setView(view);    }    public void addRenderingListener(RenderingListener listener)    {        this.wwd.addRenderingListener(listener);    }    public void removeRenderingListener(RenderingListener listener)    {        this.wwd.removeRenderingListener(listener);    }    public void addSelectListener(SelectListener listener)    {        this.wwd.getInputHandler().addSelectListener(listener);        this.wwd.addSelectListener(listener);    }    public void removeSelectListener(SelectListener listener)    {        this.wwd.getInputHandler().removeSelectListener(listener);        this.wwd.removeSelectListener(listener);    }    public void addPositionListener(PositionListener listener)    {        this.wwd.addPositionListener(listener);    }    public void removePositionListener(PositionListener listener)    {        this.wwd.removePositionListener(listener);    }    public void addRenderingExceptionListener(RenderingExceptionListener listener)    {        this.wwd.addRenderingExceptionListener(listener);    }    public void removeRenderingExceptionListener(RenderingExceptionListener listener)    {        this.wwd.removeRenderingExceptionListener(listener);    }    public Position getCurrentPosition()    {        return this.wwd.getCurrentPosition();    }    public PickedObjectList getObjectsAtCurrentPosition()    {        return this.wwd.getSceneController() != null ? this.wwd.getSceneController().getPickedObjectList() : null;    }    public Object setValue(String key, Object value)    {        return this.wwd.setValue(key, value);    }    public AVList setValues(AVList avList)    {        return this.wwd.setValues(avList);    }    public Object getValue(String key)    {        return this.wwd.getValue(key);    }    public Collection<Object> getValues()    {        return this.wwd.getValues();    }    public Set<Map.Entry<String, Object>> getEntries()    {        return this.wwd.getEntries();    }    public String getStringValue(String key)    {        return this.wwd.getStringValue(key);    }    public boolean hasKey(String key)    {        return this.wwd.hasKey(key);    }    public Object removeKey(String key)    {        return this.wwd.removeKey(key);    }    @Override    public synchronized void addPropertyChangeListener(PropertyChangeListener listener)    {        super.addPropertyChangeListener(listener);        this.wwd.addPropertyChangeListener(listener);    }    @Override    public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)    {        super.addPropertyChangeListener(propertyName, listener);        this.wwd.addPropertyChangeListener(propertyName, listener);    }    @Override    public synchronized void removePropertyChangeListener(PropertyChangeListener listener)    {        super.removePropertyChangeListener(listener);        this.wwd.removePropertyChangeListener(listener);    }    @Override    public synchronized void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)    {        super.removePropertyChangeListener(listener);        this.wwd.removePropertyChangeListener(listener);    }    @Override    public void firePropertyChange(String propertyName, Object oldValue, Object newValue)    {        super.firePropertyChange(propertyName, oldValue, newValue);    }    public void firePropertyChange(PropertyChangeEvent propertyChangeEvent)    {        this.wwd.firePropertyChange(propertyChangeEvent);    }    public AVList copy()    {        return this.wwd.copy();    }    public AVList clearList()    {        return this.wwd.clearList();    }    public void setPerFrameStatisticsKeys(Set<String> keys)    {        this.wwd.setPerFrameStatisticsKeys(keys);    }    public Collection<PerformanceStatistic> getPerFrameStatistics()    {        return this.wwd.getPerFrameStatistics();    }}

⌨️ 快捷键说明

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