Statistics
| Revision:

svn-gvsig-desktop / import / ext3D / branches / ext3D_v1.1 / libAnimation / src / com / iver / cit / gvsig / animation / test / Interpolator2D.java @ 15414

History | View | Annotate | Download (2.13 KB)

1
package com.iver.cit.gvsig.animation.test;
2

    
3
import java.awt.geom.Rectangle2D;
4
import java.util.List;
5

    
6
import com.iver.cit.gvsig.animation.keyframe.IInterpolator;
7
import com.iver.cit.gvsig.animation.keyframe.IKeyFrame;
8
import com.iver.cit.gvsig.fmap.ViewPort;
9
import com.iver.cit.gvsig.project.documents.view.gui.View;
10

    
11
public class Interpolator2D implements IInterpolator {
12

    
13
        public View view;
14

    
15
        public IKeyFrame interpolate(List kfList, int index, double time) {
16
                KeyFrame2D KF = new KeyFrame2D();
17

    
18
                if (kfList == null)
19
                        return null;
20

    
21
                if (this.view == null)
22
                        return null;
23

    
24
                switch (kfList.size()) {
25
                // this case when there are only has 2 keyframes
26
                case 2:
27
                        // getting the keyframes
28
                        KeyFrame2D kf1 = (KeyFrame2D) kfList.get(0);
29
                        KeyFrame2D kf2 = (KeyFrame2D) kfList.get(1);
30

    
31
                        if (index == 1) {
32
                                KeyFrame2D kaux = kf1;
33
                                kf1 = kf2;
34
                                kf2 = kaux;
35
                        }
36

    
37
                        ViewPort vp1 = (ViewPort) kf1.getAnimatedObject();
38
                        ViewPort vp2 = (ViewPort) kf2.getAnimatedObject();
39

    
40
                        ViewPort vp = view.getMapControl().getViewPort();
41

    
42
                        double left = linearInterpolate(vp1.getExtent().getMinX(), vp2
43
                                        .getExtent().getMinX(), kf1.getTime(), kf2.getTime(), time);
44
                        double top = linearInterpolate(vp1.getExtent().getMinX(), vp2
45
                                        .getExtent().getMinX(), kf1.getTime(), kf2.getTime(), time);
46
                        double right = linearInterpolate(vp1.getExtent().getMinX(), vp2
47
                                        .getExtent().getMinX(), kf1.getTime(), kf2.getTime(), time);
48
                        double bottom = linearInterpolate(vp1.getExtent().getMinX(), vp2
49
                                        .getExtent().getMinX(), kf1.getTime(), kf2.getTime(), time);
50

    
51
                        Rectangle2D newExtent = new Rectangle2D.Double(left, top, right
52
                                        - left, bottom - top);
53

    
54
                        vp.setExtent(newExtent);
55
                        break;
56

    
57
                }
58

    
59
                return KF;
60
        }
61

    
62
        private double linearInterpolate(double minX, double minX2, double timePos,
63
                        double timePos2, double time) {
64
                // P1 + (P2-P1)*((t-t1)/(t2-t1))
65
                return (minX + (minX2 - minX)
66
                                * ((time - timePos) / (timePos2 - timePos)));
67
        }
68

    
69
        public Object getAnimatedObject() {
70

    
71
                return this.view;
72
        }
73

    
74
        public void setAnimatedObject(Object ani) {
75
                this.view = (View) ani;
76

    
77
        }
78
}