2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
9 import gov
.nasa
.worldwind
.*;
10 import gov
.nasa
.worldwind
.awt
.*;
11 import gov
.nasa
.worldwind
.geom
.*;
12 import gov
.nasa
.worldwind
.layers
.Earth
.*;
13 import gov
.nasa
.worldwind
.layers
.*;
18 import javax
.xml
.parsers
.*;
20 import java
.awt
.font
.*;
23 import java
.util
.List
;
27 * @version $Id: AWT1Up.java 1772 2007-05-07 23:05:47Z tgaskins $
31 private static class AWT1UpFrame
extends javax
.swing
.JFrame
34 JLabel cursorPositionDisplay
;
35 WorldWindowGLCanvas wwd
;
41 System
.out
.println(gov
.nasa
.worldwind
.Version
.getVersion());
43 wwd
= new gov
.nasa
.worldwind
.awt
.WorldWindowGLCanvas();
44 wwd
.setPreferredSize(new java
.awt
.Dimension(800, 600));
45 this.getContentPane().add(wwd
, java
.awt
.BorderLayout
.CENTER
);
47 this.statusBar
= new StatusBar();
48 this.getContentPane().add(statusBar
, BorderLayout
.PAGE_END
);
52 java
.awt
.Dimension prefSize
= this.getPreferredSize();
53 java
.awt
.Dimension parentSize
;
54 java
.awt
.Point parentLocation
= new java
.awt
.Point(0, 0);
55 parentSize
= java
.awt
.Toolkit
.getDefaultToolkit().getScreenSize();
56 int x
= parentLocation
.x
+ (parentSize
.width
- prefSize
.width
) / 2;
57 int y
= parentLocation
.y
+ (parentSize
.height
- prefSize
.height
) / 2;
58 this.setLocation(x
, y
);
59 this.setResizable(true);
61 Model m
= (Model
) WorldWind
.createConfigurationComponent(AVKey
.MODEL_CLASS_NAME
);
62 LayerList layers
= m
.getLayers();
63 for (Layer layer
: layers
)
65 if (layer
instanceof TiledImageLayer
)
66 ((TiledImageLayer
) layer
).setShowImageTileOutlines(false);
67 if (layer
instanceof LandsatI3
)
68 ((TiledImageLayer
) layer
).setDrawBoundingVolumes(false);
69 if (layer
instanceof CompassLayer
)
70 ((CompassLayer
) layer
).setShowTilt(true);
73 m
.getLayers().add(this.buildShapesLayer());
74 m
.getLayers().add(this.buildIconLayer());
75 m
.getLayers().add(this.buildGeoRSSLayer());
76 m
.setShowWireframeExterior(false);
77 m
.setShowWireframeInterior(false);
80 // Forward events to the status bar to provide the cursor position info.
81 this.statusBar
.setEventSource(wwd
);
83 this.wwd
.addRenderingListener(new RenderingListener()
85 public void stageChanged(RenderingEvent event
)
87 // Do nothing; just showing how to use it.
91 this.wwd
.addSelectListener(new SelectListener()
93 private WWIcon lastToolTipIcon
= null;
95 public void selected(SelectEvent event
)
97 if (event
.getEventAction().equals(SelectEvent
.LEFT_CLICK
))
99 if (event
.hasObjects())
100 System
.out
.println("Single clicked " + event
.getTopObject());
102 System
.out
.println("Single clicked " + "no object");
104 else if (event
.getEventAction().equals(SelectEvent
.LEFT_DOUBLE_CLICK
))
106 if (event
.hasObjects())
107 System
.out
.println("Double clicked " + event
.getTopObject());
109 System
.out
.println("Double clicked " + "no object");
111 else if (event
.getEventAction().equals(SelectEvent
.RIGHT_CLICK
))
113 if (event
.hasObjects())
114 System
.out
.println("Right clicked " + event
.getTopObject());
116 System
.out
.println("Right clicked " + "no object");
118 else if (event
.getEventAction().equals(SelectEvent
.HOVER
))
120 if (lastToolTipIcon
!= null)
122 lastToolTipIcon
.setShowToolTip(false);
123 this.lastToolTipIcon
= null;
124 AWT1UpFrame
.this.wwd
.repaint();
127 if (event
.hasObjects())
129 if (event
.getTopObject() instanceof WWIcon
)
131 this.lastToolTipIcon
= (WWIcon
) event
.getTopObject();
132 lastToolTipIcon
.setShowToolTip(true);
133 AWT1UpFrame
.this.wwd
.repaint();
137 else if (event
.getEventAction().equals(SelectEvent
.ROLLOVER
))
139 AWT1UpFrame
.this.highlight(event
.getTopObject());
150 gov
.nasa
.worldwind
.WWIcon lastPickedIcon
;
152 private void highlight(Object o
)
154 if (this.lastPickedIcon
== o
)
155 return; // same thing selected
157 if (this.lastPickedIcon
!= null)
159 this.lastPickedIcon
.setHighlighted(false);
160 this.lastPickedIcon
= null;
163 if (o
!= null && o
instanceof gov
.nasa
.worldwind
.WWIcon
)
165 this.lastPickedIcon
= (WWIcon
) o
;
166 this.lastPickedIcon
.setHighlighted(true);
170 private IconLayer
buildIconLayer()
172 IconLayer layer
= new IconLayer();
174 for (double lat
= 0; lat
< 10; lat
+= 10)
176 for (double lon
= -180; lon
< 180; lon
+= 10)
181 WWIcon icon
= new UserFacingIcon("images/32x32-icon-nasa.png",
182 new Position(Angle
.fromDegrees(lat
), Angle
.fromDegrees(lon
), alt
));
183 icon
.setHighlightScale(1.5);
184 icon
.setToolTipFont(this.makeToolTipFont());
185 icon
.setToolTipText(icon
.getPath());
186 icon
.setToolTipTextColor(java
.awt
.Color
.YELLOW
);
194 private RenderableLayer
buildShapesLayer()
196 RenderableLayer layer
= new RenderableLayer();
198 Color interiorColor
= new Color(1f
, 1f
, 0f
, 0.3f
);
199 Color borderColor
= new Color(1f
, 1f
, 0f
, 0.4f
);
201 SurfaceQuadrilateral quad
= new SurfaceQuadrilateral(new Sector(
202 Angle
.fromDegrees(41.0), Angle
.fromDegrees(41.6),
203 Angle
.fromDegrees(-122.5), Angle
.fromDegrees(-121.7)),
204 interiorColor
, borderColor
);
205 layer
.addRenderable(quad
);
207 quad
= new SurfaceQuadrilateral(new Sector(
208 Angle
.fromDegrees(38.9), Angle
.fromDegrees(39.3),
209 Angle
.fromDegrees(-120.2), Angle
.fromDegrees(-119.9)),
210 new Color(0f
, 1f
, 1f
, 0.3f
), new Color(0.5f
, 1f
, 1f
, 0.4f
));
211 layer
.addRenderable(quad
);
213 double originLat
= 28;
214 double originLon
= -82;
215 ArrayList
<LatLon
> positions
= new ArrayList
<LatLon
>();
216 positions
.add(new LatLon(Angle
.fromDegrees(originLat
+ 5.0), Angle
.fromDegrees(originLon
+ 2.5)));
217 positions
.add(new LatLon(Angle
.fromDegrees(originLat
+ 5.0), Angle
.fromDegrees(originLon
- 2.5)));
218 positions
.add(new LatLon(Angle
.fromDegrees(originLat
+ 2.5), Angle
.fromDegrees(originLon
- 5.0)));
219 positions
.add(new LatLon(Angle
.fromDegrees(originLat
- 2.5), Angle
.fromDegrees(originLon
- 5.0)));
220 positions
.add(new LatLon(Angle
.fromDegrees(originLat
- 5.0), Angle
.fromDegrees(originLon
- 2.5)));
221 positions
.add(new LatLon(Angle
.fromDegrees(originLat
- 5.0), Angle
.fromDegrees(originLon
+ 2.5)));
222 positions
.add(new LatLon(Angle
.fromDegrees(originLat
- 2.5), Angle
.fromDegrees(originLon
+ 5.0)));
223 positions
.add(new LatLon(Angle
.fromDegrees(originLat
+ 2.5), Angle
.fromDegrees(originLon
+ 5.0)));
225 SurfacePolygon polygon
= new SurfacePolygon(positions
,
226 new Color(1f
, 0.11f
, 0.2f
, 0.4f
), new Color(1f
, 0f
, 0f
, 0.6f
));
227 polygon
.setStroke(new BasicStroke(2f
));
228 layer
.addRenderable(polygon
);
233 private static final String lineTestString
=
234 "<gml:LineString> <gml:posList>45.256 -110.45 46.46 -109.48 43.84 -109.86</gml:posList></gml:LineString>";
235 private static final String itemTestString
=
236 "<item> <title>M 3.2, Mona Passage</title> <link>http://example.org/2005/09/09/atom01</link> <pubDate>Wed, 17 Aug 2005 07:02:32 GMT</pubDate> <georss:where> <gml:Polygon> <gml:exterior> <gml:LinearRing> <gml:posList> 45.256 -110.45 46.46 -109.48 43.84 -109.86 45.256 -110.45 </gml:posList> </gml:LinearRing> </gml:exterior> </gml:Polygon> </georss:where> </item>";
238 private RenderableLayer
buildGeoRSSLayer()
242 DocumentBuilderFactory docBuilderFactory
= DocumentBuilderFactory
.newInstance();
243 docBuilderFactory
.setNamespaceAware(true);
244 DocumentBuilder docBuilder
= docBuilderFactory
.newDocumentBuilder();
245 Document doc
= docBuilder
.parse(new File("GeoRSSTestData.xml"));
246 List
<Renderable
> shapes
= GeoRSSParser
.parseShapes(doc
);
248 // List<Renderable> shapes = GeoRSSParser.parseFragment(itemTestString, null);
250 // StringBuffer sb = new StringBuffer();
251 // FileReader fr = new FileReader("feed.xml");
252 // for (int c = fr.read(); c >=0; c = fr.read())
253 // sb.append((char) c);
254 // List<Renderable> shapes = GeoRSSParser.parseShapes(sb.toString());
256 RenderableLayer layer
= new RenderableLayer();
259 for (Renderable shape
: shapes
)
261 layer
.addRenderable(shape
);
267 catch (ParserConfigurationException e
)
271 catch (IOException e
)
275 catch (SAXException e
)
283 private Font
makeToolTipFont()
285 HashMap
<TextAttribute
, Object
> fontAttributes
= new HashMap
<TextAttribute
, Object
>();
287 fontAttributes
.put(TextAttribute
.BACKGROUND
, new java
.awt
.Color(0.4f
, 0.4f
, 0.4f
, 1f
));
288 return Font
.decode("Arial-BOLD-14").deriveFont(fontAttributes
);
294 if (gov
.nasa
.worldwind
.Configuration
.isMacOS())
296 System
.setProperty("apple.laf.useScreenMenuBar", "true");
297 System
.setProperty("com.apple.mrj.application.apple.menu.about.name", "World Wind AWT Canvas App");
298 System
.setProperty("com.apple.mrj.application.growbox.intrudes", "false");
302 public static void main(String
[] args
)
304 System
.out
.println("Java run-time version: " + System
.getProperty("java.version"));
308 AWT1UpFrame frame
= new AWT1UpFrame();
309 frame
.setDefaultCloseOperation(javax
.swing
.JFrame
.EXIT_ON_CLOSE
);
310 frame
.setVisible(true);