⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewcontrols.java

📁 world wind java sdk 源码
💻 JAVA
字号:
/*
Copyright (C) 2001, 2008 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.layers.*;
import gov.nasa.worldwind.event.SelectListener;
import gov.nasa.worldwind.event.SelectEvent;
import gov.nasa.worldwind.geom.Angle;
import gov.nasa.worldwind.view.OrbitView;
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;

/**
 * Shows the ViewControlsLayer and how to use picking on the compass to handle the view orientation.
 *
 * @author Patrick Murris
 * @version $Id: ViewControls.java 7253 2008-10-28 01:32:04Z patrickmurris $
 * @see gov.nasa.worldwind.layers.ViewControlsLayer
 * @see gov.nasa.worldwind.layers.ViewControlsSelectListener
 * @see gov.nasa.worldwind.layers.CompassLayer
 */
public class ViewControls extends ApplicationTemplate
{
    public static class AppFrame extends ApplicationTemplate.AppFrame
    {
        ViewControlsLayer viewControlsLayer;

        public AppFrame()
        {
            super(true, true, false);

            // Add view controls layer and select listener
            viewControlsLayer = new ViewControlsLayer();
            insertBeforeCompass(getWwd(), viewControlsLayer);
            getLayerPanel().update(getWwd());
            this.getWwd().addSelectListener(new ViewControlsSelectListener(this.getWwd(), viewControlsLayer));

            // Find Compass layer and enable picking
            for(Layer layer : this.getWwd().getModel().getLayers())
            {
                if (layer instanceof CompassLayer)
                    layer.setPickEnabled(true);
            }

            // Add select listener to handle drag events on the compass
            this.getWwd().addSelectListener(new SelectListener()
            {
                Angle dragStartHeading = null;
                Angle viewStartHeading = null;
                OrbitView view = (OrbitView)getWwd().getView();
                public void selected(SelectEvent event)
                {
                    if (event.getTopObject() instanceof CompassLayer)
                    {
                        Angle heading = (Angle)event.getTopPickedObject().getValue("Heading");
                        if (event.getEventAction().equals(SelectEvent.DRAG) && dragStartHeading == null)
                        {
                            dragStartHeading = heading;
                            viewStartHeading = view.getHeading();
                        }
                        else if(event.getEventAction().equals(SelectEvent.ROLLOVER)  && dragStartHeading != null)
                        {
                            double move = heading.degrees - dragStartHeading.degrees;
                            double newHeading = viewStartHeading.degrees - move;
                            newHeading = newHeading >= 0 ? newHeading : newHeading + 360;
                            view.stopStateIterators();
                            view.setHeading(Angle.fromDegrees(newHeading));
                        }
                        else if(event.getEventAction().equals(SelectEvent.DRAG_END))
                        {
                            dragStartHeading = null;
                        }
                    }
                }
            });

            // Add view controls selection panel
            this.getLayerPanel().add(makeControlPanel(),  BorderLayout.SOUTH);
        }

        private JPanel makeControlPanel()
        {
            JPanel controlPanel = new JPanel();
            controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
            controlPanel.setBorder(
                new CompoundBorder(BorderFactory.createEmptyBorder(9, 9, 9, 9), new TitledBorder("View Controls")));
            controlPanel.setToolTipText("Select active view controls");

            // Radio buttons - layout
            JPanel layoutPanel = new JPanel(new GridLayout(0, 2, 0, 0));
            layoutPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
            ButtonGroup group = new ButtonGroup();
            JRadioButton button = new JRadioButton("Horizontal", true);
            group.add(button);
            button.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setLayout(AVKey.LAYOUT_HORIZONTAL);
                    getWwd().redraw();
                }
            });
            layoutPanel.add(button);
            button = new JRadioButton("Vertical", false);
            group.add(button);
            button.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setLayout(AVKey.LAYOUT_VERTICAL);
                    getWwd().redraw();
                }
            });
            layoutPanel.add(button);

            // Scale slider
            JPanel scalePanel = new JPanel(new GridLayout(0, 1, 0, 0));
            scalePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
            scalePanel.add(new JLabel("Scale:"));
            JSlider scaleSlider = new JSlider(1, 20, 10);
            scaleSlider.addChangeListener(new ChangeListener() {
                public void stateChanged(ChangeEvent event)
                {
                    viewControlsLayer.setScale(((JSlider) event.getSource()).getValue() / 10d);
                    getWwd().redraw();
                }
            });
            scalePanel.add(scaleSlider);

            // Check boxes
            JPanel checkPanel = new JPanel(new GridLayout(0, 2, 0, 0));
            checkPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

            JCheckBox check = new JCheckBox("Pan");
            check.setSelected(true);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowPanControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            check = new JCheckBox("Look");
            check.setSelected(false);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowLookControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            check = new JCheckBox("Zoom");
            check.setSelected(true);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowZoomControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            check = new JCheckBox("Heading");
            check.setSelected(true);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowHeadingControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            check = new JCheckBox("Pitch");
            check.setSelected(true);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowPitchControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            check = new JCheckBox("Field of view");
            check.setSelected(false);
            check.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent actionEvent)
                {
                    viewControlsLayer.setShowFovControls(((JCheckBox)actionEvent.getSource()).isSelected());
                    getWwd().redraw();
                }
            });
            checkPanel.add(check);

            controlPanel.add(layoutPanel);
            controlPanel.add(scalePanel);
            controlPanel.add(checkPanel);
            return controlPanel;
        }


    }

    public static void main(String[] args)
    {
        ApplicationTemplate.start("World Wind View Controls", AppFrame.class);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -