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

📄 abstractscenecontroller.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind;import gov.nasa.worldwind.avlist.*;import gov.nasa.worldwind.cache.*;import gov.nasa.worldwind.geom.*;import gov.nasa.worldwind.layers.*;import gov.nasa.worldwind.pick.*;import gov.nasa.worldwind.render.*;import gov.nasa.worldwind.terrain.*;import gov.nasa.worldwind.util.Logging;import gov.nasa.worldwind.util.*;import javax.media.opengl.*;import java.awt.*;import java.util.*;import java.util.List;import java.util.logging.Level;/** * @author tag * @version $Id: AbstractSceneController.java 8732 2009-02-03 17:35:26Z tgaskins $ */public abstract class AbstractSceneController extends WWObjectImpl implements SceneController{    private Model model;    private View view;    private double verticalExaggeration = 1d;    private DrawContext dc = new DrawContextImpl();    private PickedObjectList lastPickedObjects;// These are for tracking performance    private long frame = 0;    private long timebase = System.currentTimeMillis();    private double framesPerSecond;    private double frameTime;    private double pickTime;    private Point pickPoint = null;    private TextureCache textureCache;    private TextRendererCache textRendererCache = new TextRendererCache();    private Set<String> perFrameStatisticsKeys = new HashSet<String>();    private Collection<PerformanceStatistic> perFrameStatistics = new ArrayList<PerformanceStatistic>();    public AbstractSceneController()    {        this.setVerticalExaggeration(Configuration.getDoubleValue(AVKey.VERTICAL_EXAGGERATION, 1d));    }    public void reinitialize()    {        if (this.textRendererCache != null)            this.textRendererCache.dispose();        this.textRendererCache = new TextRendererCache();    }    /** Releases resources associated with this scene controller. */    public void dispose()    {        if (this.lastPickedObjects != null)            this.lastPickedObjects.clear();        this.lastPickedObjects = null;        if (this.dc != null)            this.dc.dispose();        if (this.textRendererCache != null)            this.textRendererCache.dispose();    }    public TextureCache getTextureCache()    {        return textureCache;    }    public void setTextureCache(TextureCache textureCache)    {        this.textureCache = textureCache;    }    public TextRendererCache getTextRendererCache()    {        return textRendererCache;    }    public Model getModel()    {        return this.model;    }    public View getView()    {        return this.view;    }    public void setModel(Model model)    {        if (this.model != null)            this.model.removePropertyChangeListener(this);        if (model != null)            model.addPropertyChangeListener(this);        Model oldModel = this.model;        this.model = model;        this.firePropertyChange(AVKey.MODEL, oldModel, model);    }    public void setView(View view)    {        if (this.view != null)            this.view.removePropertyChangeListener(this);        if (view != null)            view.addPropertyChangeListener(this);        View oldView = this.view;        this.view = view;        this.firePropertyChange(AVKey.VIEW, oldView, view);    }    public void setVerticalExaggeration(double verticalExaggeration)    {        Double oldVE = this.verticalExaggeration;        this.verticalExaggeration = verticalExaggeration;        this.firePropertyChange(AVKey.VERTICAL_EXAGGERATION, oldVE, verticalExaggeration);    }    public double getVerticalExaggeration()    {        return this.verticalExaggeration;    }    public void setPickPoint(java.awt.Point pickPoint)    {        this.pickPoint = pickPoint;    }    public Point getPickPoint()    {        return this.pickPoint;    }    public PickedObjectList getPickedObjectList()    {        return this.lastPickedObjects;    }    protected void setPickedObjectList(PickedObjectList pol)    {        this.lastPickedObjects = pol;    }    public SectorGeometryList getTerrain()    {        return this.dc.getSurfaceGeometry();    }    public DrawContext getDrawContext()    {        return this.dc;    }    public double getFramesPerSecond()    {        return this.framesPerSecond;    }    public double getFrameTime()    {        return this.frameTime;    }    public void setPerFrameStatisticsKeys(Set<String> keys)    {        this.perFrameStatisticsKeys.clear();        if (keys == null)            return;        for (String key : keys)        {            if (key != null)                this.perFrameStatisticsKeys.add(key);        }    }    public Collection<PerformanceStatistic> getPerFrameStatistics()    {        return perFrameStatistics;    }    public void repaint()    {        this.frameTime = System.currentTimeMillis();        this.perFrameStatistics.clear();        this.initializeDrawContext(this.dc);        this.doRepaint(this.dc);        ++this.frame;        long time = System.currentTimeMillis();        this.frameTime = System.currentTimeMillis() - this.frameTime;        if (time - this.timebase > 2000) // recalculate every three seconds        {            this.framesPerSecond = frame * 1000d / (time - timebase);            this.timebase = time;            this.frame = 0;        }        this.dc.setPerFrameStatistic(PerformanceStatistic.FRAME_TIME, "Frame Time (ms)", (int) this.frameTime);        this.dc.setPerFrameStatistic(PerformanceStatistic.FRAME_RATE, "Frame Rate (fps)", (int) this.framesPerSecond);        this.dc.setPerFrameStatistic(PerformanceStatistic.PICK_TIME, "Pick Time (ms)", (int) this.pickTime);        Set<String> perfKeys = dc.getPerFrameStatisticsKeys();        if (perfKeys == null)            return;        if (perfKeys.contains(PerformanceStatistic.MEMORY_CACHE) || perfKeys.contains(PerformanceStatistic.ALL))        {            this.dc.setPerFrameStatistics(WorldWind.getMemoryCacheSet().getPerformanceStatistics());        }        if (perfKeys.contains(PerformanceStatistic.TEXTURE_CACHE) || perfKeys.contains(PerformanceStatistic.ALL))        {            if (dc.getTextureCache() != null)                this.dc.setPerFrameStatistic(PerformanceStatistic.TEXTURE_CACHE,                    "Texture Cache size (Kb)", this.dc.getTextureCache().getUsedCapacity() / 1000);        }    }    abstract protected void doRepaint(DrawContext dc);    private void initializeDrawContext(DrawContext dc)    {        dc.initialize(GLContext.getCurrent());        dc.setPerFrameStatisticsKeys(this.perFrameStatisticsKeys, this.perFrameStatistics);        dc.setTextureCache(this.textureCache);        dc.setTextRendererCache(this.textRendererCache);        dc.setModel(this.model);        dc.setView(this.view);        dc.setVerticalExaggeration(this.verticalExaggeration);        dc.setPickPoint(this.pickPoint);        dc.setViewportCenterScreenPoint(this.getViewportCenter(dc));        dc.setFrameTimeStamp(System.currentTimeMillis());    }    private Point getViewportCenter(DrawContext dc)    {        View view = dc.getView();        if (view == null)            return null;        Rectangle viewport = view.getViewport();        if (viewport == null)            return null;        return new Point((int) (viewport.getCenterX() + 0.5), (int) (viewport.getCenterY() + 0.5));    }    protected void initializeFrame(DrawContext dc)    {        if (dc.getGLContext() == null)        {            String message = Logging.getMessage("BasicSceneController.GLContextNullStartRedisplay");            Logging.logger().severe(message);            throw new IllegalStateException(message);        }        javax.media.opengl.GL gl = dc.getGL();        gl.glPushAttrib(GL.GL_VIEWPORT_BIT | GL.GL_ENABLE_BIT | GL.GL_TRANSFORM_BIT);        gl.glMatrixMode(GL.GL_MODELVIEW);        gl.glPushMatrix();        gl.glLoadIdentity();        gl.glMatrixMode(GL.GL_PROJECTION);        gl.glPushMatrix();        gl.glLoadIdentity();        gl.glEnable(GL.GL_DEPTH_TEST);    }    protected void clearFrame(DrawContext dc)    {        Color cc = dc.getClearColor();        dc.getGL().glClearColor(cc.getRed(), cc.getGreen(), cc.getBlue(), cc.getAlpha());

⌨️ 快捷键说明

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