📄 draggingshapeswithgeometry.java
字号:
layer.setPickEnabled(true); return layer; } private AbstractLayer buildRandomCircleShapesLayer() { SurfaceShapeLayer layer = new SurfaceShapeLayer(); // Generate random numbers of circles over the US... for (int i = 0; i < numCircles; i++) { double lat = (25. + Math.random() * (50. - 25.)); double lon = -(64 + Math.random() * (125. - 64.)); double size = 100000. * Math.random(); SurfaceCircle surfaceCircle = new SurfaceCircle(LatLon.fromDegrees(lat, lon), size); surfaceCircle.getAttributes().setInteriorMaterial(new Material(new Color(1f, 0.11f, 0.2f))); surfaceCircle.getAttributes().setInteriorOpacity(0.6); surfaceCircle.getAttributes().setOutlineMaterial(new Material(new Color(0f, 1f, 0f))); surfaceCircle.getAttributes().setOutlineOpacity(0.6); surfaceCircle.getAttributes().setOutlineWidth(3); layer.addRenderable(surfaceCircle); } layer.setPickEnabled(true); return layer; } private RenderableLayer buildRandomCirclesLayerPolyArc() { RenderableLayer layer = new RenderableLayer(); // Generate random numbers of circles over the US... for (int i = 0; i < numCircles; i++) { double lat = (25. + Math.random() * (50. - 25.)); double lon = -(64 + Math.random() * (125. - 64.)); double size = 100000. * Math.random(); CappedCylinder cyl = new SurfaceCircle2(); cyl.getAttributes().setMaterial(Material.RED); cyl.getAttributes().setOpacity(0.8); cyl.setCenter(LatLon.fromDegrees(lat, lon)); cyl.setRadius(size); cyl.setAltitudes(0,0); cyl.setTerrainConforming(true, true); cyl.setEnableLevelOfDetail(true); layer.addRenderable(cyl); } layer.setPickEnabled(true); return layer; }/******* COMMENT OUT UNTIL SurfaceEllipseGeometry2 can be refactored to reflect the new airspace package. private RenderableLayer buildRandomEllipses(Globe globe) { RenderableLayer layer = new RenderableLayer(); // Generate random numbers of circles over the US... for (int i = 0; i < numCircles; i++) { double lat = (25. + Math.random() * (50. - 25.)); double lon = -(64 + Math.random() * (125. - 64.)); double size = 100000. * Math.random(); SurfaceEllipseGeometry2 ell = new SurfaceEllipseGeometry2(globe, LatLon.fromDegrees(lat, lon), size, size, Angle.ZERO, 8); layer.addRenderable(ell); } layer.setPickEnabled(true); return layer; }**************/ private RenderableLayer buildWyomingLayer() { RenderableLayer layer = new RenderableLayer(); // Square to cover (approx.) Wyoming... // Wyoming is purportedly 97818 Sq. Miles --> 253,347,456,970 square meters // (see http://www.netstate.com/states/alma/wy_alma.htm) SurfaceShapeGeometry surfaceQuad = new SurfaceSectorGeometry(new Sector( Angle.fromDegrees(41), Angle.fromDegrees(45.), Angle.fromDegrees(-111), Angle.fromDegrees(-104)), new Color(0f, 1f, 1f, 0.3f), new Color(0.5f, 1f, 1f, 0.8f)); layer.addRenderable(surfaceQuad); layer.setPickEnabled(true); return layer; } private Font makeToolTipFont() { HashMap<TextAttribute, Object> fontAttributes = new HashMap<TextAttribute, Object>(); fontAttributes.put(TextAttribute.BACKGROUND, new Color(0.4f, 0.4f, 0.4f, 1f)); return Font.decode("Arial-BOLD-14").deriveFont(fontAttributes); } private RenderableLayer buildShapesLayer() { // Create a layer with shapes to drag. RenderableLayer layer = new RenderableLayer(); // Create a yellow, semi-transparent surface shape over Mt. Shasta. Color interiorColor = new Color(1f, 1f, 0f, 0.3f); Color borderColor = new Color(1f, 1f, 0f, 0.8f); SurfaceShapeGeometry surfaceSector = new SurfaceSectorGeometry(new Sector( Angle.fromDegrees(41.0), Angle.fromDegrees(41.6), Angle.fromDegrees(-122.5), Angle.fromDegrees(-121.7)), interiorColor, borderColor); layer.addRenderable(surfaceSector); // Create a turquoise, semi-transparent surface shape over Lake Tahoe. SurfaceShapeGeometry surfaceQuad = new SurfaceSectorGeometry(new Sector( Angle.fromDegrees(38.9), Angle.fromDegrees(39.3), Angle.fromDegrees(-120.2), Angle.fromDegrees(-119.9)), new Color(0f, 1f, 1f, 0.3f), new Color(0.5f, 1f, 1f, 0.8f)); layer.addRenderable(surfaceQuad); // Create an ellipse over the center of the States. SurfaceShapeGeometry surfaceEllipse = new SurfaceEllipseGeometry(getWwd().getModel().getGlobe(), LatLon.fromDegrees(38, -104), 1.5e5, 1e5, Angle.fromDegrees(15), 16, new Color(0f, 1f, 1f, 0.3f), new Color(0.5f, 1f, 1f, 0.8f)); surfaceEllipse.setDrawInterior(false); layer.addRenderable(surfaceEllipse); // Create a quadrilateral over the States. SurfaceShapeGeometry surfaceQuadShape = new SurfaceQuadGeometry(getWwd().getModel().getGlobe(), LatLon.fromDegrees(42, -104), 1e5, 1.3e5, Angle.fromDegrees(20), new Color(0f, 1f, 1f, 0.3f), new Color(0.5f, 1f, 1f, 0.8f)); layer.addRenderable(surfaceQuadShape); // Create a square over the States. SurfaceShapeGeometry surfaceSquareShape = new SurfaceSquareGeometry(getWwd().getModel().getGlobe(), LatLon.fromDegrees(45, -104), 1e5, new Color(0f, 1f, 1f, 0.3f), new Color(0.5f, 1f, 1f, 0.8f)); surfaceSquareShape.setDrawBorder(false); layer.addRenderable(surfaceSquareShape); // Create a circle over the States. SurfaceShapeGeometry surfaceCircleShape = new SurfaceCircleGeometry(getWwd().getModel().getGlobe(), LatLon.fromDegrees(36, -104), 1e5, 16, new Color(0f, 1f, 1f, 1f), new Color(0.5f, 1f, 1f, 0.8f)); layer.addRenderable(surfaceCircleShape); // Create an elevated quadrilateral above Lake Tahoe. Quadrilateral quad = new Quadrilateral(new Sector( Angle.fromDegrees(38.9), Angle.fromDegrees(39.3), Angle.fromDegrees(-120.2), Angle.fromDegrees(-119.9)), 50000d); quad.setColor(new Color(1f, 1f, 0f, 1f)); layer.addRenderable(quad); // Create a big polygon over Florida. double originLat = 28; double originLon = -82; ArrayList<LatLon> positions = new ArrayList<LatLon>(); positions.add(new LatLon(Angle.fromDegrees(originLat + 5.0), Angle.fromDegrees(originLon + 2.5))); positions.add(new LatLon(Angle.fromDegrees(originLat + 5.0), Angle.fromDegrees(originLon - 2.5))); positions.add(new LatLon(Angle.fromDegrees(originLat + 2.5), Angle.fromDegrees(originLon - 5.0))); positions.add(new LatLon(Angle.fromDegrees(originLat - 2.5), Angle.fromDegrees(originLon - 5.0))); positions.add(new LatLon(Angle.fromDegrees(originLat - 5.0), Angle.fromDegrees(originLon - 2.5))); positions.add(new LatLon(Angle.fromDegrees(originLat - 5.0), Angle.fromDegrees(originLon + 2.5))); positions.add(new LatLon(Angle.fromDegrees(originLat - 2.5), Angle.fromDegrees(originLon + 5.0))); positions.add(new LatLon(Angle.fromDegrees(originLat + 2.5), Angle.fromDegrees(originLon + 5.0))); positions.add(new LatLon(Angle.fromDegrees(originLat + 5.0), Angle.fromDegrees(originLon + 2.5))); SurfacePolygonGeometry polygon = new SurfacePolygonGeometry(positions, new Color(1f, 0.11f, 0.2f, 0.4f), new Color(0f, 1f, 0f, 0.6f)); polygon.setBorderWidth(2.0); layer.addRenderable(polygon); // Test +180/-180 lon span Polyline positions = new ArrayList<LatLon>(); positions.add(new LatLon(Angle.fromDegrees(-10), Angle.fromDegrees(170))); positions.add(new LatLon(Angle.fromDegrees(-10), Angle.fromDegrees(-170))); Polyline polyline = new Polyline(positions, 1000); polyline.setPathType(Polyline.GREAT_CIRCLE); layer.addRenderable(polyline); // Test +180/-180 lon span SurfacePolyline positions = new ArrayList<LatLon>(); positions.add(new LatLon(Angle.fromDegrees(20), Angle.fromDegrees(-170))); positions.add(new LatLon(Angle.fromDegrees(15), Angle.fromDegrees(170))); positions.add(new LatLon(Angle.fromDegrees(10), Angle.fromDegrees(-175))); positions.add(new LatLon(Angle.fromDegrees(5), Angle.fromDegrees(170))); positions.add(new LatLon(Angle.fromDegrees(0), Angle.fromDegrees(-170))); positions.add(new LatLon(Angle.fromDegrees(20), Angle.fromDegrees(-170))); SurfacePolygonGeometry surfacePolygon = new SurfacePolygonGeometry(positions, new Color(1f, 0.11f, 0.2f, 0.4f), new Color(1f, 0f, 0f, 0.6f)); surfacePolygon.setBorderWidth(2.0); layer.addRenderable(surfacePolygon); return layer; } } public static void main(String[] args) { try { if (args.length > 0) numCircles = Integer.parseInt(args[0]); } catch (NumberFormatException ex) { System.err.println("unable to parse argument as integer: " + args[0]); System.err.println("using default number of circles: " + numCircles); } ApplicationTemplate.start("World Wind Shape Dragging", AppFrame.class); } private static int numCircles = 1000;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -