/* Copyright (C) 2001, 2006 United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All Rights Reserved. */ package gov.nasa.worldwind.examples; import gov.nasa.worldwind.*; import gov.nasa.worldwind.geom.Angle; import gov.nasa.worldwind.render.Renderable; import gov.nasa.worldwind.layers.Earth.BMNGOneImage; import gov.nasa.worldwind.avlist.AVKey; import javax.swing.*; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import javax.swing.border.CompoundBorder; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; /** Using the AnaglyphSceneController * @author tag * @version $Id: AnaglyphStereo.java 3155 2007-09-29 07:29:54Z patrickmurris $ */ public class AnaglyphStereo extends ApplicationTemplate { public static class AppFrame extends ApplicationTemplate.AppFrame { private String displayMode; private Angle focusAngle; private JSlider focusAngleSlider; public AppFrame() { super(true, true, false); // Retreive current settings this.displayMode = ((AnaglyphSceneController)this.getWwd().getSceneController()).getDisplayMode(); this.focusAngle = ((AnaglyphSceneController)this.getWwd().getSceneController()).getFocusAngle(); // Add a stereo control panel to the layer panel this.getLayerPanel().add(makeStereoPanel(), BorderLayout.SOUTH); } private JPanel makeStereoPanel() { JPanel stereoPanel = new JPanel(new GridLayout(0, 1, 0, 0)); // Mono/Stereo button group JPanel buttons = new JPanel(new GridLayout(0, 2, 0, 0)); ButtonGroup group = new ButtonGroup(); JRadioButton bMono = new JRadioButton("Mono"); bMono.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { displayMode = AnaglyphSceneController.DISPLAY_MODE_MONO; update(); } }); bMono.setSelected(!this.displayMode.equals(AnaglyphSceneController.DISPLAY_MODE_STEREO)); group.add(bMono); buttons.add(bMono); JRadioButton bStereo = new JRadioButton("Stereo"); bStereo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { displayMode = AnaglyphSceneController.DISPLAY_MODE_STEREO; update(); } }); bStereo.setSelected(this.displayMode.equals(AnaglyphSceneController.DISPLAY_MODE_STEREO)); group.add(bStereo); buttons.add(bStereo); // Focus angle slider JPanel slider = new JPanel(new GridLayout(0, 1, 0, 0)); JSlider s = new JSlider(JSlider.HORIZONTAL, 0, 50, (int)(this.focusAngle.degrees * 10)); // 0 - 5 in tenth of degrees s.setMajorTickSpacing(10); s.setMinorTickSpacing(1); s.setPaintTicks(true); s.setPaintLabels(true); s.setToolTipText("Focus angle 1/10 degrees"); s.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent event) { JSlider s = (JSlider)event.getSource(); if (!s.getValueIsAdjusting()) { focusAngle = Angle.fromDegrees( (double)s.getValue() / 10); update(); } } }); slider.add(s); s.setEnabled(this.displayMode.equals(AnaglyphSceneController.DISPLAY_MODE_STEREO)); this.focusAngleSlider = s; // Help label JPanel text = new JPanel(new GridLayout(0, 1, 0, 0)); JLabel l = new JLabel("Tip: pitch view for stereo effect."); l.setHorizontalAlignment(SwingConstants.CENTER); text.add(l); // Assembly stereoPanel.add(buttons); stereoPanel.add(slider); stereoPanel.add(text); stereoPanel.setBorder( new CompoundBorder(BorderFactory.createEmptyBorder(9, 9, 9, 9), new TitledBorder("View"))); stereoPanel.setToolTipText("Stereo controls"); return stereoPanel; } // Update worldwind private void update() { AnaglyphSceneController asc = (AnaglyphSceneController)this.getWwd().getSceneController(); asc.setDisplayMode(this.displayMode); asc.setFocusAngle(this.focusAngle); this.focusAngleSlider.setEnabled(this.displayMode.equals(AnaglyphSceneController.DISPLAY_MODE_STEREO)); this.getWwd().redraw(); } } public static void main(String[] args) { Configuration.setValue(AVKey.SCENE_CONTROLLER_CLASS_NAME, AnaglyphSceneController.class.getName()); ApplicationTemplate.start("World Wind Anaglyph Stereo", AppFrame.class); } }