Added option to show camera position.
git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@67 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
@@ -43,6 +43,8 @@ import java.io.PrintStream;
|
|||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
@@ -231,6 +233,17 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
view.add(_normals);
|
view.add(_normals);
|
||||||
view.addSeparator();
|
view.addSeparator();
|
||||||
|
|
||||||
|
Action campos = new AbstractAction(_msg.get("m.view_campos")) {
|
||||||
|
public void actionPerformed (ActionEvent e) {
|
||||||
|
_campos.setVisible(!_campos.isVisible());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
campos.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A);
|
||||||
|
campos.putValue(Action.ACCELERATOR_KEY,
|
||||||
|
KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
|
||||||
|
view.add(new JCheckBoxMenuItem(campos));
|
||||||
|
view.addSeparator();
|
||||||
|
|
||||||
_vmenu = new JMenu(_msg.get("m.model_variant"));
|
_vmenu = new JMenu(_msg.get("m.model_variant"));
|
||||||
view.add(_vmenu);
|
view.add(_vmenu);
|
||||||
|
|
||||||
@@ -284,6 +297,7 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
Action rcamera = new AbstractAction(_msg.get("m.view_recenter")) {
|
Action rcamera = new AbstractAction(_msg.get("m.view_recenter")) {
|
||||||
public void actionPerformed (ActionEvent e) {
|
public void actionPerformed (ActionEvent e) {
|
||||||
((OrbitCameraHandler)_camhand).recenter();
|
((OrbitCameraHandler)_camhand).recenter();
|
||||||
|
updateCameraPosition();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
rcamera.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_C);
|
rcamera.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_C);
|
||||||
@@ -343,10 +357,18 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
});
|
});
|
||||||
_animctrls.setVisible(false);
|
_animctrls.setVisible(false);
|
||||||
|
|
||||||
|
JPanel spanel = new JPanel(new BorderLayout());
|
||||||
|
bpanel.add(spanel, BorderLayout.SOUTH);
|
||||||
|
|
||||||
_status = new JLabel(" ");
|
_status = new JLabel(" ");
|
||||||
_status.setHorizontalAlignment(JLabel.LEFT);
|
_status.setHorizontalAlignment(JLabel.LEFT);
|
||||||
_status.setBorder(BorderFactory.createEtchedBorder());
|
_status.setBorder(BorderFactory.createEtchedBorder());
|
||||||
bpanel.add(_status, BorderLayout.SOUTH);
|
spanel.add(_status, BorderLayout.CENTER);
|
||||||
|
|
||||||
|
_campos = new JLabel(" ");
|
||||||
|
_campos.setBorder(BorderFactory.createEtchedBorder());
|
||||||
|
_campos.setVisible(false);
|
||||||
|
spanel.add(_campos, BorderLayout.EAST);
|
||||||
|
|
||||||
_frame.pack();
|
_frame.pack();
|
||||||
_frame.setVisible(true);
|
_frame.setVisible(true);
|
||||||
@@ -380,9 +402,10 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
{
|
{
|
||||||
super.initInput();
|
super.initInput();
|
||||||
|
|
||||||
_camhand.setTiltLimits(FastMath.PI / 16.0f, FastMath.PI * 7.0f / 16.0f);
|
_camhand.setTiltLimits(-FastMath.HALF_PI, FastMath.HALF_PI);
|
||||||
_camhand.setZoomLimits(1f, 100f);
|
_camhand.setZoomLimits(1f, 500f);
|
||||||
_camhand.tiltCamera(-FastMath.PI * 7.0f / 16.0f);
|
_camhand.tiltCamera(-FastMath.PI * 7.0f / 16.0f);
|
||||||
|
updateCameraPosition();
|
||||||
|
|
||||||
MouseOrbiter orbiter = new MouseOrbiter();
|
MouseOrbiter orbiter = new MouseOrbiter();
|
||||||
_canvas.addMouseListener(orbiter);
|
_canvas.addMouseListener(orbiter);
|
||||||
@@ -390,6 +413,24 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
_canvas.addMouseWheelListener(orbiter);
|
_canvas.addMouseWheelListener(orbiter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the camera position label.
|
||||||
|
*/
|
||||||
|
protected void updateCameraPosition ()
|
||||||
|
{
|
||||||
|
Camera cam = _camhand.getCamera();
|
||||||
|
Vector3f pos = cam.getLocation(), dir = cam.getDirection(),
|
||||||
|
left = cam.getLeft();
|
||||||
|
float heading = -FastMath.atan2(dir.x, dir.y) * FastMath.RAD_TO_DEG,
|
||||||
|
pitch = FastMath.asin(dir.z) * FastMath.RAD_TO_DEG;
|
||||||
|
_campos.setText(
|
||||||
|
"XYZ: " + CAMPOS_FORMAT.format(pos.x) + ", " +
|
||||||
|
CAMPOS_FORMAT.format(pos.y) + ", " +
|
||||||
|
CAMPOS_FORMAT.format(pos.z) +
|
||||||
|
" HP: " + CAMPOS_FORMAT.format(heading) + ", " +
|
||||||
|
CAMPOS_FORMAT.format(pitch));
|
||||||
|
}
|
||||||
|
|
||||||
@Override // documentation inherited
|
@Override // documentation inherited
|
||||||
protected CameraHandler createCameraHandler (Camera camera)
|
protected CameraHandler createCameraHandler (Camera camera)
|
||||||
{
|
{
|
||||||
@@ -606,6 +647,7 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
// recenter the camera
|
// recenter the camera
|
||||||
_model.updateGeometricState(0f, true);
|
_model.updateGeometricState(0f, true);
|
||||||
((OrbitCameraHandler)_camhand).recenter();
|
((OrbitCameraHandler)_camhand).recenter();
|
||||||
|
updateCameraPosition();
|
||||||
|
|
||||||
// configure the variant menu
|
// configure the variant menu
|
||||||
_variant = null;
|
_variant = null;
|
||||||
@@ -805,6 +847,9 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
/** The status bar. */
|
/** The status bar. */
|
||||||
protected JLabel _status;
|
protected JLabel _status;
|
||||||
|
|
||||||
|
/** The camera position display. */
|
||||||
|
protected JLabel _campos;
|
||||||
|
|
||||||
/** The model file chooser. */
|
/** The model file chooser. */
|
||||||
protected JFileChooser _chooser;
|
protected JFileChooser _chooser;
|
||||||
|
|
||||||
@@ -1009,12 +1054,14 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
} else {
|
} else {
|
||||||
_camhand.panCamera(-dx/8f, dy/8f);
|
_camhand.panCamera(-dx/8f, dy/8f);
|
||||||
}
|
}
|
||||||
|
updateCameraPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited from interface MouseWheelListener
|
// documentation inherited from interface MouseWheelListener
|
||||||
public void mouseWheelMoved (MouseWheelEvent e)
|
public void mouseWheelMoved (MouseWheelEvent e)
|
||||||
{
|
{
|
||||||
_camhand.zoomCamera(e.getWheelRotation() * 10f);
|
_camhand.zoomCamera(e.getWheelRotation() * 10f);
|
||||||
|
updateCameraPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The last recorded position of the mouse cursor. */
|
/** The last recorded position of the mouse cursor. */
|
||||||
@@ -1086,4 +1133,8 @@ public class ModelViewer extends JmeCanvasApp
|
|||||||
|
|
||||||
/** The spacing between lines on the grid. */
|
/** The spacing between lines on the grid. */
|
||||||
protected static final float GRID_SPACING = 2.5f;
|
protected static final float GRID_SPACING = 2.5f;
|
||||||
|
|
||||||
|
/** The number formal used for the camera position. */
|
||||||
|
protected static final DecimalFormat CAMPOS_FORMAT =
|
||||||
|
new DecimalFormat("+000.000;-000.000");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user