X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fthreedee%2FJava3DWindow.java;h=8d1a476c35e35bc4b7fd67e34d5ff1304a38eff8;hb=52bf9e8686c916be37a26a0b75340393d4478b05;hp=e65d53de50c2f70f1aca7492e5489dad343f4e11;hpb=23959e65a6a0d581e657b07186d18b7a1ac5afeb;p=GpsPrune.git diff --git a/tim/prune/threedee/Java3DWindow.java b/tim/prune/threedee/Java3DWindow.java index e65d53d..8d1a476 100644 --- a/tim/prune/threedee/Java3DWindow.java +++ b/tim/prune/threedee/Java3DWindow.java @@ -1,12 +1,14 @@ package tim.prune.threedee; -import java.awt.BorderLayout; import java.awt.FlowLayout; +import java.awt.BorderLayout; import java.awt.Font; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.awt.geom.GeneralPath; import javax.media.j3d.AmbientLight; @@ -55,6 +57,7 @@ public class Java3DWindow implements ThreeDWindow private Track _track = null; private JFrame _parentFrame = null; private JFrame _frame = null; + private ThreeDModel _model = null; private OrbitBehavior _orbit = null; private int _altitudeCap = ThreeDModel.MINIMUM_ALTITUDE_CAP; @@ -64,7 +67,6 @@ public class Java3DWindow implements ThreeDWindow // Constants private static final double INITIAL_Y_ROTATION = -25.0; private static final double INITIAL_X_ROTATION = 15.0; - private static final int INITIAL_ALTITUDE_CAP = 500; private static final String CARDINALS_FONT = "Arial"; private static final int MAX_TRACK_SIZE = 2500; // threshold for warning @@ -185,6 +187,19 @@ public class Java3DWindow implements ThreeDWindow } }}); panel.add(renderButton); + // Display coordinates of lat/long lines of 3d graph in separate dialog + JButton showLinesButton = new JButton(I18nManager.getText("button.showlines")); + showLinesButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + double[] latLines = _model.getLatitudeLines(); + double[] lonLines = _model.getLongitudeLines(); + LineDialog dialog = new LineDialog(_frame, latLines, lonLines); + dialog.showDialog(); + } + }); + panel.add(showLinesButton); + // Close button JButton closeButton = new JButton(I18nManager.getText("button.close")); closeButton.addActionListener(new ActionListener() { @@ -194,11 +209,19 @@ public class Java3DWindow implements ThreeDWindow _frame.dispose(); _frame = null; _orbit = null; - }}); + } + }); panel.add(closeButton); _frame.getContentPane().add(panel, BorderLayout.SOUTH); _frame.setSize(500, 350); _frame.pack(); + // Add a listener to clean up when window closed + _frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) + { + dispose(); + } + }); // show frame _frame.show(); @@ -208,6 +231,16 @@ public class Java3DWindow implements ThreeDWindow } } + /** + * Dispose of the frame and its resources + */ + public void dispose() + { + if (_frame != null) { + _frame.dispose(); + _frame = null; + } + } /** * Create the whole scenery from the given track @@ -241,8 +274,6 @@ public class Java3DWindow implements ThreeDWindow // Base plane Appearance planeAppearance = null; Box plane = null; - Transform3D planeShift = null; - TransformGroup planeTrans = null; planeAppearance = new Appearance(); planeAppearance.setMaterial(new Material(new Color3f(0.1f, 0.2f, 0.2f), new Color3f(0.0f, 0.0f, 0.0f), new Color3f(0.3f, 0.4f, 0.4f), @@ -268,15 +299,15 @@ public class Java3DWindow implements ThreeDWindow objTrans.addChild(createCompassPoint(I18nManager.getText("cardinal.e"), new Point3f(10f, 0f, 0f), compassFont)); // create and scale model - ThreeDModel model = new ThreeDModel(_track); - model.setAltitudeCap(_altitudeCap); - model.scale(); + _model = new ThreeDModel(_track); + _model.setAltitudeCap(_altitudeCap); + _model.scale(); // Lat/Long lines - objTrans.addChild(createLatLongs(model)); + objTrans.addChild(createLatLongs(_model)); // Add points to model - objTrans.addChild(createDataPoints(model)); + objTrans.addChild(createDataPoints(_model)); // Create lights BoundingSphere bounds = @@ -339,12 +370,12 @@ public class Java3DWindow implements ThreeDWindow private static Group createLatLongs(ThreeDModel inModel) { Group group = new Group(); - int numlines = inModel.getNumLatitudeLines(); + int numlines = inModel.getLatitudeLines().length; for (int i=0; i