Changeset 388 in josm for trunk/src


Ignore:
Timestamp:
2007-10-14T21:54:13+02:00 (18 years ago)
Author:
gebner
Message:

When inserting node into a way segment, move it to lie on the former segment.

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

Legend:

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

    r387 r388  
    1414import java.util.HashSet;
    1515import java.util.Map;
     16import java.util.Set;
    1617import java.util.LinkedList;
    1718import java.util.List;
     
    2829import org.openstreetmap.josm.data.coor.EastNorth;
    2930import org.openstreetmap.josm.data.osm.Node;
     31import org.openstreetmap.josm.data.osm.NodePair;
    3032import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3133import org.openstreetmap.josm.data.osm.Way;
     
    111113                                        is.add(ws.lowerIndex);
    112114                                }
    113                        
     115
     116                                Set<NodePair> segSet = new HashSet<NodePair>();
     117
    114118                                for (Map.Entry<Way, List<Integer>> insertPoint : insertPoints.entrySet()) {
    115119                                        Way w = insertPoint.getKey();
     
    119123
    120124                                        pruneSuccsAndReverse(is);
     125                                        for (int i : is) segSet.add(
     126                                                new NodePair(w.nodes.get(i), w.nodes.get(i+1)).sort());
    121127                                        for (int i : is) wnew.nodes.add(i + 1, n);
    122128
     
    125131                                        reuseWays.add(wnew);
    126132                                }
     133
     134                                adjustNode(segSet, n);
    127135                        }
    128136                }
     
    215223                Collections.reverse(is);
    216224        }
     225
     226        private static void adjustNode(Collection<NodePair> segs, Node n) {
     227                // FIXME: find intersection if more than one seg.
     228                if (segs.size() >= 1) {
     229                        EastNorth P = n.eastNorth;
     230                        NodePair seg = segs.iterator().next();
     231                        EastNorth A = seg.a.eastNorth;
     232                        EastNorth B = seg.b.eastNorth;
     233                        double a = P.distance(B);
     234                        double b = P.distance(A);
     235                        double c = A.distance(B);
     236                        double q = (a - b + c) / (2*c);
     237                        n.eastNorth = new EastNorth(
     238                                B.east() + q * (A.east() - B.east()),
     239                                B.north() + q * (A.north() - B.north()));
     240                }
     241        }
    217242       
    218243        @Override public String getModeHelpText() {
  • trunk/src/org/openstreetmap/josm/data/osm/NodePair.java

    r343 r388  
    3131        }
    3232
    33         public void sort() {
     33        public NodePair sort() {
    3434                if (b.hashCode() < a.hashCode()) {
    3535                        Node tmp = a;
     
    3737                        b = tmp;
    3838                }
     39                return this;
    3940        }
    4041}
Note: See TracChangeset for help on using the changeset viewer.