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

📄 measuretoolusage.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.geom.LatLon;
import gov.nasa.worldwind.layers.TerrainProfileLayer;
import gov.nasa.worldwind.util.measure.MeasureTool;
import gov.nasa.worldwind.util.measure.MeasureToolController;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;

/**
 * Example usage of MeasureTool, MeasureToolController and MeasureToolPanel.
 *
 * @author Patrick Murris
 * @version $Id: MeasureToolUsage.java 8284 2008-12-27 19:26:51Z patrickmurris $
 * @see gov.nasa.worldwind.util.measure.MeasureTool
 * @see gov.nasa.worldwind.util.measure.MeasureToolController
 * @see MeasureToolPanel
 */
public class MeasureToolUsage extends ApplicationTemplate
{
    public static class AppFrame extends ApplicationTemplate.AppFrame
    {
        private int lastTabIndex = -1;
        private final JTabbedPane tabbedPane = new JTabbedPane();
        private TerrainProfileLayer profile = new TerrainProfileLayer();
        private PropertyChangeListener measureToolListener = new MeasureToolListener();

        public AppFrame()
        {
            super(true, false, false); // no layer panel

            // Add terrain profile layer
            profile.setEventSource(getWwd());
            profile.setFollow(TerrainProfileLayer.FOLLOW_PATH);
            profile.setShowProfileLine(false);
            insertBeforePlacenames(getWwd(), profile);

            // Add + tab
            tabbedPane.add(new JPanel());
            tabbedPane.setTitleAt(0, "+");
            tabbedPane.addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent changeEvent)
                {
                    if (tabbedPane.getSelectedIndex() == 0)
                    {
                        // Add new measure tool in a tab when '+' selected
                        MeasureTool measureTool = new MeasureTool(getWwd());
                        measureTool.setController(new MeasureToolController());
                        tabbedPane.add(new MeasureToolPanel(getWwd(), measureTool));
                        tabbedPane.setTitleAt(tabbedPane.getTabCount() - 1, "" + (tabbedPane.getTabCount() - 1));
                        tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
                        switchMeasureTool();
                    }
                    else
                    {
                        switchMeasureTool();
                    }
                }
            });

            // Add measure tool control panel to tabbed pane
            MeasureTool measureTool = new MeasureTool(this.getWwd());
            measureTool.setController(new MeasureToolController());
            tabbedPane.add(new MeasureToolPanel(this.getWwd(), measureTool));
            tabbedPane.setTitleAt(1, "1");
            tabbedPane.setSelectedIndex(1);
            switchMeasureTool();

            this.getContentPane().add(tabbedPane, BorderLayout.WEST);
            this.pack();
        }

        private class MeasureToolListener implements PropertyChangeListener
        {
            public void propertyChange(PropertyChangeEvent event)
            {
                // Measure shape position list changed - update terrain profile
                if (event.getPropertyName().equals(MeasureTool.EVENT_POSITION_ADD)
                        || event.getPropertyName().equals(MeasureTool.EVENT_POSITION_REMOVE)
                        || event.getPropertyName().equals(MeasureTool.EVENT_POSITION_REPLACE))
                {
                    updateProfile(((MeasureTool)event.getSource()));
                }
            }
        }

        private void switchMeasureTool()
        {
            // Disarm last measure tool when changing tab and switching tool
            if (lastTabIndex != -1)
            {
                MeasureTool mt = ((MeasureToolPanel)tabbedPane.getComponentAt(lastTabIndex)).getMeasureTool();
                mt.setArmed(false);
                mt.removePropertyChangeListener(measureToolListener);
            }
            // Update terrain profile from current measure tool
            lastTabIndex = tabbedPane.getSelectedIndex();
            MeasureTool mt = ((MeasureToolPanel)tabbedPane.getComponentAt(lastTabIndex)).getMeasureTool();
            mt.addPropertyChangeListener(measureToolListener);
            updateProfile(mt);
        }

        private void updateProfile(MeasureTool mt)
        {
            ArrayList<? extends LatLon> positions = mt.getPositions();
            if (positions != null && positions.size() > 1)
            {
                profile.setPathPositions(positions);
                profile.setEnabled(true);
            }
            else
                profile.setEnabled(false);
            
            getWwd().redraw();
        }
    }

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

}

⌨️ 快捷键说明

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