Changeset 23976 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-11-01T00:38:13+01:00 (14 years ago)
Author:
oliverw
Message:
  • Bugfix #5558: Plugin crashed on GPX file - top-level waypoints have not been considered properly.
  • Bugfix: In some case the end point of a profile has not been determined
  • Bugfix: Cursor did not reach first point
  • Show elevation of cursor position in panel
  • Simplification of GPX visitor
Location:
applications/editors/josm/plugins/ElevationProfile
Files:
10 edited

Legend:

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

    r23783 r23976  
    55        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    66        <classpathentry kind="lib" path="J:/Dokumente und Einstellungen/Oliver/Eigene Dateien/Java/Josm-svn/core/dist/3529/josm-tested.jar"/>
    7         <classpathentry kind="output" path="bin"/>
     7        <classpathentry kind="output" path="build"/>
    88</classpath>
  • applications/editors/josm/plugins/ElevationProfile/.project

    r23777 r23976  
    77        <buildSpec>
    88                <buildCommand>
    9                         <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
    10                         <triggers>full,incremental,</triggers>
     9                        <name>org.eclipse.jdt.core.javabuilder</name>
    1110                        <arguments>
    12                                 <dictionary>
    13                                         <key>LaunchConfigHandle</key>
    14                                         <value>&lt;project&gt;/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch</value>
    15                                 </dictionary>
    1611                        </arguments>
    1712                </buildCommand>
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationModel.java

    r23795 r23976  
    1414
    1515package org.openstreetmap.josm.plugins.elevation;
    16 
    17 import static org.openstreetmap.josm.tools.I18n.tr;
    1816
    1917import java.util.ArrayList;
     
    8078                return gpxData;
    8179        }
     80       
     81        /**
     82         * @return the tracks
     83         */
     84        protected List<IElevationProfile> getTracks() {
     85                return tracks;
     86        }
    8287
    8388        /**
     
    137142                trackCounter = 0;
    138143
     144                super.updateValues();
    139145                if (tracks == null) {
    140146                        tracks = new ArrayList<IElevationProfile>();
     
    148154                GpxIterator.visit(gpxData, this);
    149155
    150                 setWayPoints(tmpWaypoints, true);
    151156                // reduce data
    152157                setWayPoints(WayPointHelper.downsampleWayPoints(tmpWaypoints,
     
    160165        public void updateElevationData() {
    161166                computeProfile();
    162         }
    163 
    164         public String toString() {
    165                 return "ElevationModel [start=" + getStart() + ", end=" + getEnd()
    166                                 + ", minHeight=" + getMinHeight() + ", maxHeight="
    167                                 + getMaxHeight() + ", wayPoints=" + numberOfWayPoints + "]";
    168167        }
    169168
     
    190189                processWayPoint(wp);
    191190        }
    192 
    193         public void end(GpxRoute route) {
    194                 String trackName = "Route#" + trackCounter;
    195                 addTrackOrRoute(trackName);
    196         }
    197 
    198         public void end(GpxTrack track) {
     191       
     192        /* (non-Javadoc)
     193         * @see org.openstreetmap.josm.plugins.elevation.ElevationProfileBase#visit(org.openstreetmap.josm.data.gpx.WayPoint)
     194         */
     195        @Override
     196        public void visit(WayPoint wp) {
     197                super.visit(wp);
     198                processWayPoint(wp);
     199        }
     200
     201        public void start() {
     202                buffer.clear();
     203        }
     204
     205        public void end() {
    199206                String trackName = "Track#" + trackCounter;
    200                 addTrackOrRoute(trackName);
    201         }
    202 
     207                addTrackOrRoute(trackName);             
     208        }
     209       
    203210        private void addTrackOrRoute(String trackName) {
    204211                if (getSliceSize() > 0) {
    205212                        ElevationProfileNode emt = new ElevationProfileNode(trackName,
    206213                                        this, buffer, getSliceSize());
    207                         // System.out.println("Add track/route: " + trackName);
    208214                        tracks.add(emt);
    209215                }
     
    212218        }
    213219
    214         public void start(GpxRoute route) {
    215                 // buffer should be empty -> isolated way points
    216                 if (buffer.size() > 0) {
    217                         addTrackOrRoute(tr("Unknown"));
    218                 }
    219         }
    220 
    221         public void start(GpxTrack track) {
    222                 // buffer should be empty -> isolated way points
    223                 if (buffer.size() > 0) {
    224                         addTrackOrRoute(tr("Unknown"));
    225                 }
    226         }
    227 
    228220        private void processWayPoint(WayPoint wp) {
     221                if (wp == null) {
     222                        throw new RuntimeException("WPT must not be null!");
     223                }
     224               
    229225                buffer.add(wp);
    230226                tmpWaypoints.add(wp);
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/ElevationProfileBase.java

    r23795 r23976  
    494494                }
    495495        }
     496       
     497        public String toString() {
     498                return "ElevationProfileBase [start=" + getStart() + ", end=" + getEnd()
     499                                + ", minHeight=" + getMinHeight() + ", maxHeight="
     500                                + getMaxHeight() + "]";
     501        }
    496502}
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/GpxIterator.java

    r23795 r23976  
    4646                if (visitor == null) return;
    4747               
     48                visitor.start();
    4849                visitSingleWaypoints(data, visitor);
     50                visitor.end();
    4951
    5052                // routes
     
    9294               
    9395                Collection<GpxTrackSegment> segments = trk.getSegments();
    94                 visitor.start(trk);
     96                visitor.start();
    9597
    9698                if (segments != null) {
     
    102104
    103105                                for (WayPoint wayPoint : waypts) {
    104                                         visitor.visit(trk, segment, wayPoint);
     106                                        visitor.visit(wayPoint);
    105107                                }
    106108                        }
    107109                }
    108                 visitor.end(trk);
     110                visitor.end();
    109111        }
    110112
     
    117119                if (visitor == null) return;
    118120               
    119                 visitor.start(route);
     121                visitor.start();
    120122                for (WayPoint wpt : route.routePoints) {
    121                         visitor.visit(route, wpt);
     123                        visitor.visit(wpt);
    122124                }
    123                 visitor.end(route);
     125                visitor.end();
    124126        }
    125127
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/IGpxVisitor.java

    r23795 r23976  
    1515package org.openstreetmap.josm.plugins.elevation;
    1616
    17 import org.openstreetmap.josm.data.gpx.GpxRoute;
    18 import org.openstreetmap.josm.data.gpx.GpxTrack;
    19 import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
    2017import org.openstreetmap.josm.data.gpx.WayPoint;
    2118
     
    2623public interface IGpxVisitor extends IGpxWaypointVisitor {
    2724        /**
    28          * Starts a GPX route.
    29          * @param route The route to visit.
     25         * Starts a GPX route, track or way point collection.
    3026         */
    31         void start(GpxRoute route);
     27        void start();
    3228       
    3329        /**
    34          * Ends a GPX route.
    35          * @param route The route to visit.
     30         * Ends a GPX route, track or way point collection.
    3631         */
    37         void end(GpxRoute route);
     32        void end();
    3833       
    3934        /**
     
    4237         * @param wp The way point to visit.
    4338         */
    44         void visit(GpxRoute route, WayPoint wp);
    45        
    46         /**
    47          * Called before a GPX track is iterated.
    48          * @param track The track to visit.
    49          */
    50         void start(GpxTrack track);
    51        
    52         /**
    53          * Called after a track iteration.
    54          * @param track The track to visit.
    55          */
    56         void end(GpxTrack track);
    57        
    58         /**
    59          * Visits a way point within a GPX track.
    60          * @param track The associated track of the way point.
    61          * @param segment The associated segment of the way point.
    62          * @param wp The way point to visit.
    63          */
    64         void visit(GpxTrack track, GpxTrackSegment segment, WayPoint wp);
     39        void visit(WayPoint wp);
    6540}
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/DefaultElevationProfileRenderer.java

    r23795 r23976  
    136136                        System.err.println(String.format(
    137137                                        "Cannot paint: mv=%s, prof=%s, wpt=%s", mv, profile, wpt));
     138                        if (wpt == null) {
     139                                throw new RuntimeException("WPT must not be null, profile " + profile);
     140                        }
    138141                        return;
    139142                }
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileDialog.java

    r23795 r23976  
    4848import org.openstreetmap.josm.plugins.elevation.GeoidCorrectionKind;
    4949import org.openstreetmap.josm.plugins.elevation.IElevationModelListener;
    50 import org.openstreetmap.josm.plugins.elevation.IElevationProfile;
    5150import org.openstreetmap.josm.plugins.elevation.WayPointHelper;
    5251import org.openstreetmap.josm.tools.Shortcut;
     
    6766        private static final long serialVersionUID = -868463893732535577L;
    6867        /* Elevation profile instance */
    69         private IElevationProfile profile;
     68        private ElevationModel profile;
    7069        /* GPX data */
    7170        private GpxLayer activeLayer = null;
     
    241240         * @return
    242241         */
    243         public IElevationProfile getModel() {
     242        public ElevationModel getModel() {
    244243                return profile;
    245244        }
     
    249248         * @param model The new model.
    250249         */
    251         public void setModel(IElevationProfile model) {
     250        public void setModel(ElevationModel model) {
    252251                if (this.profile != model) {
    253252                        this.profile = model;
     
    290289
    291290                        if (profile.hasElevationData()) {
    292                         // Show elevation data
    293                         minHeightLabel.setText(
    294                                         WayPointHelper.getElevationText(profile.getMinHeight()));
    295                         maxHeightLabel.setText(
    296                                         WayPointHelper.getElevationText(profile.getMaxHeight()));
    297                         avrgHeightLabel.setText(
    298                                         WayPointHelper.getElevationText(profile.getAverageHeight()));
    299                         elevationGainLabel.setText(
    300                                         WayPointHelper.getElevationText(profile.getGain()));
     291                                // Show elevation data
     292                                minHeightLabel.setText(
     293                                                WayPointHelper.getElevationText(profile.getMinHeight()));
     294                                maxHeightLabel.setText(
     295                                                WayPointHelper.getElevationText(profile.getMaxHeight()));
     296                                avrgHeightLabel.setText(
     297                                                WayPointHelper.getElevationText(profile.getAverageHeight()));
     298                                elevationGainLabel.setText(
     299                                                WayPointHelper.getElevationText(profile.getGain()));
    301300                        }
    302301                       
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfileLayer.java

    r23795 r23976  
    162162                        for (WayPoint wpt : profile.getWayPoints()) {
    163163                                int ele = (int) WayPointHelper.getElevation(wpt);
     164                               
     165                                if (wpt == null) {
     166                                        throw new RuntimeException("WPT must not be null, profile " + profile);
     167                                }
    164168
    165169                                if (lastWpt != null) {
  • applications/editors/josm/plugins/ElevationProfile/src/org/openstreetmap/josm/plugins/elevation/gui/ElevationProfilePanel.java

    r23795 r23976  
    174174        public void paint(Graphics g) {
    175175                isPainting = true;
    176                 super.paint(g);
    177 
    178                 int y1 = getPlotBottom();
    179 
    180                 g.setColor(Color.DARK_GRAY);
    181                 g.drawLine(plotArea.x, plotArea.y, plotArea.x, plotArea.y
    182                                 + plotArea.height);
    183                 g.drawLine(plotArea.x, plotArea.y + plotArea.height, plotArea.x
    184                                 + plotArea.width, plotArea.y + plotArea.height);
    185 
     176               
    186177                Font oldFont = getFont();
    187178                Font lFont = getFont().deriveFont(9.0f);
    188179                setFont(lFont);
    189180                try {
    190                         if (profile != null) {
     181                        super.paint(g);
     182       
     183                        int y1 = getPlotBottom();
     184       
     185                        g.setColor(Color.DARK_GRAY);
     186                        g.drawLine(plotArea.x, plotArea.y, plotArea.x, plotArea.y
     187                                        + plotArea.height);
     188                        g.drawLine(plotArea.x, plotArea.y + plotArea.height, plotArea.x
     189                                        + plotArea.width, plotArea.y + plotArea.height);
     190       
     191                       
     192               
     193                        if (profile != null && profile.hasElevationData()) {
    191194                                drawAlignedString(formatDate(profile.getStart()), 5, y1 + 5,
    192195                                                TextAlignment.Left, g);
     
    267270                double diff = profile.getHeightDifference();
    268271
     272                if (diff == 0.0) {
     273                        return;
     274                }
     275               
    269276                double z10 = Math.floor(Math.log10(diff));
    270277                double scaleUnit = Math.pow(10, z10); // scale unit, e. g. 100 for
     
    397404                       
    398405                        if (i == this.selectedIndex) {
     406                                g.setColor(Color.BLACK);
     407                                drawAlignedString(WayPointHelper.getElevationText(eleVal),
     408                                                (getPlotRight() + getPlotLeft()) / 2,
     409                                                getPlotBottom() + 6,
     410                                                TextAlignment.Centered,
     411                                                g);
     412                               
    399413                                c = renderer.getColorForWaypoint(profile, wpt, ElevationWayPointKind.Highlighted);
    400414                        }
     
    407421                        int geoidVal = 0;
    408422                        switch(WayPointHelper.getGeoidKind()) {
    409                         case Auto: geoidVal = WayPointHelper.getGeoidCorrection(wpt); break;
    410                         case Fixed: // not impl
     423                                case Auto: geoidVal = WayPointHelper.getGeoidCorrection(wpt); break;
     424                                case Fixed: // not impl
    411425                        }
     426                       
    412427                        g.setColor(ElevationColors.EPLightBlue);
    413428                       
     
    506521                int newIdx = x - l - pl;
    507522               
    508                 if (newIdx != this.selectedIndex && newIdx > 0) {
     523                if (newIdx != this.selectedIndex && newIdx >= 0) {
    509524                        this.selectedIndex = newIdx;
    510525                        this.repaint();         
Note: See TracChangeset for help on using the changeset viewer.