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;
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;
// 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
}
}});
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()
{
_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();
}
}
+ /**
+ * 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
// 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),
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 =
private static Group createLatLongs(ThreeDModel inModel)
{
Group group = new Group();
- int numlines = inModel.getNumLatitudeLines();
+ int numlines = inModel.getLatitudeLines().length;
for (int i=0; i<numlines; i++)
{
group.addChild(createLatLine(inModel.getScaledLatitudeLine(i), inModel.getModelSize()));
}
- numlines = inModel.getNumLongitudeLines();
+ numlines = inModel.getLongitudeLines().length;
for (int i=0; i<numlines; i++)
{
group.addChild(createLonLine(inModel.getScaledLongitudeLine(i), inModel.getModelSize()));