Changeset 2354 in josm
- Timestamp:
- 2009-10-30T22:36:16+01:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
r2350 r2354 27 27 import java.util.LinkedList; 28 28 import java.util.List; 29 import java.util.TreeSet; 30 import java.util.Comparator; 29 31 30 32 import javax.swing.ImageIcon; … … 53 55 protected boolean useRealWidth; 54 56 protected boolean zoomLevelDisplay; 55 protected int fillAreas;56 57 protected boolean drawMultipolygon; 57 58 protected boolean drawRestriction; … … 74 75 protected double dist; 75 76 protected Collection<String> regionalNameOrder; 76 protected Boolean selectedCall;77 77 protected Boolean useStyleCache; 78 78 private static int paintid = 0; … … 140 140 */ 141 141 @Override 142 public void visit(Node n) { 142 public void visit(Node n) {} 143 public void drawNode(Node n) { 143 144 /* check, if the node is visible at all */ 144 145 if((n.getEastNorth().east() > maxEN.east() ) || … … 177 178 */ 178 179 @Override 179 public void visit(Way w) { 180 public void visit(Way w) {} 181 public void drawWay(Way w, int fillAreas) { 180 182 if(w.getNodesCount() < 2) 181 183 { … … 492 494 PolyData pd = new PolyData(w); 493 495 pd.selected = selected; 494 res.add( new PolyData(w));496 res.add(pd); 495 497 } /* while(left != 0) */ 496 498 … … 503 505 if(osm instanceof Way) 504 506 { 507 Way w = (Way)osm; 505 508 if(style instanceof AreaElemStyle) 506 509 { … … 529 532 } 530 533 531 @Override 532 public void visit(Relation r) { 533 534 public void visit(Relation r) {}; 535 public void paintUnselectedRelation(Relation r) { 534 536 r.mappaintVisibleCode = 0; 535 537 536 /* TODO: is it possible to do this like the nodes/ways code? */ 537 //if(profilerOmitDraw) 538 // return; 539 540 if(selectedCall) 541 { 542 for (RelationMember m : r.getMembers()) 543 { 544 if (m.isNode() && !m.getMember().incomplete && !m.getMember().isDeleted() && !m.getMember().isFiltered()) 545 { 546 drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember()) : null, true, true); 547 } 548 } 549 return; 550 } 551 else if (drawMultipolygon && "multipolygon".equals(r.get("type"))) 538 if (drawMultipolygon && "multipolygon".equals(r.get("type"))) 552 539 { 553 540 if(drawMultipolygon(r)) … … 563 550 for (RelationMember m : r.getMembers()) 564 551 { 565 if (m.isWay() && !m.getMember().incomplete && !m.getMember().isDeleted()) /* nodes drawn on second call */552 if (m.isWay() && drawable(m.getMember())) 566 553 { 567 554 drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember()) … … 953 940 } else if(m.getMember().incomplete) { 954 941 incomplete = true; 955 } else 956 { 957 if(m.isWay()) 958 { 942 } else { 943 if(m.isWay()) { 959 944 Way w = m.getWay(); 960 if(w.getNodesCount() < 2) 961 { 945 if(w.getNodesCount() < 2) { 962 946 r.putError(tr("Way ''{0}'' with less than two points.", 963 947 w.getDisplayName(DefaultNameFormatter.getInstance())), true); … … 967 951 } else if("outer".equals(m.getRole())) { 968 952 outer.add(w); 969 } else 970 { 953 } else { 971 954 r.putError(tr("No useful role ''{0}'' for Way ''{1}''.", 972 955 m.getRole(), w.getDisplayName(DefaultNameFormatter.getInstance())), true); … … 1031 1014 else if(zoomok) 1032 1015 { 1033 LinkedList<PolyData> poly = new LinkedList<PolyData>();1016 LinkedList<PolyData> outerPoly = new LinkedList<PolyData>(); 1034 1017 for (Way w : outerclosed) { 1035 poly.add(new PolyData(w));1036 } 1037 poly.addAll(joinWays(outerjoin, incomplete ? null : r));1018 outerPoly.add(new PolyData(w)); 1019 } 1020 outerPoly.addAll(joinWays(outerjoin, incomplete ? null : r)); 1038 1021 for (Way wInner : innerclosed) 1039 1022 { 1040 1023 PolyData pdInner = new PolyData(wInner); 1041 1024 // incomplete is probably redundant 1042 addInnerToOuters(r, incomplete, pdInner, poly);1025 addInnerToOuters(r, incomplete, pdInner, outerPoly); 1043 1026 } 1044 1027 for (PolyData pdInner : joinWays(innerjoin, incomplete ? null : r)) { 1045 addInnerToOuters(r, incomplete, pdInner, poly);1028 addInnerToOuters(r, incomplete, pdInner, outerPoly); 1046 1029 } 1047 1030 AreaElemStyle areaStyle = (AreaElemStyle)wayStyle; 1048 for (PolyData pd : poly) 1049 { 1031 for (PolyData pd : outerPoly) { 1050 1032 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 }1033 if(!isPolygonVisible(p)) 1034 continue; 1035 1036 boolean selected = pd.selected || data.isSelected(pd.way) || data.isSelected(r); 1037 drawAreaPolygon(p, selected ? selectedColor : areaStyle.color); 1038 visible = true; 1057 1039 } 1058 1040 } … … 1073 1055 if(innerStyle == null) 1074 1056 { 1057 if (data.isSelected(wInner)) 1058 continue; 1075 1059 if(zoomok && (wInner.mappaintDrawnCode != paintid 1076 1060 || outer.size() == 0)) … … 1104 1088 if(outerStyle == null) 1105 1089 { 1090 // Selected ways are drawn at the very end 1091 if (data.isSelected(wOuter)) 1092 continue; 1106 1093 if(zoomok) 1107 1094 { … … 1404 1391 } 1405 1392 1393 boolean drawable(OsmPrimitive osm) 1394 { 1395 return !osm.isDeleted() && !osm.isFiltered() && !osm.incomplete; 1396 } 1397 1406 1398 @Override 1407 1399 public void getColors() … … 1415 1407 DataSet data; 1416 1408 1409 <T extends OsmPrimitive> Collection<T> selectedLast(final DataSet data, Collection <T> prims) { 1410 ArrayList<T> sorted = new ArrayList<T>(prims); 1411 Collections.sort(sorted, 1412 new Comparator<T>() { 1413 public int compare(T o1, T o2) { 1414 boolean s1 = data.isSelected(o1); 1415 boolean s2 = data.isSelected(o2); 1416 if (s1 && !s2) 1417 return 1; 1418 if (!s1 && s2) 1419 return -1; 1420 return o1.compareTo(o2); 1421 } 1422 }); 1423 return sorted; 1424 } 1425 1417 1426 /* Shows areas before non-areas */ 1418 1427 @Override … … 1423 1432 1424 1433 useStyleCache = Main.pref.getBoolean("mappaint.cache",true); 1425 fillAreas = Main.pref.getInteger("mappaint.fillareas", 10000000); 1434 int fillAreas = Main.pref.getInteger("mappaint.fillareas", 10000000); 1426 1435 fillAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50)))); 1427 1436 showNames = Main.pref.getInteger("mappaint.shownames", 10000000); … … 1458 1467 1459 1468 1460 selectedCall = false;1461 1469 ++paintid; 1462 1470 viewid = nc.getViewID(); … … 1481 1489 for (final Relation osm : data.relations) 1482 1490 { 1483 if( !osm.isDeleted() && !osm.isFiltered() && !osm.incomplete&& osm.mappaintVisibleCode != viewid)1484 { 1485 osm.visit(this);1491 if(drawable(osm) && osm.mappaintVisibleCode != viewid) 1492 { 1493 paintUnselectedRelation(osm); 1486 1494 // profilerN++; 1487 1495 } … … 1496 1504 /*** AREAS ***/ 1497 1505 // profilerN = 0; 1498 for (final Way osm : data.ways) 1499 { 1500 if (!osm.incomplete && !osm.isDeleted() && !osm.isFiltered() 1506 for (final Way osm : selectedLast(data, data.ways)) { 1507 if (drawable(osm) 1501 1508 && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid) 1502 1509 { 1503 1510 if(isPrimitiveArea(osm) && osm.mappaintDrawnAreaCode != paintid) 1504 1511 { 1505 osm.visit(this);1512 drawWay(osm, fillAreas); 1506 1513 // profilerN++; 1507 } else { 1514 }// else { 1508 1515 noAreaWays.add(osm); 1509 } 1516 //} 1510 1517 } 1511 1518 } … … 1520 1527 /*** WAYS ***/ 1521 1528 // profilerN = 0; 1522 fillAreas = 0; 1523 for (final OsmPrimitive osm : noAreaWays) 1524 { 1525 osm.visit(this); 1529 for (final Way osm : noAreaWays) 1530 { 1531 drawWay(osm, 0); 1526 1532 // profilerN++; 1527 1533 } … … 1538 1544 /*** WAYS (filling disabled) ***/ 1539 1545 // profilerN = 0; 1540 for (final OsmPrimitive osm: data.ways)1541 if ( !osm.incomplete && !osm.isDeleted() && !osm.isFiltered() && !data.isSelected(osm)1542 && osm.mappaintVisibleCode != viewid )1543 { 1544 osm.visit(this);1546 for (final Way way : data.ways) 1547 if (drawable(way) && !data.isSelected(way) 1548 && way.mappaintVisibleCode != viewid ) 1549 { 1550 drawWay(way, 0); 1545 1551 // profilerN++; 1546 1552 } … … 1555 1561 1556 1562 /*** SELECTED ***/ 1557 selectedCall = true;1558 1563 //profilerN = 0; 1559 1564 for (final OsmPrimitive osm : data.getSelected()) { 1560 1565 if (!osm.incomplete && !osm.isDeleted() && !(osm instanceof Node) 1561 && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid) 1562 { 1563 osm.visit(this); 1566 && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid 1567 ) 1568 { 1569 osm.visit(new AbstractVisitor() { 1570 public void visit(Way w) { 1571 drawWay(w, 0); 1572 } 1573 public void visit(Node n) { 1574 drawNode(n); 1575 } 1576 public void visit(Relation r) { 1577 /* TODO: is it possible to do this like the nodes/ways code? */ 1578 //if(profilerOmitDraw) 1579 // return; 1580 r.mappaintVisibleCode = 0; 1581 for (RelationMember m : r.getMembers()) { 1582 if (m.isNode() && drawable(m.getMember())) { 1583 drawSelectedMember(m.getMember(), styles != null ? getPrimitiveStyle(m.getMember()) : null, true, true); 1584 } 1585 } 1586 } 1587 }); 1564 1588 // profilerN++; 1565 1589 } … … 1577 1601 /*** NODES ***/ 1578 1602 //profilerN = 0; 1579 for (final OsmPrimitive osm : data.nodes)1603 for (final Node osm : data.nodes) 1580 1604 if (!osm.incomplete && !osm.isDeleted() && (data.isSelected(osm) || !osm.isFiltered()) 1581 1605 && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid) 1582 1606 { 1583 osm.visit(this);1607 drawNode(osm); 1584 1608 // profilerN++; 1585 1609 }
Note:
See TracChangeset
for help on using the changeset viewer.