Changeset 25796 in osm for applications/editors/josm


Ignore:
Timestamp:
2011-04-05T19:10:54+02:00 (14 years ago)
Author:
guardian
Message:

ipo added

Location:
applications/editors/josm/plugins/videomapping
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/videomapping/.classpath

    r25742 r25796  
    77        <classpathentry kind="lib" path="lib/jna.jar"/>
    88        <classpathentry kind="lib" path="lib/log4j.jar"/>
    9         <classpathentry kind="lib" path="lib/vlcj-1.1.5.1.jar" sourcepath="C:/Dokumente und Einstellungen/Matthias/Desktop/vlcj/vlcj-1.1.5.1-javadoc.jar"/>
     9        <classpathentry kind="lib" path="lib/vlcj-1.1.5.1.jar" sourcepath="C:/Dokumente und Einstellungen/Matthias/Desktop/vlcj/vlcj-1.1.5.1-javadoc.jar">
     10                <attributes>
     11                        <attribute name="javadoc_location" value="jar:file:/D:/Projekte/Studium/BA Arbeit/working/plugins/videomapping/lib/vlcj-1.1.5.1-javadoc.jar!/"/>
     12                </attributes>
     13        </classpathentry>
    1014        <classpathentry combineaccessrules="false" kind="src" path="/core"/>
    1115        <classpathentry kind="lib" path="lib/platform.jar"/>
  • applications/editors/josm/plugins/videomapping/build.xml

    r25291 r25796  
    109109                        <manifest>
    110110                                <attribute name="Author" value="Matthias Meißer"/>
    111                                 <attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.videomapping.VideoMappingPlugin"/>
     111                                <attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.videomapping.VideoPlugin"/>
    112112                                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
    113113                                <attribute name="Plugin-Description" value="(This Plugin is currently work in progress!!!) Links and syncs a georeferenced video against a GPS track, to use it for identify visible objects."/>
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java

    r25765 r25796  
    3737import uk.co.caprica.vlcj.runtime.windows.WindowsRuntimeUtil;
    3838
     39import com.sun.jna.LastErrorException;
    3940import com.sun.jna.NativeLibrary;
    4041
     
    5051//Here we manage properties and start the other classes
    5152public class VideoPlugin extends Plugin implements LayerChangeListener{
     53        private JMenu VMenu,VDeinterlacer;
     54        private JosmAction VAdd,VRemove,VStart,Vbackward,Vforward,VJump,Vfaster,Vslower,Vloop;
     55        private JRadioButtonMenuItem VIntBob,VIntNone,VIntLinear;
     56    private JCheckBoxMenuItem VCenterIcon,VSubTitles;
     57    private JMenuItem VJumpLength,VLoopLength;
     58    private final String PROP_MRU="videomapping.mru";
     59    private final String PROP_AUTOCENTER="videomapping.autocenter";
     60    private final String PROP_JUMPLENGTH="videomapping.jumplength";
     61    private final String PROP_LOOPLENGTH="videomapping.looplength";
     62    private String deinterlacer;
     63    private boolean autoCenter;
     64    private Integer jumpLength,loopLength;
     65    private String mostRecentFolder;
     66        private GpxLayer gpsLayer;
    5267
    5368        public VideoPlugin(PluginInformation info) {
    5469                super(info);
    55                 // TODO Auto-generated constructor stub
    56         }
    57 
    58         public void activeLayerChange(Layer arg0, Layer arg1) {
    59                 // TODO Auto-generated method stub
     70                MapView.addLayerChangeListener(this);                           
     71                createMenusAndShortCuts();
     72                enableVideoControlMenus(false);
     73                setDefaults();
     74                loadProperties();
     75        }
     76
     77        private void createMenusAndShortCuts() {
     78                VMenu = Main.main.menu.addMenu(" Video", KeyEvent.VK_V, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping"));
     79                VMenu.setEnabled(false);
     80                VAdd= new JosmAction(tr("Import Video"),"videomapping",tr("Sync a video against this GPS track"),null,false) {
     81            public void actionPerformed(ActionEvent arg0) {                 
     82                    importVideoFile();
     83                }
     84       
     85        };
     86        VRemove= new JosmAction(tr("Remove Video"),"videomapping",tr("removes current video from layer"),null,false) {
     87            private static final long serialVersionUID = 1L;
     88
     89            public void actionPerformed(ActionEvent arg0) {
     90            }
     91        };       
     92        VStart = new JosmAction(tr("Play/Pause"), "audio-playpause", tr("starts/pauses video playback"),
     93                Shortcut.registerShortcut("videomapping:startstop","Video: "+tr("Play/Pause"),KeyEvent.VK_NUMPAD5, Shortcut.GROUP_DIRECT), false) {           
     94            public void actionPerformed(ActionEvent e) {                               
     95               
     96            }
     97        };
     98        Vbackward = new JosmAction(tr("Backward"), "audio-prev", tr("jumps n sec back"),
     99                Shortcut.registerShortcut("videomapping:backward","Video: "+tr("Backward"),KeyEvent.VK_NUMPAD4, Shortcut.GROUP_DIRECT), false) {
     100            public void actionPerformed(ActionEvent e) {
     101               
     102            }
     103        };
     104        Vforward= new JosmAction(tr("Forward"), "audio-next", tr("jumps n sec forward"),
     105                Shortcut.registerShortcut("videomapping:forward","Video: "+tr("Forward"),KeyEvent.VK_NUMPAD6, Shortcut.GROUP_DIRECT), false) {           
     106            public void actionPerformed(ActionEvent e) {
     107               
     108                           
     109            }
     110        };
     111        Vfaster= new JosmAction(tr("Faster"), "audio-faster", tr("faster playback"),
     112                Shortcut.registerShortcut("videomapping:faster","Video: "+tr("Faster"),KeyEvent.VK_NUMPAD8, Shortcut.GROUP_DIRECT), false) {
     113           
     114            public void actionPerformed(ActionEvent e) {
     115               
     116                           
     117            }
     118        };
     119        Vslower= new JosmAction(tr("Slower"), "audio-slower", tr("slower playback"),
     120                Shortcut.registerShortcut("videomapping:slower","Video: "+tr("Slower"),KeyEvent.VK_NUMPAD2, Shortcut.GROUP_DIRECT), false) {
     121           
     122            public void actionPerformed(ActionEvent e) {
     123               
     124                           
     125            }
     126        };
     127        VJump= new JosmAction(tr("Jump To"), "jumpto", tr("jumps to the entered gps time"),null, false) {         
     128            public void actionPerformed(ActionEvent e) {
     129               
     130
     131            }
     132                           
     133           
     134        };
     135        Vloop= new JosmAction(tr("Loop"), "loop", tr("loops n sec around current position"),
     136                Shortcut.registerShortcut("videomapping:loop","Video: "+tr("loop"),KeyEvent.VK_NUMPAD7, Shortcut.GROUP_DIRECT), false) {           
     137            public void actionPerformed(ActionEvent e) {
     138
     139                           
     140            }
     141        };
     142       
     143        //now the options menu
     144        VCenterIcon = new JCheckBoxMenuItem(new JosmAction(tr("Keep centered"), null, tr("follows the video icon automaticly"),null, false) {           
     145            public void actionPerformed(ActionEvent e) {
     146
     147                           
     148            }
     149        });
     150        //now the options menu
     151        VSubTitles = new JCheckBoxMenuItem(new JosmAction(tr("Subtitles"), null, tr("Show subtitles in video"),null, false) {           
     152            public void actionPerformed(ActionEvent e) {
     153 
     154                           
     155            }
     156        });
     157       
     158        VJumpLength = new JMenuItem(new JosmAction(tr("Jump length"), null, tr("Set the length of a jump"),null, false) {           
     159            public void actionPerformed(ActionEvent e) {                       
     160            }
     161        });
     162       
     163        VLoopLength = new JMenuItem(new JosmAction(tr("Loop length"), null, tr("Set the length around a looppoint"),null, false) {           
     164            public void actionPerformed(ActionEvent e) {
     165               
     166                           
     167            }
     168        });       
     169        VDeinterlacer= new JMenu("Deinterlacer");
     170        VIntNone= new JRadioButtonMenuItem(new JosmAction(tr("none"), null, tr("no deinterlacing"),null, false) {           
     171            public void actionPerformed(ActionEvent e) {               
     172            }
     173        });
     174        VIntBob= new JRadioButtonMenuItem(new JosmAction("bob", null, tr("deinterlacing using line doubling"),null, false) {           
     175            public void actionPerformed(ActionEvent e) {
     176
     177            }
     178        });
     179        VIntLinear= new JRadioButtonMenuItem(new JosmAction("linear", null, tr("deinterlacing using linear interpolation"),null, false) {           
     180            public void actionPerformed(ActionEvent e) {
     181
     182            }
     183        });
     184        VDeinterlacer.add(VIntNone);
     185        VDeinterlacer.add(VIntBob);
     186        VDeinterlacer.add(VIntLinear);       
     187        VMenu.add(VAdd);       
     188        VMenu.add(VStart);
     189        VMenu.add(Vbackward);
     190        VMenu.add(Vforward);
     191        VMenu.add(Vfaster);
     192        VMenu.add(Vslower);
     193        VMenu.add(Vloop);
     194        VMenu.add(VJump);
     195        VMenu.addSeparator();
     196        VMenu.add(VCenterIcon);
     197        VMenu.add(VJumpLength);
     198        VMenu.add(VLoopLength);
     199        VMenu.add(VDeinterlacer);
     200        VMenu.add(VSubTitles);
     201       
     202    }
     203
     204        protected void importVideoFile() {
     205                JFileChooser fc = new JFileChooser(mostRecentFolder);
     206        fc.setSelectedFile(new File(mostRecentFolder));
     207        if(fc.showOpenDialog(Main.main.parent)!=JFileChooser.CANCEL_OPTION)
     208        {
     209//              mostRecentFolder=fc.getSelectedFile().getAbsolutePath();
     210//              saveProperties();
     211                VideoPositionLayer videoPositionLayer= new VideoPositionLayer(gpsLayer);
     212        }
    60213               
    61214        }
    62215
     216        private void enableVideoControlMenus(boolean b) {
     217                VStart.setEnabled(b);
     218        Vbackward.setEnabled(b);
     219        Vforward.setEnabled(b);
     220        Vloop.setEnabled(b);
     221        Vfaster.setEnabled(b);
     222        Vslower.setEnabled(b);
     223        VJump.setEnabled(b);           
     224        }
     225       
     226        private void setDefaults()
     227        {
     228                autoCenter=false;
     229                deinterlacer="";
     230                jumpLength=1000;
     231                loopLength=6000;
     232                mostRecentFolder=System.getProperty("user.home");               
     233        }
     234       
     235        private void loadProperties() {
     236        String temp;       
     237        temp=Main.pref.get(PROP_AUTOCENTER);
     238        if((temp!=null)&&(temp.length()!=0))
     239                autoCenter=Boolean.getBoolean(temp);       
     240        temp=Main.pref.get(PROP_JUMPLENGTH);
     241        if((temp!=null)&&(temp.length()!=0))
     242                jumpLength=Integer.valueOf(temp);
     243        temp=Main.pref.get(PROP_LOOPLENGTH);
     244        if((temp!=null)&&(temp.length()!=0))
     245                loopLength=Integer.valueOf(temp);
     246        temp=Main.pref.get(PROP_MRU);
     247        if((temp!=null)&&(temp.length()!=0))
     248                mostRecentFolder=Main.pref.get(PROP_MRU);       
     249    }
     250       
     251        private void saveProperties(){
     252        Main.pref.put(PROP_AUTOCENTER, autoCenter);
     253        Main.pref.put(PROP_JUMPLENGTH, jumpLength.toString());
     254        Main.pref.put(PROP_LOOPLENGTH, loopLength.toString()); 
     255        Main.pref.put(PROP_MRU, mostRecentFolder);
     256    }
     257       
     258        private void applySettings()
     259        {
     260                //GUI
     261        VCenterIcon.setSelected(autoCenter);
     262        VIntNone.setSelected(true);
     263        if(deinterlacer=="")
     264                VIntNone.setSelected(true);
     265        if(deinterlacer=="bob")
     266                VIntBob.setSelected(true);
     267        if(deinterlacer=="linear")
     268                VIntLinear.setSelected(true);
     269        }
     270       
     271
     272        public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     273        VMenu.setEnabled(true);
     274        if (newLayer instanceof GpxLayer)
     275        {
     276            VAdd.setEnabled(true);
     277            gpsLayer=((GpxLayer) newLayer);           
     278            //TODO append to GPS Layer menu
     279        }       
     280    }
     281
    63282        public void layerAdded(Layer arg0) {
    64                 // TODO Auto-generated method stub
     283                activeLayerChange(null,arg0);
    65284               
    66285        }
    67286
    68287        public void layerRemoved(Layer arg0) {
    69                 // TODO Auto-generated method stub
     288                activeLayerChange(null,arg0);
    70289               
    71290        }
  • applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPositionLayer.java

    r25765 r25796  
    22
    33
     4import java.text.DateFormat;
    45import java.text.SimpleDateFormat;
    56import java.util.Collections;
     
    2324import org.openstreetmap.josm.Main;
    2425import org.openstreetmap.josm.data.Bounds;
     26import org.openstreetmap.josm.data.coor.LatLon;
    2527import org.openstreetmap.josm.data.gpx.GpxData;
    2628import org.openstreetmap.josm.data.gpx.GpxTrack;
     
    3739//Basic rendering and GPS layer interaction
    3840public class VideoPositionLayer extends Layer implements MouseListener,MouseMotionListener {
    39 
    40         public VideoPositionLayer(String name) {
    41                 super(name);
    42                 // TODO Auto-generated constructor stub
    43         }
     41        private List<WayPoint> gpsTrack;
     42        private ImageIcon layerIcon;
     43        private DateFormat gpsTimeFormat;
     44        private WayPoint iconPosition;
     45        private final int GPS_INTERVALL=1000;
     46
     47        public VideoPositionLayer(GpxLayer gpsLayer) {
     48                super("videolayer");
     49                layerIcon = new ImageIcon("images/videomapping.png");
     50                gpsTrack=importGPSLayer(gpsLayer.data);
     51                gpsTimeFormat= new SimpleDateFormat("HH:mm:ss");
     52                Main.map.mapView.addMouseListener(this);
     53        Main.map.mapView.addMouseMotionListener(this);
     54        iconPosition=gpsTrack.get(0);
     55        Main.main.addLayer(this);       
     56               
     57        }
     58
     59        //make a flat copy
     60        private List<WayPoint> importGPSLayer(GpxData gps) {
     61                LinkedList<WayPoint> ls = new LinkedList<WayPoint>();
     62        for (GpxTrack trk : gps.tracks) {
     63            for (GpxTrackSegment segment : trk.getSegments()) {
     64                ls.addAll(segment.getWayPoints());
     65            }
     66        }
     67        Collections.sort(ls); //sort basing upon time
     68        return ls;
     69               
     70        }
     71
     72        @Override
     73        public void paint(Graphics2D g, MapView map, Bounds bound) {
     74                paintGpsTrack(g);
     75                paintPositionIcon(g);
     76                paintInterpolatedSegment(g);
     77        }
     78
     79        private void paintGpsTrack(Graphics2D g) {
     80                g.setColor(Color.YELLOW);
     81        for(WayPoint n: gpsTrack) {
     82            Point p = Main.map.mapView.getPoint(n.getEastNorth());
     83            g.drawOval(p.x - 2, p.y - 2, 4, 4);
     84        }
     85        }
     86       
     87        private void paintPositionIcon(Graphics2D g) {
     88                Point p=Main.map.mapView.getPoint(iconPosition.getEastNorth());
     89        layerIcon.paintIcon(null, g, p.x-layerIcon.getIconWidth()/2, p.y-layerIcon.getIconHeight()/2);
     90        g.drawString(gpsTimeFormat.format(iconPosition.getTime()),p.x-15,p.y-15);
     91        }
     92       
     93        private void paintInterpolatedSegment(Graphics2D g) {
     94                g.setColor(Color.CYAN);
     95                List<WayPoint>ls=getInterpolatedSegment(iconPosition,5,5);
     96        for(WayPoint n: ls) {
     97            Point p = Main.map.mapView.getPoint(n.getEastNorth());
     98            g.drawOval(p.x - 2, p.y - 2, 4, 4);
     99        }
     100               
     101        }
     102
     103        private List<WayPoint> getInterpolatedSegment(WayPoint center, int before, int after) {
     104                LinkedList<WayPoint> ls = new LinkedList<WayPoint>();
     105                if(gpsTrack.indexOf(iconPosition)!=0)
     106                {
     107                        WayPoint prev=gpsTrack.get(gpsTrack.indexOf(iconPosition)-1);
     108                        for(int i=1;i<=before;i++)
     109                        {
     110                                ls.add(interpolate(prev,(float)100f/before*i));
     111                        }
     112                }
     113                for(int i=1;i<=after;i++)
     114                {
     115                        ls.add(interpolate(iconPosition,(float)100f/before*i));
     116                }
     117                //test code
     118                Date test=getFirstWayPoint().getTime();
     119                test.setHours(14);
     120                test.setMinutes(50);
     121                test.setSeconds(33);
     122               
     123                ls.add(getWayPointBefore(new Date(test.getTime()+500)));
     124                ls.add(interpolate(new Date(test.getTime()+500)));
     125                System.out.print(test);
     126                return ls;
     127        }
     128       
     129        //creates a waypoint for the corresponding time
     130        private WayPoint interpolate(Date GPSTime)
     131        {
     132                WayPoint before =getWayPointBefore(GPSTime);
     133                long diff=GPSTime.getTime()-before.getTime().getTime();
     134                assert diff>=0;
     135                assert diff<GPS_INTERVALL;
     136                float perc=((float)diff/(float)GPS_INTERVALL)*100;             
     137                return interpolate(before,perc);
     138        }
     139       
     140        private WayPoint getWayPointBefore(Date GPSTime)
     141        {
     142                assert GPSTime.after(getFirstWayPoint().getTime())==true;
     143                assert GPSTime.before(getLastWayPoint().getTime())==true;
     144               
     145                Date first=getFirstWayPoint().getTime();
     146                long diff=GPSTime.getTime()-first.getTime();
     147                //assumes that GPS intervall is constant
     148                int id=(int) (diff/GPS_INTERVALL);             
     149                return gpsTrack.get(id);
     150        }
     151       
     152        public WayPoint getFirstWayPoint()
     153        {
     154                return gpsTrack.get(0);
     155        }
     156       
     157        public WayPoint getLastWayPoint()
     158        {
     159                return gpsTrack.get(gpsTrack.size()-1);
     160        }
     161
     162        //interpolates a waypoint between this and the following waypoint at percent
     163        private WayPoint interpolate(WayPoint first, float percent) {
     164                assert (percent>0);
     165                assert (percent<100);
     166                double dX,dY;
     167        WayPoint leftP,rightP;
     168       
     169       
     170        WayPoint next=gpsTrack.get(gpsTrack.indexOf(first)+1);       
     171        //determine which point is what
     172        leftP=getLeftPoint(first, next);
     173        rightP=getRightPoint(first,next);
     174        //calc increment
     175        percent=percent/100;
     176        dX=(rightP.getCoor().lon()-leftP.getCoor().lon())*percent;
     177        dY=(rightP.getCoor().lat()-leftP.getCoor().lat())*percent;
     178        //move in the right direction
     179        if (first==leftP)
     180        {
     181                return new WayPoint(new LatLon(leftP.getCoor().lat()+dY,leftP.getCoor().lon()+dX));
     182        }
     183        else
     184                 return new WayPoint(new LatLon(rightP.getCoor().lat()-dY,rightP.getCoor().lon()-dX));
     185
     186       
     187        }
     188       
     189        private WayPoint getLeftPoint(WayPoint p1,WayPoint p2)
     190    {
     191        if(p1.getCoor().lon()<p2.getCoor().lon()) return p1; else return p2;
     192    }
     193   
     194    private WayPoint getRightPoint(WayPoint p1, WayPoint p2)
     195    {
     196        if(p1.getCoor().lon()>p2.getCoor().lon()) return p1; else return p2;
     197    }
     198
     199        public void mouseReleased(MouseEvent e) {
     200                //only leftclicks on our layer
     201        if(e.getButton() == MouseEvent.BUTTON1) {
     202                WayPoint wp = getNearestWayPoint(e.getPoint());                 
     203            if(wp!=null)
     204            {
     205                iconPosition=wp;
     206            }
     207            Main.map.mapView.repaint();
     208        }
     209               
     210        }
     211       
     212        //finds the first waypoint that is nearby the given point
     213    private WayPoint getNearestWayPoint(Point mouse)
     214    {
     215        final int MAX=10;
     216        Point p;
     217        Rectangle rect = new Rectangle(mouse.x-MAX/2,mouse.y-MAX/2,MAX,MAX);
     218        //iterate through all possible notes
     219        for(WayPoint n : gpsTrack)
     220        {
     221            p = Main.map.mapView.getPoint(n.getEastNorth());
     222            if (rect.contains(p))
     223            {               
     224                return n;
     225            }
     226           
     227        }
     228        return null;
     229       
     230    }
    44231
    45232        @Override
    46233        public Icon getIcon() {
     234                return layerIcon;
     235        }
     236
     237        @Override
     238        public Object getInfoComponent() {
    47239                // TODO Auto-generated method stub
    48240                return null;
     
    50242
    51243        @Override
    52         public Object getInfoComponent() {
    53                 // TODO Auto-generated method stub
    54                 return null;
    55         }
    56 
    57         @Override
    58244        public Action[] getMenuEntries() {
    59                 // TODO Auto-generated method stub
    60                 return null;
    61         }
     245                return new Action[]{
     246                LayerListDialog.getInstance().createActivateLayerAction(this),
     247                LayerListDialog.getInstance().createShowHideLayerAction(),
     248                LayerListDialog.getInstance().createDeleteLayerAction(),
     249                SeparatorLayerAction.INSTANCE,
     250                new LayerListPopup.InfoAction(this)};
     251        }
     252
    62253
    63254        @Override
    64255        public String getToolTipText() {
    65                 // TODO Auto-generated method stub
    66                 return null;
    67         }
    68 
    69         @Override
    70         public boolean isMergable(Layer arg0) {
    71                 // TODO Auto-generated method stub
     256                return tr("Shows current position in the video");
     257        }
     258
     259        @Override
     260        public boolean isMergable(Layer arg0) {         
    72261                return false;
    73262        }
     
    75264        @Override
    76265        public void mergeFrom(Layer arg0) {
    77                 // TODO Auto-generated method stub
    78                
    79         }
    80 
    81         @Override
    82         public void paint(Graphics2D arg0, MapView arg1, Bounds arg2) {
    83                 // TODO Auto-generated method stub
    84266               
    85267        }
     
    107289
    108290        public void mousePressed(MouseEvent arg0) {
    109                 // TODO Auto-generated method stub
    110                
    111         }
    112 
    113         public void mouseReleased(MouseEvent arg0) {
    114291                // TODO Auto-generated method stub
    115292               
  • applications/editors/josm/plugins/videomapping/test/videotest.java

    r25765 r25796  
    2929        testplayer.setLoopLength(3000);
    3030        testplayer.addVideo(new File("C:\\TEMP\\test.mpg"));
     31        testplayer.addVideo(new File("C:\\TEMP\\aoe-drachen_dvdscr.avi"));
    3132       
    3233    }
  • applications/editors/josm/plugins/videomapping/uml/refactoring.uml

    r25765 r25796  
    3131      <ownedParameter xmi:id="_E7zbIFRsEeCQNNgUSH7L8A" direction="return"/>
    3232    </ownedOperation>
    33     <ownedOperation xmi:id="_FPB5IFRsEeCQNNgUSH7L8A" name="loadDefaults">
    34       <ownedParameter xmi:id="_GcXO8FRsEeCQNNgUSH7L8A" direction="return"/>
     33    <ownedOperation xmi:id="_FPB5IFRsEeCQNNgUSH7L8A" name="setDefaults">
     34      <ownedParameter xmi:id="_pmckUF0CEeCEEfnO4j572A" direction="return"/>
    3535    </ownedOperation>
    3636    <ownedOperation xmi:id="_7wH7oFSgEeCQNNgUSH7L8A" name="enableControlMenus">
     
    8383    </ownedOperation>
    8484  </packagedElement>
    85   <packagedElement xmi:type="uml:Class" xmi:id="_4MAgAFRxEeCQNNgUSH7L8A" name="VideoPositionLayer">
     85  <packagedElement xmi:type="uml:Class" xmi:id="_4MAgAFRxEeCQNNgUSH7L8A" name="VideoPositionLayer" clientDependency="_xv7skF0FEeCEEfnO4j572A">
    8686    <ownedAttribute xmi:id="_TfBWsFSdEeCQNNgUSH7L8A" name="iconPosition" aggregation="composite"/>
    8787    <ownedAttribute xmi:id="_HIPx0FSeEeCQNNgUSH7L8A" name="isDragging" aggregation="composite"/>
     
    169169  <packagedElement xmi:type="uml:Dependency" xmi:id="_VjNvcFqlEeC9SaX6k5fY1Q" supplier="_n4H5YFolEeClo8qtmvnTtw" client="_Zzy2UFRvEeCQNNgUSH7L8A"/>
    170170  <packagedElement xmi:type="uml:Interface" xmi:id="_6vSikFxoEeCd3KUH_BuVkA" name="VideoObserver"/>
     171  <packagedElement xmi:type="uml:Dependency" xmi:id="_xv7skF0FEeCEEfnO4j572A" supplier="_aDA64FRrEeCQNNgUSH7L8A" client="_4MAgAFRxEeCQNNgUSH7L8A"/>
    171172</uml:Package>
  • applications/editors/josm/plugins/videomapping/uml/refactoring.umlclass

    r25765 r25796  
    497497    <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_VjqbYFqlEeC9SaX6k5fY1Q" id="(0.028037383177570093,0.6026490066225165)"/>
    498498  </edges>
     499  <edges xmi:type="notation:Edge" xmi:id="_xwYYgF0FEeCEEfnO4j572A" type="4002" source="_4MKRAFRxEeCQNNgUSH7L8A" target="_aKUcwFRrEeCQNNgUSH7L8A">
     500    <children xmi:type="notation:DecorationNode" xmi:id="_xwYYhF0FEeCEEfnO4j572A" type="6001">
     501      <layoutConstraint xmi:type="notation:Location" xmi:id="_xwYYhV0FEeCEEfnO4j572A" y="40"/>
     502    </children>
     503    <children xmi:type="notation:DecorationNode" xmi:id="_xwYYhl0FEeCEEfnO4j572A" type="6010">
     504      <layoutConstraint xmi:type="notation:Location" xmi:id="_xwYYh10FEeCEEfnO4j572A" y="20"/>
     505    </children>
     506    <styles xmi:type="notation:RoutingStyle" xmi:id="_xwYYgV0FEeCEEfnO4j572A"/>
     507    <styles xmi:type="notation:FontStyle" xmi:id="_xwYYgl0FEeCEEfnO4j572A" fontName="Calibri"/>
     508    <element xmi:type="uml:Dependency" href="refactoring.uml#_xv7skF0FEeCEEfnO4j572A"/>
     509    <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xwYYg10FEeCEEfnO4j572A" points="[-4, -99, -6, 145]$[-22, -128, -24, 116]"/>
     510  </edges>
    499511</notation:Diagram>
Note: See TracChangeset for help on using the changeset viewer.