📄 airspaces.java
字号:
orbit.setAltitudes(minAltitude, maxAltitude);
orbit.setWidth(30000.0);
orbit.setOrbitType(Orbit.OrbitType.LEFT);
orbit.setTerrainConforming(false, false);
orbit.setValue(DESCRIPTION, "LEFT Orbit.");
this.setupDefaultMaterial(orbit, Color.LIGHT_GRAY);
airspaces.add(orbit);
// Center Orbit
orbit = new Orbit();
orbit.setLocations(LatLon.fromDegrees(45.7477, -123.6372), LatLon.fromDegrees(45.7477, -122.6372));
orbit.setAltitudes(minAltitude, maxAltitude);
orbit.setWidth(30000.0);
orbit.setOrbitType(Orbit.OrbitType.CENTER);
orbit.setTerrainConforming(false, false);
orbit.setValue(DESCRIPTION, "CENTER Orbit.");
this.setupDefaultMaterial(orbit, Color.GRAY);
airspaces.add(orbit);
// Right Orbit
orbit = new Orbit();
orbit.setLocations(LatLon.fromDegrees(45.7477, -123.6372), LatLon.fromDegrees(45.7477, -122.6372));
orbit.setAltitudes(minAltitude, maxAltitude);
orbit.setWidth(30000.0);
orbit.setOrbitType(Orbit.OrbitType.RIGHT);
orbit.setTerrainConforming(false, false);
orbit.setValue(DESCRIPTION, "RIGHT Orbit.");
this.setupDefaultMaterial(orbit, Color.DARK_GRAY);
airspaces.add(orbit);
// Orbit from Los Angeles to New York
orbit = new Orbit();
orbit.setLocations(LatLon.fromDegrees(34.0489, -118.2481), LatLon.fromDegrees(40.7137, -74.0065));
orbit.setAltitudes(minAltitude, maxAltitude);
orbit.setWidth(500000.0);
orbit.setOrbitType(Orbit.OrbitType.CENTER);
orbit.setTerrainConforming(false, false);
orbit.setValue(DESCRIPTION, "Orbit From L.A. to N.Y.");
this.setupDefaultMaterial(orbit, Color.RED);
airspaces.add(orbit);
this.setAirspaces(airspaces);
}
public void doZoomToAirspaces()
{
OrbitView view = (OrbitView) this.wwd.getView();
Globe globe = this.wwd.getModel().getGlobe();
Position center = Position.fromDegrees(46.7477, -122.6372, 0.0);
Angle heading = Angle.fromDegrees(0.0);
Angle pitch = Angle.fromDegrees(30.0);
double zoom = 600000.0;
FlyToOrbitViewStateIterator iter = FlyToOrbitViewStateIterator.createPanToIterator(
view, globe, center, heading, pitch, zoom, true);
view.applyStateIterator(iter);
}
public void doSaveAirspaces()
{
if (this.fileChooser == null)
{
this.fileChooser = new JFileChooser();
this.fileChooser.setCurrentDirectory(new File(Configuration.getCurrentWorkingDirectory()));
}
this.fileChooser.setDialogTitle("Choose Directory to Place Airspaces");
this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
this.fileChooser.setMultiSelectionEnabled(false);
int status = this.fileChooser.showSaveDialog(null);
if (status != JFileChooser.APPROVE_OPTION)
return;
final File dir = this.fileChooser.getSelectedFile();
if (dir == null)
return;
if (!dir.exists())
{
//noinspection ResultOfMethodCallIgnored
dir.mkdirs();
}
AirspaceLayer layer = (AirspaceLayer) wwd.getModel().getLayers().getLayerByName(AIRSPACE_LAYER_NAME);
final Iterable<Airspace> airspaces = layer.getAirspaces();
Thread t = new Thread(new Runnable()
{
public void run()
{
try
{
java.text.DecimalFormat f = new java.text.DecimalFormat("####");
f.setMinimumIntegerDigits(4);
int counter = 0;
for (Airspace a : airspaces)
{
String xmlString = a.getRestorableState();
if (xmlString == null)
continue;
try
{
PrintWriter of = new PrintWriter(
new File(dir, a.getClass().getName() + "-" + f.format(counter++) + ".xml"));
of.write(xmlString);
of.flush();
of.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
}
finally
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
frame.setCursor(Cursor.getDefaultCursor());
saveButton.setEnabled(true);
}
});
}
}
});
saveButton.setEnabled(false);
frame.setCursor(new Cursor(Cursor.WAIT_CURSOR));
t.start();
}
public void doReadAirspaces()
{
if (this.fileChooser == null)
{
this.fileChooser = new JFileChooser();
this.fileChooser.setCurrentDirectory(new File(Configuration.getCurrentWorkingDirectory()));
}
this.fileChooser.setDialogTitle("Choose Airspace File Directory");
this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
this.fileChooser.setMultiSelectionEnabled(false);
int status = this.fileChooser.showOpenDialog(null);
if (status != JFileChooser.APPROVE_OPTION)
return;
final File dir = this.fileChooser.getSelectedFile();
if (dir == null)
return;
Thread t = new Thread(new Runnable()
{
public void run()
{
final ArrayList<Airspace> airspaces = new ArrayList<Airspace>();
try
{
File[] files = dir.listFiles(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
return name.startsWith("gov.nasa.worldwind.render.airspaces") && name.endsWith(".xml");
}
});
for (File file : files)
{
String[] name = file.getName().split("-");
try
{
Class c = Class.forName(name[0]);
Airspace airspace = (Airspace) c.newInstance();
BufferedReader input = new BufferedReader(new FileReader(file));
String s = input.readLine();
airspace.restoreState(s);
airspaces.add(airspace);
AirspaceAttributes attribs = airspace.getAttributes();
if (!attribs.isDrawOutline())
{
Color color = attribs.getMaterial().getDiffuse();
attribs.setDrawOutline(true);
attribs.setOutlineMaterial(new Material(makeBrighter(color)));
}
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
finally
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
AirspacesController.this.setAirspaces(airspaces);
wwd.redraw();
frame.setCursor(Cursor.getDefaultCursor());
readButton.setEnabled(true);
}
});
}
}
});
readButton.setEnabled(false);
frame.setCursor(new Cursor(Cursor.WAIT_CURSOR));
t.start();
}
public void doSetVerticalExaggeration(double ve)
{
this.wwd.getSceneController().setVerticalExaggeration(ve);
}
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
String message = "ExceptionWhileSettingSystemLookAndFeel";
Logging.logger().log(java.util.logging.Level.WARNING, message, e);
}
//Configuration.setValue(AVKey.GLOBE_CLASS_NAME, EarthFlat.class.getName());
//Configuration.setValue(AVKey.VIEW_CLASS_NAME, FlatOrbitView.class.getName());
start("World Wind Airspaces", AppFrame.class);
}
private static Iterable<LatLon> makeLatLon(double[] src, int offset, int length)
{
int numCoords = (int) Math.floor(length / 2.0);
LatLon[] dest = new LatLon[numCoords];
for (int i = 0; i < numCoords; i++)
{
double lonDegrees = src[offset + 2 * i];
double latDegrees = src[offset + 2 * i + 1];
dest[i] = LatLon.fromDegrees(latDegrees, lonDegrees);
}
return Arrays.asList(dest);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -