Changeset 19678 in osm for applications/editors/josm/plugins/terracer/src
- Timestamp:
- 2010-01-30T19:04:31+01:00 (16 years ago)
- Location:
- applications/editors/josm/plugins/terracer/src/terracer
- Files:
-
- 2 edited
-
ReverseTerraceAction.java (modified) (6 diffs)
-
TerracerAction.java (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/terracer/src/terracer/ReverseTerraceAction.java
r19658 r19678 6 6 import java.awt.event.KeyEvent; 7 7 import java.util.Collection; 8 import java.util.Collections; 8 9 import java.util.HashSet; 9 10 import java.util.LinkedList; 11 12 import javax.swing.JOptionPane; 10 13 11 14 import org.openstreetmap.josm.Main; … … 49 52 */ 50 53 public void actionPerformed(ActionEvent e) { 51 Collection< OsmPrimitive> sel= Main.main.getCurrentDataSet().getSelected();54 Collection<Way> selectedWays = Main.main.getCurrentDataSet().getSelectedWays(); 52 55 53 // set to keep track of all the nodes that have been visited - that is: if56 // Set to keep track of all the nodes that have been visited - that is: if 54 57 // we encounter them again we will not follow onto the connected ways. 55 58 HashSet<Node> visitedNodes = new HashSet<Node>(); 56 59 57 // set to keep track of the ways the algorithm has seen, but not yet visited.58 // since when a way is visited all of its nodes are marked as visited, there60 // Set to keep track of the ways the algorithm has seen, but not yet visited. 61 // Since when a way is visited all of its nodes are marked as visited, there 59 62 // is no need to keep a visitedWays set. 60 63 HashSet<Way> front = new HashSet<Way>(); 61 64 62 // initialise the set with all the buildings in the selection. this means 63 // there is undefined behaviour when there is a multiple selection, as the 64 // ordering will be based on the hash. 65 for (OsmPrimitive prim : sel) { 66 if (prim.keySet().contains("building") && prim instanceof Way) { 67 front.add((Way)prim); 65 // Find the first or last way from the teracced houses. 66 // It should be connected to exactly one other way. 67 for (Way w : selectedWays) { 68 int conn = 0; 69 for (Way v : selectedWays) { 70 if (w.equals(v)) continue; 71 if (!Collections.disjoint(w.getNodes(), v.getNodes())) { 72 ++conn; 73 } 74 } 75 if (conn == 1) { 76 front.add(w); 77 break; 68 78 } 69 79 } 80 81 if (front.isEmpty()) { 82 JOptionPane.showMessageDialog(Main.parent, 83 tr("Cannot reverse!")); 84 return; 85 } 70 86 71 // this is like a visitedWays set, but in a linear order.87 // This is like a visitedWays set, but in a linear order. 72 88 LinkedList<Way> orderedWays = new LinkedList<Way>(); 73 89 74 // and the tags to reverse on the orderedWays.90 // And the tags to reverse on the orderedWays. 75 91 LinkedList<String> houseNumbers = new LinkedList<String>(); 76 92 … … 79 95 Way w = front.iterator().next(); 80 96 81 // visit all the nodes in the way, adding the building's they're members of97 // Visit all the nodes in the way, adding the building's they're members of 82 98 // to the front. 83 99 for (Node n : w.getNodes()) { … … 92 108 } 93 109 94 // we've finished visiting this way, so record the attributes we're interested110 // We've finished visiting this way, so record the attributes we're interested 95 111 // in for re-writing. 96 112 front.remove(w); … … 100 116 101 117 Collection<Command> commands = new LinkedList<Command>(); 102 // what, no zipWith?103 118 for (int i = 0; i < orderedWays.size(); ++i) { 104 119 commands.add(new ChangePropertyCommand( … … 112 127 } 113 128 129 @Override 130 protected void updateEnabledState() { 131 setEnabled(getCurrentDataSet() != null); 132 } 114 133 } -
applications/editors/josm/plugins/terracer/src/terracer/TerracerAction.java
r19658 r19678 34 34 import org.openstreetmap.josm.data.osm.Relation; 35 35 import org.openstreetmap.josm.data.osm.RelationMember; 36 import org.openstreetmap.josm.data.osm.TagCollection; 36 37 import org.openstreetmap.josm.data.osm.Way; 37 38 import org.openstreetmap.josm.tools.Pair; … … 209 210 terr.addNode(new_nodes[1][i]); 210 211 terr.addNode(new_nodes[0][i]); 212 213 // add the tags of the outline to each building (e.g. source=*) 214 TagCollection.from(outline).applyTo(terr); 215 211 216 if (from != null) { 212 217 // only, if the user has specified house numbers … … 459 464 return n; 460 465 } 466 467 @Override 468 protected void updateEnabledState() { 469 setEnabled(getCurrentDataSet() != null); 470 } 461 471 }
Note:
See TracChangeset
for help on using the changeset viewer.
