Revision 684 org.gvsig.animation3d/trunk/org.gvsig.animation3d/org.gvsig.animation3d.swing/org.gvsig.animation3d.swing.impl/src/main/java/org/gvsig/animation3d/swing/impl/DefaultAnimation3DSwingManager.java

View differences:

DefaultAnimation3DSwingManager.java
1 1
package org.gvsig.animation3d.swing.impl;
2 2

  
3
import gov.nasa.worldwind.View;
4
import gov.nasa.worldwind.WorldWind;
5
import gov.nasa.worldwind.animation.AnimationSupport;
6
import gov.nasa.worldwind.avlist.AVKey;
7
import gov.nasa.worldwind.awt.WorldWindowGLJPanel;
8
import gov.nasa.worldwind.geom.Angle;
9
import gov.nasa.worldwind.geom.LatLon;
10
import gov.nasa.worldwind.geom.Position;
11
import gov.nasa.worldwind.view.orbit.FlyToOrbitViewAnimator;
12
import gov.nasa.worldwind.view.orbit.OrbitView;
13

  
3 14
import java.util.ArrayList;
4 15
import java.util.Collection;
5 16
import java.util.List;
......
8 19
import org.gvsig.animation3d.swing.api.Animation3D;
9 20
import org.gvsig.animation3d.swing.api.Animation3DPanel;
10 21
import org.gvsig.animation3d.swing.api.Animation3DSwingManager;
22
import org.gvsig.animation3d.swing.api.Animator;
11 23
import org.gvsig.animation3d.swing.api.Frame3D;
12 24
import org.gvsig.animation3d.swing.api.Frame3DCreationException;
13 25
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
......
17 29
import org.gvsig.fmap.mapcontext.layers.ExtendedPropertiesSupport;
18 30
import org.gvsig.tools.persistence.impl.DelegatedList;
19 31
import org.gvsig.view3d.swing.api.MapControl3D;
20
import org.gvsig.view3d.swing.api.ViewPort3D;
21 32

  
22 33
/**
23 34
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
......
51 62
    }
52 63

  
53 64
    @Override
54
    public Frame3D getFrame3D(String name, MapControl3D mapControl3D)
65
    public Frame3D createFrame3D(String name, MapControl3D mapControl3D)
55 66
        throws Frame3DCreationException {
56
        
57
        ViewPort3D viewport = mapControl3D.getViewPort();
58
        double heading = viewport.getHeading();
59
        double pitch = viewport.getPitch();
60
        double elevation = viewport.getElevation();
61
        double zoom = viewport.getZoom();
62 67

  
68
        OrbitView orbitView = getOrbitView(mapControl3D);
69
        double heading = orbitView.getHeading().getDegrees();
70
        double pitch = orbitView.getPitch().getDegrees();
71
        double elevation = orbitView.getCenterPosition().getElevation();
72
        double zoom = orbitView.getZoom();
73

  
63 74
        Point position = null;
64
        double x = viewport.getCenterPosition().getX();
65
        double y = viewport.getCenterPosition().getY();
75
        double x = orbitView.getCenterPosition().getLongitude().getDegrees();
76
        double y = orbitView.getCenterPosition().getLatitude().getDegrees();
66 77
        try {
67 78
            position = GeometryLocator.getGeometryManager().createPoint(x, y, SUBTYPES.GEOM2D);
68 79
        } catch (CreateGeometryException e) {
......
75 86
        return createFrame3D(name, heading, pitch, elevation, position, zoom);
76 87
    }
77 88

  
78
    @Override
79 89
    public Frame3D createFrame3D(String name, double heading, double pitch, double elevation,
80 90
        Point position, double zoom) {
81 91
        return new DefaultFrame3D(name, heading, pitch, elevation, position, zoom);
......
88 98
    }
89 99

  
90 100
    @Override
91
    public Animation3DPanel createAnimationManager(Map<String, ExtendedPropertiesSupport> properties) {
101
    public Animation3DPanel createAnimationPanel(Map<String, ExtendedPropertiesSupport> properties) {
92 102
        return new DefaultAnimation3DPanelController(properties);
93 103
    }
94 104

  
95
    // @Override
96
    // public void goTo(Frame3D frame) {
97
    //
98
    // Globe globe = this.getWwd().getView().getGlobe();
99
    // OrbitView view = (OrbitView) this.getWwd().getView();
100
    // view.stopAnimations();
101
    //
102
    // double longitude = frame.getPosition().getX();
103
    // double latitude = frame.getPosition().getY();
104
    // Position lookFromPos =
105
    // new Position(LatLon.fromDegrees(latitude, longitude), globe.getElevation(
106
    // Angle.fromDegreesLatitude(latitude),
107
    // Angle.fromDegreesLongitude(longitude))
108
    // + frame.getElevation());
109
    //
110
    // final long MIN_LENGTH_MILLIS = 4000;
111
    // final long MAX_LENGTH_MILLIS = 14000;
112
    // long timeToMove =
113
    // AnimationSupport.getScaledTimeMillisecs(view.getEyePosition(),
114
    // lookFromPos,
115
    // MIN_LENGTH_MILLIS, MAX_LENGTH_MILLIS);
116
    //
117
    // Animator animator =
118
    // FlyToOrbitViewAnimator.createFlyToOrbitViewAnimator(view,
119
    // view.getCenterPosition(),
120
    // lookFromPos, view.getHeading(), Angle.fromDegrees(frame.getHeading()),
121
    // view.getPitch(), Angle.fromDegrees(frame.getPitch()), view.getZoom(),
122
    // frame.getZoom(), timeToMove, WorldWind.ABSOLUTE);
123
    // view.addAnimator(animator);
124
    // view.firePropertyChange(AVKey.VIEW, null, this.getWwd().getView());
125
    // }
126
    //
127
    // @Override
128
    // public void goTo(List<Frame3D> frames) {
129
    // View view = this.getWwd().getView();
130
    // view.stopAnimations();
131
    //
132
    // Animator animator = null;
133
    // if (view instanceof OrbitView) {
134
    // animator = new MultipleFlyToOrbitViewAnimator((OrbitView) view, frames);
135
    // }
136
    //
137
    // view.addAnimator(animator);
138
    // view.firePropertyChange(AVKey.VIEW, null, this.getWwd().getView());
139
    // }
105
    @Override
106
    public Animator createGoToAnimator(MapControl3D mapControl3D, Frame3D frame,
107
        final long minMillis, final long maxMillis) {
108

  
109
        OrbitView orbitView = getOrbitView(mapControl3D);
110
        double longitude = frame.getPosition().getX();
111
        double latitude = frame.getPosition().getY();
112
        Position endPos =
113
            new Position(LatLon.fromDegrees(latitude, longitude), frame.getElevation());
114

  
115
        Position beginPos =
116
            Position.fromDegrees(orbitView.getCenterPosition().getLatitude().getDegrees(),
117
                orbitView.getCenterPosition().getLongitude().getDegrees(), orbitView
118
                    .getCenterPosition().getElevation());
119
        long timeToMove =
120
            AnimationSupport.getScaledTimeMillisecs(beginPos, endPos, minMillis, maxMillis);
121

  
122
        gov.nasa.worldwind.animation.Animator animator =
123
            FlyToOrbitViewAnimator.createFlyToOrbitViewAnimator(orbitView, beginPos, endPos,
124
                orbitView.getHeading(), Angle.fromDegrees(frame.getHeading()),
125
                orbitView.getPitch(), Angle.fromDegrees(frame.getPitch()), orbitView.getZoom(),
126
                frame.getZoom(), timeToMove, WorldWind.ABSOLUTE);
127
        return new DefaultAnimatorWrapper(animator);
128
    }
129

  
130
    @Override
131
    public Animator createGoToAnimator(MapControl3D mapControl3D, List<Frame3D> frames,
132
        long minMillis, long maxMillis) {
133
        OrbitView orbitView = getOrbitView(mapControl3D);
134
        gov.nasa.worldwind.animation.Animator animator =
135
            new MultipleFlyToOrbitViewAnimator(orbitView, frames, minMillis, maxMillis);
136
        return new DefaultAnimatorWrapper(animator);
137
    }
138

  
139
    @Override
140
    public void addAnimator(MapControl3D mapControl3D, Animator animator) {
141
        OrbitView orbitView = getOrbitView(mapControl3D);
142
        orbitView.addAnimator(new DefaultWWAnimationWrapper(animator));
143
        orbitView.firePropertyChange(AVKey.VIEW, null, orbitView);
144
    }
145

  
146
    @Override
147
    public boolean isAnimating(MapControl3D mapControl3D) {
148
        OrbitView orbitView = getOrbitView(mapControl3D);
149
        return orbitView.isAnimating();
150
    }
151
    
152
    @Override
153
    public void stopAnimations(MapControl3D mapControl3D) {
154
        OrbitView orbitView = getOrbitView(mapControl3D);
155
        orbitView.stopAnimations();
156
    }
157

  
158
    private OrbitView getOrbitView(MapControl3D mapControl3D) {
159
        Object underLineComponent = mapControl3D.getUnderLineComponent();
160
        if (underLineComponent instanceof WorldWindowGLJPanel) {
161
            WorldWindowGLJPanel wwd = (WorldWindowGLJPanel) underLineComponent;
162
            View view = wwd.getView();
163
            if (view instanceof OrbitView) {
164
                return (OrbitView) view;
165
            }
166
        }
167
        throw new IllegalArgumentException(
168
            "Can not get WorldWind view from under line MapControl3D component");
169
    }
140 170
}

Also available in: Unified diff