📄 60afc9c7e1c5001d1cd1e38dc83e3a87
字号:
import javax.vecmath.*;
/**
*
* @author Sergei Grichine
*
* Copyright (c) 2000-2002 Sergei Grichine slg@quakemap.com
*
* This code was written as a self-study exercise.
* Permission to use this code for any commercial and non-commercial application is thereby granted by the author.
* If you use portions of this program in your work, credits to the author and references to original code will be appreciated.
* The author does not assume responsibility for any damages resulting from using this code.
* The author is not under obligation to support this code in any form.
*
*/
public class ControlJPanel extends javax.swing.JPanel implements PositionListener, Runnable
{
private Thread m_thread;
private Dem m_dem = null;
private MainViewJPanel m_mainView = null;
/** Creates new form ControlJPanel */
public ControlJPanel()
{
initComponents ();
m_thread = new Thread(this);
m_thread.start();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
asimuthJLabel = new javax.swing.JLabel();
speedJLabel = new javax.swing.JLabel();
altitudeJLabel = new javax.swing.JLabel();
btnOptions = new javax.swing.JButton();
asimuthGauge = new javax.swing.JLabel();
speedGauge = new javax.swing.JLabel();
altitudeGauge = new javax.swing.JLabel();
btnHelp = new javax.swing.JButton();
setLayout(new java.awt.GridLayout(2, 5));
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
public void componentHidden(java.awt.event.ComponentEvent evt) {
formComponentHidden(evt);
}
});
asimuthJLabel.setText("Asimuth:");
asimuthJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
add(asimuthJLabel);
speedJLabel.setText("Speed:");
speedJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
add(speedJLabel);
altitudeJLabel.setText("Altitude:");
altitudeJLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
add(altitudeJLabel);
btnOptions.setText("Options");
btnOptions.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnOptionsActionPerformed(evt);
}
});
add(btnOptions);
asimuthGauge.setText("AsimuthGauge");
asimuthGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
asimuthGauge.setName("asimuthGage");
add(asimuthGauge);
speedGauge.setText("SpeedGauge");
speedGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
speedGauge.setName("speedGauge");
add(speedGauge);
altitudeGauge.setText("AltitudeGauge");
altitudeGauge.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
add(altitudeGauge);
btnHelp.setText("Help");
btnHelp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnHelpActionPerformed(evt);
}
});
add(btnHelp);
}//GEN-END:initComponents
private void btnOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOptionsActionPerformed
// Add your handling code here:
new DlgOptions(m_dem, m_mainView).setVisible(true);
}//GEN-LAST:event_btnOptionsActionPerformed
private void btnHelpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnHelpActionPerformed
// Add your handling code here:
new DlgHelp("overview").setVisible(true);
}//GEN-LAST:event_btnHelpActionPerformed
private void formComponentShown (java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
// Add your handling code here:
}//GEN-LAST:event_formComponentShown
private void formComponentHidden (java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
// Add your handling code here:
}//GEN-LAST:event_formComponentHidden
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel asimuthJLabel;
private javax.swing.JLabel speedJLabel;
private javax.swing.JLabel altitudeJLabel;
private javax.swing.JButton btnOptions;
private javax.swing.JLabel asimuthGauge;
private javax.swing.JLabel speedGauge;
private javax.swing.JLabel altitudeGauge;
private javax.swing.JButton btnHelp;
// End of variables declaration//GEN-END:variables
public void setDem(Dem dem)
{
m_dem = dem;
}
public void setMainView(MainViewJPanel panel)
{
m_mainView = panel;
}
public void setAltitude(Point3d planePos) // meters
{
final double FEET_PER_METER = 0.305;
double ft = planePos.z / FEET_PER_METER;
int iAltitudeAbs = (int)ft;
int iAltitudeRel = iAltitudeAbs;
int iTerrainHeight = 0;
if(m_dem != null) {
iTerrainHeight = (int)(m_dem.getHeight(planePos.x, planePos.y) / FEET_PER_METER);
iAltitudeRel -= iTerrainHeight;
}
altitudeGauge.setText("" + iAltitudeAbs + "=" + iTerrainHeight + "+" + iAltitudeRel + " ft");
}
public void setSpeed(double speed) // meters per second
{
// convert speed to mph:
double mph = speed * 3600.0 / 1600.0;
int iSpeed = (int)mph;
speedGauge.setText("" + iSpeed + " mph");
}
public void setAsimuth(double asimuth) // radians to North
{
double grads = asimuth / Math.PI * 360.0;
int iAsimuth = (int)grads;
asimuthGauge.setText("" + iAsimuth);
}
private double m_distanceTraveled = 0;
public void positionChanged(PositionEvent posEvent)
{
Point3d planePos = posEvent.getNewPos();
double distanceTraveled = posEvent.getDistanceTraveled();
setAltitude(planePos);
m_distanceTraveled += distanceTraveled;
Vector3d travel = posEvent.getTravel();
Vector3d travelXY = new Vector3d(travel.x, travel.y, 0.0);
Vector3d axisY = new Vector3d(0.0, 1.0, 0.0);
double asimuth = axisY.angle(travelXY);
if(travel.x < 0.0) {
asimuth = -asimuth;
}
setAsimuth(asimuth);
}
public void run()
{
while(true) {
try {
Thread.sleep(1000);
// at this moment m_distanceTraveled accumulated meters traveled for the last second.
setSpeed(m_distanceTraveled);
m_distanceTraveled = 0.0;
} catch(Exception e) {
System.out.println("Exception in run(): " + e);
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -