Changeset 4527 in josm


Ignore:
Timestamp:
Oct 19, 2011 4:25:19 PM (19 months ago)
Author:
Don-vip
Message:

fix #6950 - Parallel way mode snap distance broken for non-metric units

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java

    r4327 r4527  
    3131import org.openstreetmap.josm.gui.MapFrame; 
    3232import org.openstreetmap.josm.gui.MapView; 
     33import org.openstreetmap.josm.gui.NavigatableComponent; 
     34import org.openstreetmap.josm.gui.NavigatableComponent.SystemOfMeasurement; 
    3335import org.openstreetmap.josm.gui.layer.Layer; 
    3436import org.openstreetmap.josm.gui.layer.MapViewPaintable; 
     
    5052 * 3. Improve snapping 
    5153 * 
    52  * Need at least a setting for step length 
    53  * 
    5454 * 4. Visual cues could be better 
    5555 * 
     
    9696    private boolean snapDefault; 
    9797 
    98     private double snapThreshold; 
     98    private double snapThreshold;  
     99    private double snapDistanceMetric; 
     100    private double snapDistanceImperial; 
     101    private double snapDistanceChinese; 
    99102 
    100103    private ModifiersSpec snapModifierCombo; 
     
    196199    private void updateModeLocalPreferences() { 
    197200        // @formatter:off 
    198         snapThreshold    = Main.pref.getDouble (prefKey("snap-threshold"), 0.35); 
    199         snapDefault      = Main.pref.getBoolean(prefKey("snap-default"),      true); 
    200         copyTagsDefault  = Main.pref.getBoolean(prefKey("copy-tags-default"), true); 
    201         initialMoveDelay = Main.pref.getInteger(prefKey("initial-move-delay"), 200); 
     201        //snapThreshold        = Main.pref.getDouble (prefKey("snap-threshold"), 0.35); // Old preference was stored in meters, hence the new name (percent) 
     202        snapThreshold        = Main.pref.getDouble (prefKey("snap-threshold-percent"), 0.70); 
     203        snapDefault          = Main.pref.getBoolean(prefKey("snap-default"),      true); 
     204        copyTagsDefault      = Main.pref.getBoolean(prefKey("copy-tags-default"), true); 
     205        initialMoveDelay     = Main.pref.getInteger(prefKey("initial-move-delay"), 200); 
     206        snapDistanceMetric   = Main.pref.getDouble(prefKey("snap-distance-metric"), 0.5); 
     207        snapDistanceImperial = Main.pref.getDouble(prefKey("snap-distance-imperial"), 1); 
     208        snapDistanceChinese  = Main.pref.getDouble(prefKey("snap-distance-chinese"), 1); 
    202209 
    203210        snapModifierCombo           = new ModifiersSpec(getStringPref("snap-modifier-combo",             "?sC")); 
     
    408415        if (snap) { 
    409416            // TODO: Very simple snapping 
    410             // - Snap steps and/or threshold relative to the distance? 
    411             long closestWholeUnit = Math.round(realD); 
    412             if (Math.abs(closestWholeUnit - realD) < snapThreshold) { 
     417            // - Snap steps relative to the distance? 
     418            double snapDistance; 
     419            SystemOfMeasurement som = NavigatableComponent.getSystemOfMeasurement(); 
     420            if (som.equals(NavigatableComponent.CHINESE_SOM)) { 
     421                snapDistance = snapDistanceChinese * NavigatableComponent.CHINESE_SOM.aValue; 
     422            } else if (som.equals(NavigatableComponent.IMPERIAL_SOM)) { 
     423                snapDistance = snapDistanceImperial * NavigatableComponent.IMPERIAL_SOM.aValue; 
     424            } else { 
     425                snapDistance = snapDistanceMetric; // Metric system by default 
     426            } 
     427            double closestWholeUnit; 
     428            double modulo = realD % snapDistance; 
     429            if (modulo < snapDistance/2.0) { 
     430                closestWholeUnit = realD - modulo; 
     431            } else { 
     432                closestWholeUnit = realD + (snapDistance-modulo); 
     433            } 
     434            if (Math.abs(closestWholeUnit - realD) < (snapThreshold * snapDistance)) { 
    413435                snappedRealD = closestWholeUnit; 
    414436            } else { 
    415                 snappedRealD = closestWholeUnit + Math.signum(closestWholeUnit - realD) * -0.5; 
     437                snappedRealD = closestWholeUnit + Math.signum(realD - closestWholeUnit) * snapDistance; 
    416438            } 
    417439        } 
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r4259 r4527  
    310310 
    311311        String[] obsolete = { 
    312                 "proxy.anonymous", // 01/2010 - not needed anymore. Can be removed mid 2010 
    313                 "proxy.enable"     // 01/2010 - not needed anymore. Can be removed mid 2010 
     312                "edit.make-parallel-way-action.snap-threshold"  // 10/2011 - replaced by snap-threshold-percent. Can be removed mid 2012 
    314313        }; 
    315314        for (String key : obsolete) { 
Note: See TracChangeset for help on using the changeset viewer.