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 + -
显示快捷键?