Changeset 4527 in josm for trunk


Ignore:
Timestamp:
2011-10-19T16:25:19+02:00 (13 years 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.