trackcontroller.java

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

JAVA
267
字号
/*Copyright (C) 2001, 2007 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.applications.sar;import gov.nasa.worldwind.WorldWindow;import gov.nasa.worldwind.geom.*;import gov.nasa.worldwind.layers.*;import gov.nasa.worldwind.render.*;import gov.nasa.worldwind.view.*;import java.beans.*;import java.util.HashMap;/** * @author tag * @version $Id: TrackController.java 9630 2009-03-24 10:50:46Z dcollins $ */public class TrackController{    public static final String TRACK_ADD = "TrackController.TrackAdded";    public static final String TRACK_CURRENT = "TrackController.TrackCurrent";    public static final String TRACK_DIRTY_BIT = "TrackController.TrackDirtyBit";    public static final String TRACK_DISABLE = "TrackController.TrackDisabled";    public static final String TRACK_ENABLE = "TrackController.TrackEnabled";    public static final String TRACK_MODIFY = "TrackController.TrackModified";    public static final String TRACK_NAME = "TrackController.TrackName";    public static final String TRACK_OFFSET = "TrackController.TrackOffset";    public static final String TRACK_REMOVE = "TrackController.TrackRemoved";    public static final String BEGIN_TRACK_POINT_ENTRY = "TrackController.BeginTrackPointEntry";    public static final String END_TRACK_POINT_ENTRY = "TrackController.EndTrackPointEntry";    public static final String MOVE_TO_NEXT_POINT = "TrackController.MoveToNextPoint";    public static final String REMOVE_LAST_POINT = "TrackController.RemoveLastPoint";    private WorldWindow wwd;    private TracksPanel tracksPanel;    private AnalysisPanel analysisPanel;    private HashMap<SARTrack, Layer> trackLayers = new HashMap<SARTrack, Layer>();    private SARTrackExtensionTool trackExtensionTool;    public TrackController()    {        this.trackExtensionTool = new SARTrackExtensionTool();    }    public WorldWindow getWwd()    {        return wwd;    }    public void setWwd(WorldWindow wwd)    {        if (wwd == this.wwd)            return;                this.wwd = wwd;        this.trackExtensionTool.setWorldWindow(this.wwd);    }    public TracksPanel getTracksPanel()    {        return tracksPanel;    }    public void setTracksPanel(TracksPanel tracksPanel)    {        this.tracksPanel = tracksPanel;    }    public AnalysisPanel getAnalysisPanel()    {        return analysisPanel;    }    public void setAnalysisPanel(AnalysisPanel analysisPanel)    {        this.analysisPanel = analysisPanel;    }    public void addTrack(SARTrack track)    {        if (track == null)            return;        this.createPolylineTrackRepresentation(track);        track.addPropertyChangeListener(new PropertyChangeListener()        {            @SuppressWarnings({"StringEquality"})            public void propertyChange(PropertyChangeEvent propertyChangeEvent)            {                if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_REMOVE)                    removeTrack((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_MODIFY)                    updateTrack((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_ENABLE)                    enableTrack((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_DISABLE)                    disableTrack((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_CURRENT)                    trackCurrent((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_NAME)                    trackName((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.TRACK_DIRTY_BIT)                    trackDirtyBit((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.BEGIN_TRACK_POINT_ENTRY)                    beginTrackPointEntry((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.END_TRACK_POINT_ENTRY)                    endTrackPointEntry((SARTrack) propertyChangeEvent.getSource());                else if (propertyChangeEvent.getPropertyName() == TrackController.MOVE_TO_NEXT_POINT)                    moveToNextTrackPoint();                else if (propertyChangeEvent.getPropertyName() == TrackController.REMOVE_LAST_POINT)                    removeLastTrackPoint();            }        });        this.tracksPanel.addTrack(track);        this.moveToTrack(track);    }    public SARTrack getCurrentTrack()    {        return this.tracksPanel.getCurrentTrack();    }    public void refreshCurrentTrack()    {        trackCurrent(getCurrentTrack());    }    private void createPolylineTrackRepresentation(SARTrack track)    {        Polyline airPath = new Polyline(track);        airPath.setOffset(track.getOffset());        airPath.setPathType(Polyline.RHUMB_LINE);        airPath.setColor(track.getColor());        Polyline groundPath = new Polyline(track);        groundPath.setFollowTerrain(true);        groundPath.setPathType(Polyline.RHUMB_LINE);        groundPath.setColor(track.getColor());        groundPath.setStippleFactor(5);        groundPath.setStipplePattern((short) 0xAAAA);        RenderableLayer layer = new RenderableLayer();        layer.addRenderable(airPath);        layer.addRenderable(groundPath);        this.wwd.getModel().getLayers().add(layer);        if (this.wwd != null)            this.wwd.redraw();        this.trackLayers.put(track, layer);    }    private void removeTrack(SARTrack track)    {        Layer layer = this.trackLayers.get(track);        if (layer == null)            return;        this.trackLayers.remove(track);        this.wwd.getModel().getLayers().remove(layer);        if (this.wwd != null)            this.wwd.redraw();    }    private void enableTrack(SARTrack track)    {        RenderableLayer layer = (RenderableLayer) this.trackLayers.get(track);        if (layer == null)            return;        layer.setEnabled(true);        if (this.wwd != null)            this.wwd.redraw();    }    private void disableTrack(SARTrack track)    {        RenderableLayer layer = (RenderableLayer) this.trackLayers.get(track);        if (layer == null)            return;        layer.setEnabled(false);        if (this.wwd != null)            this.wwd.redraw();    }    private void updateTrack(SARTrack track)    {        RenderableLayer layer = (RenderableLayer) this.trackLayers.get(track);        if (layer == null)            return;        for (Renderable r : layer.getRenderables())        {            Polyline line = (Polyline) r;            line.setPositions(track);            if (!line.isFollowTerrain())                line.setOffset(track.getOffset());        }        if (this.wwd != null)            this.wwd.redraw();    }    private void trackCurrent(SARTrack track)    {        this.analysisPanel.setCurrentTrack(track);        this.trackExtensionTool.setArmed(false);    }    @SuppressWarnings({"UnusedDeclaration"})    private void trackName(SARTrack track)    {        // Intentionally left blank, as a placeholder for future functionality.    }    @SuppressWarnings({"UnusedDeclaration"})    private void trackDirtyBit(SARTrack track)    {        // Intentionally left blank, as a placeholder for future functionality.    }    private void beginTrackPointEntry(SARTrack track)    {        this.trackExtensionTool.setArmed(false);        this.trackExtensionTool.setTrack(track);        this.trackExtensionTool.setArmed(true);    }    @SuppressWarnings({"UnusedDeclaration"})    private void endTrackPointEntry(SARTrack track)    {        this.trackExtensionTool.setArmed(false);    }    private void moveToNextTrackPoint()    {        if (this.trackExtensionTool.canMoveToNextTrackPoint())            this.trackExtensionTool.moveToNextTrackPoint();    }    private void removeLastTrackPoint()    {        if (this.trackExtensionTool.canRemoveLastTrackPoint())            this.trackExtensionTool.removeLastTrackPoint();    }    //move to the first position in a track    private void moveToTrack(SARTrack track)    {        OrbitView view = (OrbitView) this.wwd.getView();        if (!track.getPositions().isEmpty())        {            Position pos = track.getPositions().get(0);            view.applyStateIterator(FlyToOrbitViewStateIterator.createPanToIterator(                            view, this.wwd.getModel().getGlobe(),                            pos, view.getHeading(), Angle.ZERO, 10000, true));        }    }}

⌨️ 快捷键说明

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