---
core-dave/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java | 39 ++++------
1 file changed, 17 insertions(+), 22 deletions(-)
diff -puN src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java~more-multipolygon-work src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
|
a
|
b
|
public class MapPaintVisitor extends Sim
|
| 491 | 491 | } |
| 492 | 492 | PolyData pd = new PolyData(w); |
| 493 | 493 | pd.selected = selected; |
| 494 | | res.add(new PolyData(w)); |
| | 494 | res.add(pd); |
| 495 | 495 | } /* while(left != 0) */ |
| 496 | 496 | |
| 497 | 497 | return res; |
| … |
… |
public class MapPaintVisitor extends Sim
|
| 952 | 952 | m.getMember().getDisplayName(DefaultNameFormatter.getInstance())), true); |
| 953 | 953 | } else if(m.getMember().incomplete) { |
| 954 | 954 | incomplete = true; |
| 955 | | } else |
| 956 | | { |
| 957 | | if(m.isWay()) |
| 958 | | { |
| | 955 | } else { |
| | 956 | if(m.isWay()) { |
| 959 | 957 | Way w = m.getWay(); |
| 960 | | if(w.getNodesCount() < 2) |
| 961 | | { |
| | 958 | if(w.getNodesCount() < 2) { |
| 962 | 959 | r.putError(tr("Way ''{0}'' with less than two points.", |
| 963 | 960 | w.getDisplayName(DefaultNameFormatter.getInstance())), true); |
| 964 | 961 | } |
| … |
… |
public class MapPaintVisitor extends Sim
|
| 966 | 963 | inner.add(w); |
| 967 | 964 | } else if("outer".equals(m.getRole())) { |
| 968 | 965 | outer.add(w); |
| 969 | | } else |
| 970 | | { |
| | 966 | } else { |
| 971 | 967 | r.putError(tr("No useful role ''{0}'' for Way ''{1}''.", |
| 972 | 968 | m.getRole(), w.getDisplayName(DefaultNameFormatter.getInstance())), true); |
| 973 | 969 | if(!m.hasRole()) { |
| … |
… |
public class MapPaintVisitor extends Sim
|
| 1030 | 1026 | } |
| 1031 | 1027 | else if(zoomok) |
| 1032 | 1028 | { |
| 1033 | | LinkedList<PolyData> poly = new LinkedList<PolyData>(); |
| | 1029 | LinkedList<PolyData> outerPoly = new LinkedList<PolyData>(); |
| 1034 | 1030 | for (Way w : outerclosed) { |
| 1035 | | poly.add(new PolyData(w)); |
| | 1031 | outerPoly.add(new PolyData(w)); |
| 1036 | 1032 | } |
| 1037 | | poly.addAll(joinWays(outerjoin, incomplete ? null : r)); |
| | 1033 | outerPoly.addAll(joinWays(outerjoin, incomplete ? null : r)); |
| 1038 | 1034 | for (Way wInner : innerclosed) |
| 1039 | 1035 | { |
| 1040 | 1036 | PolyData pdInner = new PolyData(wInner); |
| 1041 | 1037 | // incomplete is probably redundant |
| 1042 | | addInnerToOuters(r, incomplete, pdInner, poly); |
| | 1038 | addInnerToOuters(r, incomplete, pdInner, outerPoly); |
| 1043 | 1039 | } |
| 1044 | 1040 | for (PolyData pdInner : joinWays(innerjoin, incomplete ? null : r)) { |
| 1045 | | addInnerToOuters(r, incomplete, pdInner, poly); |
| | 1041 | addInnerToOuters(r, incomplete, pdInner, outerPoly); |
| 1046 | 1042 | } |
| 1047 | 1043 | AreaElemStyle areaStyle = (AreaElemStyle)wayStyle; |
| 1048 | | for (PolyData pd : poly) |
| 1049 | | { |
| | 1044 | for (PolyData pd : outerPoly) { |
| 1050 | 1045 | Polygon p = pd.get(); |
| 1051 | | if(isPolygonVisible(p)) |
| 1052 | | { |
| 1053 | | boolean selected = (data.isSelected(pd.way) || data.isSelected(r)); |
| 1054 | | drawAreaPolygon(p, selected ? selectedColor : areaStyle.color); |
| 1055 | | visible = true; |
| 1056 | | } |
| | 1046 | if(!isPolygonVisible(p)) |
| | 1047 | continue; |
| | 1048 | |
| | 1049 | boolean selected = pd.selected || data.isSelected(pd.way) || data.isSelected(r); |
| | 1050 | drawAreaPolygon(p, selected ? selectedColor : areaStyle.color); |
| | 1051 | visible = true; |
| 1057 | 1052 | } |
| 1058 | 1053 | } |
| 1059 | 1054 | if(!visible) /* nothing visible, so disable relation and all its ways */ |