Ignore:
Timestamp:
2010-05-16T10:53:53+02:00 (15 years ago)
Author:
guardian
Message:
 
Location:
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/PositionLayer.java

    r21257 r21295  
    11package org.openstreetmap.josm.plugins.videomapping;
     2
     3
     4import java.util.Iterator;
     5import java.util.Timer;
     6import java.util.TimerTask;
    27
    38import java.awt.Color;
    49import java.awt.Component;
     10import java.awt.Dimension;
    511import java.awt.Graphics2D;
    612import java.awt.Point;
     13import java.awt.Rectangle;
    714import java.awt.event.MouseEvent;
    815import java.awt.event.MouseListener;
     
    1522import org.openstreetmap.josm.data.Bounds;
    1623import org.openstreetmap.josm.data.gpx.GpxData;
     24import org.openstreetmap.josm.data.osm.DataSet;
     25import org.openstreetmap.josm.data.osm.Node;
    1726import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    1827import org.openstreetmap.josm.gui.MapView;
     
    2332
    2433public class PositionLayer extends Layer implements MouseListener {
    25         private GpxData gps;
    26         public PositionLayer(String name,GpxData gps) {
     34        private DataSet ds;
     35        private Node sel;
     36        private Iterator<Node> it;
     37               
     38        public PositionLayer(String name, final DataSet ds) {
    2739                super(name);           
    28                 this.gps = gps;
    29                 Main.map.mapView.addMouseListener(this);
     40                this.ds = ds;
     41                Main.map.mapView.addMouseListener(this);               
     42                Timer t  = new Timer();
     43                it=ds.getNodes().iterator();
     44               
     45                t.schedule(new TimerTask() {
     46                       
     47                        @Override
     48                        public void run() {
     49                                // TODO Auto-generated method stub
     50                                sel=it.next();
     51                                System.out.println(sel.getTimestamp());
     52                                Main.map.mapView.repaint();
     53                        }
     54                },1000,1000);
     55               
    3056        }
    3157
     
    6086        }
    6187
     88        // no merging nescesarry
    6289        @Override
    6390        public boolean isMergable(Layer arg0) {
     
    6794        @Override
    6895        public void mergeFrom(Layer arg0) {
    69                 // no merging nescesarry
     96               
    7097        }
    7198
     99       
     100       
    72101        @Override
     102        //Draw the current position
    73103        public void paint(Graphics2D g, MapView map, Bounds bound) {
    74                 //TODO this is just an blue screen test
    75                 g.setColor(Color.BLUE);
    76                 g.fillRect(0, 0, map.getWidth(),map.getHeight());
     104                Point p;
     105                for(Node n: ds.getNodes()) {
     106                        p = Main.map.mapView.getPoint(n.getEastNorth());
     107                        if(n.isHighlighted())
     108                        {
     109                                g.setColor(Color.red);
     110                                g.drawString(n.getTimestamp().toString(), p.x+10, p.y);
     111                        }
     112                        else
     113                        {
     114                                g.setColor(Color.green);
     115                        }
     116                        g.drawOval(p.x - 2, p.y - 2, 4, 4); // small circles
     117                }
     118                if (sel!=null){
     119                        p=Main.map.mapView.getPoint(sel.getEastNorth());;
     120                        g.setColor(Color.CYAN);
     121                        g.drawRect(p.x, p.y, 100, 100);
     122                };
    77123        }
    78124
     
    84130
    85131        //jump to the right position in video
    86         public void mouseClicked(MouseEvent e) {
     132        public void mouseClicked(MouseEvent e) {               
     133                //only on leftclicks of our layer
    87134                if(e.getButton() == MouseEvent.BUTTON1) {
    88                         if(Main.map.mapView.getActiveLayer() == this) {
    89                                 //only on leftclicks of our layer
    90                                 getNearestPoint(e.getPoint());
    91                         }
     135                        JOptionPane.showMessageDialog(Main.parent,"test");
     136                        getNearestNode(e.getPoint());
     137                        Main.map.mapView.repaint();
    92138                }
    93139               
    94140        }
    95141
    96         //finds the corresponding timecode in GPXtrack
    97         private Point getNearestPoint(Point point) {
    98 
    99                 return point;
    100                
     142        //finds the corresponding timecode in GPXtrack by given screen coordinates
     143        private void getNearestNode(Point mouse) {
     144                Point p;
     145                Rectangle rect = new Rectangle(mouse, new Dimension(30, 30));           
     146                //iterate through all possible notes
     147                for(Node node : ds.getNodes())
     148                {
     149                        p = Main.map.mapView.getPoint(node);
     150                        if (rect.contains(p))
     151                        {                               
     152                                node.setHighlighted(true);
     153                        }
     154                       
     155                }       
    101156        }
    102157
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoAction.java

    r21226 r21295  
    33import java.awt.event.ActionEvent;
    44import java.io.File;
     5import java.util.List;
     6
    57
    68import javax.swing.JFileChooser;
     
    911import org.openstreetmap.josm.Main;
    1012import org.openstreetmap.josm.actions.JosmAction;
    11 import org.openstreetmap.josm.data.gpx.GpxData;
     13import org.openstreetmap.josm.data.gpx.*;
     14import org.openstreetmap.josm.data.osm.DataSet;
     15import org.openstreetmap.josm.data.osm.Node;
     16import org.openstreetmap.josm.data.osm.Way;
     17import org.openstreetmap.josm.gui.layer.GpxLayer;
     18import org.openstreetmap.josm.tools.DateUtils;
    1219import org.openstreetmap.josm.tools.Shortcut;
    1320import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
     
    1724
    1825        private GpxData gps;
     26        private DataSet ds; //all extracted GPS points
     27        private List<WayPoint> ls;
    1928
    2029        public VideoAction() {
     
    2534        public void actionPerformed(ActionEvent arg0) {
    2635       
    27 //              JFileChooser fc = new JFileChooser();
    28 //              fc.setAcceptAllFileFilterUsed( false );
    29 //              fc.setFileFilter( new VideoFileFilter() );
    30 //              if (fc.showOpenDialog( Main.parent )==JFileChooser.APPROVE_OPTION)
    31 //              {
    32 //                      VideoWindow w = new VideoWindow(fc.getSelectedFile());
    33 //              }
    34                 Main.main.addLayer(new PositionLayer("test",gps));
     36                copyGPSLayer();
     37                Main.main.addLayer(new PositionLayer("test",ds));
    3538        }
    36        
    37         //restrict the file chooser
    38         private class VideoFileFilter extends FileFilter {
    39 
    40                 @Override
    41                 public boolean accept(File f) {
    42                    
    43                     String ext3 = ( f.getName().length() > 4 ) ?  f.getName().substring( f.getName().length() - 4 ).toLowerCase() : "";
    44                     String ext4 = ( f.getName().length() > 5 ) ?  f.getName().substring( f.getName().length() - 5 ).toLowerCase() : "";
    45 
    46                     // TODO: check what is supported by JMF or if there is a build in filter
    47                     return ( f.isDirectory()
    48                         ||      ext3.equals( ".avi" )
    49                         ||      ext4.equals( ".wmv" )
    50                         ||      ext3.equals( ".mpg" )
    51                         );
    52                 }
    53 
    54 
    55                 @Override
    56                 public String getDescription() {
    57                         return tr("Video files");
    58                 }
    5939               
    60         }
    6140       
    6241        public void setGps(GpxData gps) {
    6342                this.gps = gps;
    6443        }
     44       
     45        //makes a private flat copy for interaction
     46        private void copyGPSLayer()
     47        {
     48                //TODO we assume that GPS points are in the correct order!
     49                ds = new DataSet();
     50            for (GpxTrack trk : gps.tracks) {
     51                for (GpxTrackSegment segment : trk.getSegments()) {
     52                    Way w = new Way();
     53                    for (WayPoint p : segment.getWayPoints()) {
     54                        Node n = new Node(p.getCoor());
     55                        String timestr = p.getString("time");
     56                        if(timestr != null)
     57                            n.setTimestamp(DateUtils.fromString(timestr));
     58                        ds.addPrimitive(n);
     59                        w.addNode(n);
     60                        //ls.add
     61                    }
     62                    ds.addPrimitive(w);
     63                }
     64            }
     65        }
    6566
    6667}
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoMappingPlugin.java

    r21226 r21295  
    3030                super(info);
    3131                //Register for GPS menu
    32                 VMenu = Main.main.menu.addMenu(tr("Video"), KeyEvent.VK_V, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping"));
     32                VMenu = Main.main.menu.addMenu(tr(" Video"), KeyEvent.VK_V, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping"));//TODO no more ugly " video" hack
    3333                VMenu.setEnabled(false); //enabled only on GPS Layers
    3434                VAction = new VideoAction();
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoWindow.java

    r21226 r21295  
    22
    33import java.awt.BorderLayout;
     4import java.awt.Canvas;
    45import java.awt.Component;
    56import java.awt.GraphicsConfiguration;
     
    78import java.io.File;
    89import java.io.IOException;
    9 import javax.media.CannotRealizeException;
    10 import javax.media.Manager;
    11 import javax.media.NoPlayerException;
    12 import javax.media.Player;
    1310
    1411import javax.swing.JFrame;
     
    1613import org.openstreetmap.josm.Main;
    1714
     15import uk.co.caprica.vlcj.player.*;
     16
    1817public class VideoWindow extends JFrame {
    1918
    20         /**
    21          *
    22          */
    2319        private static final long serialVersionUID = 2099614201397118560L;
    2420
    2521        public VideoWindow(File vfile) throws HeadlessException {
    2622                super();
     23                MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(null);
     24                FullScreenStrategy fullScreenStrategy = new DefaultFullScreenStrategy(this);
     25                MediaPlayer mediaPlayer = mediaPlayerFactory.newMediaPlayer(fullScreenStrategy);
     26                mediaPlayer.setStandardMediaOptions(null);
     27                //mediaPlayer.addMediaPlayerEventListener
     28                Canvas videoSurface = new Canvas();             
     29                mediaPlayer.setVideoSurface(videoSurface);
     30                add(videoSurface);
    2731                try {
    28                         setTitle(vfile.getCanonicalPath());
    29                         setSize(200,200);                       
    30                         setAlwaysOnTop(true);
    31                        
    32                         try {
    33                                 setLayout( new BorderLayout());
    34                                 Player mediaPlayer = Manager.createRealizedPlayer( vfile.toURL() );
    35                                  Component video = mediaPlayer.getVisualComponent();
    36                                  Component controls = mediaPlayer.getControlPanelComponent();
    37                                 add( video, BorderLayout.CENTER );
    38                                 add( controls, BorderLayout.SOUTH );
    39                         } catch (NoPlayerException e) {
    40                                 // TODO Auto-generated catch block
    41                                 e.printStackTrace();
    42                         } catch (CannotRealizeException e) {
    43                                 // TODO Auto-generated catch block
    44                                 e.printStackTrace();
    45                         }
     32                        mediaPlayer.playMedia(vfile.getCanonicalPath(),null);
    4633                } catch (IOException e) {
    4734                        // TODO Auto-generated catch block
     
    4936                }
    5037                setVisible(true);               
    51                
     38                mediaPlayer.release();
     39                mediaPlayerFactory.release();
    5240        }
    5341
Note: See TracChangeset for help on using the changeset viewer.