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

📄 viewiteration.java

📁 world wind java sdk 源码
💻 JAVA
字号:
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.examples;import gov.nasa.worldwind.ViewStateIterator;import gov.nasa.worldwind.geom.Angle;import gov.nasa.worldwind.geom.LatLon;import gov.nasa.worldwind.geom.Position;import gov.nasa.worldwind.view.EyePositionIterator;import gov.nasa.worldwind.view.OrbitView;import gov.nasa.worldwind.view.ScheduledOrbitViewStateIterator;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.util.ArrayList;/** * @author tag * @version $Id: ViewIteration.java 5897 2008-08-09 05:20:21Z tgaskins $ */public class ViewIteration extends ApplicationTemplate{    public static class AppFrame extends JFrame    {        static ArrayList<Position> path;        static        {            path = new ArrayList<Position>();            path.add(Position.fromDegrees(0, 0, 1e5));            path.add(Position.fromDegrees(0, 10, 1e5));            path.add(Position.fromDegrees(0, 20, 1e5));            path.add(Position.fromDegrees(0, 30, 1e5));            path.add(Position.fromDegrees(0, 40, 1e5));            path.add(Position.fromDegrees(0, 50, 1e5));            path.add(Position.fromDegrees(0, 60, 1e5));            path.add(Position.fromDegrees(0, 70, 1e5));        }        private int pathPosition = 0;        private PathAction[] pathActions =            new PathAction[]{                new GoToLatLonFromCurrent("Zero", LatLon.ZERO),                new FollowPath("Follow"),                new Heading("Heading"),                new Forward("Forward"),                new Backwards("Backwards"),            };        private Dimension canvasSize = new Dimension(800, 600);        private ApplicationTemplate.AppPanel wwjPanel;        public AppFrame()        {            // Create the WorldWindow.            this.wwjPanel = new ApplicationTemplate.AppPanel(this.canvasSize, true);            this.wwjPanel.setPreferredSize(canvasSize);            JPanel controlPanel = makeControlPanel();            controlPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));            this.getContentPane().add(wwjPanel, BorderLayout.CENTER);            this.getContentPane().add(controlPanel, BorderLayout.WEST);            this.pack();            // Center the application on the screen.            Dimension prefSize = this.getPreferredSize();            Dimension parentSize;            java.awt.Point parentLocation = new java.awt.Point(0, 0);            parentSize = Toolkit.getDefaultToolkit().getScreenSize();            int x = parentLocation.x + (parentSize.width - prefSize.width) / 2;            int y = parentLocation.y + (parentSize.height - prefSize.height) / 2;            this.setLocation(x, y);            this.setResizable(true);        }        private JPanel makeControlPanel()        {            JPanel innerPanel = new JPanel(new GridLayout(8, 1));            innerPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Go To"),                BorderFactory.createEmptyBorder(5, 5, 5, 5)));            for (PathAction pa : pathActions)            {                JButton btn = new JButton(pa);                innerPanel.add(btn);            }            JPanel cp = new JPanel(new BorderLayout());            cp.add(innerPanel, BorderLayout.CENTER);            return cp;        }        private abstract class PathAction extends AbstractAction        {            PathAction(String name)            {                super(name);            }        }        //        // Specific Actions        //        private class Forward extends PathAction        {            public Forward(String name)            {                super(name);            }            public void actionPerformed(ActionEvent actionEvent)            {                if (pathPosition < path.size() - 1)                {                    OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                    view.setHeading(Angle.fromDegrees(90));                    ViewStateIterator vsi = new EyePositionIterator(                            4000, view.getEyePosition(), path.get(++pathPosition));                    wwjPanel.getWwd().getView().applyStateIterator(vsi);                }            }        }        private class Backwards extends PathAction        {            public Backwards(String name)            {                super(name);            }            public void actionPerformed(ActionEvent actionEvent)            {                if (pathPosition > 0)                {                    OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                    ViewStateIterator vsi = new EyePositionIterator(                            4000, view.getEyePosition(), path.get(--pathPosition));                    wwjPanel.getWwd().getView().applyStateIterator(vsi);                }            }        }        private class Heading extends PathAction        {            public Heading(String name)            {                super(name);            }            public void actionPerformed(ActionEvent actionEvent)            {                Angle heading;                if (pathPosition == 0)                    heading = computeHeading(path.get(0), path.get(1));                else                    heading = computeHeading(path.get(pathPosition - 1), path.get(pathPosition));                OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                ScheduledOrbitViewStateIterator vsi =                    ScheduledOrbitViewStateIterator.createHeadingIterator(view.getHeading(), heading);                wwjPanel.getWwd().getView().applyStateIterator(vsi);            }        }        private Angle computeHeading(Position pa, Position pb)        {            return LatLon.greatCircleAzimuth(pa, pb);        }        private class GoToLatLonFromCurrent extends PathAction        {            private final LatLon latlon;            GoToLatLonFromCurrent(String name, LatLon latlon)            {                super(name);                this.latlon = latlon;            }            public void actionPerformed(ActionEvent actionEvent)            {                OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                ViewStateIterator vsi = new EyePositionIterator(                    4000, view.getEyePosition(), new Position(this.latlon, view.getEyePosition().getElevation()));                wwjPanel.getWwd().getView().applyStateIterator(vsi);            }        }        private class FollowPath extends PathAction        {            ArrayList<Position> path = new ArrayList<Position>();            FollowPath(String name)            {                super(name);                path.add(Position.fromDegrees(0, 0, 1e5));                path.add(Position.fromDegrees(1, 3, 1e5));                path.add(Position.fromDegrees(2, 4, 1e5));                path.add(Position.fromDegrees(3, 5, 1e5));            }            private class PosToPos implements Runnable            {                Position pos;                PosToPos(Position pos)                {                    this.pos = pos;                }                public void run()                {                    final OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                    ViewStateIterator vsi = new EyePositionIterator(4000, view.getEyePosition(), pos);                    wwjPanel.getWwd().getView().applyStateIterator(vsi);                }            }            public void actionPerformed(ActionEvent actionEvent)            {                for (Position p : path)                {                    final OrbitView view = (OrbitView) wwjPanel.getWwd().getView();                    ViewStateIterator vsi = new EyePositionIterator(                            4000, view.getEyePosition(), new Position(p, view.getEyePosition().getElevation()));                    wwjPanel.getWwd().getView().applyStateIterator(vsi);//                    EventQueue.invokeLater(new PosToPos(p));                }            }        }    }    public static void main(String[] args)    {        try        {            AppFrame frame = new AppFrame();            frame.setTitle("World Wind View Paths");            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            frame.setVisible(true);        }        catch (Exception e)        {            e.printStackTrace();        }    }}

⌨️ 快捷键说明

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